From 75c4b0169e52aeb59ed450242c48975e346af7d8 Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Mon, 8 Dec 2025 20:17:44 -0600 Subject: [PATCH] Return Humidity, Temp, Supply Temp Added capability for RA Temp, SA Temp, RA Humidity to alarm (register) using Coils (Low, Normal, High), and adjusted Common Alarm code accordingly. --- .../StateUtils.cpp | 62 +++++++++++++++++-- .../StateUtils.h | 1 + .../State_Fail.cpp | 7 ++- .../State_Running.cpp | 7 ++- .../State_Standby.cpp | 21 ++++--- .../PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h | 33 ++++++---- 6 files changed, 97 insertions(+), 34 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 fa0e4ff..930247a 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,54 @@ #include #endif +void updateAnalogs(Equipment* equipment){ + if (equipment->getModbus_Point("RA Temp NORMAL")->getValue()==1){ + equipment->setModbus_Point("Return Air Temp", 84.0f); + equipment->setModbus_Point("RA Temp Low Alarm ON", 0); + equipment->setModbus_Point("RA Temp High Alarm ON", 0); + equipment->setModbus_Point("RA Temp NORMAL", 0); + } + else if (equipment->getModbus_Point("RA Temp Low Alarm ON")->getValue() ==1){ + equipment->setModbus_Point("Return Air Temp", 60.0f); + equipment->setModbus_Point("RA Temp High Alarm ON", 0); + } + else if (equipment->getModbus_Point("RA Temp High Alarm ON")->getValue()==1){ + equipment->setModbus_Point("Return Air Temp", 110.0f); + equipment->setModbus_Point("RA Temp Low Alarm ON", 0); + } + + if (equipment->getModbus_Point("RA Humidity NORMAL")->getValue()==1){ + equipment->setModbus_Point("Return Humidity", 25.0f); + equipment->setModbus_Point("RA Humidity Low Alarm ON", 0); + equipment->setModbus_Point("RA Humidity High Alarm ON", 0); + equipment->setModbus_Point("RA Humidity NORMAL", 0); + } + else if (equipment->getModbus_Point("RA Humidity Low Alarm ON")->getValue()==1){ + equipment->setModbus_Point("Return Humidity", 5.0f); + equipment->setModbus_Point("RA Humidity High Alarm ON", 0); + } + else if (equipment->getModbus_Point("RA Humidity High Alarm ON")->getValue()==1){ + equipment->setModbus_Point("Return Humidity", 80.0f); + equipment->setModbus_Point("RA Humidity Low Alarm ON", 0); + } + + if (equipment->getModbus_Point("SA Temp NORMAL")->getValue()==1){ + equipment->setModbus_Point("Supply Air Temp", 76.0f); + equipment->setModbus_Point("SA Temp Low Alarm ON", 0); + equipment->setModbus_Point("SA Temp High Alarm ON", 0); + equipment->setModbus_Point("SA Temp NORMAL", 0); + } + else if (equipment->getModbus_Point("SA Temp Low Alarm ON")->getValue() ==1){ + equipment->setModbus_Point("Supply Air Temp", 60.0f); + equipment->setModbus_Point("SA Temp High Alarm ON", 0); + } + else if (equipment->getModbus_Point("SA Temp High Alarm ON")->getValue()==1){ + equipment->setModbus_Point("Supply Air Temp", 90.0f); + equipment->setModbus_Point("SA Temp Low Alarm ON", 0); + } + +} + 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"); @@ -44,12 +92,13 @@ void updateReturnAirTempAlarms(Equipment* equipment){ equipment->setModbus_Point("RATempLowAlm Value", RATempLowAlm); if (returnAirTemp->getValue() < returnTempLowAlarmSP->getValue()) { - equipment->setModbus_Point("Alarm High Return Air Temp", 1); - equipment->setModbus_Point("Alarm High Return Air Temp", 1); + equipment->setModbus_Point("Alarm Low Return Air Temp", 1); + equipment->setModbus_Point("Alarm High Return Air Temp", 0); //returnTempHighAlarm->setValue(1); } - else if (returnAirTemp->getValue() < returnTempLowAlarmSP->getValue()) { - equipment->setModbus_Point("Alarm Low Return Air Temp", 1); + else if (returnAirTemp->getValue() > returnTempHighAlarmSP->getValue()) { + equipment->setModbus_Point("Alarm High Return Air Temp", 1); + equipment->setModbus_Point("Alarm Low Return Air Temp", 0); //returnTempLowAlarm->setValue(1); } else{ @@ -77,9 +126,11 @@ void updateSupplyAirTempAlarms(Equipment* equipment){ if (supplyAirTemp->getValue() > supplyTempHighAlarmSP->getValue()) { equipment->setModbus_Point("Alarm High Supply Temp", 1); + equipment->setModbus_Point("Alarm Low Supply Temp", 0); } else if (supplyAirTemp->getValue() < supplyTempLowAlarmSP->getValue()) { equipment->setModbus_Point("Alarm Low Supply Temp", 1); + equipment->setModbus_Point("Alarm High Supply Temp", 0); } else{ equipment->setModbus_Point("Alarm High Supply Temp", 0); @@ -102,9 +153,11 @@ void updateReturnHumidityAlarms(Equipment* equipment){ if (returnHumidity->getValue() > returnHumHighAlarmSP->getValue()) { equipment->setModbus_Point("Alarm High Return Humidity", 1); + equipment->setModbus_Point("Alarm Low Return Humidity", 0); } else if (returnHumidity->getValue() < returnHumLowAlarmSP->getValue()) { equipment->setModbus_Point("Alarm Low Return Humidity", 1); + equipment->setModbus_Point("Alarm High Return Humidity", 0); } else{ equipment->setModbus_Point("Alarm High Return Humidity", 0); @@ -153,7 +206,6 @@ void updateAlarms(Equipment* equipment){ "Alarm High Supply Temp", "Alarm Low Supply Temp" }; - // If any Alarm Commands = 1, set the appropriate Alarm = 1 and increment counter for number of active alarms 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 359c2fa..861ff6d 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,7 @@ template class State; +void updateAnalogs(Equipment* equipment); void updateReturnAirTempAlarms(Equipment* equipment); void updateSupplyAirTempAlarms(Equipment* equipment); void updateReturnHumidityAlarms(Equipment* equipment); 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 a689c30..68a36fb 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 @@ -34,9 +34,9 @@ template<> FailState::FailState(const std::vector& activeAlarms) { addStrategy("Fan Speed", new RampStrategy(0.0f, 10.0f, 1000)); - addStrategy("Return Humidity", new SawStrategy(0.0f, 80.0f, 5.0f, 1000)); - addStrategy("Return Air Temp", new SingleValueStrategy(80.0f, 1.0f, 1000)); - addStrategy("Supply Air Temp", new SingleValueStrategy(80.0f, 1.0f, 1000)); + addStrategy("Return Humidity", new SawStrategy(25.0f, 35.0f, 1.0f, 2000)); + addStrategy("Return Air Temp", new SingleValueStrategy(80.0f, 1.0f, 3000)); + addStrategy("Supply Air Temp", new SingleValueStrategy(76.0f, 1.0f, 3000)); 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)); @@ -62,6 +62,7 @@ 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 + updateAnalogs(equipment); updateReturnAirTempAlarms(equipment); updateSupplyAirTempAlarms(equipment); updateReturnHumidityAlarms(equipment); 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 9d37f4c..b7a5117 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 @@ -44,9 +44,9 @@ */ template<> 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 SawStrategy(25.0f, 35.0f, 1.0f, 2000)); + addStrategy("Return Air Temp", new SawStrategy(78.0f, 88.0f, 1.0f, 3000)); + addStrategy("Supply Air Temp", new SawStrategy(73.0f, 77.0f, 1.0f, 5000)); //addStrategy("Return Humidity", new SingleValueStrategy(10.0f, 0.0f, 1000)); //addStrategy("Return Air Temp", new SingleValueStrategy(50.0f, 0.0f, 1000)); @@ -77,6 +77,7 @@ template<> State* RunningState::update(Equipment* equipment) { Serial.println("Running update function"); + updateAnalogs(equipment); updateReturnAirTempAlarms(equipment); updateSupplyAirTempAlarms(equipment); updateReturnHumidityAlarms(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 e844b29..982a353 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 @@ -40,19 +40,19 @@ template<> StandbyState::StandbyState() { addStrategy("Fan Speed", new RampStrategy(0.0f, 10.0f, 1000)); - addStrategy("Return Humidity", new SawStrategy(0.0f, 80.0f, 2.0f, 1000)); - addStrategy("Return Air Temp", new SingleValueStrategy(80.0f, 1.0f, 1000)); - addStrategy("Supply Air Temp", new SingleValueStrategy(80.0f, 1.0f, 1000)); - addStrategy("Supply Air Flow", new RampStrategy(0.0f, 1.0f, 1000)); + addStrategy("Return Humidity", new SawStrategy(25.0f, 35.0f, 1.0f, 2000)); + addStrategy("Return Air Temp", new SingleValueStrategy(80.0f, 1.0f, 3000)); + addStrategy("Supply Air Temp", new SingleValueStrategy(76.0f, 1.0f, 3000)); + addStrategy("Supply Air Flow", new RampStrategy(0.0f, 1.0f, 5000)); 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)); + //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, 0.0f, 1000)); + //addStrategy("Supply Air Temp Alarm Low SP", new SingleValueStrategy(72.0f, 0.0f, 1000)); } /** @@ -74,6 +74,7 @@ State* StandbyState::update(Equipment* equipment) // STATE control, add conditions if change to a different state is needed Serial.println("Standby update function"); + updateAnalogs(equipment); updateReturnAirTempAlarms(equipment); updateSupplyAirTempAlarms(equipment); updateReturnHumidityAlarms(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 e9e6797..230f994 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,8 +93,17 @@ 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 + {COIL, 32, 0, "RA Temp Low Alarm ON"}, // For Arduino testing only - sets RA Temp = 60 + {COIL, 33, 0, "RA Temp NORMAL"}, // For Arduino testing only - sets RA Temp = 84 + {COIL, 34, 0, "RA Temp High Alarm ON"}, // For Arduino testing only - sets RA Temp = 110 + + {COIL, 35, 0, "RA Humidity Low Alarm ON"}, // For Arduino testing only - sets RA Humidity = 5 + {COIL, 36, 0, "RA Humidity NORMAL"}, // For Arduino testing only - sets RA Humidity = 25 + {COIL, 37, 0, "RA Humidity High Alarm ON"}, // For Arduino testing only - sets RA Humidity = 80 + + {COIL, 38, 0, "SA Temp Low Alarm ON"}, // For Arduino testing only - sets SA Temp = 60 + {COIL, 39, 0, "SA Temp NORMAL"}, // For Arduino testing only - sets SA Temp = 76 + {COIL, 40, 0, "SA Temp High Alarm ON"}, // For Arduino testing only - sets SA Temp = 90 {DI, 24, 0, "Supply Fan Status"}, {DI, 25, 0, "Cooling Status"}, @@ -140,33 +149,31 @@ modbusMap mb_map[] = {IR, 99, 0, "Unit Status"}, // 0:off, 1:on, 2:standby {IR, 102, 0, "Fan Speed"}, - {IR_10x, 129, 0, "Return Humidity"}, - {IR_10x, 742, 0, "Return Air Temp"}, - {IR_10x, 743, 0, "Supply Air Temp"}, + {IR_10x, 129, 250, "Return Humidity"}, + {IR_10x, 742, 840, "Return Air Temp"}, + {IR_10x, 743, 760, "Supply Air Temp"}, {IR, 1465, 0, "Supply Air Flow"}, {IR, 2050, 0, "Fluid Control Valve Position 1"}, {IR, 2051, 0, "Fluid Control Valve Position 2"}, - {HR_10x, 53, 60, "Return Humidity Alarm High SP"}, - {HR_10x, 54, 20, "Return Humidity Alarm Low SP"}, + {HR_10x, 53, 600, "Return Humidity Alarm High SP"}, + {HR_10x, 54, 200, "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, 0, "Return Air Temp Alarm High SP"}, - {HR_10x, 739, 0, "Return Air Temp Alarm Low SP"}, + {HR_10x, 738, 1000, "Return Air Temp Alarm High SP"}, + {HR_10x, 739, 720, "Return Air Temp Alarm Low SP"}, {HR, 741, 0, "RATemp Value"}, {HR, 742, 0, "RATempHighAlm Value"}, {HR, 743, 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_10x, 754, 780, "Supply Air Temp Alarm High SP"}, + {HR_10x, 755, 720, "Supply Air Temp Alarm Low SP"}, {HR, 757, 0, "SATemp Value"}, {HR, 758, 0, "SATempHighAlm Value"}, {HR, 759, 0, "SATempLowAlm Value"},