Contents Up haut

L'automate MICRO1


L'automate MICRO 1

P.Trau - 24/3/97 - révisé 2003 & 2019, version PDF

1 - Description générale

L'automate programmable IDEC MICRO1 (distribué par Chauvin Arnoux) est un automate de faible prix (300 à 500 Euros) permettant de traiter des petits problèmes d'automatisme à faible coût (même prix que 10 relais et 3 tempos, chez le même fabriquant). Il se compose d'une unité centrale (UC) comportant le contrôleur, la mémoire (EEPROM : ne s'efface pas quand elle n'est pas alimentée), 8 entrées (extensible à 16 voire 64), 6 sorties (extensible à 12) à relais acceptant du 220V à 2A par commun, c'est à dire 2A totales pour les 3 premières sorties, 2A pour chacune des 3 autres. Le programme est mis au point sur la console de programmation, puis est transféré dans l'UC, qui ne nécessite plus la présence de la console pour fonctionner.

2 - Connexions

Entrées : La borne +COM délivre du 24V-, permettant d'alimenter 8 capteurs (interrupteurs), numérotés 0 à 7.

Sorties : La première borne COM permet d'amener l'énergie de sortie pour les bornes 200, 201 et 202. Les bornes 203, 204 et 205 possèdent chacune sa propre alimentation (borne de gauche). Les différentes alimentations ne sont pas nécessairement identiques (par exemple, une en 220V~, une en 5V-, une en 24V-).

Console : elle est branchée sur la prise située à droite de l'UC (sous une petite trappe). Elle peut être clipsée sur l'UC (glisser vers le haut pour déclipser). Si la console est absente, l'UC, à son allumage, met toutes les variables internes et sorties à 0 puis démarre automatiquement le dernier programme entré (à condition d'avoir ôté la console en mode RUN).

3 - Adresses

4 - Structure du programme

L'automate exécute les lignes du programme de manière séquentielle (l'une après l'autre, en commençant par la ligne numéro 0. Le programme se termine par l'instruction END. Aucune ligne de ce programme, avant le END, ne peut être vide. Au passage sur une ligne de programme, les variables internes sont immédiatement mises à jour, mais les sorties ne sont réellement modifiées que sur le passage de l'instruction END. Comme en informatique, chaque instruction décrit une action à effectuer à l'instant de son exécution uniquement. Ceci implique, pour les cas d'automatismes habituels, où l'état des sorties doit continuellement être recalculé en fonction des entrées, de toujours boucler sur l'ensemble du programme. C'est ce que fait l'instruction END, qui, après la mise à jour effective des sorties, lit l'état des entrées puis remonte au début du programme (ligne 0). Les entrées seront figées le temps d'un cycle du programme (jusqu'au END), ce qui permet d'évaluer des expressions logiques complexes sans qu'une entrée ne change d'état en cours de calcul.

5 - Langage

Le MICRO1 fonctionne en notation polonaise, avec une pile (LIFO) de 8 registres (en cas d'introduction de plus de 8 valeurs dans la pile, les plus anciennes sont perdues).

Les paragraphes 5.1 à 5.6 présentent les fonctions combinatoires de base. Elles permettent de traiter simplement tout problème combinatoire. Les fonctions de base du séquentiel (bascules et timer) sont traitées de 5.7 à 5.9, puis sont traitées des fonctions plus puissantes ou plutôt informatiques (mais aussi plus complexes).

5.1 LOD (load - charger)

Syntaxe : LOD numéro d'entrée, de mémoire interne ou de sortie

Fonction : charge la valeur de son argument au sommet de la pile

Exemple : LOD 0 met au sommet de la pile l'état de l'entrée 0

5.2 OUT (sortir)

Syntaxe : OUT numéro de sortie ou de mémoire interne

Fonction : met la valeur du sommet de la pile dans son argument. La pile reste inchangée

Exemple :

LOD 0
OUT 400
OUT 200
Ceci met l'état de l'entrée 0 dans la mémoire 400 et sur la sortie 200

5.3 AND (et)

Syntaxe : AND numéro de sortie ou de mémoire interne

Fonction : effectue un ET logique (vrai si les deux entrées sont vraies, faux sinon) entre le sommet de la pile et son argument. Le sommet de la pile est remplacé par le résultat de l'opération.

Exemple :

LOD 0
AND 1
OUT 200
la sortie 200 s'allume quand l'entrée 0 et l'entrée 1 sont allumées, s'éteint sinon

5.4 OR (ou)

Idem AND, mais effectue un OU logique

5.5 NOT (non)

Syntaxe : Opérateur NOT argument

Fonction : complémente (1 si 0, 0 si 1) l'argument d'un opérateur LOD, AND ou OR

Exemple :

LOD NOT 0
AND NOT 1
OUT 200
La sortie 200 s'allume quand ni l'entrée 0 ni l'entrée 1 ne sont allumées

5.6 AND LOD / OR LOD

Syntaxe : AND LOD (resp. OR LOD)

Fonction : effectue un ET logique (resp. OU) entre le sommet de la pile et son suivant. Les deux arguments sont supprimés du sommet de la pile et remplacés par le résultat (la hauteur de la pile baisse donc d'un élément).

Exemple :
LOD 1
pile : [1]
(hauteur 1)
AND 2
pile : [1.2]
(hauteur 1)
LOD 3
pile : [1.2] [3]
(hauteur 2)
AND 4
pile : [1.2] [3.4]
(hauteur 2)
OR LOD
pile : [(1.2)+(3.4)]
(hauteur 1)
OUT 200
pile inchangée

effectue (écriture type "algorithmique") : 200<=(1.2)+(3.4)

Remarque : appuyer sur la touche SHF (shift=majuscule) avant LOD pour ne pas entrer un 1 (qui est sur la même touche).

5.7 SET (allumer)

Syntaxe : SET numéro de mémoire interne, de sortie ou de registre à décalage

Fonction : Si le sommet de la pile vaut 1, met à 1 son argument. Sinon laisse son argument dans son état précédent, qu'il ait été à 1 ou à 0. Le sommet de la pile reste inchangé.

5.8 RST (reset - éteindre)

Syntaxe : RST numéro mémoire ou sortie ou registre à décalage

Fonction : met son argument à 0 si le sommet de la pile vaut 1, le laisse inchangé sinon.
Exemple :
LOD 1
(entrée "marche")

SET 200


LOD 2
(entrée "arrêt")

RST 200

Si l'entrée 1 est validée, allume la sortie 200 jusqu'à la validation de l'entrée 2. Si 1 et 2 sont à 0, 200 reste dans son état précédent (mémorisation). Si 1 et 2 sont simultanément à 1, 200 est tout d'abord mis (de manière interne) à 1 puis à 0. Au END du programme, la sortie sera effectivement modifiée d'après le dernier état de 200 donc éteinte. C'est une bascule à priorité déclenchement. On obtient une priorité enclenchement en changeant l'ordre des instructions.

5.9 TIM (timer - temporisation)

Syntaxe : TIM numéro de timer (0 à 79)
durée (en 1/10ème de seconde, entre 0 et 9999)

Fonction : à compter du passage à 1 de son entrée (sommet de la pile), met sa sortie à 1 lorsque la durée est écoulée. Lorsque l'entrée est mise à 0, le timer est réinitialisé (compteur de temps remis à 0 et sortie à 0). L'entrée doit donc rester à 1 tout le temps du comptage et ensuite suffisamment pour que l'on ait pu lire la sortie. La sortie peut soit être récupérée au sommet de la pile (ordre OUT par exemple dans l'instruction suivant la durée) soit, n'importe où dans le programme, par lecture de la mémoire interne TIM numéro (LOD TIM numéro, AND TIM numéro ou OR TIM numéro)

Exemple :

LOD NOT 200
TIM 0
20
SET 200
LOD 200
TIM 1
30
RST 200

fait clignoter la sortie 200 (allumé 3s, éteint 2s)

Remarque : un timer n'arrête pas le programme (une autre partie de l'automatisme peut fonctionner pendant ce temps) mais met à 1 sa sortie, au bout du temps prédéfini, à condition d'avoir maintenu son entrée à 1 et de repasser à chaque cycle sur l'instruction TIM.

5.10 JMP (jump - saut avant) et JEND (fin de saut)

Syntaxe :

JMP
instructions
JEND
Fonction : si le sommet de la pile vaut 1 au JMP, le programme passe directement au JEND sans effectuer les instructions intermédiaires. Sinon JMP et JEND sont ignorés. Il est impossible d'imbriquer des sauts.

Remarque : On obtient la fonction JEND en appuyant deux fois la touche JMP

5.11 MCS (Master Control Set) et MCR (Master Control Reset)

Syntaxe :

MCS
instructions
MCR
Fonction : Si le sommet de la pile vaut 1 à l'arrivée au MCS, celui-ci est ignoré (le MCR également). Par contre si le sommet de la pile vaut 0, toutes les entrées des instructions suivantes (jusqu'au MCR) seront considéré comme valant 0. Donc un OUT sortira un 0 quel que soit l'état du sommet de la pile, un SET ne changera rien (ne met à 1 que si son entrée est à 1), un TIMer sera réinitialisé, les compteurs et registres à décalage seront figés. Plusieurs MCS peuvent se terminer par un MCR unique.

Exemple :

LOD 0
l'entrée 0 contrôle une grosse partie du programme

MCS


instructions


LOD 1
l'entrée 1 contrôle une plus petite partie du programme

MCS


instructions


MCR
terminaison des 2 MCS

5.12 SOT (Single OutpuT - sortie impulsionnelle)

Syntaxe : SOT numéro de sot (0 à 95)

Fonction : Si son entrée (sommet de la pile) valait 0 au cycle de programme précédent, et vaut 1 désormais, sa sortie (mise au sommet de la pile) vaudra 1 durant un cycle. Cette fonction ne doit pas être utilisée pour une sortie car le temps d'un cycle est inférieur au temps de réaction des relais de sortie, mais pour des variables internes

Exemple : voir CNT

5.13 CNT (counter - compteur)

Syntaxe : CNT numéro compteur (0 à 44)
valeur finale à atteindre (0 à 9999)

Fonction : la fonction possède deux arguments : empiler en premier son entrée Reset puis son entrée Pulse. A chaque front montant (passage de 0 à 1) du sommet de la pile (Pulse), ajoute 1 au compteur. Quand la valeur finale est atteinte, met sa sortie à 1 (sommet de la pile, et variable CNT numéro utilisable dans LOD CNT numéro, AND CNT numéro ou OR CNT numéro). La sortie reste à 1 jusqu'au passage à 1 de la première entrée (Reset), qui remet également le compteur à 0, et autorise le comptage dès qu'elle passe à 0.

Exemple :

LOD 2


SOT 0
création d'un front montant sur l'entrée 2,résultat sur la pile

AND 200
entrée "Reset" : si sortie allumée et front montant sur 2

LOD 2
entrée "Pulse"

CNT 0


5


OUT 200

la sortie 200 est allumée après 5 fronts montants sur l'entrée 2, s'éteint au 6ème

Remarque : Le compteur 45 possède une troisième entrée : décomptage. Ceci permet de gérer une quantité de pièces, en comptant à l'entrée et décomptant à la sortie
Le compteur 46 possède une troisième entrée : Up qui, s'il vaut 1 considère l'entrée Pulse (deuxième) comme impulsion de comptage, s'il vaut 0 comme décomptage.
Ces deux compteurs/décompteurs nécessitent également une valeur, mais qui est sera mise dans le compteur lors du Reset, la sortie sera mise à 1 en arrivant à la valeur 0. En décomptant après 0, on passe à 9999.

5.14 Comparateurs (associés aux compteurs CNT)

Syntaxe A: FUN 100+numéro de compteur (donc 100 à 146)
valeur de comparaison

Syntaxe B: FUN 200+numéro de compteur (donc 200 à 246)
valeur de comparaison

Fonction : ne possède aucune entrée. Quand le compteur vaut la valeur (A) ou le compteur est supérieur ou égal à la valeur (B), la sortie (sommet de la pile) vaut 1, sinon la sortie vaut 0. En stockant la sortie dans une mémoire interne (OUT), l'utilisation du LOD NOT permet de traiter les autres cas (différent, inférieur,...)

5.15 SFR (ShiFt Register - registre à décalage)

Syntaxe : SFR numéro du premier bit utilisé (0 à 127)
nombre de bits utilisés (1 à 128)

Fonction : possède 3 entrées, empilées avant l'instruction SFR : Reset, Pulse puis Data (au sommet de la pile). Reset met tous les bits utilisés à 0. A chaque front montant de Pulse, la valeur disponible en Data est entrée dans le premier bit utilisé, l'ancienne valeur du premier est décalée dans le second,..., la valeur du dernier est mise au sommet de la pile. On peut lire l'état de chaque bit du registre à décalage par LOD SFR numéro, AND SFR numéro ou OR SFR numéro. On peut créer plusieurs registres à décalage indépendants parmi les 128 bits disponibles. On peut forcer l'état d'un bit par SET SFR numéro ou RST SFR numéro (mais OUT SFR n'est pas possible).

Exemple :

LOD NOT 400


TIM 0


20


OUT 400
Timer : 400 vaut 1 un cycle toutes les 2 secondes

LOD NOT 597
Reset, uniquement lors du premier cycle

LOD 400
Pulse : un décalage toutes les 2 s

LOD SFR 12
Data : on entre en premier bit l'état du dernier

SFR 10
Notre registre commence en position 10

3
avec 3 bits (jusqu'au 12)

LOD SFR 10


OUT 200


LOD SFR 11


OUT 201


LOD SFR 12


OUT 202
affecter une sortie à chaque bit utilisé du registre

LOD NOT 597
comme toutes les mémoires internes, 597 vaut 0 au premier cycle

SET SFR 10
au premier cycle, mettre le 1er bit à 1

SET 597
mettre 597 à 1 définitivement, pour ne plus réinitialiser
Ceci crée un chenillard (sur 3 bits) qui boucle jusqu'à extinction de l'UC

Remarque : SFR peut être utilisé pour gérer un Grafcet linéaire, ou même plus complexe.
SFR NOT (mêmes entrées, même sortie) effectue un décalage en sens inverse. Il peut s'utiliser (et c'est là sa principale utilité) sur les mêmes bits qu'un SFR, permettant d'avancer et reculer.

6 - Entrée d'un programme

Si l'UC est éteinte en mode RUN, à son rallumage le programme débutera automatiquement (au bout de quelques secondes), avec toutes les mémoires mises à 0.

La console, contrairement à l'UC, perd le contenu de sa mémoire lorsqu'elle est débranchée. On peut recharger un programme dans la console depuis une UC par TRS READ puis confirmation par ENTR. TRS VERI permet de vérifier la similitude du programme de la console avec celui de l'UC.

7 - Monitoring

En plus de la visualisation sur l'UC de l'état des entrées et des sorties, on peut visualiser, en mode RUN, l'état de l'UC par les fonctions MON :

MON numéro mémoire READ : affiche l'état des 8 mémoires à partir du numéro donné. MON 0 pour les entrées, MON 200 pour les sorties, MON 400 pour les mémoires internes 400 à 407, les flèches haut et bas permettent de visualiser les mémoires suivantes. Une mémoire à 1 est visualisée par un rectangle plein, 0 par un vide. MON TIM numéro permet de visualiser le contenu d'un timer, MON CNT numéro pour un compteur, MON SFR numéro pour les registres à décalage. CLR quitte le mode Monitoring. Les changements d'état de moins de 0,1s ne sont pas visualisés. Remarque : MON TIM 47 affiche le temps d'un cycle du programme en mémoire (en ms).

On peut modifier la valeur limite d'un compteur ou timer par TRS CNT (ou TIM) numéro READ. La valeur est affichée. Entrez la nouvelle valeur puis ENTR. Cette valeur est perdue à l'extinction de l'UC (plus d'un jour). TRS SET numéro mémoire ENTR met à un une mémoire (RST, SET SFR, RST SFR sont également possibles).

FUN 93 READ 1 ENTR : affiche une ligne de programme, et l'état de sa sortie (ex LOD entrée à 1 ou LOD NOT entrée à 0 affichent un rectangle plein). On peut se déplacer dans le programme par les flèches ou par ADRS. On quitte ce monitoring par 0 puis ENTR.

8 - Simulation sur PC

Vous pouvez disposer d'un simulateur du MICRO1 (uniquement en DOS 16). Il faut dans un premier temps entrer votre programme, et le sauver dans un fichier texte (utilisez le bloc-notes sous Windows ou gedit sous Linux). Sont prises en compte les instructions simples (LOD, AND, OR, OUT, SET, RST ) ainsi que les tempos (TIM), sauts (JMP/JEND) et fronts (SOT). Les ordres s'inscrivent en majuscules ou minuscules (sans numéroter les lignes), mais commencent obligatoirement en début de ligne. Les ordres en deux mots sont séparés exclusivement par un espace (LOD NOT par exemple). Par contre l'argument (n° d'entrée, sortie, compteur, front...) est séparé de l'ordre soit par un espace, soit par plusieurs ou des tabulations. Les lignes vides (pas même d’espaces) ou commençant par ! sont ignorée (commentaires). Les durées des tempos sont arrondies à un nombre entier de secondes.

Pour l’utiliser sous Linux : téléchargez le logiciel dans votre répertoire personnel (ou un sous-répertoire, mais avec un nom sans accents ni espaces, 8 caractères maxi). Puis, dans un terminal, tapez "dosemu". Dans la nouvelle fenêtre, tapez "D:", puis "cd micro1" puis "micro1". Vous pouvez par exemple utiliser le fichier "tst-base.txt".

Vous écrirez vos programmes par gedit, en mode texte, toujours dans ce répertoire "micro1" (8 car max, sans espaces). Certains exemples s'y trouvent déjà. Une doc s'appelle "user-doc.txt".

Sous Windows 64 (je ne suis pas spécialiste) j’ai pu le faire tourner sous DOSBox (www.dosbox.com)

Vous pouvez télécharger l'ensemble (exécutable, sources en C, exemples, doc) en cliquant ici (avec le bouton de droite pour enregistrer, suivant votre navigateur). Ce n'est vraiment pas gros : 32 Ko.


Contents Up haut

P. TRAU, 26/3/97 révisé 2003, revu 2019