TWILIGHT / APPRENDRE L’AUTOMATISMELe cours compagnon de ton labo

COURS ILLUSTRÉ / LA POMPE À EAU

Mesurer. Décider.
Remplir juste ce qu’il faut.

Tu as écrit Pompe := Marche;. La pompe obéit, mais elle ne gère pas encore le niveau. Construisons ensemble le programme qui remplit la cuve entre 30 et 80 %.

Pour débuter7 vues créées dans BlenderÀ lire et à manipuler à ton rythme
La station d’eau en 3D : réserve et pompe à gauche, cuve au centre, automate à droite.
La même installation que dans ton labo, présentée en coupe pour voir l’eau. Les images sont intégrées : aucun logiciel à installer.
01

Avant le code, suis l’eau.

Imagine une cuve qui alimente un atelier. L’atelier consomme de l’eau : le niveau descend. La pompe prend de l’eau dans la réserve, à gauche, pour remplir la cuve. Notre objectif : réapprovisionner automatiquement, puis arrêter le remplissage au bon moment.

Les quatre repères de la station : capteur, automate, pompe et sortie d’eau.
1 mesure le niveau ; 2 exécute le programme ; 3 ajoute de l’eau ; 4 laisse sortir l’eau consommée par l’atelier.

La réserve alimente la pompe. Les tuyaux bleu turquoise transportent l’eau ; les liaisons vers l’armoire représentent les échanges de signaux et les commandes.

1. Mesurer

Le capteur fournit une information : « le niveau est à 30 % ». Dans le labo, cette mesure est calculée par le simulateur.

2. Décider

L’automate lit cette information et applique ton programme : « c’est le seuil bas, il faut remplir ».

3. Agir

La commande autorise le moteur à entraîner la pompe. L’eau arrive, le niveau change, puis il est mesuré de nouveau.

Pourquoi le niveau baisse-t-il quand la pompe s’arrête ? La sortie vers l’atelier reste ouverte. Arrêter la pompe coupe l’arrivée d’eau, pas la consommation.

L’OT regroupe ici les équipements et logiciels qui surveillent et commandent cette installation. L’automatisme, c’est notamment concevoir la logique de fonctionnement que tu vas écrire. Aucun apprentissage par IA n’est nécessaire.

02

Un nom, une valeur, un rôle.

Une variable est une petite case nommée qui contient une valeur. Certaines cases viennent du terrain, d’autres gardent une décision, d’autres portent un ordre. Dans ce labo, elles sont déjà déclarées : tu peux utiliser directement leurs noms.

Nom dans le codeValeur possibleCe que cela représente
NiveauUn nombre de 0 à 100La mesure reçue du capteur, en pourcentage.
MarcheTRUE ou FALSEL’autorisation maintenue par l’interrupteur Marche du labo.
DemandeTRUE ou FALSELa décision de remplir, conservée en mémoire entre les cycles.
PompeTRUE ou FALSEL’ordre de marche écrit par ton programme. Le moteur reste soumis à la protection indépendante.
AlarmeTRUE ou FALSEUn signal qui indique le défaut détecté par ton programme.

TRUE veut dire vrai ou actif ; FALSE veut dire faux ou inactif. C’est un type de valeur appelé BOOL. FALSE n’est pas une erreur. Marche est le nom d’une entrée : écrire ce mot ne met pas automatiquement cette entrée à vrai.

Ton premier programme : suivre un interrupteur

Pompe := Marche;
Alarme := FALSE;

Lis la première ligne ainsi : « Écris dans Pompe la valeur actuelle de Marche. » Le symbole := fait une affectation, c’est-à-dire une écriture. Le point-virgule ; termine l’instruction.

Essaie la ligne de code

Marche = FALSE → Pompe = FALSE

L’entrée vaut FALSE : le programme écrit FALSE dans la sortie Pompe.

On évalue ici cette instruction seule. Pour observer l’eau et le moteur au fil du temps, utilise le labo.

Ce programme commande bien la pompe, mais il ne lit jamais Niveau. Tant que Marche reste vrai, il continue de demander le remplissage, même à 80 %. C’est pourquoi tu n’obtenais pas encore un cycle automatique.

Les signes à reconnaître

:= écrit une valeur ; = compare deux valeurs. <= 30 signifie « inférieur ou égal à 30 », seuil inclus. >= 80 signifie « supérieur ou égal à 80 ». AND demande deux conditions vraies à la fois.

L’indentation, les espaces au début des lignes, sert à lire la structure. Dans ton éditeur, Tab ajoute quatre espaces et Maj+Tab en retire. Échap puis Tab permet de sortir de l’éditeur.

03

Deux sens différents du mot « cycle ».

Le cycle du programme : une petite vérification répétée

L’automate ne lit pas ton programme une seule fois au démarrage. Dans ce labo, il recommence toutes les 100 millisecondes simulées, soit dix fois par seconde simulée.

Lire les entrées→Exécuter le code→Écrire les sorties↻

Il prend une photographie des entrées, parcourt le code de haut en bas, puis actualise ses sorties. Au cycle suivant, il relit les entrées : le niveau a peut-être changé. La mémoire Demande, elle, reste disponible.

Le cycle de fonctionnement : descendre, remplir, attendre

La cuve descend jusqu’au seuil bas, la pompe démarre, le niveau monte jusqu’au seuil haut, puis la pompe s’arrête. Cette séquence physique dure bien plus longtemps qu’un passage dans le programme.

Avec la consommation normale du modèle, la pompe apporte 8 points de niveau par seconde et la sortie en retire 3 : le niveau gagne environ 5 points par seconde pendant le remplissage. Monter de 30 à 80 % prend donc environ 10 secondes, soit une centaine de cycles du programme. Ces débits sont des simplifications du simulateur.

04

Deux seuils et une décision à retenir.

Fixons les règles : à 30 % ou moins, demander le remplissage ; à 80 % ou plus, arrêter la demande. Entre les deux, conserver la dernière décision. Cette mémoire s’appelle Demande.

Voici cinq moments d’un même fonctionnement. L’interrupteur Marche est activé et il n’y a aucun défaut. Avance d’une étape pour voir la mesure, la mémoire et l’ordre correspondant.

La cuve au départ à 50 %, pompe arrêtée.
Instantanés espacés du fonctionnement. Chaque image ne représente pas le cycle suivant de 100 ms.
Niveau mesuré50 %
Mémoire DemandeFALSE
Ordre PompeFALSE

1 · À 50 %, on attend.

Le code parcouru à ce moment

Les lignes éclairées ont été exécutées. Clique sur une ligne pour la traduire en français.

Voir la trace des décisions

    Le programme complet de l’exercice 2

    IF Niveau <= 30 THEN
        Demande := TRUE;
    ELSIF Niveau >= 80 THEN
        Demande := FALSE;
    END_IF;
    
    Pompe := Marche AND Demande;
    Alarme := FALSE;
    Ouvrir l’exercice 2 ↗

    La dernière commande utile à la pompe est Pompe := Marche AND Demande;. Elle demande que l’autorisation et le besoin de remplir soient vrais en même temps. Désactiver Marche arrête donc la pompe, même si Demande est encore vraie.

    05

    À 50 %, deux réponses sont possibles.

    Le niveau seul ne raconte pas toute l’histoire. Regarde ces deux vues : même quantité d’eau, mais une décision précédente différente.

    50 % après le seuil bas

    La cuve à 50 % pendant le remplissage, avec les flèches d’arrivée d’eau.
    Demande = TRUE. Le niveau a atteint 30 %, puis il est remonté. On continue de remplir jusqu’à 80 %.

    50 % après le seuil haut

    La même cuve à 50 % pendant la consommation, pompe arrêtée.
    Demande = FALSE. Le niveau a atteint 80 %, puis il est redescendu. On attend le retour à 30 %.

    Cette différence s’appelle une hystérésis : on ne démarre pas au même seuil que celui où l’on s’arrête. Cela évite de commuter sans cesse autour d’un seul niveau.

    Pourquoi ne pas écrire « sinon, arrêter » ?

    // Exemple à corriger : la pompe s’arrête trop tôt.
    IF Niveau <= 30 THEN
        Demande := TRUE;
    ELSE
        Demande := FALSE;
    END_IF;

    Avec ce ELSE, dès que le niveau dépasse 30 %, même de très peu, Demande repasse à faux. La pompe s’arrête, la consommation fait redescendre le niveau, puis elle redémarre. Elle n’atteint pas le seuil haut prévu.

    La bonne idée : ne rien réécrire entre les seuils. Avec ELSIF Niveau >= 80 THEN et sans ELSE, les deux conditions sont fausses à 50 %. Aucune instruction ne modifie Demande : elle conserve sa valeur du cycle précédent.

    Au premier démarrage, la mémoire vaut FALSE. À 50 %, attendre est donc normal. Dans le labo, charger un programme ou réinitialiser la cuve remet la mémoire à FALSE. Une simple désactivation de Marche conserve Demande : réactiver Marche peut reprendre le remplissage.

    06

    Et si la mesure n’est plus fiable ?

    Dans le labo, couper la liaison fige la dernière mesure reçue. Le nombre peut encore sembler plausible alors qu’il ne décrit plus l’eau actuelle. L’entrée MesureValide passe à FALSE : le programme doit en tenir compte.

    Nous ajoutons une règle prioritaire : si l’arrêt d’urgence est actif, si la mesure est invalide ou si la protection n’est pas prête, effacer la demande et allumer l’alarme. Sinon, appliquer les deux seuils.

    Une panne pendant le remplissage

    Avant chaque essai : niveau mesuré à 45 %, Marche activé, Demande déjà mémorisée à TRUE. Chaque bouton recommence ce même cas.

    Demande
    Ordre Pompe
    Alarme

    Le programme complet avec les défauts · exercice 3
    IF ArretUrgence OR NOT MesureValide OR NOT SecuriteOK THEN
        Demande := FALSE;
        Alarme := TRUE;
    ELSE
        IF Niveau <= 30 THEN
            Demande := TRUE;
        ELSIF Niveau >= 80 THEN
            Demande := FALSE;
        END_IF;
        Alarme := FALSE;
    END_IF;
    
    Pompe := Marche AND Demande;

    OR signifie « au moins une condition vraie ». NOT inverse la valeur : NOT MesureValide est vrai quand la mesure est invalide. La branche de défaut passe avant la régulation.

    Ouvrir l’exercice 3 ↗

    L’ordre de ton code et le moteur sont deux choses différentes

    Pompe = TRUE est une demande logicielle. Dans notre modèle, une protection indépendante coupe le moteur si le niveau réel atteint 95 % ou si l’arrêt d’urgence est enfoncé, même si le programme demande encore TRUE.

    Cette protection reste déclenchée : relâcher l’arrêt d’urgence ne suffit pas. Il faut la réarmer, après avoir libéré le bouton et avec un niveau inférieur à 85 %. Si un mauvais programme maintient l’ordre, réarmer peut faire repartir le moteur. Observe donc l’ordre et le moteur séparément.

    Le labo illustre ces idées avec des règles simplifiées. Ce n’est pas une architecture de sécurité certifiée ni un programme à copier tel quel sur une machine réelle. Une panne de capteur réelle ne produit pas toujours un indicateur aussi explicite que MesureValide.

    07

    Maintenant, fais tourner ton programme.

    1. Ouvre l’exercice 2, « Remplir sans hésiter ».
    2. Copie le programme complet de ce cours et remplace le brouillon de l’exercice dans l’éditeur.
    3. Clique sur Charger mon code. Cela installe le programme et remet sa mémoire à zéro. L’automate reste en STOP.
    4. Clique sur RUN pour lancer les cycles, puis coche Marche pour donner l’autorisation.
    5. Observe la cuve. Si elle part de 50 %, elle descend d’abord vers 30 %, puis se remplit jusqu’à 80 %.
    6. Clique sur Tester mon programme pour vérifier les cas préparés de l’exercice. Ce bouton teste ton brouillon ; il ne le charge pas dans la cuve.

    Écrire, charger et autoriser sont trois actions distinctes. Modifier l’éditeur ne remplace pas le programme déjà chargé. RUN fait exécuter ce programme. Marche est une entrée que ce programme doit lire.

    Un essai calme, cycle par cycle

    Après le chargement, utilise « Préparer une situation de départ » pour placer l’eau à 30 % pendant que le temps est figé. Active Marche, puis clique sur Un cycle · 100 ms. La photographie des entrées montre 30 % ; Demande et Pompe deviennent TRUE. Le niveau réel peut déjà avoir légèrement monté après ce cycle : la mesure lue et le niveau affiché en fin de cycle ne représentent pas exactement le même instant.

    Tu peux ensuite reprendre le temps pour suivre le remplissage. « Pause » fige toute la simulation. STOP automate coupe les sorties, mais laisse l’eau s’écouler si le temps continue.

    Ce que tu observesCe qu’il faut vérifier
    J’ai changé le code, rien ne change.Clique sur Charger mon code, puis RUN et Marche.
    À 50 %, la pompe ne démarre pas.Au départ, c’est normal : Demande vaut FALSE. Attends 30 % avec une consommation active.
    Le temps et le niveau restent figés.Le simulateur est en pause, ou tu avances seulement cycle par cycle.
    L’ordre vaut TRUE, mais le moteur est arrêté.Regarde l’état de la protection et l’arrêt d’urgence.
    La pompe commute autour de 30 %.Vérifie que tu n’effaces pas Demande avec un ELSE entre les deux seuils.
    Après réparation à 55 %, elle attend.Le programme avec défauts a effacé Demande : il attend à nouveau le seuil bas.
    08

    Tu as compris si tu peux expliquer pourquoi.

    Réponds à ces cinq petites situations. Tu peux recommencer : chaque réponse est accompagnée de son explication.

    0 / 5 questions comprises pour le moment.

    À toi de passer du cours à la cuve.

    Commence par le programme à deux seuils. Quand tu sais expliquer ce qu’il fait à 30, 50 et 80 %, ajoute le traitement des défauts.

    Programmer ma pompe ↗