Finished first implementation of modbus error registers
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
|
||||
<POU Name="FB_Unit" Id="{e9bb815b-eb46-4920-800d-910484e58b22}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_Unit
|
||||
VAR_INPUT
|
||||
@@ -48,6 +48,13 @@ VAR_INPUT
|
||||
// Inverter enabled status
|
||||
xInverterEnabled : BOOL;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
// Modbus warning register
|
||||
stModbusWarnings : U_UNIT_WARNING_REGISTER;
|
||||
|
||||
// Modbus error register
|
||||
stModbusErrors : U_UNIT_ERROR_REGISTER;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
// Unit state
|
||||
//eUnitState : E_COMPONENT_STATUS := E_COMPONENT_STATUS.OFF;
|
||||
@@ -315,9 +322,11 @@ _fbPosolytValveTankOutlet(
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbPosolytValveTankOutlet.xError THEN
|
||||
stModbusErrors.stBitmap.bValvePos := 1;
|
||||
_xErrorActive := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
// Set safety interlock flag if fb has safety interlocks active
|
||||
IF NOT stHMIInterface.stNS12.stInterlock.xSafetyINTLKOk THEN
|
||||
xSafetyIntlksOk := FALSE;
|
||||
@@ -346,6 +355,7 @@ _fbNegolytValveTankOutlet(
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbNegolytValveTankOutlet.xError THEN
|
||||
stModbusErrors.stBitmap.bValveNeg := 1;
|
||||
_xErrorActive := TRUE;
|
||||
END_IF
|
||||
|
||||
@@ -385,6 +395,7 @@ _fbPosolytPumpInlet(
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbPosolytPumpInlet.xError THEN
|
||||
stModbusErrors.stBitmap.bPumpPos := 1;
|
||||
_xErrorActive := TRUE;
|
||||
END_IF
|
||||
|
||||
@@ -429,6 +440,7 @@ _fbNegolytPumpInlet(
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbNegolytPumpInlet.xError THEN
|
||||
stModbusErrors.stBitmap.bPumpNeg := 1;
|
||||
_xErrorActive := TRUE;
|
||||
END_IF
|
||||
|
||||
@@ -460,7 +472,27 @@ _fbPressurePosolytSegmentInlet(
|
||||
// Filter pressure sensor data for HMI
|
||||
_rFilteredPressPosolytInlet := _rFilteredPressPosolytInlet * 0.9 + stHMIInterface.stP11.rValue * 0.1;
|
||||
stHMIInterface.stP11.rValue := _rFilteredPressPosolytInlet;
|
||||
|
||||
|
||||
// Set modbus error register bits
|
||||
IF _fbPressurePosolytSegmentInlet.xErrorLow THEN
|
||||
stModbusErrors.stBitmap.bPInPosLow := 1;
|
||||
END_IF
|
||||
IF _fbPressurePosolytSegmentInlet.xErrorHigh THEN
|
||||
stModbusErrors.stBitmap.bPInPosHigh := 1;
|
||||
END_IF
|
||||
IF _fbPressurePosolytSegmentInlet.xError THEN
|
||||
stModbusErrors.stBitmap.bPInPosError := 1;
|
||||
END_IF
|
||||
|
||||
// Set modbus warning register bits
|
||||
IF _fbPressurePosolytSegmentInlet.xWarningLow THEN
|
||||
stModbusWarnings.stBitmap.bPInPosLow := 1;
|
||||
END_IF
|
||||
IF _fbPressurePosolytSegmentInlet.xWarningHigh THEN
|
||||
stModbusWarnings.stBitmap.bPInPosHigh := 1;
|
||||
END_IF
|
||||
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbPressurePosolytSegmentInlet.xError THEN
|
||||
_xErrorActive := TRUE;
|
||||
@@ -488,6 +520,25 @@ _fbPressureNegolytSegmentInlet(
|
||||
// Filter pressure sensor data for HMI
|
||||
_rFilteredPressNegolytInlet := _rFilteredPressNegolytInlet * 0.9 + stHMIInterface.stP21.rValue * 0.1;
|
||||
stHMIInterface.stP21.rValue := _rFilteredPressNegolytInlet;
|
||||
|
||||
// Set modbus error register bits
|
||||
IF _fbPressureNegolytSegmentInlet.xErrorLow THEN
|
||||
stModbusErrors.stBitmap.bPInNegLow := 1;
|
||||
END_IF
|
||||
IF _fbPressureNegolytSegmentInlet.xErrorHigh THEN
|
||||
stModbusErrors.stBitmap.bPInNegHigh := 1;
|
||||
END_IF
|
||||
IF _fbPressureNegolytSegmentInlet.xError THEN
|
||||
stModbusErrors.stBitmap.bPInNegError := 1;
|
||||
END_IF
|
||||
|
||||
// Set modbus warning register bits
|
||||
IF _fbPressureNegolytSegmentInlet.xWarningLow THEN
|
||||
stModbusWarnings.stBitmap.bPInNegLow := 1;
|
||||
END_IF
|
||||
IF _fbPressureNegolytSegmentInlet.xWarningHigh THEN
|
||||
stModbusWarnings.stBitmap.bPInNegHigh := 1;
|
||||
END_IF
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbPressureNegolytSegmentInlet.xError THEN
|
||||
@@ -516,6 +567,25 @@ _fbPressurePosolytTankInlet(
|
||||
// Filter pressure sensor data for HMI
|
||||
_rFilteredPressPosolytTank := _rFilteredPressPosolytTank * 0.9 + stHMIInterface.stP12.rValue * 0.1;
|
||||
stHMIInterface.stP12.rValue := _rFilteredPressPosolytTank;
|
||||
|
||||
// Set modbus error register bits
|
||||
IF _fbPressurePosolytTankInlet.xErrorLow THEN
|
||||
stModbusErrors.stBitmap.bPTankPosLow := 1;
|
||||
END_IF
|
||||
IF _fbPressurePosolytTankInlet.xErrorHigh THEN
|
||||
stModbusErrors.stBitmap.bPTankPosHigh := 1;
|
||||
END_IF
|
||||
IF _fbPressurePosolytTankInlet.xError THEN
|
||||
stModbusErrors.stBitmap.bPTankPosError := 1;
|
||||
END_IF
|
||||
|
||||
// Set modbus warning register bits
|
||||
IF _fbPressurePosolytTankInlet.xWarningLow THEN
|
||||
stModbusWarnings.stBitmap.bPTankPosLow := 1;
|
||||
END_IF
|
||||
IF _fbPressurePosolytTankInlet.xWarningHigh THEN
|
||||
stModbusWarnings.stBitmap.bPTankPosHigh := 1;
|
||||
END_IF
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbPressurePosolytTankInlet.xError THEN
|
||||
@@ -544,6 +614,25 @@ _fbPressureNegolytTankInlet(
|
||||
// Filter pressure sensor data for HMI
|
||||
_rFilteredPressNegolytTank := _rFilteredPressNegolytTank * 0.9 + stHMIInterface.stP22.rValue * 0.1;
|
||||
stHMIInterface.stP22.rValue := _rFilteredPressNegolytTank;
|
||||
|
||||
// Set modbus error register bits
|
||||
IF _fbPressureNegolytTankInlet.xErrorLow THEN
|
||||
stModbusErrors.stBitmap.bPTankNegLow := 1;
|
||||
END_IF
|
||||
IF _fbPressureNegolytTankInlet.xErrorHigh THEN
|
||||
stModbusErrors.stBitmap.bPTankNegHigh := 1;
|
||||
END_IF
|
||||
IF _fbPressureNegolytTankInlet.xError THEN
|
||||
stModbusErrors.stBitmap.bPTankNegError := 1;
|
||||
END_IF
|
||||
|
||||
// Set modbus warning register bits
|
||||
IF _fbPressureNegolytTankInlet.xWarningLow THEN
|
||||
stModbusWarnings.stBitmap.bPTankNegLow := 1;
|
||||
END_IF
|
||||
IF _fbPressureNegolytTankInlet.xWarningHigh THEN
|
||||
stModbusWarnings.stBitmap.bPTankNegHigh := 1;
|
||||
END_IF
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbPressureNegolytTankInlet.xError THEN
|
||||
@@ -569,6 +658,25 @@ _fbTempSensorPosolyt(
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface=> stHMIInterface.stT11);
|
||||
|
||||
// Set modbus error register bits
|
||||
IF _fbTempSensorPosolyt.xErrorLow THEN
|
||||
stModbusErrors.stBitmap.bTPosLow := 1;
|
||||
END_IF
|
||||
IF _fbTempSensorPosolyt.xErrorHigh THEN
|
||||
stModbusErrors.stBitmap.bTPosHigh := 1;
|
||||
END_IF
|
||||
IF _fbTempSensorPosolyt.xError THEN
|
||||
stModbusErrors.stBitmap.bTPosError := 1;
|
||||
END_IF
|
||||
|
||||
// Set modbus warning register bits
|
||||
IF _fbTempSensorPosolyt.xWarningLow THEN
|
||||
stModbusWarnings.stBitmap.bTPosLow := 1;
|
||||
END_IF
|
||||
IF _fbTempSensorPosolyt.xWarningHigh THEN
|
||||
stModbusWarnings.stBitmap.bTPosHigh := 1;
|
||||
END_IF
|
||||
|
||||
IF _fbTempSensorPosolyt.xError THEN
|
||||
_xErrorActive := TRUE;
|
||||
END_IF
|
||||
@@ -591,6 +699,25 @@ _fbTempSensorNegolyt(
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface=> stHMIInterface.stT21);
|
||||
|
||||
// Set modbus error register bits
|
||||
IF _fbTempSensorNegolyt.xErrorLow THEN
|
||||
stModbusErrors.stBitmap.bTNegLow := 1;
|
||||
END_IF
|
||||
IF _fbTempSensorNegolyt.xErrorHigh THEN
|
||||
stModbusErrors.stBitmap.bTNegHigh := 1;
|
||||
END_IF
|
||||
IF _fbTempSensorNegolyt.xError THEN
|
||||
stModbusErrors.stBitmap.bTNegError := 1;
|
||||
END_IF
|
||||
|
||||
// Set modbus warning register bits
|
||||
IF _fbTempSensorNegolyt.xWarningLow THEN
|
||||
stModbusWarnings.stBitmap.bTNegLow := 1;
|
||||
END_IF
|
||||
IF _fbTempSensorNegolyt.xWarningHigh THEN
|
||||
stModbusWarnings.stBitmap.bTNegHigh := 1;
|
||||
END_IF
|
||||
|
||||
IF _fbTempSensorNegolyt.xError THEN
|
||||
_xErrorActive := TRUE;
|
||||
END_IF
|
||||
@@ -614,6 +741,25 @@ _fbVoltageSegment(
|
||||
stHMIInterface=> stHMIInterface.stE31,
|
||||
rScaledValue => rCurrentVoltage);
|
||||
|
||||
// Set modbus error register bits
|
||||
IF _fbVoltageSegment.xErrorLow THEN
|
||||
stModbusErrors.stBitmap.bVLow := 1;
|
||||
END_IF
|
||||
IF _fbVoltageSegment.xErrorHigh THEN
|
||||
stModbusErrors.stBitmap.bVHigh := 1;
|
||||
END_IF
|
||||
IF _fbVoltageSegment.xError THEN
|
||||
stModbusErrors.stBitmap.bVError := 1;
|
||||
END_IF
|
||||
|
||||
// Set modbus warning register bits
|
||||
IF _fbVoltageSegment.xWarningLow THEN
|
||||
stModbusWarnings.stBitmap.bVLow := 1;
|
||||
END_IF
|
||||
IF _fbVoltageSegment.xWarningHigh THEN
|
||||
stModbusWarnings.stBitmap.bVHigh := 1;
|
||||
END_IF
|
||||
|
||||
// Set error active if fb has error
|
||||
IF _fbVoltageSegment.xError THEN
|
||||
_xErrorActive := TRUE;
|
||||
@@ -704,6 +850,18 @@ StateMachine();
|
||||
xError := _xErrorActive;
|
||||
xWarning := _xWarningActive;
|
||||
|
||||
IF (NOT xSafetyIntlksOk) THEN
|
||||
stModbusErrors.stBitmap.bSafetyIntlk := 1;
|
||||
END_IF
|
||||
|
||||
|
||||
// ===============================
|
||||
// Reset modbus error register with alarm confirmation
|
||||
// ===============================
|
||||
IF xConfirmAlarms THEN
|
||||
stModbusErrors.dwRegister := 0;
|
||||
stModbusWarnings.dwRegister := 0;
|
||||
END_IF
|
||||
|
||||
// ===============================
|
||||
// Handle general error message
|
||||
|
||||
Reference in New Issue
Block a user