Changed from ISA88 to PackML
- 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
This commit is contained in:
244
PLC/LibraryCandidates/PackML/FB_PackMLStateMachine.TcPOU
Normal file
244
PLC/LibraryCandidates/PackML/FB_PackMLStateMachine.TcPOU
Normal file
@@ -0,0 +1,244 @@
|
||||
<?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>
|
||||
Reference in New Issue
Block a user