updates from EG CRAH

This commit is contained in:
RobertJDavis
2025-12-09 08:03:23 -06:00
parent 9f48ade186
commit c49c99869d
6 changed files with 14 additions and 59 deletions

View File

@@ -53,46 +53,34 @@ void updateControlMode(Equipment<ModbusIP>* equipment){
equipment->setModbus_Point("Control Mode Selected", Control_Mode_Selected);
}
/**
* @brief The purpose of this function is for testing the RA Temp, SA Temp, and RA Humidity alarms (Ignition HMI display)
* User will manually set Alarms through Modscan coils, which will change RA Temp or RA Humidity accordingly.
* The RA Temp alarm limits (reference Ignition UDT) are 72, 100.
* The SA Temp alarm limits (reference Ignition UDT) are 72, 78.
* The RA Humidity alarm limits (reference Ignition UDT) are 20, 60.
* If an associated alarm coil is not active, the analog values are set to a safe, un-alarmed value.
*
* This is a function used in the update() of the Running State.
*
*/
void updateAnalogs(Equipment<ModbusIP>* equipment){
if (equipment->getModbus_Point("RA Temp NORMAL")->getValue()==1){
equipment->setModbus_Point("Return Air Temp", 86.0f);
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", 62.0f);
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", 106.0f);
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 Air Humidity", 25.0f);
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 Air Humidity", 6.0f);
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 Air Humidity", 80.0f);
equipment->setModbus_Point("Return Humidity", 80.0f);
equipment->setModbus_Point("RA Humidity Low Alarm ON", 0);
}
@@ -117,32 +105,18 @@ void updateReturnAirTempAlarms(Equipment<ModbusIP>* equipment){
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>* returnTempLowAlarmSP = equipment->getModbus_Point("Return Air Temp Alarm Low SP");
//Modbus_Point<ModbusIP>* returnTempHighAlarm = equipment->getModbus_Point("Alarm High Return Air Temp");
//Modbus_Point<ModbusIP>* 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);
}
}
@@ -152,16 +126,6 @@ void updateSupplyAirTempAlarms(Equipment<ModbusIP>* equipment){
Modbus_Point<ModbusIP>* supplyTempHighAlarmSP = equipment->getModbus_Point("Supply Air Temp Alarm High SP");
Modbus_Point<ModbusIP>* 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);
@@ -181,16 +145,6 @@ void updateReturnHumidityAlarms(Equipment<ModbusIP>* equipment){
Modbus_Point<ModbusIP>* returnHumHighAlarmSP = equipment->getModbus_Point("Return Humidity Alarm High SP");
Modbus_Point<ModbusIP>* 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);
@@ -251,6 +205,8 @@ void updateAlarms(Equipment<ModbusIP>* equipment){
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);
}

View File

@@ -34,7 +34,6 @@ class State;
* @return The selected control mode (int).
*/
void updateControlMode(Equipment<ModbusIP>* equipment);
void updateAnalogs(Equipment<ModbusIP>* equipment);
void updateReturnAirTempAlarms(Equipment<ModbusIP>* equipment);
void updateSupplyAirTempAlarms(Equipment<ModbusIP>* equipment);

View File

@@ -42,7 +42,7 @@ FailState<ModbusIP>::FailState(const std::vector<std::string>& activeAlarms) {
addStrategy("CW Valve Position", new RampStrategy(0.0f, 5.0f, 1000));
addStrategy("Supply Air Temp", new SingleValueStrategy(74.0f, 1.0f, 1000));
addStrategy("Return Air Temp", new SingleValueStrategy(86.0f, 1.0f, 1000));
addStrategy("Return Air Humidity", new SingleValueStrategy(35.0f, 2.0f, 1000));
addStrategy("Return Humidity", new SingleValueStrategy(30.0f, 1.0f, 3000));
addStrategy("Speed Fan 1", new RampStrategy(0.0f, 300.0f, 1000));
addStrategy("Speed Fan 2", new RampStrategy(0.0f, 300.0f, 1000));
addStrategy("Speed Fan 3", new RampStrategy(0.0f, 300.0f, 1000));

View File

@@ -71,9 +71,9 @@ RunningState<ModbusIP>::RunningState() {
addStrategy("Operating Hours Fan 7", new TotalizerStrategy(1000));
addStrategy("Operating Hours Fan 8", new TotalizerStrategy(1000));
addStrategy("Operating Hours Fan 9", new TotalizerStrategy(1000));
addStrategy("Supply Air Temp", new SawStrategy(60.0f, 100.0f, 2.2f, 1000)); // Won't initialize at lower bound; always initializes at 0 b/c FLOAT; initialize manually via Modscan
addStrategy("Return Air Humidity", new SawStrategy(25.0f, 40.0f, 1.1f, 1000));
addStrategy("Return Air Temp", new SawStrategy(84.0f, 87.0f, 0.2f, 1000));
addStrategy("Supply Air Temp", new SawStrategy(73.0f, 77.0f, 0.2f, 1000)); // Won't initialize at lower bound; always initializes at 0 b/c FLOAT; initialize manually via Modscan
addStrategy("Return Humidity", new SawStrategy(25.0f, 35.0f, 0.2f, 1000));
addStrategy("Return Air Temp", new SawStrategy(80.0f, 90.0f, 0.2f, 1000));
addStrategy("Filter Differential Pressure", new SawStrategy(0.1f, 5.1f, 0.2f, 1000));
addStrategy("CW Valve Position", new PIDStrategy("Supply Air Temp Setpoint", 1000, "Supply Air Temp")); // SAT must be greater than SAT Setpoint for this PID to work.
addStrategy("CRAH Heartbeat", new SawStrategy(0.0f, 60.0f, 1.0f, 1000));

View File

@@ -43,7 +43,7 @@ StandbyState<ModbusIP>::StandbyState() {
addStrategy("CW Valve Position", new RampStrategy(0.0f, 5.0f, 1000));
addStrategy("Supply Air Temp", new SingleValueStrategy(76.0f, 1.0f, 2000));
addStrategy("Return Air Temp", new SingleValueStrategy(86.0f, 1.0f, 3000));
addStrategy("Return Air Humidity", new SingleValueStrategy(25.0f, 1.0f, 4000));
addStrategy("Return Humidity", new SingleValueStrategy(25.0f, 1.0f, 4000));
addStrategy("Speed Fan 1", new RampStrategy(0.0f, 300.0f, 1000));
addStrategy("Speed Fan 2", new RampStrategy(0.0f, 300.0f, 1000));
addStrategy("Speed Fan 3", new RampStrategy(0.0f, 300.0f, 1000));

View File

@@ -101,7 +101,7 @@ modbusMap mb_map[] =
{DI, 16, 0, "Alarm Fire"},
{IR_FLOAT, 1, 0, "Supply Air Temp"},
{IR_FLOAT, 3, 0, "Return Air Humidity"}, // Ignition visual only
{IR_FLOAT, 3, 0, "Return Humidity"}, // Ignition visual only
{IR_FLOAT, 5, 0, "Return Air Temp"}, // Send to PLC
{IR_FLOAT, 7, 0, "Filter Differential Pressure"}, // sawStrategy between 0 and 5
{IR_FLOAT, 9, 0, "CW Valve Position"},