Valid XHTML 1.0 Strict

Langages synchrones : exercices

Cette page recense quelques exercices pour pratiques les langages Lustre et Esterel, et seront présentés lors de la séance d'exercices, avant l'examen final. Chaque exercice doit être présenté par une binome. Le choix des exercices est libre, la seule contrainte étant que tous les exercices doivent être présentés par au moins un groupe lors de la séance. Il est donc naturel de vous organiser entre vous pour qu'aucune n'exercice ne trouve preneur.

Canon de lave (Lustre)

Une usine vient de créer un canon qui permet de lancer de la lave. Cette nouvelle arme est très performante mais nécessite toutefois que l'on controle attentivement sa température. En effet, le coeur du canon ne doit pas dépasser les 300 degré. Le canon est équipé d'un capteur de température (signal température) qui donne sous la forme d'un entier la température. Il est également équipé d'un système de reffroidissement activé par la commande active_reffroidissement (signal active_reffroidissement). Enfin, on déclenche un tir en appuyant sur le bouton tir (signal booléen tir).

Bien entendu, on ne peut tirer si la température est supérieure au seuil de 300 degré. Si ce seuil est dépassé, il faut alors activer le reffroidissement. On ne peut tirer qu'une fois la température revenue en dessous du seuil.

Implémenter le système de canon en lustre.

Contrôle d'une centrale nucléaire (Lustre)

Les centrales nucléaires sont des éléments critiques de notre société et les programmes les gérant doivent être vérifiés, testés et certifiés. Aujourd'hui, nous nous interessons à la gestion d'une centrale nucléaire en Lustre.

Nous aurons une vision très simpliste de la centrale et implémenterons la partie du réacteur. Initialement, le réacteur est éteint. Puis, lorsque l'utilisateur appuie sur le bouton de marche, il se met en fonctionnement. Dès lors, le réacteur se met en étant de marche. Pour contrôler son bon fonctionnement, il ne faut pas qu'il ne fasse ni trop chaud, ni trop froid. Par conséquent, un thermomètre donne la température du réacteur. Si celle-ci monte au dessus de 200°, alors le réacteur doit se mettre en mode de raffraichissement, jusqu'à ce que la température soit revenue en dessous de 180°. Si la température descend en dessous de 100°, alors le réacteur doit se mettre en mode de chauffe jusqu'à ce que la température atteigne au moins 150°. Enfin, si le signal de fusion est présent, il faut déclencher l'alarme.

Prothèse de genou (Esterel)

Les progrès de la médecine permettent aujourd'hui de créer des prothèses de genou répondant au stimuli nerveux des porteurs. Bien entendu, il est nécessaire d'avoir un logiciel controllant la prothèse. Nous proposons aujourd'hui de l'implémenter en Esterel.

L'angle d'inclinaison du genou est donné par le système (signal angle_genou). Cette valeur ne doit jamais être en dessous de 0 et au dessus de 180. La prothèse est reliée à deux signaux booléen : monter et baisser. Lorsque le signal monter est émis, l'angle d'inclinaison baisse. A l'inverse, lorsque le signal baisser est émis, l'angle d'inclinaison augmente. Bien entendu, on ne peut avoir les deux signaux simultanément.

Afin de garantir une utilisation maximale de la prothèse, un système d'économie d'énergie est embarqué avec la prothèse. Lorsqu'aucun stimuli n'a été reçu pendant 5 secondes, le système se met alors en veille. Si un stimuli est reçu, il faut attendre une seconde afin que le moteur démarre à nouveau. Pour calculer le temps, un signal seconde est émis périodiquement à chaque seconde.

Proposer une implémentation de ce système en Esterel.

Station velib' (Esterel)

Le programme de vélos de la mairie de Paris a rencontré un grand succès auprès des parisiens. Malgré cet engouement, de nombreux problèmes sont apparus sur les bornes (comme le montre cette photo). Pour ces raisons, nous proposons aujourd'hui d'écrire une version Esterel pour gérer les vélos. Notre système sera très simple et n'autorise à prendre le vélo qu'avec un pass de type Navigo. Cependant, il introduit un système anti-vol de vélo qui émet une alarme lorsque le vélo essaye d'être volé.

Lorsque le système détecte une carte sur son lecteur, elle lit son identifiant. Si l'identifiant est reconnu comme autorisé à prendre un vélo, la borne allume une lumière verte indiquant que l'utilisateur peut prendre le vélo (signal lumiere_verte. Sinon, la borne allume une lumière rouge (signal lumiere_rouge). L'utilisateur a cinq secondes pour prendre le vélo. Si le vélo n'est pas pris dans cet intervalle de temps, il est à nouveau vérouillé et la lumière s'éteint.

La borne est équipe d'un détecteur de pression sur le système de vérouillage. Il permet de détecter si quelqu'un souhaite prendre de force le vélo alors que celui-ci est vérouillé. Lorqu'une tentative de vol est détecté, le système reçoit le signal tentative_vol. Tant que ce signal est détecté, l'alarme (signal alarme) est émise. L'alarme continue d'émettre jusqu'à 5 minutes après le dernier signal notifiant le potentiel vol.

Implémenter ce système en Esterel.

Distributeur de billets (Esterel)

Le distributeurs de billets sont très utilisés dans notre société et permettent de retirer de l'argent facilement. Cependant, certains fonctionnent mal, comme peut l'attester cette photo. Pour cela, on se propose d'écrire une version Esterel du programme gérant le distributeur.

Lorque l'utilisateur insère sa carte (signal insere_carte), le système demande alors le code secret de la carte. Si celui-ci est mauvais, on le remande jusqu'à 3 fois. Si le code est invalide au cours des trois tentatives, l'appareil ne rend pas la carte et revient dans son état initial.

Si, au moment de demander le code, l'automate n'a aucune réponse de la part de l'utilisateur pendant 40 secondes, l'automate garde la carte et revient à son état initial.

Si le code est valide, on demande combien de billets souhaite l'utilisateur (signal nb_billets). Une fois cette valeur reçue, l'automate émet successivement le signal donne_billet qui met à disposition de l'utilisateur un billet. Le nombre de billets distribués est égal au nombre indiqué par le signal nb_billets. Une fois le nombre de billets distribués, on redonne la carte à l'utilisateur. Ci celui-ci ne la prend pas au bout de 15 secondes, l'automate la repend et revient dans son état initial.