
Dans le domaine de l'automatisation industrielle, les State Machines sont souvent utilisées pour modéliser le comportement des hardware.
Définition d'une State machine
Les machines à états sont constituées de :
- États : ils représentent le fait que le système est en train de faire quelque chose ou d'attendre quelque chose, comme un état « Idle » en attendant qu'un bouton soit pressé, ou un état « Moving » lorsque le système est en mouvement.
- Transitions : elles représentent tous les changements d'état possibles, comme une transition de l'état « Idle » à l'état « Moving ».
- Événements : ils représentent ce qui peut se produire pour activer une transition, comme l'événement « eMove » qui est généré lorsque l'on appuie sur le bouton « Move » du système et qui active la transition de l'état « Idle » à l'état « Moving ». Un événement peut également être déclenché par une minuterie.
- Conditions : empêcher la transition d'un état à un autre si les conditions ne sont pas remplies même si l'événement approprié est déclenché, comme la vérification de l'état d'un autre appareil représenté par une autre machine à états.
- Actions : quelque chose à faire lorsqu'une transition est exécutée, qu'un état est entré ou qu'un état est sorti.
Les machines à états sont très utiles pour modéliser des comportements complexes et les représenter visuellement.

Dans le langage UML (Unified Modeling Language), les diagrammes de classes sont souvent utilisés par les développeurs de logiciels pour modéliser la structure du code et les relations entre les classes. Les diagrammes d'état peuvent être utilisés pour représenter le comportement dynamique. Ils sont basés sur le concept mathématique des machines à états finis, avec quelques variations par rapport aux diagrammes d'états de Harel.
Mise en œuvre de machines à états simples
Les machines à états peuvent être facilement mises en œuvre dans n'importe quel langage de programmation à l'aide d'un simple switch/case utilisant l'état actuel comme sélecteur de cas. Toutefois, cette implémentation présente plusieurs inconvénients :
- Il est nécessaire de maintenir séparément un dessin de la machine à états
- Il y a souvent des doutes quant à savoir si le dessin a été mis à jour avec le dernier correctif du code.
- Certains développeurs ne dessinent même pas la machine à états parce qu'ils commencent par une machine à états avec seulement 3 états, mais après 6 mois, la complexité a augmenté et il n'y a pas de documentation du tout !
- Il n'y a pas de contrôle syntaxique qui vérifie que le dessin représente correctement la machine à états implémentée.
- Pour les machines à états complexes, l'utilisation de switch/case peut être source d'erreurs (comme oublier une instruction break ou se perdre dans tous les états).
Visual State Machines
Chez Agileo Automation, nous pensons, pour citer Aristote, que :
L'âme ne pense pas sans image
En conséquence, nous avons ajouté les machines à états sur Visual Studio de manière à ce que :
- Un développeur peut dessiner l'état et les transitions qu'il envisage pour un appareil ou un équipement plus complexe,
- Il peut partager sa machine à états sous forme d'image avec ses collègues et ses partenaires afin de remettre en question sa conception et donc de l'améliorer,
- Il peut rendre le dessin exécutable sans écrire de code dans le cadre d'une approche « low code » : Ce que vous voyez est ce que vous obtenez (WYSIWYG)
Ce processus est itératif dans le cadre d'une approche agile.
A²ECF-Industry and A²ECF-SEMI embed:
- un éditeur visuel de machine à états directement dans Microsoft Visual Studio ® pour concevoir la machine à états et faire le lien avec le code C# comme le déclenchement d'événements ou l'appel d'actions.
- un moteur de machine à états pour exécuter la machine d'état comme changer d'état lorsqu'un événement est déclenché, vérifier les conditions et appeler des actions dans le code C#.
Voyez comment cela peut accélérer le développement de votre contrôleur d'équipement et améliorer sa qualité ainsi que sa documentation :