Travaux Pratiques Qt #3 : Statecharts


Eric Lecolinet - LTCI - Télécom ParisTech - Groupe IC2-VIA

Liens utiles

Sujet

Le but du TP est d'implémenter le panneau de contrôle d'un four à micro-ondes. Les ingénieurs qui l'ont conçu ayant été sans pitié pour l'utilisateur, on va tenter dans ce TP de modéliser son comportement à l'aide d'un Statechart.

      

1e Etape: Créer l'interface graphique à l'aide de QtCreator

Créer un nouveau projet Qt puis dessiner l'interface graphique en utilisant Qt Designer (intégré à QtCreator). Pour simplifier on pourra pour commencer utiliser un QLineEdit en guise d'afficheur. Noter que Qt fournit un bouton rotatif (QDial) qui fonctionne comme un slider. Penser à donner des noms intelligibles à vos widgets afin de faciliter la programmation dans les questions suivantes.

Les boutons présents sur le panneau du micro-onde sont :

2e Etape: Faire le Statechart

Dessiner (sur une feuille de papier [penser à prendre une photo] ou à l'aide d'un outil informatique) le Statechart permettant de modéliser le comportement souhaité.

Noter que :

Remarques :

3e Etape: Implémenter le Statechart et le lier à l'interface graphique

Implémenter la QtStateMachine, les états et les transitions adéquats en C++. On pourra typiquement le faire dans le constructeur de la MainWindow ou une méthode appelée depuis ce constructeur. On met pour l'instant de côté les événements temporels et les transitions correspondantes (en d'autres termes l'horloge ne progressera pas et le four ne s'arrêtera jamais de lui même).

On pourra éventuellement utiliser le header Transitions.h qui facilite l'écriture des Statecharts Qt.

Une fois l'implémentaion réalisée, faire quelques tests pour vérifier que son comportement est conforme à la spécification établie à la question précédente.

4e Etape: Implémenter les transitions temporelles

Rajouter le traitement des événements temporels en créant des QTimers et en rajoutant les transitions adéquates. Comme expliqué précédemment, faire attention à ne mettre à jour l'afficheur que dans les états adéquats.

Remarque : la gestion du temps de cuisson comporte une petite subtilité. Il faut mettre à jour l'afficheur pour afficher le temps restant (toutes les secondes) mais aussi arrêter le four quand le temps est écoulé. QTimer possède un signal pour signaler qu'un lapse de temps est écoulé, mais comment faire pour générer un signal quand le temps est écoulé afin de déclencher la transition correspondante ?

5e Etape: Améliorer l'interface et/ou son comportement

Donnez libre cours à votre imagination...

Pour rendre le TP

Verifiez que votre code compile et s'exécute correctement depuis une salle de TP Unix de l'Ecole (sinon, clairement indiquer quelle version de Qt vous avez utilisée et sur quelle plateforme).

Ecrire un bref fichier README indiquant les questions traitées et contenant quelques explications que vous jugerez utiles. Ce fichier doit être au format texte (en UTF-8) ou en PDF. N'oubliez pas de mettre votre nom au moins dans le README et de préférence aussi dans les autres fichiers.

Créez un répertoire qui doit s'appeller Nom__Prenom. Si votre nom ou votre prénom a des espaces, mettez des _ à la place. Enlevez les fichiers .o puis zipper votre répertoire, soit au format .zip, soit au format .tar.gz. Aucun autre format ne sera accepté !

Aller à l'URL https://services.infres.enst.fr/rendutp/ et cliquez sur "déposer votre archive" à la ligne igr203-statecharts. Entrez votre nom et téléchargez votre fichier zip ou tar.gz.

Si vous répétez l'opération, seule la dernière version téléchargée sera prise en compte. La commande aperçu donne la liste des projets déposés et permet donc de vérifier que votre fichier a bien été déposé.



Eric Lecolinet - http://www.telecom-paristech.fr/~elc - Telecom ParisTech