Mini Défi #1 : Trop de logique tue la logique Résolu

Maitre du Jeu 06/06/2025 Apprentissage PLC > Exercices et projets d'entraînement

🔧 Objectif :

Simplifier un code ST encombrant sans modifier son comportement.

🔍 Énoncé :

Le code suivant fonctionne parfaitement, mais il est lourd et difficile à maintenir. Sa mission est simple : activer un moteur si les conditions sont réunies.

🤔 Peux-tu proposer une version plus lisible, plus concise, mais au comportement identique ?

✅ Poste ta version en réponse.
🧠 Bonus : Explique pourquoi ta solution est meilleure.

Réponses

06/06/2025 12:47

Bonjour,

Moteur := NOT erreur AND Start AND NOT Reset;

Il faut faire attention à la gestion des Start et Reset dans pareil cas. Car si Reset fait seulement 1 front de 0 à 1 puis repasse à 0, le moteur se coupe puis se remet en marche aussitôt si jamais le Start est maintenu à 1. L'exemple ci dessus part du principe que le Reset se maintient tout le temps de la demande d'arrêt.

Les instructions conditionnelles telle que le IF sont souvent utilisées par les automs mais peuvent souvent se résumer à une simple équation booléene.

Bonne journée à tous

06/06/2025 18:21

MOTEUR := START AND NOT ( RESET OR ERREUR);

D'abord je mets la condition du passage à 1, puis ensuite rajoute après AND NOT les variables qui empêche le passage à 1 de la sortie

06/06/2025 20:01

Ce sera faux, mais je me lance.. je suis plus serein sur du ladder laugh !

 

Alors :

 

IF NOT erreur then :

Moteur := true

ELSE

Moteur := false

End If ;

 

En vu de mes faibles connaissances.. je ne comprends pas pourquoi on rajouterait encore " ELSE et moteur false et encore un End If; " ? 

Merci pour ce petit défi, cela me permet de voir que je dois apprendre ce language !

Merci au Maître du jeu ! 🙏

 

06/06/2025 21:10
moteur := start AND NOT reset AND NOT erreur;

Cette solution est optimisée en logique combinatoire et permets de gérer l'activation et la désactivation de la sortie moteur en une seule ligne.

Cela évite les copier - mal collés sur la gestion de l'activation et de la désactivation. wink

Bonne soirée / journée à tous

 

07/06/2025 00:06

if start and not reset and not erreur then

moteur := true ;

Else

moteur := false ;

end-if ,

09/06/2025 07:43

Merci à toutes celles et ceux qui ont proposé une version allégée de ce code ST un peu... lourd 😅

Correction :

➡️ Cette ligne évalue une seule expression booléenne :

- start doit être vrai

- reset doit être faux

- erreur doit être faux

💡 Si toutes ces conditions sont réunies, alors moteur est activé. Sinon, il est désactivé.

C’est exactement le même comportement, mais exprimé de manière plus directe.