Mini Défi 11 : Séquence avec interruption et reprise sécurisée
🔧 Contexte :
Tu dois automatiser une ligne de convoyage en 3 étapes :
-
Chargement de la pièce par vérin
-
Transport sur le convoyeur (surveillance du temps de max. pour atteindre la station de déchargement)
-
Déchargement à la station suivante
Mais attention…
💥 Une alarme de sécurité (capot ouvert, arrêt d’urgence…) peut survenir à tout moment.
🎯 Objectifs à atteindre :
-
Construire une séquence par état (type Grafcet/FSM)
-
Si une alarme est déclenchée :
-
Interrompre immédiatement le cycle
-
Geler l’étape en cours
-
Rester en erreur jusqu’au reset manuel
-
Reprendre la séquence exactement là où elle s’était arrêtée
-
🔁 Bonus :
-
Ne pas réinitialiser les temporisations partiellement écoulées
-
Ajouter une variable d’état système :
etat_machine
= [Actif, En Pause, En Alarme] -
Ajouter un compteur de cycles complétés
📌 Ce défi est représentatif d’un comportement industriel critique.
Réponses

Maitre du Jeu
"One who knows nothing can understand nothing" - Master Xehanort
L'étape de transport par le convoyeur est couplé à une temporisation qui vérifie le temps maximum avant arrivée à la station de déchargement.
J'ai mis à jour l'énoncé (Merci de votre retour).
(* Gestion de la séurité *)
alarme:= Arret_urgence or Capot_ouvert;
(* Gestion de reset desséurité *)
if ResetBtn then
alarme:=false ;
Seqsaved:= seq ; end_if;
CASE seq OF
0:(* debut de chargement *)
Chargement := FALSE;
Transport := FALSE;
Dechargement := false;
Etat_Systeme[0]:= false;
Etat_Systeme[1]:= false;
Etat_Systeme[2]:= false;
if SensorCharg and not alarme then seq:=1;
Chargement := TRUE;
Etat_Systeme[0]:=TRUE; end_if;
1:(* transport *)
TransportOut := TRUE and not alarme ;
TON_0 (IN := TransportOut, PT :=T#10s);
Transport := TRUE;
if TON_0.Q then seq:=2; Etat_Systeme[1]:=TRUE; end_if;
2:(* déchargement et gestions desgele d'étape et de reprise *)
if Not alarme and SensorDecharge then
Dechargement := false;
Etat_Systeme[1] := TRUE;
TON_0(IN := FALSE);
seq := Seqsaved;
end_if;
if not alarme and SensorDecharge then
TransportOut := FALSE;
Dechargement := False;
Etat_Systeme[2] := TRUE;
TON_0(IN := FALSE);
seq := 0;
end_if;
END_CASE;