Added cabinet temperature and modbus registers

added cabinet temperature to each module, scs and bms cabinet, added corresponding config, hmi interface, hardware & links. Added corresponding warning bits to modbus registers
This commit is contained in:
Markus Neukirch
2025-08-04 18:10:15 +02:00
parent ee3367eaec
commit e2a44b0d37
21 changed files with 2029 additions and 805 deletions

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<POU Name="MAIN" Id="{bbd7302c-91ce-4697-9f4b-743f57ca5819}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM MAIN
VAR
@@ -149,6 +149,15 @@ VAR
_rDeltaUm : REAL;
_arPowerString : ARRAY[0..(GVL_CONFIG.uiNumberOfStrings-1)] OF REAL;
// Temperature sensor SCS String 1
_fbTempCabinetSCSString1 : FB_AnalogInput('String 1 - SCS - T1_Cabinet');
// Temperature sensor SCS String 1
_fbTempCabinetSCSString2 : FB_AnalogInput('String 2 - SCS - T1_Cabinet');
// Temperature sensor BMS cabinet
_fbTempCabinetBMS : FB_AnalogInput('BMS - T1_Cabinet');
_ui : UINT := 0;
_xStringsReady : BOOL;
_xStringsErrorActive : BOOL;
@@ -328,6 +337,28 @@ END_IF
// Dely release of errors during PLC startup phase
_tonStartupDelay(IN := TRUE);
// ===============================
// Temperature sensor control cabinet BMS
// ===============================
_fbTempCabinetBMS(
stScalingConfig:= GVL_CONFIG.stConfigCabinetTemp,
stEWConfig:= GVL_CONFIG.stEWLCabinetTemp,
stEWDelayConfig:= GVL_CONFIG.stEWDCabinetTemp,
xReleaseErrors:= _xReleaseErrors,
xReleaseLimitErrors:= _xReleaseLimitsErrors,
xReleaseHardwareErrors:= _xReleaseErrors,
xConfirmAlarms:= _xConfirmAlarms,
stHMIInterface=> GVL_SCADA.stTempCabinetBMS);
// Set modbus error register bit
IF _fbTempCabinetBMS.xWarningHigh THEN
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetBMSHigh := TRUE;
END_IF
IF _fbTempCabinetBMS.xError THEN
_xErrorActive := TRUE;
END_IF
// Call string 1
_afbStrings[0](
xEnable := _xEnableString AND GVL_CONFIG.axStringEnabled[0],
@@ -351,11 +382,33 @@ IF _afbStrings[0].xError THEN
_xErrorActive := TRUE;
END_IF
// ===============================
// Temperature sensor control cabinet SCS string 1
// ===============================
_fbTempCabinetSCSString1(
stScalingConfig:= GVL_CONFIG.stConfigCabinetTemp,
stEWConfig:= GVL_CONFIG.stEWLCabinetTemp,
stEWDelayConfig:= GVL_CONFIG.stEWDCabinetTemp,
xReleaseErrors:= _xReleaseErrors,
xReleaseLimitErrors:= _xReleaseLimitsErrors,
xReleaseHardwareErrors:= _xReleaseErrors,
xConfirmAlarms:= _xConfirmAlarms,
stHMIInterface=> GVL_SCADA.stHMIInterface[0].stTempCabinetSCS);
IF _fbTempCabinetSCSString1.xError THEN
_xErrorActive := TRUE;
END_IF
// Handle string 1 modbus error and warning
GVL_MODBUS.stBMSErrorReg.wStringErrorActive.0 := _afbStrings[0].xError;
GVL_MODBUS.stBMSErrorReg.wStringWarningActive.0 := _afbStrings[0].xWarning;
GVL_MODBUS.stBMSErrorReg.wBMSErrorActive.stBitmap.bDCSwitchS1 := (NOT _afbStrings[0].xRepairSwitchOk);
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bSafetyIntlkString1 := (NOT _afbStrings[0].xSafetyIntlksOk);
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString1Module1High := _afbStrings[0].xTempCabinetModule1Warning;
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString1Module2High := _afbStrings[0].xTempCabinetModule2Warning;
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString1Module3High := _afbStrings[0].xTempCabinetModule3Warning;
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetSCSString1High := _fbTempCabinetSCSString1.xWarningHigh;
// Call string 2
@@ -381,11 +434,32 @@ IF _afbStrings[1].xError THEN
_xErrorActive := TRUE;
END_IF
// ===============================
// Temperature sensor control cabinet SCS string 2
// ===============================
_fbTempCabinetSCSString2(
stScalingConfig:= GVL_CONFIG.stConfigCabinetTemp,
stEWConfig:= GVL_CONFIG.stEWLCabinetTemp,
stEWDelayConfig:= GVL_CONFIG.stEWDCabinetTemp,
xReleaseErrors:= _xReleaseErrors,
xReleaseLimitErrors:= _xReleaseLimitsErrors,
xReleaseHardwareErrors:= _xReleaseErrors,
xConfirmAlarms:= _xConfirmAlarms,
stHMIInterface=> GVL_SCADA.stHMIInterface[1].stTempCabinetSCS);
IF _fbTempCabinetSCSString2.xError THEN
_xErrorActive := TRUE;
END_IF
// Handle string 1 modbus error and warning
GVL_MODBUS.stBMSErrorReg.wStringErrorActive.1 := _afbStrings[1].xError;
GVL_MODBUS.stBMSErrorReg.wStringWarningActive.1 := _afbStrings[1].xWarning;
GVL_MODBUS.stBMSErrorReg.wBMSErrorActive.stBitmap.bDCSwitchS2 := (NOT _afbStrings[1].xRepairSwitchOk);
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bSafetyIntlkString2 := (NOT _afbStrings[1].xSafetyIntlksOk);
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString2Module1High := _afbStrings[1].xTempCabinetModule1Warning;
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString2Module2High := _afbStrings[1].xTempCabinetModule2Warning;
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString2Module3High := _afbStrings[1].xTempCabinetModule3Warning;
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetSCSString2High := _fbTempCabinetSCSString2.xWarningHigh;
// Copy general error to modbus error register
GVL_MODBUS.stBMSErrorReg.wBMSErrorActive.stBitmap.bError := _xErrorActive;