stStatus.eStateCurrent, eCurrentMode => stStatus.eUnitModeCurrent, xError=> ); // Reset state state machine IF _eLastState <> stStatus.eStateCurrent THEN _iSSM := 0; _eLastState := stStatus.eStateCurrent; END_IF // Call state method according to current state CASE stStatus.eStateCurrent OF E_PackMLState.CLEARING: M_Clearing(); E_PackMLState.STOPPED: M_Stopped(); E_PackMLState.STARTING: M_Starting(); E_PackMLState.IDLE: M_Idle(); E_PackMLState.SUSPENDED: M_Suspended(); E_PackMLState.EXECUTE: M_Execute(); E_PackMLState.STOPPING: M_Stopping(); E_PackMLState.ABORTING: M_Aborting(); E_PackMLState.ABORTED: M_Aborted(); E_PackMLState.HOLDING: M_Holding(); E_PackMLState.HELD: M_Held(); E_PackMLState.UNHOLDING: M_Unholding(); E_PackMLState.SUSPENDING: M_Suspending(); E_PackMLState.UNSUSPENDING: M_Unsuspending(); E_PackMLState.RESETTING: M_Resetting(); E_PackMLState.COMPLETING: M_Completing(); E_PackMLState.COMPLETED: M_Complete(); ELSE ; END_CASE]]> E_PackMLState.ABORTED) AND (stStatus.eStateCurrent <> E_PackMLState.ABORTING) THEN _eCmd := E_PackMLCmd.ABORT; M_Abort := TRUE; ELSE M_Abort := FALSE; END_IF]]> E_PackMLState.ABORTED) AND (stStatus.eStateCurrent <> E_PackMLState.ABORTING) AND (stStatus.eStateCurrent <> E_PackMLState.CLEARING) AND (stStatus.eStateCurrent <> E_PackMLState.STOPPING) AND (stStatus.eStateCurrent <> E_PackMLState.STOPPED) THEN _eCmd := E_PackMLCmd.STOP; M_Stop := TRUE; ELSE M_Stop := FALSE; END_IF]]>