Last changes before SAT

This commit is contained in:
Matthias Heisig
2025-10-14 16:19:19 +02:00
parent eaaa2371e8
commit 2d65d0b3db
28 changed files with 630 additions and 352 deletions

View File

@@ -226,6 +226,10 @@ VAR
// Pumps ready
_xPumpsReady : BOOL;
_xSemiAutoEnabled : BOOL;
_xEnableInternal : BOOL;
// Indicate if it ise the first cycle
xFirstCycle : BOOL := TRUE;
END_VAR
@@ -263,6 +267,8 @@ END_VAR
xFirstCycle := FALSE;
END_IF
_xEnableInternal := xEnable OR _xSemiAutoEnabled;
// Manual mode trigger
_tonManualMode(IN := (xAllToManualMode AND xReleaseManualMode), PT := T#10S);
@@ -283,6 +289,33 @@ IF _rtrigSwitchToAutoMode.Q THEN
_fbNegolytPumpInlet.ReqAutomaticMode();
END_IF
// Check semi auto mode buttons
IF stHMIInterface.stButtonSemiAutoEnable.xRequest AND (eStringOperatingMode = E_STRING_OPERATING_MODE.SEMI_AUTO) THEN
stHMIInterface.stButtonSemiAutoEnable.xRequest := FALSE;
_xSemiAutoEnabled := TRUE;
END_IF
IF stHMIInterface.stButtonSemiAutoDisable.xRequest THEN
stHMIInterface.stButtonSemiAutoDisable.xRequest := FALSE;
_xSemiAutoEnabled := FALSE;
END_IF
IF (eStringOperatingMode <> E_STRING_OPERATING_MODE.SEMI_AUTO) AND _xSemiAutoEnabled THEN
_xSemiAutoEnabled := FALSE;
END_IF
stHMIInterface.stButtonSemiAutoEnable.xRelease := (eStringOperatingMode = E_STRING_OPERATING_MODE.SEMI_AUTO) AND (NOT _xSemiAutoEnabled);
stHMIInterface.stButtonSemiAutoDisable.xRelease := (eStringOperatingMode = E_STRING_OPERATING_MODE.SEMI_AUTO) AND _xSemiAutoEnabled;
IF _xSemiAutoEnabled THEN
stHMIInterface.stButtonSemiAutoEnable.eFeedback := E_HMI_BUTTON_FEEDBACK.ACTIVE;
stHMIInterface.stButtonSemiAutoDisable.eFeedback := E_HMI_BUTTON_FEEDBACK.NONE;
ELSE
stHMIInterface.stButtonSemiAutoEnable.eFeedback := E_HMI_BUTTON_FEEDBACK.NONE;
stHMIInterface.stButtonSemiAutoDisable.eFeedback := E_HMI_BUTTON_FEEDBACK.ACTIVE;
END_IF
// Reset MCB logic
_tofResetMCB(IN := xConfirmAlarms);
xResetMCB := _tofResetMCB.Q;
@@ -945,7 +978,7 @@ _fbNegolytPumpInlet.Name := CONCAT(_sName, ' - Negolyt segment inlet');]]></ST>
CASE _iState OF
0: // Off
// Start in enable
IF xEnable AND (NOT xStartBalancing) AND _xAllComponentsInAutomatic AND (NOT _xErrorActive) THEN
IF _xEnableInternal AND (NOT xStartBalancing) AND _xAllComponentsInAutomatic AND (NOT _xErrorActive) THEN
_xReleaseManualMode := FALSE;
_timUnitStartupWaitTime := GVL_CONFIG.timUnitStartupTime;
_iState := 10;
@@ -954,7 +987,7 @@ CASE _iState OF
END_IF
// Start in balancing mode
IF (NOT xEnable) AND xStartBalancing AND _xAllComponentsInAutomatic AND (NOT _xErrorActive) THEN
IF (NOT _xEnableInternal) AND xStartBalancing AND _xAllComponentsInAutomatic AND (NOT _xErrorActive) THEN
_xReleaseManualMode := FALSE;
xBalancingDone := FALSE;
_timUnitStartupWaitTime := GVL_CONFIG.timUnitBalancingStartupTime;
@@ -987,7 +1020,7 @@ CASE _iState OF
END_IF
// If enable signal is lost
IF ((NOT xEnable) AND (NOT xStartBalancing)) THEN
IF ((NOT _xEnableInternal) AND (NOT xStartBalancing)) THEN
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
_iState := 40;
END_IF
@@ -998,7 +1031,7 @@ CASE _iState OF
_iState := 1000;
END_IF
IF (NOT xEnable) AND NOT xStartBalancing THEN
IF (NOT _xEnableInternal) AND NOT xStartBalancing THEN
_iState := 51;
END_IF
@@ -1006,18 +1039,18 @@ CASE _iState OF
_tonStartupCheck(In := TRUE, PT := _timUnitStartupWaitTime);
// After some time, check if all values are ok
IF _tonStartupCheck.Q THEN
IF _tonStartupCheck.Q THEN // OR ((_fbVoltageSegment.rScaledValue > 70.0) AND (NOT xStartBalancing))
_tonStartupCheck(In := FALSE);
IF xEnable AND (NOT xStartBalancing) THEN
IF _xEnableInternal AND (NOT xStartBalancing) THEN
_iState := 31;
ELSIF (NOT xEnable) AND xStartBalancing THEN
ELSIF (NOT _xEnableInternal) AND xStartBalancing THEN
xReady := TRUE;
_iState := 69;
END_IF
END_IF
// If enable signal is lost, goto shutdown
IF (NOT xEnable) AND (NOT xStartBalancing) THEN
IF (NOT _xEnableInternal) AND (NOT xStartBalancing) THEN
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
_iState := 40;
END_IF
@@ -1065,7 +1098,7 @@ CASE _iState OF
END_IF
// Continue on normal startup path
IF xEnable THEN
IF _xEnableInternal THEN
stHMIInterface.eStatus := E_COMPONENT_STATUS.ON;
_iState := 35;
END_IF
@@ -1080,7 +1113,7 @@ CASE _iState OF
END_IF
// If enable signal is lost, goto shutdown
IF (NOT xEnable) THEN
IF (NOT _xEnableInternal) THEN
_iState := 40;
END_IF
@@ -1088,7 +1121,7 @@ CASE _iState OF
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytOnPower;
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytOnPower;
IF (NOT xEnable) THEN
IF (NOT _xEnableInternal) THEN
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
_iState := 40;
END_IF
@@ -1099,10 +1132,13 @@ CASE _iState OF
END_IF
40: // Close all valves
_fbNegolytValveTankOutlet.ReqAutomaticClose();
_fbPosolytValveTankOutlet.ReqAutomaticClose();
xReady := FALSE;
_iState := 45;
IF (NOT _fbNegolytValveTankOutlet.xError) AND (NOT _fbPosolytValveTankOutlet.xError) THEN
_fbNegolytValveTankOutlet.ReqAutomaticClose();
_fbPosolytValveTankOutlet.ReqAutomaticClose();
_iState := 45;
END_IF
45: // Wait for valves to be closed
IF _fbNegolytValveTankOutlet.IsClosed AND _fbPosolytValveTankOutlet.IsClosed THEN
@@ -1123,7 +1159,7 @@ CASE _iState OF
END_IF
// Check for restart condition
IF xEnable AND (NOT _xErrorActive) THEN
IF _xEnableInternal AND (NOT _xErrorActive) THEN
_iState := 0;
END_IF
@@ -1140,7 +1176,7 @@ CASE _iState OF
END_IF
// Check for restart condition
IF (xEnable OR xStartBalancing) AND (NOT _xErrorActive) THEN
IF (_xEnableInternal OR xStartBalancing) AND (NOT _xErrorActive) THEN
xShutdownDischargeAllowed := FALSE;
xInShutdownDischargeMode := FALSE;
_iState := 0;
@@ -1161,7 +1197,7 @@ CASE _iState OF
END_IF
// Check for restart condition
IF xEnable AND (NOT _xErrorActive) THEN
IF _xEnableInternal AND (NOT _xErrorActive) THEN
xShutdownDischargeAllowed := FALSE;
xInShutdownDischargeMode := FALSE;
_iState := 0;
@@ -1194,7 +1230,7 @@ CASE _iState OF
END_IF
// Check for restart condition
IF xEnable AND (NOT _xErrorActive) THEN
IF _xEnableInternal AND (NOT _xErrorActive) THEN
stHMIInterface.eStatus := E_COMPONENT_STATUS.OFF;
_iState := 0;
END_IF
@@ -1277,11 +1313,11 @@ CASE _iState OF
END_IF
// Check for restart condition
IF (NOT xEnable) AND xError THEN
IF (NOT _xEnableInternal) AND xError THEN
xError := FALSE;
END_IF
IF (NOT xError) AND (xEnable OR xStartBalancing) THEN
IF (NOT xError) AND (_xEnableInternal OR xStartBalancing) THEN
_iState := 0;
END_IF
@@ -1306,7 +1342,7 @@ CASE _iState OF
1001: // Alarm active
// Only allow reset when enable is deactivated to avoid an
// automatic restart of the unit
IF (NOT _xErrorActive) AND (NOT xEnable) AND (NOT xStartBalancing) AND _xPumpsReady AND xConfirmAlarms THEN
IF (NOT _xErrorActive) AND (NOT _xEnableInternal) AND (NOT xStartBalancing) AND _xPumpsReady AND xConfirmAlarms THEN
xError := FALSE;
IF (_fbVoltageSegment.rScaledValue >= GVL_CONFIG.rPumpshutoffThreshold) THEN
_iState := 1002;