PS_UnitModeManager

PS_UnitModeManager 1:

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.

WARNUNG

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.

PS_UnitModeManager 2:

PS_UnitModeManager 3: 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)

PS_UnitModeManager 4: 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

PS_UnitModeManager 5: 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.
0 = kein Fehler;
1 = Moduswechsel unzulässig.
ePMLState nicht idle, stopped, aborted, held, suspended oder completed oder der entsprechende Zustand existiert im angeforderten Modus nicht.

Realisierung

Der Moduswechsel ist auf bestimmte Modi begrenzt, siehe Implementierung unten.

PS_UnitModeManager 6:

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