Aller au contenu
Pont-de-l'Isère — Drôme info@ma2id.fr
Généralités

Pourquoi votre cerveau raisonne en ST (et pas en ladder)

4 min de lecture

Dans l'article Programmation automate : quel langage choisir ?, je vous disais que l'argument le plus important en faveur du ST, c'est que votre cerveau raisonne en ST et pas en langage graphique. Promis, on y revient : le voici.

Écoutez-vous réfléchir

Quand un client vous décrit son besoin, il ne vous dessine pas des contacts et des bobines. Il vous parle en phrases :

« Si la porte reste ouverte plus de 30 secondes alors que l'alarme est armée, on déclenche la sirène. Elle sonne jusqu'à ce que quelqu'un acquitte. »

Et vous, quand vous réfléchissez à la solution, vous faites pareil : si ceci et cela, alors je fais ça, sinon… En ST, cette phrase s'écrit presque mot pour mot :

// Porte ouverte plus de 30 s avec l'alarme armée : on déclenche la sirène
tonPorte(IN := bPorteOuverte AND bAlarmeArmee, PT := T#30S);

IF tonPorte.Q THEN
    bSirene := TRUE;
END_IF

// La sirène sonne jusqu'à l'acquittement
IF bAcquit THEN
    bSirene := FALSE;
END_IF

Le même traitement en ladder (LD) :

     bPorteOuverte   bAlarmeArmee    +-----------+          bSirene
|------| |-------------| |-----------| TON       |-----------(S)----|
|                                    | PT: T#30S |                  |
|                                    +-----------+                  |
|                                                                    |
|      bAcquit                                              bSirene |
|------| |--------------------------------------------------(R)----|

Le schéma est juste. Mais vous ne l'avez pas pensé comme ça : vous l'avez traduit. Le « ET » devient deux contacts en série, le « OU » deviendrait une branche en parallèle, le « jusqu'à » devient une bobine SET et une bobine RESET. Chaque traduction demande un effort, et chaque traduction est une occasion de se tromper.

Ce n'est pas un hasard : le ladder a été conçu pour que les électriciens retrouvent leurs schémas à relais sur les premiers automates. C'est la traduction d'une ancienne technologie, pas de votre raisonnement.

Dès que ça se complique, le graphique décroche

Sur trois lignes de logique, la différence reste faible. Elle devient flagrante dès qu'on sort de la simple combinaison de contacts.

Une séquence

« On attend le départ cycle, puis on sort le vérin. Une fois sorti, on ouvre la vanne pendant 5 secondes, puis on rentre le vérin et on recommence. » Vous venez de décrire des étapes. En ST, ce sont des étapes :

CASE iEtape OF
    0:  // Attente du départ cycle
        IF bDepartCycle THEN
            iEtape := 10;
        END_IF

    10: // Sortie du vérin
        bSortirVerin := TRUE;
        IF bVerinSorti THEN
            iEtape := 20;
        END_IF

    20: // Ouverture de la vanne pendant 5 s
        bVanne := TRUE;
        tonRemplissage(IN := TRUE, PT := T#5S);
        IF tonRemplissage.Q THEN
            tonRemplissage(IN := FALSE);
            bVanne := FALSE;
            iEtape := 30;
        END_IF

    30: // Rentrée du vérin, puis retour au début
        bSortirVerin := FALSE;
        IF bVerinRentre THEN
            iEtape := 0;
        END_IF
END_CASE

On lit le cycle de haut en bas, comme on l'a raconté. En ladder, la même séquence s'éparpille en dizaines de réseaux de bits d'étape, de maintiens et de conditions de transition, et il faut reconstruire le film dans sa tête.

Un calcul sur plusieurs valeurs

« Je veux la moyenne de mes 8 sondes de température, sans compter celles qui sont en défaut. » En ST :

VAR
    arTemperature : ARRAY[1..8] OF REAL;
    abDefautSonde : ARRAY[1..8] OF BOOL;
    rSomme        : REAL;
    rMoyenne      : REAL;
    i, iNbValides : INT;
    bDefautMesure : BOOL;
END_VAR

rSomme := 0.0;
iNbValides := 0;

FOR i := 1 TO 8 DO
    IF NOT abDefautSonde[i] THEN
        rSomme := rSomme + arTemperature[i];
        iNbValides := iNbValides + 1;
    END_IF
END_FOR

IF iNbValides > 0 THEN
    rMoyenne := rSomme / INT_TO_REAL(iNbValides);
    bDefautMesure := FALSE;
ELSE
    bDefautMesure := TRUE;  // plus aucune sonde exploitable
END_IF

Passez à 32 sondes : vous changez un chiffre. En langage graphique, vous recopiez 8 fois (ou 32 fois) les mêmes blocs ADD et SEL, et vous priez pour ne pas avoir décalé un indice en route.

Ce n'est pas qu'une question de goût

Puisque le ST est du texte, tout ce qu'on sait faire avec du texte devient possible :

  • Commenter ligne par ligne, au plus près de ce que fait le code, comme dans les exemples ci-dessus.
  • Comparer deux versions d'un programme et voir exactement ce qui a changé, ou le suivre dans un gestionnaire de versions comme Git.
  • Rechercher et remplacer une variable dans tout le projet en quelques secondes.
  • Copier un morceau de code dans un mail, un rapport ou… un article de blog.
  • Déboguer précisément : en mode en ligne, Codesys affiche la valeur de chaque variable directement dans le code, et on pose un point d'arrêt sur la ligne qui pose problème.

Et le ladder, alors ?

Il garde sa place. Pour quelques verrouillages simples qu'un électricien de maintenance devra lire sur site, à 3 heures du matin, avec un PC portable posé sur l'armoire, un réseau ladder reste parlant. Le SFC donne une bonne vue d'ensemble d'une grosse séquence, et le CFC se prête bien aux chaînes de régulation.

Codesys permet d'ailleurs de mélanger les langages dans un même projet : chaque POU peut être écrit dans le langage qui lui convient. La bonne question n'est pas « quel langage je préfère ? » mais « qui va lire ce programme, et comment va-t-il le raisonner ? ».

Le test tout simple

La prochaine fois que vous démarrez un programme, écrivez d'abord en français, sous forme de commentaires, ce que l'automate doit faire. Vous verrez que le code ST vient presque tout seul sous chaque commentaire. C'est la preuve que votre cerveau raisonnait déjà en ST.

Pour aller plus loin : Concevoir un programme automate, de l'analyse au code et Codesys : premiers pas en ST.

Une question sur ce sujet ?

Automates WAGO, Codesys, réseaux industriels : MA2ID vous accompagne sur vos projets et peut former vos équipes.