Série 2
Transcription
Série 2
CUST GE2 - Module INFO7bc TD Systèmes Réactifs et Temps Réel Série 2 2007-2008 J. Sérot Cette deuxième série de TD est centrée sur la modélisation de systèmes concurrents, sous la forme d'un ensemble de tâches concurrentes et coopérantes (supposées s'exécuter, à ce niveau, simultanément). Les exercices proposés réclament aussi une phase d'analyse de spécification plus conséquente que dans la première série. Exercice 2.1 On considère un petit robot mobile du type de celui utilisé en cours. Afin d'éviter les obstacles avant la collision, on dote ce robot d'un système de mesure des distances par ultrason (télémètre). Ce télémètre est placé à l'avant du robot et dirigé vers l'avant. D'un point de vue programmation, il s'utilise de la manière suivante : le passage à 1 d'une entrée DM (Déclenchement Mesure) déclenche la mesure (physiquement, un train d'onde est émis par le télémètre); la fin de la mesure est signalée par un événement Echo (physiquement, cet événement correspond à la réception de l'écho du train d'onde émis). La distance mesurée se déduit alors aisément du temps séparant le passage à 1 de DM de la réception de Echo, connaissant la vitesse de propagation du son cs dans l'air. La commande des moteurs se fait via deux sorties MD et MG(moteur droit et moteur gauche) pouvant prendre chacune trois valeurs : Av (marche avant), Ar (marche arrière) et Stop (arrêt). Ecrire, sous la forme de deux tâches concurrentes - l'une se chargeant mettre à jour la distance (d) au plus proche obstacle frontal, l'autre assurant le contrôle du déplacement du robot -, le programme assurant le déplacement du robot selon les modalités suivantes : le robot se déplace en ligne droite tant que la distance au plus proche obstacle reste supérieure à un seuil Ds. Quand cette distance devient inférieure à ce seuil (qd le robot se rapproche d'un mur par ex.), le robot tourne à droite de 90° et reprend son déplacement en ligne droite. Les mesures télémètre seront déclenchées toutes les 100 ms. Pour cela, on supposera disponible un timer générant un événement H1 toutes les 100 ms. On supposera par ailleurs disponible une fonction time() renvoyant le temps courant (en ms, par ex) (cad le temps écoulé depuis un instant arbitraire). Exercice 2.2 Ajouter au programme précédent une tâche chargée de calculer (tenir à jour) la distance totale parcourue par le robot (dp). Cette distance sera déduite des événements IncM d'un codeur incrémental associé à l'une des roues avant (Ni événements par tour de roue, diamètre de la roue=Dr). La tâche de contrôle du déplacement du robot devra, à chaque fois que dp atteint une valeur Dt, émettre un beep et remettre dp à 0. Exercice 2.3 On s'intéresse au logiciel de contrôle pour un robot embouteilleur, décrit sur la figure 2.1. Ce robot assure le remplissage de bouteilles de jus de fruit. Fig. 2.1 DESCRIPTION du SYSTEME Les bouteilles sont solidaires d'un tapis roulant, se déplaçant à vitesse constante (inconnue). Le remplissage doit se faire pendant le déplacement. Pour cela la tête du robot remplisseur doit suivre la bouteille (asservissement en position) pendant toute la durée du remplissage. Cette durée de remplissage (Tr) dépend de la capacité de la bouteille et est supposée connue. Le remplissage débute quand une bouteille entre dans la zone A. Il est initié par l'ouverture de la vanne VR (commande en tout-ou-rien) pendant un temps Tr. Afin que le même temps de remplissage conduisent à un niveau constant dans les bouteilles, le niveau de liquide dans la cuve doit être maintenu entre deux niveaux de référence (Nv1 et Nv2) en agissant sur la vanne VC (commande en tout ou rien). Une fois le remplissage d'une bouteille terminé, la tête du robot revient (à vitesse maximale) à gauche de la zone A et attend la bouteille suivante. Les opérations de pose du couvercle sont ignorées ici. Le logiciel doit afficher en permanence le nombre de bouteilles remplies depuis la dernière mise en marche. La vitesse du tapis (et donc la vitesse et la position de la bouteille) ne sont pas mesurées directement mais via la sortie d'un codeur incrémental associé au moteur assurant le déplacement du tapis : ce codeur produit une impulsion à chaque fois que le tapis avance de 1cm. La vitesse maximale du tapis est de 10 cm/s. La position et la vitesse de la tête de remplissage ne sont pas accessibles mesurées directement mais via la sortie d'un codeur incrémental qui produit lui 64 impulsions à chaque fois que la tête se déplace de 1cm. Un signal supplémentaire (tout ou rien) est positionné à 1 lorsque la tête se trouve à l'extrême gauche de la zone A. La commande du moteur de déplacement du moteur de la tête est supposée réalisée via un signal numérique codé sur 8 bits (0 : arrêt, 127 : déplacement à vitesse maximale vers la droite, -128 : déplacement à vitesse maximale vers la gauche). La vitesse maximale de déplacement de la tête est de 1 m/s. Les entrées-sorties du logiciel à concevoir sont résumées sur la figure 2.2 Fig 2.2 - PreB passe à 1 dès qu'une bouteille entre dans la zone A - ZonA indique si la tête est positionnée à gauche de la zone A - IncT et IncB sont les signaux en provenance des codeurs incrémentaux du moteur de la tête et du tapis respectivement. - NivC donne le niveau de la cuve (codé sur 8 bits) - CmdT est le signal de commande en vitesse de la tête (8 bits, signé) - CmdVR et CmdVC commandent les vannes de remplissage des bouteilles et de la cuve respectivement (0 : vanne fermée, 1 : vanne ouverte) - NbB indique le nombre de bouteilles remplies depuis la dernière mise en marche TRAVAIL A FAIRE Modéliser sous la forme d'un ensemble de tâches concurrentes le logiciel de contrôle du robot délimité ci-dessus. Indications : - prévoir au moins quatre tâches : une chargée du contrôle de la cuve, une du contrôle de la tête, une pour calculer la vitesse de la bouteille (du tapis) et une pour calculer la vitesse de la tête - expliciter les interactions entre ces tâches (qui produit quoi pour qui, sous quelle forme) - raisonner dans un premier temps en supposant une exécution parallèle (simultanée) de chacune de ces tâches - pour la tâche de contrôle de la tête, penser à expliciter une machine à états