From 0644a7013fb1e1fc009f7f46c6d3e1d7f1cebb01 Mon Sep 17 00:00:00 2001 From: Kristina Jurisic Date: Thu, 27 May 2021 10:30:24 +0200 Subject: [PATCH] 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 --- .../Applications/FB_PNEUMATIC_AXIS.TcPOU | 75 ++++++++++++++++--- 1 file changed, 65 insertions(+), 10 deletions(-) diff --git a/solution/tc_project_app/POUs/Application Specific/Applications/FB_PNEUMATIC_AXIS.TcPOU b/solution/tc_project_app/POUs/Application Specific/Applications/FB_PNEUMATIC_AXIS.TcPOU index 59bed67..4330621 100644 --- a/solution/tc_project_app/POUs/Application Specific/Applications/FB_PNEUMATIC_AXIS.TcPOU +++ b/solution/tc_project_app/POUs/Application Specific/Applications/FB_PNEUMATIC_AXIS.TcPOU @@ -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 ]]> 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 ]]> - + @@ -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 - - - + + + + + + + + + + + + + @@ -209,13 +250,19 @@ IF (stPneumaticAxisStruct.stPneumaticAxisControl.bStartExtend AND stPneumaticAxi + - + + + + - + + + @@ -229,8 +276,13 @@ IF (stPneumaticAxisStruct.stPneumaticAxisControl.bStartExtend AND stPneumaticAxi - - + + + + + + + @@ -239,8 +291,11 @@ IF (stPneumaticAxisStruct.stPneumaticAxisControl.bStartExtend AND stPneumaticAxi + - + + +