Sie sind auf Seite 1von 2

Département : Automatique Télécommunication et Electronique

Option : Licence Automatique

Matière : (UEF322)

Série de TD n° 4 (Langage LIST)

Exercice 1 :

Un pupitre opérateur (Boîte à boutons) contient huit touches. Chaque touche est équipée de trois LEDs de couleurs
rouge, verte et bleue respectivement. L'état (appuyé=1 et libéré=0) de la touche i est lu à partir de la mémoire image
des entrées de l'adresse I30.i (i=0,1,..,7). La LED rouge de la touche i est commandée à partir de Q40.i, la LED verte
de la même touche est commandée à partir de Q41.i et la LED bleue à partir de Q42.i (i=0,1,..,7).

En combinant ces LEDs on peut obtenir cinq couleurs différentes selon le tableau suivant.

Couleur d'allumage Combinaison adéquate des


désirée de la touche i commandes des LED de la touche i
Q40.i Q41.i Q42:i 7 3
LED R LED V LED B
Rouge 1 0 0
Verte 0 1 0
Bleue 0 0 1 6 2
Jaune 1 1 0
Blanche 1 1 1
0 0 0 5 1
Eteinte 0 1 1
1 0 1

4 0

Le fonctionnement qu'on veut programmer en utilisant ce pupitre est comme suit :

Au départ toutes les touches sont éteintes. Si une touche est appuyée pour la première fois, son allumage doit être de
couleur verte, et elle doit rester allumée avec la même couleur jusqu'à ce qu'elle soit appuyée une nouvelle fois. Si la
touche est appuyée une deuxième fois, elle doit s'allumer en jaune. Ensuite en blanc après le troisième appuie, en
bleue après le quatrième et en rouge après plus de quatre appuies.

Si une touche est appuyée plus de 5 secondes sans être relâchée, elle sera éteinte.

1. Ecrivez un programme en langage à LIST qui répond à ces spécifications pour l'allumage d'une seule touche
(exemple touche_i) (Il faut donner l'organigramme de la commande)?
2. Modifiez le programme obtenu en 1 pour commander l'allumage des huit touches ?
Exercice 2 :

La mémoire tampon de diagnostic d'un automate programmable est une mémoire circulante. Ceci signifie
que si une nouvelle entrée (composante) arrive elle occupera le top de cette mémoire et sera traitée comme
l'entrée la plus récente et la plus ancienne entrée sera écrasée (perdue). On veut utiliser un bloc de données
comme une mémoire circulante pour ceci on procède comme suit :

 Les trois premiers mots du bloc de donnée contiennent un indice qui renvoie vers le de la prochaine
entrée, le nombre d'entrées (100 composantes pour le tampon de diagnostic) de la mémoire circulante
et le nombre d'octet dans une seule composante (20 octets pour l'exemple du tampon de diagnostic).
 Si une entrée arrive, elle sera écrite dans la position pointée par l'indice prévu pour cela et cette
indice sera incrémenté d'une unité mais s'il s'agit de la dernière position dans le bloc de donnée,
l'indice sera remis à zéro (voir figure).
1. Ecrire le programme LIST de la fonction qui permet de calculer la taille du bloc de données qui sera
utilisé comme mémoire circulante à partir du nombre d'entrées et la taille d'une entrée et crée un tel
bloc de donnée.
2. Ecrire le programme LIST de la fonction qui permet d'écrire une entrée dans cette mémoire à partir
d'une zone spécifiée par un pointeur de type ANY.

Entrée 7 Entrée 7
Entrée 2 Entrée 1 Entrée 6 Entrée 6

Entrée 5 Entrée 5
Entrée 3 Entrée 0
Entrée 4 Entrée 4
Enregistrement

Entrée 3 Entrée 3
Entrée 4 Entrée 7
Entrée 2 Entrée 2

Entrée 5 Entrée 6 Entrée 1 Entrée 1

Entrée 0 Entrée 0
Taille d'une
entrée
Nbre d'entrées Entête

Indice du Top

Figure - - Structure d'une mémoire circulante

3. Question supplémentaire : Ecrire le programme de la fonction qui fait la lecture d'une mémoire
circulante et donne en sa sortie un bloc de données contenant toutes les entrées de la mémoire
circulant rangées selon l'ordre d'apparition, l'entrée la plus récente occupe la première position dans
ce bloc de données et l'entrée la plus ancienne occupe la dernière position.