Add ERROR state machine

Added state machine for different errors that can occur during pneumatic
cylinder work:
the cylinder didn't reach the position in allowed time
cylinder didn't move after the move command
no permit to move
This commit is contained in:
Kristina Jurisic
2021-05-27 10:30:24 +02:00
parent 84cf7da942
commit 0644a7013f

View File

@@ -6,6 +6,7 @@ VAR
stPneumaticAxisStruct: ST_PneumaticAxisStruct;
ePneumaticAxisState: E_PneumaticMode;
ePneumaticAxisErrors: E_PneumaticAxisErrors;
fbTimerExtend: TON; //Timing the extraction of the cylinder
fbTimerRetract: TON; //Timing the retraction of the cylinder
fbTimerExtendManual: TON; //Timing the extraction of the cylinder
@@ -42,7 +43,6 @@ END_CASE ]]></ST>
stPneumaticAxisStruct.stPneumaticAxisStatus.bExtendMoving := FALSE;
stPneumaticAxisStruct.stPneumaticAxisStatus.bRetractMoving := FALSE;
fbTimerExtend.IN := FALSE;
fbTimerExtend.Q := FALSE;
fbTimerRetract.IN := FALSE;
fbTimerExtendManual.IN := FALSE;
fbTimerRetractManual.IN := FALSE;
@@ -51,7 +51,29 @@ END_CASE ]]></ST>
</Action>
<Action Name="Single_Solenoid_Error" Id="{f8e38dc6-971b-478e-a924-9eec8537d2f1}">
<Implementation>
<ST><![CDATA[stPneumaticAxisStruct.stPneumaticAxisStatus.sStatus := 'ERROR: COMMAND TIMED OUT';]]></ST>
<ST><![CDATA[CASE ePneumaticAxisErrors OF
E_PneumaticAxisErrors.NO_ERROR:
stPneumaticAxisStruct.stPneumaticAxisStatus.bErrorStatus := FALSE;
E_PneumaticAxisErrors.EXTRACT_TIMED_OUT:
stPneumaticAxisStruct.stPneumaticAxisStatus.sStatus := 'ERROR: COMMAND TIMED OUT';
stPneumaticAxisStruct.stPneumaticAxisStatus.bErrorStatus := TRUE;
E_PneumaticAxisErrors.RETRACT_TIMED_OUT:
stPneumaticAxisStruct.stPneumaticAxisStatus.sStatus := 'ERROR: COMMAND TIMED OUT';
stPneumaticAxisStruct.stPneumaticAxisStatus.bErrorStatus := TRUE;
E_PneumaticAxisErrors.NOT_MOVING_EXTRACT:
stPneumaticAxisStruct.stPneumaticAxisStatus.sStatus := 'ERROR: CYLINDER NOT MOVING';
stPneumaticAxisStruct.stPneumaticAxisStatus.bErrorStatus := TRUE;
E_PneumaticAxisErrors.NOT_MOVING_RETRACT:
stPneumaticAxisStruct.stPneumaticAxisStatus.sStatus := 'ERROR: CYLINDER NOT MOVING';
stPneumaticAxisStruct.stPneumaticAxisStatus.bErrorStatus := TRUE;
END_CASE
]]></ST>
</Implementation>
</Action>
<Action Name="Single_Solenoid_Manual" Id="{e31de170-18f1-4f95-8712-ce861e79ff7b}">
@@ -70,9 +92,11 @@ fbTimerRetractManual.PT := INT_TO_TIME(nTimeToRetract * 1000);
IF fbTimerStartMoving.Q AND stPneumaticAxisStruct.stPneumaticAxisInputs.bLimitBwd THEN
ePneumaticAxisState := E_PneumaticMode.ERROR;
ePneumaticAxisErrors := E_PneumaticAxisErrors.NOT_MOVING_EXTRACT;
END_IF
IF fbTimerExtendManual.Q THEN
ePneumaticAxisState := E_PneumaticMode.ERROR;
ePneumaticAxisErrors := E_PneumaticAxisErrors.EXTRACT_TIMED_OUT;
END_IF
END_IF
@@ -94,9 +118,11 @@ fbTimerRetractManual.PT := INT_TO_TIME(nTimeToRetract * 1000);
IF fbTimerStartMoving.Q AND stPneumaticAxisStruct.stPneumaticAxisInputs.bLimitFwd THEN
ePneumaticAxisState := E_PneumaticMode.ERROR;
ePneumaticAxisErrors := E_PneumaticAxisErrors.NOT_MOVING_RETRACT;
END_IF
IF fbTimerRetractManual.Q THEN
ePneumaticAxisState := E_PneumaticMode.ERROR;
ePneumaticAxisErrors := E_PneumaticAxisErrors.RETRACT_TIMED_OUT;
END_IF
END_IF
@@ -128,9 +154,12 @@ IF (stPneumaticAxisStruct.stPneumaticAxisControl.bStartExtend AND stPneumaticAxi
IF fbTimerStartMoving.Q AND stPneumaticAxisStruct.stPneumaticAxisInputs.bLimitBwd THEN
ePneumaticAxisState := E_PneumaticMode.ERROR;
ePneumaticAxisErrors := E_PneumaticAxisErrors.NOT_MOVING_EXTRACT;
END_IF
IF fbTimerExtend.Q THEN
ePneumaticAxisState := E_PneumaticMode.ERROR;
ePneumaticAxisErrors := E_PneumaticAxisErrors.EXTRACT_TIMED_OUT;
END_IF
END_IF
@@ -153,9 +182,11 @@ IF (stPneumaticAxisStruct.stPneumaticAxisControl.bStartExtend AND stPneumaticAxi
IF fbTimerStartMoving.Q AND stPneumaticAxisStruct.stPneumaticAxisInputs.bLimitFwd THEN
ePneumaticAxisState := E_PneumaticMode.ERROR;
ePneumaticAxisErrors := E_PneumaticAxisErrors.NOT_MOVING_RETRACT;
END_IF
IF fbTimerRetract.Q THEN
ePneumaticAxisState := E_PneumaticMode.ERROR;
ePneumaticAxisErrors := E_PneumaticAxisErrors.RETRACT_TIMED_OUT;
END_IF
END_IF
@@ -191,13 +222,23 @@ IF (stPneumaticAxisStruct.stPneumaticAxisControl.bStartExtend AND stPneumaticAxi
<LineId Id="2" Count="1" />
<LineId Id="9" Count="0" />
<LineId Id="8" Count="0" />
<LineId Id="4" Count="0" />
<LineId Id="10" Count="0" />
<LineId Id="5" Count="1" />
<LineId Id="4" Count="2" />
<LineId Id="1" Count="0" />
<LineId Id="7" Count="0" />
</LineIds>
<LineIds Name="FB_PNEUMATIC_AXIS.Single_Solenoid_Error">
<LineId Id="2" Count="0" />
<LineId Id="13" Count="1" />
<LineId Id="16" Count="0" />
<LineId Id="15" Count="0" />
<LineId Id="3" Count="0" />
<LineId Id="5" Count="3" />
<LineId Id="11" Count="1" />
<LineId Id="17" Count="4" />
<LineId Id="23" Count="1" />
<LineId Id="22" Count="0" />
<LineId Id="10" Count="0" />
<LineId Id="4" Count="0" />
<LineId Id="1" Count="0" />
</LineIds>
<LineIds Name="FB_PNEUMATIC_AXIS.Single_Solenoid_Manual">
@@ -209,13 +250,19 @@ IF (stPneumaticAxisStruct.stPneumaticAxisControl.bStartExtend AND stPneumaticAxi
<LineId Id="3" Count="3" />
<LineId Id="45" Count="2" />
<LineId Id="44" Count="0" />
<LineId Id="56" Count="0" />
<LineId Id="48" Count="0" />
<LineId Id="7" Count="10" />
<LineId Id="7" Count="1" />
<LineId Id="57" Count="0" />
<LineId Id="9" Count="8" />
<LineId Id="49" Count="0" />
<LineId Id="18" Count="6" />
<LineId Id="51" Count="3" />
<LineId Id="58" Count="0" />
<LineId Id="50" Count="0" />
<LineId Id="25" Count="11" />
<LineId Id="25" Count="1" />
<LineId Id="59" Count="0" />
<LineId Id="27" Count="9" />
<LineId Id="55" Count="0" />
<LineId Id="37" Count="0" />
<LineId Id="1" Count="0" />
@@ -229,8 +276,13 @@ IF (stPneumaticAxisStruct.stPneumaticAxisControl.bStartExtend AND stPneumaticAxi
<LineId Id="5" Count="0" />
<LineId Id="49" Count="0" />
<LineId Id="53" Count="0" />
<LineId Id="50" Count="2" />
<LineId Id="6" Count="2" />
<LineId Id="50" Count="1" />
<LineId Id="63" Count="0" />
<LineId Id="62" Count="0" />
<LineId Id="52" Count="0" />
<LineId Id="6" Count="1" />
<LineId Id="61" Count="0" />
<LineId Id="8" Count="0" />
<LineId Id="1" Count="0" />
<LineId Id="11" Count="0" />
<LineId Id="13" Count="5" />
@@ -239,8 +291,11 @@ IF (stPneumaticAxisStruct.stPneumaticAxisControl.bStartExtend AND stPneumaticAxi
<LineId Id="21" Count="4" />
<LineId Id="27" Count="1" />
<LineId Id="56" Count="3" />
<LineId Id="64" Count="0" />
<LineId Id="55" Count="0" />
<LineId Id="29" Count="10" />
<LineId Id="29" Count="1" />
<LineId Id="65" Count="0" />
<LineId Id="31" Count="8" />
<LineId Id="41" Count="0" />
<LineId Id="60" Count="0" />
<LineId Id="12" Count="0" />