- Added PackML Base FB's - Added Unit Tests for PackML Base State Machine - Added Robot job numbers according to new interface - Added PLC job number for robot to call according to new interface - Change Robot to PackML interface
244 lines
5.3 KiB
XML
244 lines
5.3 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1">
|
|
<POU Name="FB_PackMLStateMachine" Id="{784ceb84-1721-424f-89d1-422a24198e57}" SpecialFunc="None">
|
|
<Declaration><![CDATA[FUNCTION_BLOCK FB_PackMLStateMachine
|
|
VAR_INPUT
|
|
eMode : E_PackMLUnitMode;
|
|
eCmd : E_PackMLCmd;
|
|
END_VAR
|
|
VAR_OUTPUT
|
|
eState : E_PackMLState;
|
|
eCurrentMode : E_PackMLUnitMode;
|
|
xError : BOOL;
|
|
END_VAR
|
|
VAR
|
|
// Internal mode
|
|
_eMode : E_PackMLUnitMode;
|
|
|
|
// Internal state
|
|
_eState : E_PackMLState;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[// Check for mode switch
|
|
IF eMode <> _eMode THEN
|
|
// Only allow mode switch in stopped state
|
|
// or in aborted state when target mode ist manual mode
|
|
IF (_eState = E_PackMLState.STOPPED) OR (_eState = E_PackMLState.ABORTED AND eMode = E_PackMLUnitMode.MANUAL) THEN
|
|
_eMode := eMode;
|
|
END_IF
|
|
END_IF
|
|
|
|
|
|
// Base state machine
|
|
CASE _eState OF
|
|
E_PackMLState.STOPPING:
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.STOPPED:
|
|
IF eCmd = E_PackMLCmd.RESET THEN
|
|
_eState := E_PackMLState.RESETTING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.RESETTING:
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.IDLE:
|
|
IF eCmd = E_PackMLCmd.START THEN
|
|
_eState := E_PackMLState.STARTING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.STARTING:
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.EXECUTE:
|
|
IF eCmd = E_PackMLCmd.SUSPEND THEN
|
|
_eState := E_PackMLState.SUSPENDING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.HOLD THEN
|
|
_eState := E_PackMLState.HOLDING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.SUSPENDING:
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.SUSPENDED:
|
|
IF eCmd = E_PackMLCmd.UNSUSPEND THEN
|
|
_eState := E_PackMLState.UNSUSPENDING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.UNSUSPENDING:
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.HOLDING:
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.HELD:
|
|
IF eCmd = E_PackMLCmd.UNHOLD THEN
|
|
_eState := E_PackMLState.UNHOLDING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.UNHOLDING:
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.COMPLETING:
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.COMPLETE:
|
|
IF eCmd = E_PackMLCmd.RESET THEN
|
|
_eState := E_PackMLState.RESETTING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.STOP THEN
|
|
_eState := E_PackMLState.STOPPING;
|
|
END_IF
|
|
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
E_PackMLState.ABORTED:
|
|
IF eCmd = E_PackMLCmd.CLEAR THEN
|
|
_eState := E_PackMLState.CLEARING;
|
|
END_IF
|
|
|
|
E_PackMLState.CLEARING:
|
|
IF eCmd = E_PackMLCmd.ABORT THEN
|
|
_eState := E_PackMLState.ABORTING;
|
|
END_IF
|
|
|
|
ELSE
|
|
;
|
|
END_CASE
|
|
|
|
// Copy internal state value to fb output
|
|
eState := _eState;
|
|
eCurrentMode := _eMode;]]></ST>
|
|
</Implementation>
|
|
<Method Name="M_StateComplete" Id="{e2f1bae5-5059-4baa-8ba2-8dfa58d439e5}">
|
|
<Declaration><![CDATA[METHOD M_StateComplete
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CASE _eState OF
|
|
E_PackMLState.STOPPING:
|
|
_eState := E_PackMLState.STOPPED;
|
|
|
|
E_PackMLState.RESETTING:
|
|
_eState := E_PackMLState.IDLE;
|
|
|
|
E_PackMLState.STARTING:
|
|
_eState := E_PackMLState.EXECUTE;
|
|
|
|
E_PackMLState.EXECUTE:
|
|
_eState := E_PackMLState.COMPLETING;
|
|
|
|
E_PackMLState.SUSPENDING:
|
|
_eState := E_PackMLState.SUSPENDED;
|
|
|
|
E_PackMLState.UNSUSPENDING:
|
|
_eState := E_PackMLState.EXECUTE;
|
|
|
|
E_PackMLState.HOLDING:
|
|
_eState := E_PackMLState.HELD;
|
|
|
|
E_PackMLState.UNHOLDING:
|
|
_eState := E_PackMLState.EXECUTE;
|
|
|
|
E_PackMLState.COMPLETING:
|
|
_eState := E_PackMLState.COMPLETE;
|
|
|
|
E_PackMLState.ABORTING:
|
|
_eState := E_PackMLState.ABORTED;
|
|
|
|
E_PackMLState.CLEARING:
|
|
_eState := E_PackMLState.STOPPED;
|
|
END_CASE
|
|
|
|
eState := _eState;]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
</POU>
|
|
</TcPlcObject> |