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 %.
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.
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.
Le capteur fournit une information : « le niveau est à 30 % ». Dans le labo, cette mesure est calculée par le simulateur.
L’automate lit cette information et applique ton programme : « c’est le seuil bas, il faut remplir ».
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.
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 code | Valeur possible | Ce que cela représente |
|---|---|---|
Niveau | Un nombre de 0 à 100 | La mesure reçue du capteur, en pourcentage. |
Marche | TRUE ou FALSE | L’autorisation maintenue par l’interrupteur Marche du labo. |
Demande | TRUE ou FALSE | La décision de remplir, conservée en mémoire entre les cycles. |
Pompe | TRUE ou FALSE | L’ordre de marche écrit par ton programme. Le moteur reste soumis à la protection indépendante. |
Alarme | TRUE ou FALSE | Un 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
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.
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.
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.
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.
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;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.
À 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
50 % après le seuil haut
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.
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.
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.
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.
Maintenant, fais tourner ton programme.
- Ouvre l’exercice 2, « Remplir sans hésiter ».
- Copie le programme complet de ce cours et remplace le brouillon de l’exercice dans l’éditeur.
- Clique sur Charger mon code. Cela installe le programme et remet sa mémoire à zéro. L’automate reste en STOP.
- Clique sur RUN pour lancer les cycles, puis coche Marche pour donner l’autorisation.
- Observe la cuve. Si elle part de 50 %, elle descend d’abord vers 30 %, puis se remplit jusqu’à 80 %.
- 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 observes | Ce 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. |
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.