From c5c2b28bf52ae865ded6a8f490215ae96ccee0e8 Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Fri, 5 Dec 2025 15:43:17 -0700 Subject: [PATCH 1/8] com change com --- platformio.ini | 2 +- .../StateUtils.cpp | 42 +++++++++++++++++++ .../State_Running.cpp | 2 +- .../State_Standby.cpp | 2 +- .../PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h | 11 ++++- 5 files changed, 54 insertions(+), 5 deletions(-) diff --git a/platformio.ini b/platformio.ini index 2bec804..ec985dc 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,7 +13,7 @@ default_envs = PHX3_CRAH_LIEBERT_80_SLAB_TCP ; Select here the name of the configuration you want to download [env] -upload_port = COM9 +upload_port = COM11 [common_env_options] framework = arduino 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 b50dc7f..5df8d4c 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 @@ -63,6 +63,48 @@ void updateAlarms(Equipment* equipment){ "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) { Modbus_Point* commandPoint = equipment->getModbus_Point(alarmCommands[i]); 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 33c87c7..528183c 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,7 +44,7 @@ */ template<> RunningState::RunningState() { - addStrategy("Return Humidity", new SawStrategy(0.0f, 80.0f, 5.0f, 1000)); + 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("Supply Air Flow", new SawStrategy(7.0f, 10.0f, 1.0f, 1000)); 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 5db3e93..5468f3b 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,7 +40,7 @@ template<> StandbyState::StandbyState() { addStrategy("Fan Speed", new RampStrategy(0.0f, 10.0f, 1000)); - addStrategy("Return Humidity", new SawStrategy(0.0f, 80.0f, 5.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)); 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 f547b18..cccecc6 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 @@ -23,7 +23,7 @@ #include const char *ssid = "TP-Link_D91A"; /**< @brief The SSID of the WiFi network. */ const char *password = "52761492"; /**< @brief The password for the WiFi network. */ - IPAddress local_IP(192, 168, 1, 234); /**< @brief The static IP address for the device. */ + IPAddress local_IP(192, 168, 0, 234); /**< @brief The static IP address for the device. */ IPAddress gateway(192, 168, 1, 1); /**< @brief The gateway IP address. */ IPAddress subnet(255, 255, 255, 0); /**< @brief The subnet mask. */ @@ -68,7 +68,7 @@ modbusMap mb_map[] = {COIL, 6, 0, "Alarm Compressor 2A Overload ON"}, // For Arduino testing only {COIL, 7, 0, "Alarm Water Detected ON"}, // For Arduino testing only {COIL, 8, 0, "Alarm Standby Unit On ON"}, // For Arduino testing only - {COIL, 9, 0, "Alarm Room Sensor Failure ON"}, // For Arduino testing only + {COIL, 9, 0, "Alarm Room Sensor Failure ON"}, // For Arduino testing only {COIL, 10, 0, "Alarm Power Loss ON"}, // For Arduino testing only {COIL, 11, 0, "Alarm Clogged Filter ON"}, // For Arduino testing only {COIL, 12, 0, "Alarm Supply Sensor Failure ON"}, // For Arduino testing only @@ -144,8 +144,15 @@ modbusMap mb_map[] = {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, 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, 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"}, + }; //Size of modbus map used in FOR cycles, automatically calculated. From 7145b047173b9c5907062d3180486e7b8bd2d423 Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Mon, 8 Dec 2025 08:37:09 -0700 Subject: [PATCH 2/8] 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. From 6dae38f8a5a4688d8ab6de6cfc46f7bda8808bbb Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Mon, 8 Dec 2025 18:23:06 -0600 Subject: [PATCH 3/8] WIP common alarm --- .../StateUtils.cpp | 23 +++++++++++++++---- .../PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h | 20 ++++++++-------- 2 files changed, 29 insertions(+), 14 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 cad0898..fa0e4ff 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 @@ -44,6 +44,7 @@ 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); //returnTempHighAlarm->setValue(1); } @@ -95,15 +96,15 @@ void updateReturnHumidityAlarms(Equipment* equipment){ 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); + equipment->setModbus_Point("RAHum Value", RAHum); + equipment->setModbus_Point("RAHumHighAlm Value", RAHumHighAlm); + equipment->setModbus_Point("RAHumLowAlm 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); + equipment->setModbus_Point("Alarm Low Return Humidity", 1); } else{ equipment->setModbus_Point("Alarm High Return Humidity", 0); @@ -146,8 +147,14 @@ 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" }; + + const std::vector alarmAnalogs = { + "Alarm High Return Air Temp", "Alarm Low Return Air Temp", "Alarm High Return Humidity", "Alarm Low Return Humidity", + "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) { Modbus_Point* commandPoint = equipment->getModbus_Point(alarmCommands[i]); @@ -157,6 +164,14 @@ void updateAlarms(Equipment* equipment){ if (alarmPoint->getValue() == 1) numAlarms++; } } + // If any of the analog alarms = 1, increment counter for number of active alarms + for (int j = 0; j* alarmAnalogPoint = equipment->getModbus_Point(alarmAnalogs[j]); + if (alarmAnalogPoint) { + if (alarmAnalogPoint->getValue() == 1) numAlarms++; + } + } + // If any alarms are active, set the Common Alarm = 1, else Common Alarm = 0. if (numAlarms >= 1) equipment->setModbus_Point("Common Alarm", 1); else equipment->setModbus_Point("Common Alarm", 0); } 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 5e96ab1..e9e6797 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 @@ -21,10 +21,10 @@ * @{ */ #include - const char *ssid = "TP-Link_D91A"; /**< @brief The SSID of the WiFi network. */ - const char *password = "52761492"; /**< @brief The password for the WiFi network. */ - IPAddress local_IP(192, 168, 0, 234); /**< @brief The static IP address for the device. */ - IPAddress gateway(192, 168, 1, 1); /**< @brief The gateway IP address. */ + const char *ssid = "ArduinoWifiB"; /**< @brief The SSID of the WiFi network. */ + const char *password = "123abc456"; /**< @brief The password for the WiFi network. */ + IPAddress local_IP(172, 17, 32, 11); /**< @brief The static IP address for the device. */ + IPAddress gateway(172, 17, 32, 1); /**< @brief The gateway IP address. */ IPAddress subnet(255, 255, 255, 0); /**< @brief The subnet mask. */ ModbusIP mb; @@ -159,17 +159,17 @@ modbusMap mb_map[] = {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, 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, 740, 0, "SATemp Value"}, - {HR, 741, 0, "SATempHighAlm Value"}, - {HR, 742, 0, "SATempLowAlm Value"}, + {HR, 757, 0, "SATemp Value"}, + {HR, 758, 0, "SATempHighAlm Value"}, + {HR, 759, 0, "SATempLowAlm Value"}, }; From 75c4b0169e52aeb59ed450242c48975e346af7d8 Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Mon, 8 Dec 2025 20:17:44 -0600 Subject: [PATCH 4/8] 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"}, From acf981f5907c7583240f9ffdc10f231cfb1f9b11 Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Mon, 8 Dec 2025 21:14:25 -0600 Subject: [PATCH 5/8] asf --- src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 930247a..03a9910 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 @@ -83,6 +83,7 @@ void updateReturnAirTempAlarms(Equipment* equipment){ //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(); @@ -90,6 +91,7 @@ void updateReturnAirTempAlarms(Equipment* equipment){ 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 Low Return Air Temp", 1); @@ -115,6 +117,7 @@ void updateSupplyAirTempAlarms(Equipment* equipment){ 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(); @@ -122,7 +125,7 @@ void updateSupplyAirTempAlarms(Equipment* equipment){ 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); @@ -143,6 +146,7 @@ void updateReturnHumidityAlarms(Equipment* equipment){ 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(); @@ -150,6 +154,7 @@ void updateReturnHumidityAlarms(Equipment* equipment){ equipment->setModbus_Point("RAHum Value", RAHum); equipment->setModbus_Point("RAHumHighAlm Value", RAHumHighAlm); equipment->setModbus_Point("RAHumLowAlm Value", RAHumLowAlm); + */ if (returnHumidity->getValue() > returnHumHighAlarmSP->getValue()) { equipment->setModbus_Point("Alarm High Return Humidity", 1); From 6630a016381e3b531772a68614af5a48fd7193f7 Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Tue, 9 Dec 2025 19:20:58 -0600 Subject: [PATCH 6/8] update IP for local setup --- src/BMS/CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 230f994..7bf2f7f 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 @@ -23,7 +23,7 @@ #include const char *ssid = "ArduinoWifiB"; /**< @brief The SSID of the WiFi network. */ const char *password = "123abc456"; /**< @brief The password for the WiFi network. */ - IPAddress local_IP(172, 17, 32, 11); /**< @brief The static IP address for the device. */ + IPAddress local_IP(172, 17, 32, 63); /**< @brief The static IP address for the device. */ IPAddress gateway(172, 17, 32, 1); /**< @brief The gateway IP address. */ IPAddress subnet(255, 255, 255, 0); /**< @brief The subnet mask. */ From d30cba503642a67c6b735e504323737f742f1895 Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Wed, 10 Dec 2025 09:37:18 -0600 Subject: [PATCH 7/8] updated IPs for loading Schertz arduinos --- .../StateUtils.cpp | 38 ------------------- .../State_Running.cpp | 4 -- .../State_Standby.cpp | 7 ---- .../PHX3_CRAH_LIEBERT_80_SLAB_TCP/config.h | 2 +- 4 files changed, 1 insertion(+), 50 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 03a9910..339d5c8 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 @@ -73,43 +73,25 @@ void updateAnalogs(Equipment* equipment){ 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"); 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 Low Return Air Temp", 1); equipment->setModbus_Point("Alarm High Return Air Temp", 0); - //returnTempHighAlarm->setValue(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{ 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){ @@ -117,16 +99,6 @@ void updateSupplyAirTempAlarms(Equipment* equipment){ 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); equipment->setModbus_Point("Alarm Low Supply Temp", 0); @@ -146,16 +118,6 @@ void updateReturnHumidityAlarms(Equipment* equipment){ 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("RAHum Value", RAHum); - equipment->setModbus_Point("RAHumHighAlm Value", RAHumHighAlm); - equipment->setModbus_Point("RAHumLowAlm Value", RAHumLowAlm); - */ - if (returnHumidity->getValue() > returnHumHighAlarmSP->getValue()) { equipment->setModbus_Point("Alarm High Return Humidity", 1); equipment->setModbus_Point("Alarm Low Return Humidity", 0); 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 b7a5117..bca9ab6 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 @@ -48,10 +48,6 @@ RunningState::RunningState() { 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)); - //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")); 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 982a353..cd0f010 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,13 +46,6 @@ StandbyState::StandbyState() { 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, 0.0f, 1000)); - //addStrategy("Supply Air Temp Alarm Low SP", new SingleValueStrategy(72.0f, 0.0f, 1000)); } /** 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 7bf2f7f..695c5ac 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 @@ -23,7 +23,7 @@ #include const char *ssid = "ArduinoWifiB"; /**< @brief The SSID of the WiFi network. */ const char *password = "123abc456"; /**< @brief The password for the WiFi network. */ - IPAddress local_IP(172, 17, 32, 63); /**< @brief The static IP address for the device. */ + IPAddress local_IP(172, 17, 32, 66); /**< @brief The static IP address for the device. */ IPAddress gateway(172, 17, 32, 1); /**< @brief The gateway IP address. */ IPAddress subnet(255, 255, 255, 0); /**< @brief The subnet mask. */ From 08436c1df6fe21867f1f2d7d1ccfb7c2567f3cdd Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Fri, 12 Dec 2025 11:26:39 -0700 Subject: [PATCH 8/8] added comments --- .../CRAH/PHX3_CRAH_LIEBERT_80_SLAB_TCP/StateUtils.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) 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 339d5c8..7afd68b 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,12 @@ #include #endif +/** The purpose of this function is to change the RA Temp, SA Temp, RA Humidity values for the purpose of testing alarms in Ignition. + * There are LOW and HIGH coils, which when activated will set the analog to a low/high range. + * The NORMAL coil will send a one-shot to set the associated analog value back into a normal range. + * If in a RunningState, the analog value will follow it's normal function (typically a sawStrategy). + */ + void updateAnalogs(Equipment* equipment){ if (equipment->getModbus_Point("RA Temp NORMAL")->getValue()==1){ equipment->setModbus_Point("Return Air Temp", 84.0f); @@ -75,6 +81,7 @@ void updateAnalogs(Equipment* equipment){ } } +//This function updates the Alarm bit for the Return Air Temp 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"); @@ -94,6 +101,7 @@ void updateReturnAirTempAlarms(Equipment* equipment){ } } +// This function updates the Alarm bit for the Supply Air Temp 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"); @@ -113,6 +121,7 @@ void updateSupplyAirTempAlarms(Equipment* equipment){ } } +//This function updates the Alarm bit for the Return Humidity void updateReturnHumidityAlarms(Equipment* equipment){ Modbus_Point* returnHumidity = equipment -> getModbus_Point("Return Humidity"); Modbus_Point* returnHumHighAlarmSP = equipment->getModbus_Point("Return Humidity Alarm High SP");