lundi 24 mai 2010

Automate manière Aspie

Une fin de semaine ou je ne savais pas quoi faire, dans le temps de Noël pour être exact, je me suis dit, pourquoi ne pas créer cet automate de contrôle industriel ASPIE dont je parlais ici. C'est ce que j'ai fait. Le 'coeur' de l'automate est en C et séparable de l'environnement de test en Objective-C. J'ai fait un port du coeur pour le Z8Encore (drôle de nom pour un microcontroleur!) de Zilog. Je vous présente un aperçu de ce que ça a donné. Je metterai les sources et le reste en ligne quand j'aurrai le temps et le goût de faire plus. Là il fait vraiement trop chaud!

Principes de fonctionnement

Le point de départ de toute action est un événement. Le programme a pour fonction d'établir les chemins et les conditions contrôlant la transmission de cet événement. Ainsi, le programme peut être vue comme un tuyau acheminant l'événement vers sa destination selon que les valves conditionant se transit soient ouvertes ou fermées. Suite à un événement, résultant de la fermeture ou de l'ouverture d'un contact par exemple, l'automate entreprend de suivre les connections définies par le programme, branche par branche. Il suit une branche jusqu'à la fin de celle-ci ou jusqu'à ce qu'il rencontre une condition fausse, au quel cas si il y a une autre branche à parcourrir il passe à celle-ci. Dans le cas contraire, l'automate tombe en dormance en attendant le prochain événement.

La figure ci-dessous illustre ce principe, lorsque le circuit électrique connecté à l'entrée E0 se ferme un événement 'fermer' est généré. L'automate interprète alors l'objet ataché à cet événement dans E0, ici c'est un objet Hub, c'est à dire une fourche. L'automate interprète ensuite l'objet pointé par le premier port du hub, la condition E1 = 0. Si la condition est vérifié (vrai) l'automate interprètera l'objet attacher à la condition, soit la sortie S0, avant de procédé à l'interprétation de la branche du second port du hub. Dans le cas contraire il passera directement à l'interprétation de la branche 2.

Evenement         Hub             Conditions       Destiantions
+--------+       +--------+       +--------+       +--------+
|   E0   |------>|  Hub   |------>| =====> |------>|   S0   | (première branche)
| fermer |       |        |       |   si   |       | action |
+--------+       |        |       | E1 = 0 |       +--------+
                 |        |       +--------+
                 |        |
                 |        |       +--------+       +--------+ 
                 |        |------>| =====> |------>|   S1   | (deuxième branche)
                 +--------+       |   si   |       | action |
                                  | E1 = 1 |       +--------+
                                  +--------+

Quand il n'y a rien à faire, aucun événement, un événement virtuel 'rien' peut être généré pour effectuer des actions secondaires.


Quand il n'y a rien à faire, aucun événement, un événement virtuel 'rien' peut être généré pour effectuer des actions secondaires.

Version dans un langage texte du programme donnée ci-dessus:
utiliser E0, E1, S0, S1, H0
utiliser TST0 E1 = .faux.
utiliser TST1 E1 = .vrai.
attacher E0.fermer sur H0.entree
attacher H0.sortie0 sur TST0
attacher H0.sortie1 sur TST1
attacher TST0.sortie sur S1.fermer
attacher TST1.sortie sur S1.ouvrir
Dans cet exemple, les objets E0,S0,H1,TST0, etc. sont prédéfinis dans l'automate. La commande 'utiliser' indique à l'automate que, par exemple les signaux intervenant sur les entrée autres, celles non-utilisées, sont irelevant et de ne pas produire d'événement lors de changement de leur état. Autre exemple, si aucun minuteur n'est définis, l'automate pourra déactiver les interruptions de la base temps servant à leur maintient. L'avantage dans tout les cas de figure réside dans des gains de vitesse.

Patente pendante. :D
(c)2009