From 7145b047173b9c5907062d3180486e7b8bd2d423 Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Mon, 8 Dec 2025 08:37:09 -0700 Subject: [PATCH] updates --- .../StateUtils.cpp | 125 ++++++++++++------ .../StateUtils.h | 4 + .../State_Fail.cpp | 3 + .../State_Running.cpp | 9 ++ .../State_Standby.cpp | 11 ++ .../PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h | 23 +++- 6 files changed, 132 insertions(+), 43 deletions(-) diff --git a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.cpp b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.cpp index 5df8d4c..cad0898 100644 --- a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.cpp +++ b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.cpp @@ -28,6 +28,90 @@ #include #endif +void updateReturnAirTempAlarms(Equipment* equipment){ + Modbus_Point* returnAirTemp = equipment -> getModbus_Point("Return Air Temp"); + Modbus_Point* returnTempHighAlarmSP = equipment->getModbus_Point("Return Air Temp Alarm High SP"); + Modbus_Point* returnTempLowAlarmSP = equipment->getModbus_Point("Return Air Temp Alarm Low SP"); + //Modbus_Point* returnTempHighAlarm = equipment->getModbus_Point("Alarm High Return Air Temp"); + //Modbus_Point* returnTempLowAlarm = equipment->getModbus_Point("Alarm Low Return Air Temp"); + + int RATemp = returnAirTemp->getValue(); + int RATempHighAlm = returnTempHighAlarmSP->getValue(); + int RATempLowAlm = returnTempLowAlarmSP->getValue(); + + equipment->setModbus_Point("RATemp Value", RATemp); + equipment->setModbus_Point("RATempHighAlm Value", RATempHighAlm); + equipment->setModbus_Point("RATempLowAlm Value", RATempLowAlm); + + if (returnAirTemp->getValue() < returnTempLowAlarmSP->getValue()) { + equipment->setModbus_Point("Alarm High Return Air Temp", 1); + //returnTempHighAlarm->setValue(1); + } + else if (returnAirTemp->getValue() < returnTempLowAlarmSP->getValue()) { + equipment->setModbus_Point("Alarm Low Return Air Temp", 1); + //returnTempLowAlarm->setValue(1); + } + else{ + equipment->setModbus_Point("Alarm High Return Air Temp", 0); + equipment->setModbus_Point("Alarm Low Return Air Temp", 0); + //returnTempHighAlarm->setValue(0); + //returnTempLowAlarm->setValue(0); + } + +} + +void updateSupplyAirTempAlarms(Equipment* equipment){ + Modbus_Point* supplyAirTemp = equipment -> getModbus_Point("Supply Air Temp"); + Modbus_Point* supplyTempHighAlarmSP = equipment->getModbus_Point("Supply Air Temp Alarm High SP"); + Modbus_Point* supplyTempLowAlarmSP = equipment->getModbus_Point("Supply Air Temp Alarm Low SP"); + + int SATemp = supplyAirTemp->getValue(); + int SATempHighAlm = supplyTempHighAlarmSP->getValue(); + int SATempLowAlm = supplyTempLowAlarmSP->getValue(); + + equipment->setModbus_Point("SATemp Value", SATemp); + equipment->setModbus_Point("SATempHighAlm Value", SATempHighAlm); + equipment->setModbus_Point("SATempLowAlm Value", SATempLowAlm); + + + if (supplyAirTemp->getValue() > supplyTempHighAlarmSP->getValue()) { + equipment->setModbus_Point("Alarm High Supply Temp", 1); + } + else if (supplyAirTemp->getValue() < supplyTempLowAlarmSP->getValue()) { + equipment->setModbus_Point("Alarm Low Supply Temp", 1); + } + else{ + equipment->setModbus_Point("Alarm High Supply Temp", 0); + equipment->setModbus_Point("Alarm Low Supply Temp", 0); + } +} + +void updateReturnHumidityAlarms(Equipment* equipment){ + Modbus_Point* returnHumidity = equipment -> getModbus_Point("Return Humidity"); + Modbus_Point* returnHumHighAlarmSP = equipment->getModbus_Point("Return Humidity Alarm High SP"); + Modbus_Point* returnHumLowAlarmSP = equipment->getModbus_Point("Return Humidity Alarm Low SP"); + + int RAHum = returnHumidity->getValue(); + int RAHumHighAlm = returnHumHighAlarmSP->getValue(); + int RAHumLowAlm = returnHumLowAlarmSP->getValue(); + + equipment->setModbus_Point("RATemp Value", RAHum); + equipment->setModbus_Point("RATempHighAlm Value", RAHumHighAlm); + equipment->setModbus_Point("RATempLowAlm Value", RAHumLowAlm); + + if (returnHumidity->getValue() > returnHumHighAlarmSP->getValue()) { + equipment->setModbus_Point("Alarm High Return Humidity", 1); + } + else if (returnHumidity->getValue() < returnHumLowAlarmSP->getValue()) { + equipment->setModbus_Point("AAlarm Low Return Humidity", 1); + } + else{ + equipment->setModbus_Point("Alarm High Return Humidity", 0); + equipment->setModbus_Point("Alarm Low Return Humidity", 0); + } +} + + /** * @brief This function will update the Alarm status DI bits according to the Alarm Commands from Coils (Modscan) * It will also update the Common Alarm: if any alarm is active, the Common alarm will also be active. @@ -62,48 +146,7 @@ void updateAlarms(Equipment* equipment){ "Common Alarm ON", "Alarm Pump Failure ON", "Alarm Comm Loss Condenser 1 ON", "Alarm Comm Loss Condenser 2 ON", "Alarm Compressor 1B Overload ON", "Alarm Compressor 2B Overload ON" }; - - Modbus_Point* returnAirTemp = equipment -> getModbus_Point("Return Air Temp"); - Modbus_Point* supplyAirTemp = equipment -> getModbus_Point("Supply Air Temp"); - Modbus_Point* returnHumidity = equipment -> getModbus_Point("Return Humidity"); - //int supplyAirTemp = getPointValue(equipment, "Supply Air Temp"); - //int returnHumidity = getPointValue(equipment, "Return Humidity"); - // Update Return Air Temp Alarms - if (returnAirTemp > equipment->getModbus_Point("Return Air Temp Alarm High SP")) { - equipment->setModbus_Point("Alarm High Return Air Temp", 1); - } - else if (returnAirTemp < equipment->getModbus_Point("Return Air Temp Alarm Low SP")) { - equipment->setModbus_Point("Alarm Low Return Air Temp", 1); - } - else{ - equipment->setModbus_Point("Alarm High Return Air Temp", 0); - equipment->setModbus_Point("Alarm Low Return Air Temp", 0); - } - - // Update Supply Air Temp Alarms - if (supplyAirTemp > equipment->getModbus_Point("Supply Air Temp Alarm High SP")) { - equipment->setModbus_Point("Alarm High Supply Temp", 1); - } - else if (supplyAirTemp < equipment->getModbus_Point("Supply Air Temp Alarm Low SP")) { - equipment->setModbus_Point("Alarm Low Supply Temp", 1); - } - else{ - equipment->setModbus_Point("Alarm High Supply Temp", 0); - equipment->setModbus_Point("Alarm Low Supply Temp", 0); - } - - // Update Return Humidity Alarms - if (returnHumidity > equipment->getModbus_Point("Return Humidity Alarm High SP")) { - equipment->setModbus_Point("Alarm High Return Humidity", 1); - } - else if (returnHumidity < equipment->getModbus_Point("Return Humidity Alarm Low SP")) { - equipment->setModbus_Point("AAlarm Low Return Humidity", 1); - } - else{ - equipment->setModbus_Point("Alarm High Return Humidity", 0); - equipment->setModbus_Point("Alarm Low Return Humidity", 0); - } int numAlarms = 0; for (int i =0; i< alarmCommands.size() && i < alarmDescriptions.size(); ++i) { diff --git a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.h b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.h index e2c1196..359c2fa 100644 --- a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.h +++ b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.h @@ -28,6 +28,10 @@ template class State; +void updateReturnAirTempAlarms(Equipment* equipment); +void updateSupplyAirTempAlarms(Equipment* equipment); +void updateReturnHumidityAlarms(Equipment* equipment); + /** * @brief Checks common alarms (non-fail alarms) and updates the Common Alarm Modbus point. * @param equipment Pointer to the Equipment instance. diff --git a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Fail.cpp b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Fail.cpp index 888d1b4..a689c30 100644 --- a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Fail.cpp +++ b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Fail.cpp @@ -62,6 +62,9 @@ State* FailState::update(Equipment* equipment) { Serial.println("Fail update function"); setPointValue(equipment, "System On/Off Control", 0); // my programming logic: when clear fault, should be sent to Standby Mode + updateReturnAirTempAlarms(equipment); + updateSupplyAirTempAlarms(equipment); + updateReturnHumidityAlarms(equipment); updateAlarms(equipment); updateDehumidifier(equipment); // Dehumidifier mode can be toggled while in FailState (for ease of Ignition HMI verification) diff --git a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Running.cpp b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Running.cpp index 528183c..9d37f4c 100644 --- a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Running.cpp +++ b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Running.cpp @@ -47,6 +47,11 @@ RunningState::RunningState() { addStrategy("Return Humidity", new SawStrategy(2.0f, 80.0f, 2.0f, 1000)); addStrategy("Return Air Temp", new SawStrategy(66.0f, 110.0f, 2.0f, 1000)); addStrategy("Supply Air Temp", new SawStrategy(68.0f, 86.0f, 1.0f, 1000)); + + //addStrategy("Return Humidity", new SingleValueStrategy(10.0f, 0.0f, 1000)); + //addStrategy("Return Air Temp", new SingleValueStrategy(50.0f, 0.0f, 1000)); + //addStrategy("Supply Air Temp", new SingleValueStrategy(60.0f, 0.0f, 1000)); + addStrategy("Supply Air Flow", new SawStrategy(7.0f, 10.0f, 1.0f, 1000)); addStrategy("Fan Speed", new PIDStrategy("Return Air Temp Setpoint", 1000, "Return Air Temp")); addStrategy("Fluid Control Valve Position 1", new PIDStrategy("Supply Air Temp Setpoint", 1000, "Supply Air Temp")); @@ -72,6 +77,10 @@ template<> State* RunningState::update(Equipment* equipment) { Serial.println("Running update function"); + updateReturnAirTempAlarms(equipment); + updateSupplyAirTempAlarms(equipment); + updateReturnHumidityAlarms(equipment); + updateAlarms(equipment); updateDehumidifier(equipment); diff --git a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Standby.cpp b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Standby.cpp index 5468f3b..e844b29 100644 --- a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Standby.cpp +++ b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/State_Standby.cpp @@ -46,6 +46,13 @@ StandbyState::StandbyState() { addStrategy("Supply Air Flow", new RampStrategy(0.0f, 1.0f, 1000)); addStrategy("Fluid Control Valve Position 1", new RampStrategy(0.0f, 5.0f, 1000)); addStrategy("Fluid Control Valve Position 2", new RampStrategy(0.0f, 5.0f, 1000)); + + addStrategy("Return Humidity Alarm High SP", new SingleValueStrategy(60.0f, 0.0f, 1000)); + addStrategy("Return Humidity Alarm Low SP", new SingleValueStrategy(20.0f, 0.0f, 1000)); + addStrategy("Return Air Temp Alarm High SP", new SingleValueStrategy(100.0f, 0.0f, 1000)); + addStrategy("Return Air Temp Alarm Low SP", new SingleValueStrategy(72.0f, 0.0f, 1000)); + addStrategy("Supply Air Temp Alarm High SP", new SingleValueStrategy(78.0f, 1.0f, 1000)); + addStrategy("Supply Air Temp Alarm Low SP", new SingleValueStrategy(72.0f, 1.0f, 1000)); } /** @@ -67,6 +74,10 @@ State* StandbyState::update(Equipment* equipment) // STATE control, add conditions if change to a different state is needed Serial.println("Standby update function"); + updateReturnAirTempAlarms(equipment); + updateSupplyAirTempAlarms(equipment); + updateReturnHumidityAlarms(equipment); + updateAlarms(equipment); updateDehumidifier(equipment); diff --git a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h index cccecc6..5e96ab1 100644 --- a/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h +++ b/src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h @@ -93,6 +93,9 @@ modbusMap mb_map[] = {COIL, 30, 0, "Alarm Compressor 1B Overload ON"}, // For Arduino testing only {COIL, 31, 0, "Alarm Compressor 2B Overload ON"}, // For Arduino testing only + //{COIL, 32, 0, "Return Humidity LOW"}, // For Arduino testing only + //{COIL, 33, 0, "Return Humidity HIGH"}, // For Arduino testing only + {DI, 24, 0, "Supply Fan Status"}, {DI, 25, 0, "Cooling Status"}, {DI, 26, 0, "Free Cooling Status"}, @@ -146,12 +149,28 @@ modbusMap mb_map[] = {HR_10x, 53, 60, "Return Humidity Alarm High SP"}, {HR_10x, 54, 20, "Return Humidity Alarm Low SP"}, + {HR, 56, 0, "RAHum Value"}, + {HR, 57, 0, "RAHumHighAlm Value"}, + {HR, 58, 0, "RAHumLowAlm Value"}, + + {HR, 732, 73, "Supply Air Temp Setpoint"}, - {HR_10x, 738, 100, "Return Air Temp Alarm High SP"}, - {HR_10x, 739, 72, "Return Air Temp Alarm Low SP"}, + + + {HR_10x, 738, 0, "Return Air Temp Alarm High SP"}, + {HR_10x, 739, 0, "Return Air Temp Alarm Low SP"}, + {HR, 740, 0, "RATemp Value"}, + {HR, 741, 0, "RATempHighAlm Value"}, + {HR, 742, 0, "RATempLowAlm Value"}, + + {HR, 753, 80, "Return Air Temp Setpoint"}, {HR_10x, 754, 78, "Supply Air Temp Alarm High SP"}, {HR_10x, 755, 72, "Supply Air Temp Alarm Low SP"}, + {HR, 740, 0, "SATemp Value"}, + {HR, 741, 0, "SATempHighAlm Value"}, + {HR, 742, 0, "SATempLowAlm Value"}, + }; //Size of modbus map used in FOR cycles, automatically calculated.