PS_UnitModeManager
Verpackungsmaschinen haben verschiedene Anlagenmodi und nicht nur den Modus "automatisch". Jeder Anlagenmodus ist durch ein eigenes Zustandsmodell definiert. Für Übergänge zwischen den Modi muss ein „Mode Manager“ definiert werden. Der „Mode Manager“ legt fest, wie und in welchen Zustand eine Maschine Anlagenmodi ändern kann, d. h. eingebaute Sperren verhindern, dass die Maschine in ungeeignete Zustände wechselt.
Siehe Abbildung unten als Beispiel.
| |
Ordnungsgemäße Modusänderungen einhalten Die Logik für Übergänge zwischen den Modi ist abhängig von der Anwendung, insbesondere für Übergänge zwischen manuellem, halbautomatischem und automatischem Modus. Für solche Modusänderungen können darüber hinaus Hardwaresperren oder Sicherheitsausrüstung erforderlich sein. Die Verantwortung für ordnungsgemäße Moduswechsel liegt bei demjenigen, der sie implementiert. |

Eingänge
VAR_INPUT
Execute : BOOL;
eModeCommand : E_PMLUnitMode;
ePMLState : E_PMLState;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
Execute | BOOL | Moduswechsel bei steigender Flanke. |
eModeCommand | E_PMLUnitMode | Angeforderter Anlagenmodus (E_PMLUnitMode) |
ePMLState | E_PMLState | Aktueller PML-Zustand des aktuellen Modus (E_PMLState) |
Ein/Ausgänge
VAR_IN_OUT
Machine_ID : MACHINE_REF; (* Identifies the axis which position shall be latched at the trigger event *)
END_VAR
Name | Typ | Beschreibung |
---|---|---|
Machine_ID | MACHINE_REF | Identifizierung der vom Zustandsmodell ausgeführten Maschine |
Ausgänge
VAR_OUTPUT
eModeStatus : E_PMLUnitMode;
Done : BOOL;
Error : BOOL;
ErrorID : UDINT;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
eModeStatus | E_PMLUnitMode | Aktueller Anlagenmodus (E_PMLUnitMode) |
Done | BOOL | Wahr, wenn Moduswechsel erfolgreich war. |
Error | BOOL | Signalisiert einen Fehler im Funktionsbaustein, z. B. "Moduswechsel unzulässig". |
ErrorID | UDINT | Wenn der Fehlerausgang gesetzt ist, liefert dieser Parameter die Fehlernummer. |
Realisierung
Der Moduswechsel ist auf bestimmte Modi begrenzt, siehe Implementierung unten.
![]() | Es sind noch nicht alle Modi implementiert. |
rTrig(CLK:= Execute);
IF rTrig.Q THEN
Done := FALSE;
Error := FALSE;
ErrorID := 0;
CASE eModeStatus OF
ePMLUnitMode_AUTOMATIC:
IF (ePMLState = ePMLState_STOPPED) OR (ePMLState = ePMLState_ABORTED) OR (ePMLState = ePMLState_IDLE) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSIF ((ePMLState = ePMLState_SUSPENDED) OR (ePMLState = ePMLState_HELD) OR (ePMLState = ePMLState_COMPLETE))
AND (eModeCommand = ePMLUnitMode_SEMIAUTOMATIC) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSIF (ePMLState = ePMLState_HELD) AND (eModeCommand = ePMLUnitMode_MAINTENANCE) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSE
Error := TRUE;
ErrorID := 1;
END_IF
ePMLUnitMode_MAINTENANCE:
IF (ePMLState = ePMLState_STOPPED) OR (ePMLState = ePMLState_ABORTED) OR (ePMLState = ePMLState_IDLE) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSIF (ePMLState = ePMLState_HELD) AND ((eModeCommand = ePMLUnitMode_AUTOMATIC) OR (eModeCommand = ePMLUnitMode_SEMIAUTOMATIC)) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSE
Error := TRUE;
ErrorID := 1;
END_IF
ePMLUnitMode_MANUAL:
IF (ePMLState = ePMLState_STOPPED) OR (ePMLState = ePMLState_ABORTED) OR (ePMLState = ePMLState_IDLE) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSE
Error := TRUE;
ErrorID := 1;
END_IF
ePMLUnitMode_SEMIAUTOMATIC:
IF (ePMLState = ePMLState_STOPPED) OR (ePMLState = ePMLState_ABORTED) OR (ePMLState = ePMLState_IDLE) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSIF ((ePMLState = ePMLState_SUSPENDED) OR (ePMLState = ePMLState_HELD) OR (ePMLState = ePMLState_COMPLETE))
AND (eModeCommand = ePMLUnitMode_AUTOMATIC) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSIF (ePMLState = ePMLState_HELD) AND (eModeCommand = ePMLUnitMode_MAINTENANCE) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSE
Error := TRUE;
ErrorID := 1;
END_IF
ePMLUnitMode_IDLE:
IF (ePMLState = ePMLState_STOPPED) OR (ePMLState = ePMLState_ABORTED) OR (ePMLState = ePMLState_IDLE) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSE
Error := TRUE;
ErrorID := 1;
END_IF
ePMLUnitMode_ESTOP:
IF (ePMLState = ePMLState_STOPPED) OR (ePMLState = ePMLState_ABORTED) OR (ePMLState = ePMLState_IDLE) THEN
eModeStatus := eModeCommand;
Done := TRUE;
ELSE
Error := TRUE;
ErrorID := 1;
END_IF
ELSE
eModeStatus := eModeCommand;
Done := TRUE;
END_CASE
END_IF
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
Ab TwinCAT v3.1 Build 4018 | PC (i386) | Tc3_PackML |