Minor bugfixes and future addons
This commit is contained in:
@@ -10,7 +10,7 @@ VAR_INPUT
|
||||
stHMIInterface : REFERENCE TO ST_UNIT_HMI_INTERFACE;
|
||||
|
||||
// Components shortage workaround
|
||||
xVoltageSensorIs1500V : BOOL;
|
||||
// xVoltageSensorIs1500V : BOOL;
|
||||
|
||||
// Start unit
|
||||
xEnable : BOOL;
|
||||
@@ -50,7 +50,7 @@ VAR_INPUT
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
// Unit state
|
||||
eUnitState : E_COMPONENT_STATUS := E_COMPONENT_STATUS.OFF;
|
||||
//eUnitState : E_COMPONENT_STATUS := E_COMPONENT_STATUS.OFF;
|
||||
|
||||
// Unit ready
|
||||
xReady : BOOL;
|
||||
@@ -70,9 +70,6 @@ VAR_OUTPUT
|
||||
// Warning active
|
||||
xWarning : BOOL;
|
||||
|
||||
// Warning confirmation still pending
|
||||
_xWarningConfirmPending : BOOL;
|
||||
|
||||
// Current Unit voltage
|
||||
rCurrentVoltage : REAL;
|
||||
|
||||
@@ -219,6 +216,9 @@ VAR
|
||||
// Filtered pressure sensor posolyt tank inlet data for HMI
|
||||
_rFilteredPressNegolytTank : REAL;
|
||||
|
||||
// Pumps ready
|
||||
_xPumpsReady : BOOL;
|
||||
|
||||
// Indicate if it ise the first cycle
|
||||
xFirstCycle : BOOL := TRUE;
|
||||
END_VAR
|
||||
@@ -442,6 +442,7 @@ IF NOT stHMIInterface.stNS21.stInterlock.xSafetyINTLKOk THEN
|
||||
xSafetyIntlksOk := FALSE;
|
||||
END_IF
|
||||
|
||||
_xPumpsReady := stHMIInterface.stNS21.stInterlock.xProcessINTLKOk AND stHMIInterface.stNS21.stInterlock.xSafetyINTLKOk AND stHMIInterface.stNS11.stInterlock.xProcessINTLKOk AND stHMIInterface.stNS11.stInterlock.xSafetyINTLKOk;
|
||||
|
||||
// ===============================
|
||||
// Pressure sensor posolyt segment inlet
|
||||
@@ -602,29 +603,16 @@ END_IF
|
||||
// ===============================
|
||||
// Voltage segment
|
||||
// ===============================
|
||||
IF xVoltageSensorIs1500V THEN
|
||||
_fbVoltageSegment(
|
||||
stScalingConfig:= GVL_CONFIG.stConfigVoltageSegment1500,
|
||||
stEWConfig:= GVL_CONFIG.stUnitConfig.stEWLVoltageSegment,
|
||||
stEWDelayConfig:= GVL_CONFIG.stUnitConfig.stEWDVoltageSegment,
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseLimitErrors:= xReleaseLimitErrors AND _xEnableVoltageLimitChecks,
|
||||
xReleaseHardwareErrors:= xReleaseErrors,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface=> stHMIInterface.stE31,
|
||||
rScaledValue => rCurrentVoltage);
|
||||
ELSE
|
||||
_fbVoltageSegment(
|
||||
stScalingConfig:= GVL_CONFIG.stUnitConfig.stConfigVoltageSegment,
|
||||
stEWConfig:= GVL_CONFIG.stUnitConfig.stEWLVoltageSegment,
|
||||
stEWDelayConfig:= GVL_CONFIG.stUnitConfig.stEWDVoltageSegment,
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseLimitErrors:= xReleaseLimitErrors AND _xEnableVoltageLimitChecks,
|
||||
xReleaseHardwareErrors:= xReleaseErrors,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface=> stHMIInterface.stE31,
|
||||
rScaledValue => rCurrentVoltage);
|
||||
END_IF
|
||||
_fbVoltageSegment(
|
||||
stScalingConfig:= GVL_CONFIG.stUnitConfig.stConfigVoltageSegment,
|
||||
stEWConfig:= GVL_CONFIG.stUnitConfig.stEWLVoltageSegment,
|
||||
stEWDelayConfig:= GVL_CONFIG.stUnitConfig.stEWDVoltageSegment,
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseLimitErrors:= xReleaseLimitErrors AND _xEnableVoltageLimitChecks,
|
||||
xReleaseHardwareErrors:= xReleaseErrors,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface=> stHMIInterface.stE31,
|
||||
rScaledValue => rCurrentVoltage);
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbVoltageSegment.xError THEN
|
||||
@@ -637,6 +625,14 @@ IF _fbVoltageSegment.xWarning THEN
|
||||
END_IF
|
||||
|
||||
|
||||
// ===============================
|
||||
// Check for EStop
|
||||
// ===============================
|
||||
IF (NOT xEmergencyStopOk) THEN
|
||||
_xErrorActive := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
// ===============================
|
||||
// Write Voltage to HMI
|
||||
// ===============================
|
||||
@@ -696,6 +692,8 @@ _rShutdownDischargeVoltageThreshold := GVL_CONFIG.rMinimumUnitVoltage + GVL_CONF
|
||||
// ===============================
|
||||
// Run state machine for startup
|
||||
// and shutdown
|
||||
// NEEDS TO BE CALLED AFTER ALL COMPONENTS BECAUSE OF RESET AND ALARM ACKNOWLEDGEMENT!!!
|
||||
// (e.g. restart pumps after estop if segment voltage is still to high)
|
||||
// ===============================
|
||||
StateMachine();
|
||||
|
||||
@@ -783,7 +781,7 @@ CASE _iState OF
|
||||
_xReleaseManualMode := FALSE;
|
||||
_timUnitStartupWaitTime := GVL_CONFIG.timUnitStartupTime;
|
||||
_iState := 10;
|
||||
eUnitState := E_COMPONENT_STATUS.STARTING;
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.STARTING;
|
||||
END_IF
|
||||
|
||||
// Start in balancing mode
|
||||
@@ -793,6 +791,10 @@ CASE _iState OF
|
||||
_timUnitStartupWaitTime := GVL_CONFIG.timUnitBalancingStartupTime;
|
||||
_iState := 10;
|
||||
END_IF
|
||||
|
||||
IF _xErrorActive THEN
|
||||
_iState := 1000;
|
||||
END_IF
|
||||
|
||||
10: // Open all valves
|
||||
_fbPosolytValveTankOutlet.ReqAutomaticOpen();
|
||||
@@ -809,7 +811,7 @@ CASE _iState OF
|
||||
|
||||
// If enable signal is lost
|
||||
IF ((NOT xEnable) AND (NOT xStartBalancing)) THEN
|
||||
eUnitState := E_COMPONENT_STATUS.SHUTDOWN;
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||
_iState := 40;
|
||||
END_IF
|
||||
|
||||
@@ -818,6 +820,10 @@ CASE _iState OF
|
||||
_xReleaseManualMode := TRUE;
|
||||
_iState := 1000;
|
||||
END_IF
|
||||
|
||||
IF (NOT xEnable) THEN
|
||||
_iState := 51;
|
||||
END_IF
|
||||
|
||||
20: // Start pumps
|
||||
_fbPosolytPumpInlet.ReqAutomaticStart();
|
||||
@@ -835,7 +841,7 @@ CASE _iState OF
|
||||
|
||||
// If enable signal is lost, goto shutdown
|
||||
IF ((NOT xEnable) AND (NOT xStartBalancing)) THEN
|
||||
eUnitState := E_COMPONENT_STATUS.SHUTDOWN;
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||
_iState := 40; // 40
|
||||
END_IF
|
||||
|
||||
@@ -859,7 +865,7 @@ CASE _iState OF
|
||||
|
||||
// If enable signal is lost, goto shutdown
|
||||
IF (NOT xEnable) AND (NOT xStartBalancing) THEN
|
||||
eUnitState := E_COMPONENT_STATUS.SHUTDOWN;
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||
_iState := 40;
|
||||
END_IF
|
||||
|
||||
@@ -882,7 +888,7 @@ CASE _iState OF
|
||||
|
||||
// Continue on normal startup path
|
||||
IF xEnable THEN
|
||||
eUnitState := E_COMPONENT_STATUS.ON;
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.ON;
|
||||
_iState := 35;
|
||||
END_IF
|
||||
|
||||
@@ -904,7 +910,7 @@ CASE _iState OF
|
||||
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytOnPower;
|
||||
|
||||
IF (NOT xEnable) THEN
|
||||
eUnitState := E_COMPONENT_STATUS.SHUTDOWN;
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||
_iState := 40;
|
||||
END_IF
|
||||
|
||||
@@ -961,6 +967,10 @@ CASE _iState OF
|
||||
_iState := 0;
|
||||
END_IF
|
||||
|
||||
IF _xErrorActive THEN
|
||||
_iState := 1000;
|
||||
END_IF
|
||||
|
||||
51: // Discharge without inverter
|
||||
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytDisChrgPower;
|
||||
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytDisChrgPower;
|
||||
@@ -978,6 +988,10 @@ CASE _iState OF
|
||||
_iState := 0;
|
||||
END_IF
|
||||
|
||||
IF _xErrorActive THEN
|
||||
_iState := 1000;
|
||||
END_IF
|
||||
|
||||
60: // Disable pumps
|
||||
_fbPosolytPumpInlet.ReqAutomaticStop();
|
||||
_fbNegolytPumpInlet.ReqAutomaticStop();
|
||||
@@ -988,14 +1002,14 @@ CASE _iState OF
|
||||
xOff := TRUE;
|
||||
_xReleaseManualMode := TRUE;
|
||||
IF NOT _xErrorActive THEN
|
||||
eUnitState := E_COMPONENT_STATUS.OFF;
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.OFF;
|
||||
_iState := 0;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
// Check for restart condition
|
||||
IF xEnable AND (NOT _xErrorActive) THEN
|
||||
eUnitState := E_COMPONENT_STATUS.OFF;
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.OFF;
|
||||
_iState := 0;
|
||||
END_IF
|
||||
|
||||
@@ -1059,6 +1073,9 @@ CASE _iState OF
|
||||
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytDisChrgPower;
|
||||
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytDisChrgPower;
|
||||
|
||||
_fbNegolytPumpInlet.ReqAutomaticStart();
|
||||
_fbPosolytPumpInlet.ReqAutomaticStart();
|
||||
|
||||
_xEnableVoltageLimitChecks := FALSE;
|
||||
xShutdownDischargeAllowed := FALSE;
|
||||
xInShutdownDischargeMode := FALSE;
|
||||
@@ -1082,9 +1099,12 @@ CASE _iState OF
|
||||
_iState := 0;
|
||||
END_IF
|
||||
|
||||
IF _xErrorActive THEN
|
||||
_iState := 1000;
|
||||
END_IF
|
||||
|
||||
1000: // Error shutdown
|
||||
eUnitState := E_COMPONENT_STATUS.ERROR;
|
||||
stHMIInterface.eStatus := E_COMPONENT_STATUS.ERROR;
|
||||
_fbNegolytValveTankOutlet.ReqAutomaticClose();
|
||||
_fbPosolytValveTankOutlet.ReqAutomaticClose();
|
||||
_fbPosolytPumpInlet.ReqAutomaticStop();
|
||||
@@ -1100,10 +1120,22 @@ 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 xConfirmAlarms THEN
|
||||
IF (NOT _xErrorActive) AND (NOT xEnable) AND (NOT xStartBalancing) AND _xPumpsReady AND xConfirmAlarms THEN
|
||||
xError := FALSE;
|
||||
_iState := 51;
|
||||
IF (_fbVoltageSegment.rScaledValue >= GVL_CONFIG.rPumpshutoffThreshold) THEN
|
||||
_iState := 1002;
|
||||
ELSE
|
||||
_iState := 0;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
1002:
|
||||
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytDisChrgPower;
|
||||
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytDisChrgPower;
|
||||
|
||||
_fbNegolytPumpInlet.ReqAutomaticStart();
|
||||
_fbPosolytPumpInlet.ReqAutomaticStart();
|
||||
_iState := 51;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Action>
|
||||
|
||||
Reference in New Issue
Block a user