Toutes les opérations booléennes donnent un résultat (0 ou 1) qui est mis dans le registre logique RLG (en fait une pile à 2 registres, mais il est rare qu'on veuille utiliser l'avant-dernier résultat, la plupart du temps on préfère le stocker dans un mémo).
ET (d=a.b./c) U "a" U "b" UN "c" = "d" |
![]() |
OU : (d=a+b+/c) O "a" O "b" ON "c" = "d" |
![]() |
OU Exclusif X "a" X "b" XN "c" = "d" |
![]() |
On peut aussi directement écrire un développement classique de fonction booléenne (somme de mintermes) (d=a./b.c + /a./b.c + /a.b):
U "a" UN "b" U "c" O UN "a" UN "b" U "c" O UN "a" U "b"< = "d"
Si dans la liste des OU on a un terme d'une seule variable on l'écrit directement (sans U) (d=a./b.c + d + /a./b.c + /c)
U "a" UN "b" U "c" O "d" O UN "a" UN "b" U "c" ON "c" = "e"
Pour des écritures plus complexes, on dispose aussi de parenthèses (fonctionne pour U, UN, O, ON, X et XN) :
U( O E0.0 O M10.0 ) U M10.1 U( O E0.2 O M10.3 ) = A4.0
Il y a possibilité d'imbrication, je n'ai pas trouvé s'il y avait une limite :
U( O E 0.0 O M 0.0 ) U M 0.1 U( O E 0.2 O( U M 0.2 U( ON M 0.3 O M 0.0 ) UN E 0.1 ) O M 0.3 ) = A 0.0 |
![]() ![]() |
Rq1 : j'ai décalé à l'intérieur des parenthèses, mais Step7 réaligne tout.
Rq2 : peut être préfèreriez vous, pour comprendre, voir ce programme en CONT ou en LOG : les voici (obtenus par le menu "affichage")
En général un calcul se termine par un = (affectation) qui met le RLG (0 ou 1) dans un mémo ou une sortie. Mais on peut aussi utiliser R ou S (si le RLG vaut 1, set ou reset de la sortie, sinon elle reste inchangée) :
U "a" UN "b" S "bascule"
Dernière fonctionalité booléenne de base, le front montant FP : vaut 1 si le RLG passe de 0 à 1 (front descendant = FN).
U E 0.O FN M 0.0
met M0.0 à 1 si et seulement si, la fois précédente où on est passé sur ces 2 lignes, E0.0 vallait 0, et que cette fois ci il vaut 1. Il restera à 1 jusqu'à ce qu'on repasse une nouvelle fois sur ces deux lignes. Je rappelle que l'automate lira toutes les lignes qui suivent, puis arrivé au bout du programme, recommencera dans le même ordre les instructions.
il y a dans l'automate 256 mémoires (16 bits) réservées aux tempos, nommées T0 à T255. La durée y est notée d'une manière un peu spéciale : les deux bits de poids fort sont à 0. Les deux suivants définissent la base de temps : 00=10ms, 01=100ms, 10=1s, 11=10s. Les 12 bits restants correspondent à la durée, en BCD (donc maxi 999). Si on veut simplifier, on peut utiliser le format S5T par ex S5T#1H_2M_20S_100MS
Il y a diverses tempos possibles : SE (normale : déclenche au bout de la tempo, s'éteint dès que l'entrée repasse à 0), SS (comme SE, mais ne s'éteint que par un reset), SV (dure exactement le temps donné, quelle que soit la durée de l'entrée), SI (comme SV, mais s'arrête dès que l'entrée passe à 0), SA (s'allume dès que l'entrée est à 1, s'éteind avec un temps de retard par rapport au passage à 0 de l'entrée).
A la rigueur on peut forcer l'état d'une tempo (si son entrée est à 1, quand elle est à 0 de toute façon rien ne se passe) : FR redémarre le comptage du temps même si on avait déjà commencé à compter, R termine une tempo (même si le temps n'est pas fini) et remet immédiatement la sortie à 0
Exemple : A0.0 passe à 1 2s après l'activation de E0.0, s'éteint en même temps que E0.0 :
U E0.0 L S5T#2S SE T1 U T1 = A0.0 |
![]() |
![]() |
Patrick TRAU, ULP - IPST, nov 06