Projet IDM 2019/20 : machines à états avec langage d'action

Le but de ce projet est de transformer et exécuter des machines à états simplifiées comportant un mini-langage d'action.

Description du méta-modèle

Le méta-modèle de machines à états considéré est representé dans la figure ci-dessus. Ses éléments sont :

Un modèle de machine à états se base donc sur une instance de l'élément StateMachine. Cette instance est unique par modèle et sert de départ à la création et au référencement de tous les états et transitions du modèle. Cette unicité est assurée par une contrainte OCL. D'autres contraintes OCL sont nécessaires pour notamment spécifier que :

Note : dans le méta-modèle Ecore du projet, les attributs _name des éléments Expression et Assignment ou autres méta-éléments associés n'ont pas de sémantique particulière. Ils servent juste à pouvoir identifier les instances de ces éléments via un nom textuel ou préciser leur contenu donné sous forme textuelle.

Exemples de modèles et des transformations attendues

Exemple de machines à états sans garde ni opération

La figure ci-dessous présente un exemple de machine à états modélisant le fonctionnement d'un micro-onde. L'état "Off" est représenté en gris car il est le premier pas d'exécution du modèle. Il est en effet l'état initial du composite qui est lui-même l'état inital de la machine à états.

Exemple d'une machine à états avec gardes et opérations

La figure ci-dessus représente une machine à états de la vitesse d'une voiture. La vitesse varie entre 0 et 100 km/h, par pas de 10 km/h. La machine à états possède deux état principaux : Arrêt et Marche, selon que la vitesse de la voiture est nulle ou pas. Deux événements sont gérés : accélerer et ralentir. L'état Marche contient 3 états internes permettant d'incrémenter et décrémenter la vitesse ainsi que de préciser que l'on est arrivé à la vitesse maximale. La machine à états possède deux variables : vitesse, de type entier, initialisé à 0, et maxAtteint, de type booléen, initialisé à false.

Travail attendu

Trois éléments sont attendus dans le projet :

  1. Une génération de code du méta-modèle de machines à états vers du code PauWare implémentée via un programme Java. Le programme PauWare devra être complet en intégrant les gardes et opérations associées aux états et transitions. Le code devra être fonctionnel (donc déjà qui compile).
  2. Une transformation ATL réalisant pour un modèle donné un premier pas d'exécution au niveau du positionnement des différents états actifs.
  3. Une extension de la transformation ATL précédente qui réalise les affectations et les calculs des variables si des opérations sont associées aux états qui sont activés lors du premier pas d'exécution.

Ressources du projet

L'archive StateMachine.zip contient le projet Eclipse implémentant les éléments initiaux du projet :