Mini Défi #4 : Bloc fonction pour clapet motorisé Résolu
🧠 Aujourd’hui, on passe à la création de logique propre et réutilisable.
🎯 Objectif :
Créer un bloc fonction (FB) en Structured Text ou Ladder, permettant de piloter un clapet motorisé à 2 positions avec :
🔸 Un ordre d’ouverture.
🔸 Un ordre de fermeture.
🔸 Un fin de course ouvert.
🔸 Un fin de course fermé.
🔸 Et une ou deux sorties moteur.
🛠️ Contraintes :
🔸 Ne pas permettre les deux ordres simultanés.
🔸 Gérer les fins de course pour ne pas surcommander un moteur arrivé en butée.
🔸 Bonus : prévoir une priorité ou une sécurité.
Réponses
SEMI
None
Allez, on se lance pour ce nouveau défi, en attendant commentaires et correction
//4 variables en entrées correspondant aux ordres externes rentrant dans le FB, à savoir la commande TC d'ouverture/fermeture du clapet ainsi que le report TS de l'état des fins de course :
VAR_INPUT
Cmd_Ouvrir : BOOL; // commande TC d’ouverture
Cmd_Fermer : BOOL; // commande TC de fermeture
FC_Ouvert : BOOL; // report TS de l'etat du fin de course ouvert
FC_Ferme : BOOL; // report TS de fin de course fermé
END_VAR
//2 variables en sortie du FB transmettant l'ordre d'ouverture/fermeture au moteur :
VAR_OUTPUT
Moteur_Ouvrir : BOOL; // Sortie moteur pour ouverture
Moteur_Fermer : BOOL; // Sortie moteur pour fermeture
END_VAR
//1 variable "integer" pour connaître la position du clapet :
VAR
Etat_Clapet : INT; // 0 = Inconnu, 1 = Ouvert, 2 = Fermé, 3 = En mouvement
END_VAR
// Logique principale :
IF Cmd_Ouvrir AND NOT Cmd_Fermer THEN
// On ne permet pas de rouvrir le clapet si déjà ouvert :
IF NOT FC_Ouvert THEN
Moteur_Ouvrir := TRUE;
Moteur_Fermer := FALSE;
ELSE
Moteur_Ouvrir := FALSE;
END_IF;
ELSIF Cmd_Fermer AND NOT Cmd_Ouvrir THEN
// On ne permet pas de refermer le clapet si déjà fermé :
IF NOT FC_Ferme THEN
Moteur_Ouvrir := FALSE;
Moteur_Fermer := TRUE;
ELSE
Moteur_Fermer := FALSE;
END_IF;
ELSE
//Si aucun ordre émis ou si double ordre alors pour sécurité :
Moteur_Ouvrir := FALSE;
Moteur_Fermer := FALSE;
END_IF;

Maitre du Jeu
"One who knows nothing can understand nothing" - Master Xehanort
C'est un bon départ mais je pense que l'on pourrait factoriser certaines conditions.
SsiAmjad
None
Je vais declare un UDT comme suit :
Apres dans mon FB :
et pour le code je peux ajouter plusieur ameliorations tel que lanimation du clapet dans la supervision ..... :
MYDA
None
Et si on commencait par quelque chose de simple ?
Les entrées :
Les sorties :
Le code :
A+
Koala097
Yoyo
Myda, si je comprends bien peut-on aussi rajouter un ordre ouverture en dessous du fdc fermeture pour reset la fermeture ? 🤔

Maitre du Jeu
"One who knows nothing can understand nothing" - Master Xehanort
📅 Correction du Mini-Défi #4 : Bloc fonction pour clapet motorisé
Bravo à toutes et tous pour vos propositions 👏 Ce défi était un vrai exercice de structuration logique, au cœur de ce qu'on attend d’un automaticien : créer des blocs fiables, lisibles et réutilisables.
🎯 Objectif rappelé :
Créer un bloc fonction (FB) pour piloter un clapet avec :
- Ordre d’ouverture / fermeture
-
Fin de course ouvert / fermé
-
Sorties moteur
-
Protection contre ordres simultanés
✅ Exemple de solution en Structured Text :
🧠 Résultat :
-
On ne peut jamais activer les deux sorties moteur en même temps
-
Les fins de course bloquent les ordres inutiles
-
Le bloc est modulable et réutilisable
MYDA
None
@Koala097 : on pourrait ajouter l'ordre d'ouverture dans les conditions de reset de la fermeture. Ne pas le faire permet de garder la fermeture prioritaire dans le cas où on a les deux commandes en même temps.
HunterAutomation
Bonsoir à tous ,
En espérant que vous allez tous bien ?
Y'a pas de mini defi cette semaine ?