changes during start of safety check
- Refactoring of string fb - Added pump safety interlocks for pressure segment inlet too low and too high
This commit is contained in:
@@ -140,13 +140,13 @@ VAR
|
||||
_stPosolytPumpInletPIntlk : T_INTERLOCK;
|
||||
_stPosolytPumpInletPIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0001;
|
||||
_stPosolytPumpInletSIntlk : T_INTERLOCK;
|
||||
_stPosolytPumpInletSIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0001;
|
||||
_stPosolytPumpInletSIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0111;
|
||||
|
||||
// Pump negolyt inlet interlocks
|
||||
_stNegolytPumpInletPIntlk : T_INTERLOCK;
|
||||
_stNegolytPumpInletPIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0001;
|
||||
_stNegolytPumpInletSIntlk : T_INTERLOCK;
|
||||
_stNegolytPumpInletSIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0001;
|
||||
_stNegolytPumpInletSIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0111;
|
||||
|
||||
// Error active
|
||||
_xErrorActive : BOOL;
|
||||
@@ -372,6 +372,10 @@ END_IF
|
||||
// Safety Interlocks
|
||||
stHMIInterface.stNS11.stInterlock.asSafetyINTLKName[0] := 'Emergency stop ok';
|
||||
_stPosolytPumpInletSIntlk.0 := xEmergencyStopOk;
|
||||
stHMIInterface.stNS11.stInterlock.asSafetyINTLKName[1] := 'Segment inlet pressure to high';
|
||||
_stPosolytPumpInletSIntlk.1 := NOT _fbPressurePosolytSegmentInlet.xErrorHigh;
|
||||
stHMIInterface.stNS11.stInterlock.asSafetyINTLKName[2] := 'Segment inlet pressure to low';
|
||||
_stPosolytPumpInletSIntlk.2 := NOT _fbPressurePosolytSegmentInlet.xErrorLow;
|
||||
|
||||
// Process interlocks
|
||||
stHMIInterface.stNS21.stInterlock.asProcessINTLKName[0] := 'Negolyt Pump Error';
|
||||
@@ -417,6 +421,10 @@ END_IF
|
||||
// Safety Interlocks
|
||||
stHMIInterface.stNS21.stInterlock.asSafetyINTLKName[0] := 'Emergency stop ok';
|
||||
_stNegolytPumpInletSIntlk.0 := xEmergencyStopOk;
|
||||
stHMIInterface.stNS11.stInterlock.asSafetyINTLKName[1] := 'Segment inlet pressure to high';
|
||||
_stNegolytPumpInletSIntlk.1 := NOT _fbPressureNegolytSegmentInlet.xErrorHigh;
|
||||
stHMIInterface.stNS11.stInterlock.asSafetyINTLKName[2] := 'Segment inlet pressure to low';
|
||||
_stNegolytPumpInletSIntlk.2 := NOT _fbPressureNegolytSegmentInlet.xErrorLow;
|
||||
|
||||
// Process interlocks
|
||||
stHMIInterface.stNS11.stInterlock.asProcessINTLKName[0] := 'Posolyt Pump Error';
|
||||
@@ -464,7 +472,7 @@ _fbPressurePosolytSegmentInlet(
|
||||
stEWConfig:= stUnitConfig.stEWLPosolytPressureSegmentInlet,
|
||||
stEWDelayConfig:= stUnitConfig.stEWDPosolytPressureSegmentInlet,
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseLimitErrors:= xReleaseLimitErrors AND _fbPosolytPumpInlet.IsRunning AND _fbPosolytPumpInlet.xInTarget AND (NOT xStartBalancing) AND (_fbPosolytPumpInlet.rSPautomatic > 40),
|
||||
xReleaseLimitErrors:= xReleaseLimitErrors AND _fbPosolytPumpInlet.IsRunning AND _fbPosolytPumpInlet.xInTarget AND (NOT xStartBalancing), // AND (_fbPosolytPumpInlet.rSPautomatic > 40),
|
||||
xReleaseHardwareErrors:= xReleaseErrors,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface => stHMIInterface.stP11);
|
||||
@@ -512,7 +520,7 @@ _fbPressureNegolytSegmentInlet(
|
||||
stEWConfig:= stUnitConfig.stEWLNegolytPressureSegmentInlet,
|
||||
stEWDelayConfig:= stUnitConfig.stEWDNegolytPressureSegmentInlet,
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseLimitErrors:= xReleaseLimitErrors AND _fbNegolytPumpInlet.IsRunning AND _fbNegolytPumpInlet.xInTarget AND (NOT xStartBalancing) AND (_fbNegolytPumpInlet.rSPautomatic > 40),
|
||||
xReleaseLimitErrors:= xReleaseLimitErrors AND _fbNegolytPumpInlet.IsRunning AND _fbNegolytPumpInlet.xInTarget AND (NOT xStartBalancing),// AND (_fbNegolytPumpInlet.rSPautomatic > 40),
|
||||
xReleaseHardwareErrors:= xReleaseErrors,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface => stHMIInterface.stP21);
|
||||
@@ -923,7 +931,9 @@ END_VAR
|
||||
<ST><![CDATA[_sName := Name;
|
||||
|
||||
// Create alarm message
|
||||
_fbNotAllAutomaticAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
|
||||
_fbNotAllAutomaticAlarm.ipArguments.Clear().AddString(_sName);
|
||||
_fbPosolytPumpInlet.Name :=CONCAT(_sName, ' - Posolyt segment inlet');
|
||||
_fbNegolytPumpInlet.Name := CONCAT(_sName, ' - Negolyt segment inlet');]]></ST>
|
||||
</Implementation>
|
||||
</Set>
|
||||
</Property>
|
||||
@@ -954,16 +964,23 @@ CASE _iState OF
|
||||
_iState := 1000;
|
||||
END_IF
|
||||
|
||||
10: // Open all valves
|
||||
10: // Open all valves and start pumps
|
||||
_fbPosolytValveTankOutlet.ReqAutomaticOpen();
|
||||
_fbNegolytValveTankOutlet.ReqAutomaticOpen();
|
||||
|
||||
_fbPosolytPumpInlet.ReqAutomaticStart();
|
||||
_fbNegolytPumpInlet.ReqAutomaticStart();
|
||||
_xEnableCheckForDeltaPSegmentInlet := TRUE;
|
||||
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytOnPower;
|
||||
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytOnPower;
|
||||
|
||||
xOff := FALSE;
|
||||
_iState := 15;
|
||||
|
||||
15: // Wait for all valves to be open
|
||||
IF _fbPosolytValveTankOutlet.IsOpen AND _fbNegolytValveTankOutlet.IsOpen THEN
|
||||
IF (NOT _fbPosolytValveTankOutlet.xError) AND (NOT _fbNegolytValveTankOutlet.xError) THEN
|
||||
_iState := 20;
|
||||
15: // Wait for all valves to be open and all pumps to be running
|
||||
IF _fbPosolytValveTankOutlet.IsOpen AND _fbNegolytValveTankOutlet.IsOpen AND _fbPosolytPumpInlet.xInTarget AND _fbNegolytPumpInlet.xInTarget THEN
|
||||
IF (NOT _fbPosolytValveTankOutlet.xError) AND (NOT _fbNegolytValveTankOutlet.xError) AND (NOT _fbPosolytPumpInlet.xError) AND (NOT _fbNegolytPumpInlet.xError) THEN
|
||||
_iState := 30;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
@@ -983,30 +1000,6 @@ CASE _iState OF
|
||||
_iState := 51;
|
||||
END_IF
|
||||
|
||||
20: // Start pumps
|
||||
_fbPosolytPumpInlet.ReqAutomaticStart();
|
||||
_fbNegolytPumpInlet.ReqAutomaticStart();
|
||||
_xEnableCheckForDeltaPSegmentInlet := TRUE;
|
||||
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytOnPower;
|
||||
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytOnPower;
|
||||
|
||||
_iState := 25;
|
||||
|
||||
25: // Wait for all pumps to run
|
||||
IF _fbPosolytPumpInlet.xInTarget AND _fbNegolytPumpInlet.xInTarget THEN
|
||||
_iState := 30;
|
||||
END_IF
|
||||
|
||||
// If enable signal is lost, goto shutdown
|
||||
IF ((NOT xEnable) AND (NOT xStartBalancing)) THEN
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||
_iState := 40; // 40
|
||||
END_IF
|
||||
|
||||
IF _xErrorActive THEN
|
||||
_iState := 900;
|
||||
END_IF
|
||||
|
||||
30: // Wait some time
|
||||
_tonStartupCheck(In := TRUE, PT := _timUnitStartupWaitTime);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user