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.
This commit is contained in:
RobertJDavis
2025-12-08 20:17:44 -06:00
parent 6dae38f8a5
commit 75c4b0169e
6 changed files with 97 additions and 34 deletions

View File

@@ -28,6 +28,54 @@
#include <ModbusRTU.h> #include <ModbusRTU.h>
#endif #endif
void updateAnalogs(Equipment<ModbusIP>* 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<ModbusIP>* equipment){ void updateReturnAirTempAlarms(Equipment<ModbusIP>* equipment){
Modbus_Point<ModbusIP>* returnAirTemp = equipment -> getModbus_Point("Return Air Temp"); Modbus_Point<ModbusIP>* returnAirTemp = equipment -> getModbus_Point("Return Air Temp");
Modbus_Point<ModbusIP>* returnTempHighAlarmSP = equipment->getModbus_Point("Return Air Temp Alarm High SP"); Modbus_Point<ModbusIP>* returnTempHighAlarmSP = equipment->getModbus_Point("Return Air Temp Alarm High SP");
@@ -44,12 +92,13 @@ void updateReturnAirTempAlarms(Equipment<ModbusIP>* equipment){
equipment->setModbus_Point("RATempLowAlm Value", RATempLowAlm); equipment->setModbus_Point("RATempLowAlm Value", RATempLowAlm);
if (returnAirTemp->getValue() < returnTempLowAlarmSP->getValue()) { if (returnAirTemp->getValue() < returnTempLowAlarmSP->getValue()) {
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", 1); equipment->setModbus_Point("Alarm High Return Air Temp", 0);
//returnTempHighAlarm->setValue(1); //returnTempHighAlarm->setValue(1);
} }
else if (returnAirTemp->getValue() < returnTempLowAlarmSP->getValue()) { else if (returnAirTemp->getValue() > returnTempHighAlarmSP->getValue()) {
equipment->setModbus_Point("Alarm Low Return Air Temp", 1); equipment->setModbus_Point("Alarm High Return Air Temp", 1);
equipment->setModbus_Point("Alarm Low Return Air Temp", 0);
//returnTempLowAlarm->setValue(1); //returnTempLowAlarm->setValue(1);
} }
else{ else{
@@ -77,9 +126,11 @@ void updateSupplyAirTempAlarms(Equipment<ModbusIP>* equipment){
if (supplyAirTemp->getValue() > supplyTempHighAlarmSP->getValue()) { if (supplyAirTemp->getValue() > supplyTempHighAlarmSP->getValue()) {
equipment->setModbus_Point("Alarm High Supply Temp", 1); equipment->setModbus_Point("Alarm High Supply Temp", 1);
equipment->setModbus_Point("Alarm Low Supply Temp", 0);
} }
else if (supplyAirTemp->getValue() < supplyTempLowAlarmSP->getValue()) { else if (supplyAirTemp->getValue() < supplyTempLowAlarmSP->getValue()) {
equipment->setModbus_Point("Alarm Low Supply Temp", 1); equipment->setModbus_Point("Alarm Low Supply Temp", 1);
equipment->setModbus_Point("Alarm High Supply Temp", 0);
} }
else{ else{
equipment->setModbus_Point("Alarm High Supply Temp", 0); equipment->setModbus_Point("Alarm High Supply Temp", 0);
@@ -102,9 +153,11 @@ void updateReturnHumidityAlarms(Equipment<ModbusIP>* equipment){
if (returnHumidity->getValue() > returnHumHighAlarmSP->getValue()) { if (returnHumidity->getValue() > returnHumHighAlarmSP->getValue()) {
equipment->setModbus_Point("Alarm High Return Humidity", 1); equipment->setModbus_Point("Alarm High Return Humidity", 1);
equipment->setModbus_Point("Alarm Low Return Humidity", 0);
} }
else if (returnHumidity->getValue() < returnHumLowAlarmSP->getValue()) { else if (returnHumidity->getValue() < returnHumLowAlarmSP->getValue()) {
equipment->setModbus_Point("Alarm Low Return Humidity", 1); equipment->setModbus_Point("Alarm Low Return Humidity", 1);
equipment->setModbus_Point("Alarm High Return Humidity", 0);
} }
else{ else{
equipment->setModbus_Point("Alarm High Return Humidity", 0); equipment->setModbus_Point("Alarm High Return Humidity", 0);
@@ -153,7 +206,6 @@ void updateAlarms(Equipment<ModbusIP>* equipment){
"Alarm High Supply Temp", "Alarm Low Supply Temp" "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 // If any Alarm Commands = 1, set the appropriate Alarm = 1 and increment counter for number of active alarms
int numAlarms = 0; int numAlarms = 0;
for (int i =0; i< alarmCommands.size() && i < alarmDescriptions.size(); ++i) { for (int i =0; i< alarmCommands.size() && i < alarmDescriptions.size(); ++i) {

View File

@@ -28,6 +28,7 @@
template <typename T> template <typename T>
class State; class State;
void updateAnalogs(Equipment<ModbusIP>* equipment);
void updateReturnAirTempAlarms(Equipment<ModbusIP>* equipment); void updateReturnAirTempAlarms(Equipment<ModbusIP>* equipment);
void updateSupplyAirTempAlarms(Equipment<ModbusIP>* equipment); void updateSupplyAirTempAlarms(Equipment<ModbusIP>* equipment);
void updateReturnHumidityAlarms(Equipment<ModbusIP>* equipment); void updateReturnHumidityAlarms(Equipment<ModbusIP>* equipment);

View File

@@ -34,9 +34,9 @@
template<> template<>
FailState<ModbusIP>::FailState(const std::vector<std::string>& activeAlarms) { FailState<ModbusIP>::FailState(const std::vector<std::string>& activeAlarms) {
addStrategy("Fan Speed", new RampStrategy(0.0f, 10.0f, 1000)); 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(25.0f, 35.0f, 1.0f, 2000));
addStrategy("Return Air Temp", new SingleValueStrategy(80.0f, 1.0f, 1000)); addStrategy("Return Air Temp", new SingleValueStrategy(80.0f, 1.0f, 3000));
addStrategy("Supply Air Temp", new SingleValueStrategy(80.0f, 1.0f, 1000)); addStrategy("Supply Air Temp", new SingleValueStrategy(76.0f, 1.0f, 3000));
addStrategy("Supply Air Flow", new RampStrategy(0.0f, 1.0f, 1000)); 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 1", new RampStrategy(0.0f, 5.0f, 1000));
addStrategy("Fluid Control Valve Position 2", 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<ModbusIP>* FailState<ModbusIP>::update(Equipment<ModbusIP>* equipment) {
Serial.println("Fail update function"); Serial.println("Fail update function");
setPointValue(equipment, "System On/Off Control", 0); // my programming logic: when clear fault, should be sent to Standby Mode setPointValue(equipment, "System On/Off Control", 0); // my programming logic: when clear fault, should be sent to Standby Mode
updateAnalogs(equipment);
updateReturnAirTempAlarms(equipment); updateReturnAirTempAlarms(equipment);
updateSupplyAirTempAlarms(equipment); updateSupplyAirTempAlarms(equipment);
updateReturnHumidityAlarms(equipment); updateReturnHumidityAlarms(equipment);

View File

@@ -44,9 +44,9 @@
*/ */
template<> template<>
RunningState<ModbusIP>::RunningState() { RunningState<ModbusIP>::RunningState() {
addStrategy("Return Humidity", new SawStrategy(2.0f, 80.0f, 2.0f, 1000)); addStrategy("Return Humidity", new SawStrategy(25.0f, 35.0f, 1.0f, 2000));
addStrategy("Return Air Temp", new SawStrategy(66.0f, 110.0f, 2.0f, 1000)); addStrategy("Return Air Temp", new SawStrategy(78.0f, 88.0f, 1.0f, 3000));
addStrategy("Supply Air Temp", new SawStrategy(68.0f, 86.0f, 1.0f, 1000)); 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 Humidity", new SingleValueStrategy(10.0f, 0.0f, 1000));
//addStrategy("Return Air Temp", new SingleValueStrategy(50.0f, 0.0f, 1000)); //addStrategy("Return Air Temp", new SingleValueStrategy(50.0f, 0.0f, 1000));
@@ -77,6 +77,7 @@ template<>
State<ModbusIP>* RunningState<ModbusIP>::update(Equipment<ModbusIP>* equipment) { State<ModbusIP>* RunningState<ModbusIP>::update(Equipment<ModbusIP>* equipment) {
Serial.println("Running update function"); Serial.println("Running update function");
updateAnalogs(equipment);
updateReturnAirTempAlarms(equipment); updateReturnAirTempAlarms(equipment);
updateSupplyAirTempAlarms(equipment); updateSupplyAirTempAlarms(equipment);
updateReturnHumidityAlarms(equipment); updateReturnHumidityAlarms(equipment);

View File

@@ -40,19 +40,19 @@
template<> template<>
StandbyState<ModbusIP>::StandbyState() { StandbyState<ModbusIP>::StandbyState() {
addStrategy("Fan Speed", new RampStrategy(0.0f, 10.0f, 1000)); addStrategy("Fan Speed", new RampStrategy(0.0f, 10.0f, 1000));
addStrategy("Return Humidity", new SawStrategy(0.0f, 80.0f, 2.0f, 1000)); addStrategy("Return Humidity", new SawStrategy(25.0f, 35.0f, 1.0f, 2000));
addStrategy("Return Air Temp", new SingleValueStrategy(80.0f, 1.0f, 1000)); addStrategy("Return Air Temp", new SingleValueStrategy(80.0f, 1.0f, 3000));
addStrategy("Supply Air Temp", new SingleValueStrategy(80.0f, 1.0f, 1000)); addStrategy("Supply Air Temp", new SingleValueStrategy(76.0f, 1.0f, 3000));
addStrategy("Supply Air Flow", new RampStrategy(0.0f, 1.0f, 1000)); 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 1", new RampStrategy(0.0f, 5.0f, 1000));
addStrategy("Fluid Control Valve Position 2", 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 High SP", new SingleValueStrategy(60.0f, 0.0f, 1000));
addStrategy("Return Humidity Alarm Low SP", new SingleValueStrategy(20.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 High SP", new SingleValueStrategy(100.0f, 0.0f, 1000));
addStrategy("Return Air Temp Alarm Low SP", new SingleValueStrategy(72.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 High SP", new SingleValueStrategy(78.0f, 0.0f, 1000));
addStrategy("Supply Air Temp Alarm Low SP", new SingleValueStrategy(72.0f, 1.0f, 1000)); //addStrategy("Supply Air Temp Alarm Low SP", new SingleValueStrategy(72.0f, 0.0f, 1000));
} }
/** /**
@@ -74,6 +74,7 @@ State<ModbusIP>* StandbyState<ModbusIP>::update(Equipment<ModbusIP>* equipment)
// STATE control, add conditions if change to a different state is needed // STATE control, add conditions if change to a different state is needed
Serial.println("Standby update function"); Serial.println("Standby update function");
updateAnalogs(equipment);
updateReturnAirTempAlarms(equipment); updateReturnAirTempAlarms(equipment);
updateSupplyAirTempAlarms(equipment); updateSupplyAirTempAlarms(equipment);
updateReturnHumidityAlarms(equipment); updateReturnHumidityAlarms(equipment);

View File

@@ -93,8 +93,17 @@ modbusMap mb_map[] =
{COIL, 30, 0, "Alarm Compressor 1B Overload ON"}, // For Arduino testing only {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, 31, 0, "Alarm Compressor 2B Overload ON"}, // For Arduino testing only
//{COIL, 32, 0, "Return Humidity LOW"}, // For Arduino testing only {COIL, 32, 0, "RA Temp Low Alarm ON"}, // For Arduino testing only - sets RA Temp = 60
//{COIL, 33, 0, "Return Humidity HIGH"}, // For Arduino testing only {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, 24, 0, "Supply Fan Status"},
{DI, 25, 0, "Cooling 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, 99, 0, "Unit Status"}, // 0:off, 1:on, 2:standby
{IR, 102, 0, "Fan Speed"}, {IR, 102, 0, "Fan Speed"},
{IR_10x, 129, 0, "Return Humidity"}, {IR_10x, 129, 250, "Return Humidity"},
{IR_10x, 742, 0, "Return Air Temp"}, {IR_10x, 742, 840, "Return Air Temp"},
{IR_10x, 743, 0, "Supply Air Temp"}, {IR_10x, 743, 760, "Supply Air Temp"},
{IR, 1465, 0, "Supply Air Flow"}, {IR, 1465, 0, "Supply Air Flow"},
{IR, 2050, 0, "Fluid Control Valve Position 1"}, {IR, 2050, 0, "Fluid Control Valve Position 1"},
{IR, 2051, 0, "Fluid Control Valve Position 2"}, {IR, 2051, 0, "Fluid Control Valve Position 2"},
{HR_10x, 53, 60, "Return Humidity Alarm High SP"}, {HR_10x, 53, 600, "Return Humidity Alarm High SP"},
{HR_10x, 54, 20, "Return Humidity Alarm Low SP"}, {HR_10x, 54, 200, "Return Humidity Alarm Low SP"},
{HR, 56, 0, "RAHum Value"}, {HR, 56, 0, "RAHum Value"},
{HR, 57, 0, "RAHumHighAlm Value"}, {HR, 57, 0, "RAHumHighAlm Value"},
{HR, 58, 0, "RAHumLowAlm Value"}, {HR, 58, 0, "RAHumLowAlm Value"},
{HR, 732, 73, "Supply Air Temp Setpoint"}, {HR, 732, 73, "Supply Air Temp Setpoint"},
{HR_10x, 738, 1000, "Return Air Temp Alarm High SP"},
{HR_10x, 738, 0, "Return Air Temp Alarm High SP"}, {HR_10x, 739, 720, "Return Air Temp Alarm Low SP"},
{HR_10x, 739, 0, "Return Air Temp Alarm Low SP"},
{HR, 741, 0, "RATemp Value"}, {HR, 741, 0, "RATemp Value"},
{HR, 742, 0, "RATempHighAlm Value"}, {HR, 742, 0, "RATempHighAlm Value"},
{HR, 743, 0, "RATempLowAlm Value"}, {HR, 743, 0, "RATempLowAlm Value"},
{HR, 753, 80, "Return Air Temp Setpoint"}, {HR, 753, 80, "Return Air Temp Setpoint"},
{HR_10x, 754, 78, "Supply Air Temp Alarm High SP"}, {HR_10x, 754, 780, "Supply Air Temp Alarm High SP"},
{HR_10x, 755, 72, "Supply Air Temp Alarm Low SP"}, {HR_10x, 755, 720, "Supply Air Temp Alarm Low SP"},
{HR, 757, 0, "SATemp Value"}, {HR, 757, 0, "SATemp Value"},
{HR, 758, 0, "SATempHighAlm Value"}, {HR, 758, 0, "SATempHighAlm Value"},
{HR, 759, 0, "SATempLowAlm Value"}, {HR, 759, 0, "SATempLowAlm Value"},