Premier exemple pas à pas
Last updated
Last updated
On va implémenter le grafcet suivant, permettant d'allumer une lampe depuis un intérrupteur de type bouton poussoir.
En applications les règles vue en cours avec M. Riera, vous pouvez déterminer les équations.
Dans C# (ou tout autre langage de programmation), le cycle API est en fait une boucle, qui se répète, sans fin, toutes les x ms (peut dépendre de l'automate que l'on souhaiterait simuler), afin de simuler le cycle d'un API.
A l'intérieur de cette boucle, le programme doit réaliser les différentes opérations du cycle :
Sauvegarder l'état précédent
Lire les entrées
Calculer les fonctions de transitions
Calculer les étapes
Calculer les sorties
Ecrire les sorties
L'extrait de code ci-dessous permet de récupérer l'état d'un capteur (ou d'une entrée en général) et de le sauvegarder dans une variable.
On peut procéder de manière similaire pour récupérer l'état d'une sortie, et ensuite pouvoir le modifier.
Considérons que le code ci-après se trouve dans une méthode nommée : runCycleApi()
Les extraits de code ci-après suppose que les déclarations sont effectuées. Le code ne concerne que la méthode qui est exécutée cycliquement par le timer.
La lecture des entrées implique de mettre à jour la memory map qui est en cache. Cette mise à jour ne se fait qu'en début de cycle pour récupérer l'état du système, et en fin de cycle pour écrire les sorties.
Il est souvent nécessaire de manipuler des fronts (montant ou descendant) afin de traiter la donnée des entrées.
Le calcul d'un front montant peut se faire de la manière suivante :
Il serait très judicieux de définir une méthode pour calculer les fronts sur des exemples plus complexes
Les équations des fonctions de transition se calculent donc avec les lignes suivantes :
ft1, ft2, X1 et X2 sont des variables représentant les éléments du Grafcet. Les étapes (Xn) sont initialisées à false, sauf les étapes initiales qui doivent être à true pour pouvoir exécuter le Grafcet.
La traduction des équations en C# donne :
En fonction des actions associées aux étapes.
Il faut maintenant mettre à jour HomeIo en synchronisant le cache et la memory map:
Si tout le code précédent est dans une méthode, on peut répéter ce cycle dans un time avec la méthode suivante, associée à un timer dans votre projet :
Ce timer doit se déclencher soit de manière automatique au chargement, soit sur un bouton de votre interface, au choix. Il est nécessaire d'initialiser aussi l'état du grafcet (étape initiale à vraie this.X1 = true
)
Rappel de la règle :
Rappel de la règle :