Project

General

Profile

Projet long ENSEEIHT 2013

Cahier des charges

Objectifs
  • L'outil doit être capable de charger un fichier Lustre (extension .lus), et de l'afficher graphiquement
  • Un modèle Lustre doit pouvoir être vu soit comme une librairie de nœuds, soit comme un programme avec un nœud principal.
  • Il doit également permettre d'éditer ce fichier et de sauver les modifications dans le fichier Lustre, mais également de partir de la feuille blanche
  • Une boite à outils doit permettre de construire de nouveaux modèles ou parties de modèles à l'aide d'une palette de primitives et de fonctions (nœuds) déjà définis dans le modèle.
  • Lorsque l'on visualise un nœud, on doit pouvoir visualiser et modifier:
    • sa spécification : entrée, sortie + autres éléments
    • graphiquement: voir et éditer comment les sorties sont calculées en fonction des entrées, seuls les nœuds appelés sont boites noires. on doit pouvoir également visualiser la spécification fonctionnelle (pre, post). Cliquer sur une boite change la vue sur le nœud sélectionné. Les liens entre les entrées/sorties du nœud et les nœuds appelés sont représentées par des liens entre les boites (plusieurs variables peuvent être liées par un tel lien).
Instructions:

Le langage Lustre

Lustre est un langage synchrone décrivant des programmes réactifs, càd des programmes dont le contenu est répété infiniment souvent: lecture des valeurs des capteurs (entrées) - calcul - envoi de commandes aux actuateurs (sorties).

Un modèle/programme Lustre est composé d'un ensemble de nœuds. Un nœud est une sorte de fonction ou d'objet (au sens OO) prenant des flux entrées et produisant des flux sorties. La définition de chaque nœud repose elle-même sur l'utilisation d'autres nœuds.

Un nœud peut être représenté graphiquement par une boite avec n-fils d'entrées et m-fils de sorties pour les n entrées et m sorties.

Références pour Lustre

Étapes du travail

Les tâches suivantes devront être réalisés
  • mettre au point un DSL pour Lustre permettant d'éditer des modèles
  • proposer un grammaire en xtext pour Lustre
  • traiter la synchronisation des éditeurs textuels et graphiques (voir avec Obeo pour du support technique)
  • gérer la partie IHM et les extensions (librairie de symboles externes)

Début de modélisation d'un éditeur (sans Obeo Designer)

Extension: librairie de symboles externes et spécification

Librairie de symboles externes

L'éditeur doit permettre de placer des noeuds lustre, des noeuds importés (sans code lustre, mais juste une spécification, de les relier entre eux, mais aussi de déclarer l'utilisation d'une ou plusieurs librairies de symboles, ie. d'autres fichiers Lustre. Une fois chargée, des nouveaux noeuds doivent etre disponibles dans la palette de création de noeuds.

Spécification

Prévoir une extension de la grammaire de Lustre afin de pouvoir décrire en commentaire les préconditions sur les inputs, les post conditions sur les outputs, les invariants sur les variables internes, ainsi que des définitions globales du système. On pourra s'inspirer à cet effet du langage de spécification ACSL pour le C http://frama-c.com/acsl.html

Extension du langage

Des extensions pourront être traitées ou au moins préparées pour la suite:
  • possibilité de déclarer des arguments de noeud comme const
  • utilisation de tableaux, de matrices
  • description d'automates de mode (?)