Examen de Langages synchrones du 26 mars 2001
Tous documents autorisés. Durée 2h.
Exercice 1 (3 points)
Donnez un exemple de suite () définie par une équation u = f(x) et vérifiant
les conditions suivantes :
- x est une suite à valeur dans N
- f est une fonction de flot synchrone (f ne dépend que du passé
non strict de son entrée), i.e., = f([..])
- mais f ne peut pas être implantée par une machine à mémoire finie
(elle ne définit pas un système temps réel)
Justifier la réponse.
Donner un exemple de suite suivant les mêmes contraintes mais où f n'est
pas nécessairement synchrone.
Exercice 2 (4 points)
L'objectif de cet exercice est de modéliser le fonctionnement d'une machine à
café en ESTEREL. Cette machine dispose de divers boutons d'entrés :
cafe, grand_cafe, the permettent de selectionner une boisson.
annuler ce bouton permet d'annuler la commande.
pieces permet d'introduire des pièces de monnaie. On supposera ici que
les seules pièces disponibles sont des pièces de 1 franc et de 2 francs.
Les sorties de cette machine sont les suivantes :
boisson indique que la boisson est prète.
sonnerie lorsque la sonnerie est prète, un signal sonore est émis.
monnaie permet de rendre la monnaie d'une consommation.
Le prix des consommations est le suivant :
un café coûte 2 francs, un grand café coûte 3 francs et un thé coûte 2 francs.
Le fonctionnement de cette machine est le suivant : le consommateur introduit
des pièces dans la machine puis sélèctionne sa boisson. Le voyant boisson est alors
allumé et le signal sonore sonnerie est émis pendant 5 secondes. Ces signaux
indiquent que la boisson est prète. Si le consommateur appuie sur le bouton annuler
avant d'avoir sélectionné sa boisson, samonnaie lui est rendue. Si les boutons cafe,
grand_cafe ou the sont enfoncés avant que l'utilisateur ait introduitsa monnaie,
le signal sonnerie est émis pendant seconde.
Modéliser ce système en ESTEREL.
Exercice 3 : Alarme de maison(5 points)
Il s'agit de protéger une habitation divisée en deux parties : le garage et la
maison. La maison est toujours sous surveillance ès que le dispositif de protection
est mis sous tension. Le garage n'est sous protection qu'au bout d'un temps "délai-vigilence"
à partir du moment où le dispositif est sous tension; ce délai permet au propriétaire
d'avoir le temps de sortir du garage après avoir armé son dispositif de protection.
fonctionnement de l'alarme à partir du moment où elle sonne, elle le fait
pendant "délai-alarme" puis s'arrète pendant "délai-reprise" et à la fin de ce dernier
délai, selon la situation (présence ou non d'un intrus dans l'habitation) sonne à
nouveau ou non.
arrêt du dispositif lorsque celui-ci est sous tension, on ne peut l'arrêter
qu'après avoir founi le code d'entrée. On dispose alors le "délai-vigilence" entre
le moment où un code est fourni et la mise hors circuit pendant lequel une présence
dans le garage est tolérée.
entrées et sorties les entrées et sorties du systèeme sont les suivantes :
MA bouton de mise en marche ou d'arrêt. Chaque pression sous le bouton
fait changer d'étatle dispositif, qui est supposé arrêté initialement.
code signal booléen devenant vrai lorsqu'un code correct a été fourni.
pb-gar signal vrai lorsqu'une résence est détectée dans le garage.
pb-hab signal vrai lorsqu'une résence est détectée dans la maison.
en-marche témoin de l'état du dispositif.
alarme sans commentaire.
Modéliser le système.
Problème (9 points)
On souhaite modéliser un système commandant des aiguillages permettant à des
trains circulant sur une voie unique à double sens de se croiser. Le système est
décrit par le schéma suivant :
Chacun des composants de ce système est décrit ci-dessous.
- La section1 et la section2 sont des voies uniques où les trains
ne peuvent se croiser.
- Les sections gare1 et gare2 sont également des voies uniques.
On supposera que les trains présents sur la gare1 vont toujours à drite
alors que les trains sur la gare2 vont toujours de gauche à droite. Les
trains voulant passer de a section1 à la section2 passent donc
nécessairement par la gare2.
- Un système d'aiguillage Aiguillage1 et Aiguillage2 permet de
connecter les sections entres elles. Ces aiguillages ont chacun deux positions,
et peuvent être commandés par des action actionner_haut et actionner_bas.
- Le système contient également quatre feux de signalisation feu1, feu2,
feu_gare1, feu_gare2.
- Enfin, on suppose que le système dispose de pluseurs indicateurs permettant
de savoir si un train est présent dans une des sections.
- presence_section1 indique qu'un train est présent dans la section
section1 (de même pour presence_section2).
- presence_sur_section_aiguillage1 indique qu'un train est présent
sur la zone du premier aiguillage (de même pour le seuxième aiguillage).
- presence_gare1 indique qu'un train est présent dans la section gare1
(de même pour la section gare2).
On s'intéresse au contrôle des aiguillages et des feux de signalisations. L'objectif
est de définir dans un premier temps, un module ayant l'interface suivante :
node system
(demande_actionner_aig1_haut, demande_actionner_aig1_bas,
demande_actionner_aig2_haut, demande_actionner_aig2_bas : bool)
returns (aiguillage1_haut, aiguillage1_ bas, aiguillage2_haut, aiguillage2_bas,
feu1, feu2, feu_gare1, feu_gare2 :bool);
et envoyant des commandes aux deux aiguillages ainsi qu'aux quatre feux de position.
Question 1 Dans un premier temps, on souhaite seulement commander les
deux aiguillages aiguillage1 et aiguillage2 sans se préoccuper des feux.
Définir le corps de ce système à partir d'un module de commande d'un aiguillage.
Question 2 On ajoute les feux feu1 et feu2. Le feu
feu1 doit être allumé tant que l'aiguillage aiguillage1 est vers le haut.
De même pour le feu feu2.
Question 3 On ajoute les deux feux feu_gare1 et feu_gare2.
Le feu feu_gare1 doit être allumé lorsque l'aiguillage aiguillage1 est en bas.
Question 4 Vous devez maintenant tenir compte de la contrainte suivante :
un seul train (au plus) peut être pésent dans la section gare1 ou dans la section
gare2. Pour cela, vous supposerez que le système system est connecté aux
divers capteurs résents sur les voies. Changez l'interface et la définition de system
en conséquence.
Question 5 Même question en tenant compte cettefois de la contrainte
suivante : un seul train (au plus) peut être présent dans la section d'un aiguillage.
On ne peut donc changer d'état de l'aiguillage que s'il n'y a pas déjà de train dans
la zone de l'aiguillage.
Question 6 On veut introduire du temps dans la commande de l'aiguillage.
On souhaite émettre un signal de debut_de_demande_aiguillage_haut et que la
demande soit maintenue jusqu'à ce qu'éventuellement, un signal de fin_de_demande_aiguillage_haut
soit émis. Modifiez le système en conséquence.
Question 7 On souhaite maintenant implanter un autre système de contrôle
de la présence dans la section gare1. Pour cela on suppose qu'il y a deux capteurs
presence_gare1_debut et presence_gare1_fin, placés en début et en fin.
Définisser un noeud :
node PresenceGare1(presence_gare1_debut, presence_gare1_fin : bool)
return (presence_gare1 : bool)
qui in dique si un train est résent dans la gare. Ajoutez ce module au système
déjà défini.