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.
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).
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.
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).
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
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 |
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 |
Idem AND, mais effectue un OU logique
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 |
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
|
Remarque : appuyer sur la touche SHF (shift=majuscule) avant LOD pour ne pas entrer un 1 (qui est sur la même touche).
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é.
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
|
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 |
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.
Syntaxe :
|
JMP instructions JEND |
Remarque : On obtient la fonction JEND en appuyant deux fois la touche JMP
Syntaxe :
MCS instructions MCR |
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
|
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
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
|
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.
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,...)
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
|
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.
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.
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.
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.
P. TRAU, 26/3/97 révisé 2003, revu 2019