PS_UnitModeManager

PS_UnitModeManager 1:

Packaging machines have different unit modes and not only the "automatic" mode. Each unit mode is defined by its own state model. A "Mode Manager" must be defined for transitions between the modes. The "Mode Manager" determines how and in which state a machine can change unit modes; i.e. built-in barriers prevent the machine from changing to unsuitable states.

See figure below as an example.

WARNING

Adhere to proper mode changes

The logic for transitions between modes depends on the application, especially for transitions between manual, semi-automatic and automatic modes. In addition, hardware barriers or safety equipment may be necessary for such mode changes. The responsibility for proper mode changes lies with whoever implements them.

PS_UnitModeManager 2:

PS_UnitModeManager 3: Inputs

VAR_INPUT
    Execute         : BOOL;
    eModeCommand    : E_PMLUnitMode;
    ePMLState       : E_PMLState;
END_VAR

Name

Type

Description

Execute

BOOL

Mode change on rising edge.

eModeCommand

E_PMLUnitMode

Requested unit mode (E_PMLUnitMode)

ePMLState

E_PMLState

Current PML state of the current mode (E_PMLState)

PS_UnitModeManager 4: Inputs/Outputs

VAR_IN_OUT
    Machine_ID      : MACHINE_REF;    (* Identifies the axis which position shall be latched at the trigger event *)
END_VAR

Name

Type

Description

Machine_ID

MACHINE_REF

Identification of the machine executed by the state model

PS_UnitModeManager 5: Outputs

VAR_OUTPUT
    eModeStatus     : E_PMLUnitMode;
    Done            : BOOL;
    Error           : BOOL;
    ErrorID         : UDINT;
END_VAR

Name

Type

Description

eModeStatus

E_PMLUnitMode

Current unit mode (E_PMLUnitMode)

Done

BOOL

True if mode change was successful.

Error

BOOL

Signals an error in the function block, e.g. "Mode change not permitted".

ErrorID

UDINT

If the error output is set, this parameter returns the error number.
0 = no error;
1 = mode change not allowed.
ePMLState not idle, stopped, aborted, held, suspended or completed or the corresponding state does not exist in the requested mode.

Implementation

Mode change is limited to certain modes, see implementation below.

PS_UnitModeManager 6:

Not all modes are implemented yet.

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

Requirements

Development environment

Target system type

PLC libraries to be linked

TwinCAT v3.1, build 4018 onwards

PC (i386)

Tc3_PackML