40029, HB registers

Updated Fan speed feedback calculation, Heartbeat registers
This commit is contained in:
RobertJDavis
2025-12-02 16:35:25 -07:00
parent 245d01ed61
commit 7bcbda8f38
2 changed files with 26 additions and 22 deletions

View File

@@ -44,15 +44,15 @@ template<>
RunningState<ModbusIP>::RunningState() {
addStrategy("Fan Min Speed", new SingleValueStrategy(30.0f, 0.0f, 1000));
addStrategy("Fan Max Speed", new SingleValueStrategy(100.0f, 0.0f, 1000));
addStrategy("Speed Fan 1", new RampStrategy(0.0f, 100.0f, 200));
addStrategy("Speed Fan 2", new RampStrategy(0.0f, 100.0f, 200));
addStrategy("Speed Fan 3", new RampStrategy(0.0f, 100.0f, 200));
addStrategy("Speed Fan 4", new RampStrategy(0.0f, 100.0f, 200));
addStrategy("Speed Fan 5", new RampStrategy(0.0f, 100.0f, 200));
addStrategy("Speed Fan 6", new RampStrategy(0.0f, 100.0f, 200));
addStrategy("Speed Fan 7", new RampStrategy(0.0f, 100.0f, 200));
addStrategy("Speed Fan 8", new RampStrategy(0.0f, 100.0f, 200));
addStrategy("Speed Fan 9", new RampStrategy(0.0f, 100.0f, 200));
addStrategy("Speed Fan 1", new RampStrategy(0.0f, 100.0f, 1000));
addStrategy("Speed Fan 2", new RampStrategy(0.0f, 100.0f, 1000));
addStrategy("Speed Fan 3", new RampStrategy(0.0f, 100.0f, 1000));
addStrategy("Speed Fan 4", new RampStrategy(0.0f, 100.0f, 1000));
addStrategy("Speed Fan 5", new RampStrategy(0.0f, 100.0f, 1000));
addStrategy("Speed Fan 6", new RampStrategy(0.0f, 100.0f, 1000));
addStrategy("Speed Fan 7", new RampStrategy(0.0f, 100.0f, 1000));
addStrategy("Speed Fan 8", new RampStrategy(0.0f, 100.0f, 1000));
addStrategy("Speed Fan 9", new RampStrategy(0.0f, 100.0f, 1000));
addStrategy("Amps Fan 1", new RampStrategy(15.0f, 2.5f, 1000));
addStrategy("Amps Fan 2", new RampStrategy(15.0f, 2.5f, 1000));
addStrategy("Amps Fan 3", new RampStrategy(15.0f, 2.5f, 1000));
@@ -73,11 +73,11 @@ RunningState<ModbusIP>::RunningState() {
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(70.0f, 80.0f, 0.8f, 1000));
addStrategy("Filter Differential Pressure", new SawStrategy(0.0f, 5.0f, 0.2f, 1000));
addStrategy("Return Air Temp", new SawStrategy(84.0f, 87.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));
addStrategy("Fan Speed Feedback", new RampStrategy(0.0f, 1.0f, 200));
addStrategy("Fan Speed Feedback", new RampStrategy(0.0f, 2.0f, 200));
}
/**
@@ -121,12 +121,14 @@ State<ModbusIP>* RunningState<ModbusIP>::update(Equipment<ModbusIP>* equipment)
// This will update the Fan Speed Setpoint dynamically while in run mode. Fan Speed Setpoint changed through Modscan.
// This functioanlity matches the UMAS SOO specifically for how it calculates Speed Setpoint.
float BMS_Speed_Setpoint = getPointValue(equipment, "Fan Speed Setpoint");
float BMS_Speed_Setpoint_Pct = BMS_Speed_Setpoint / 100.0f;
float Fan_Min_Speed = getPointValue(equipment, "Fan Min Speed");
float Fan_Max_Speed = getPointValue(equipment, "Fan Max Speed");
float Fan_Nominal_Speed = 1900.0f;
float Fan_Speed_Setpoint = (BMS_Speed_Setpoint_Pct * (Fan_Max_Speed - Fan_Min_Speed) + Fan_Min_Speed)/100.0f * Fan_Nominal_Speed;
float BMS_Speed_Setpoint = getPointValue(equipment, "Fan Speed Setpoint");
float BMS_Speed_Setpoint_Pct = BMS_Speed_Setpoint / 100.0f;
float Fan_Speed_Setpoint = BMS_Speed_Setpoint_Pct * (Fan_Max_Speed - Fan_Min_Speed) + Fan_Min_Speed;
float Fan_Speed_Setpoint_RPM = Fan_Speed_Setpoint / 100.0f * Fan_Nominal_Speed;
for (int i = 0; i < 10; i++){
std::string pointName = "Speed Fan " + std::to_string(i);
Strategy_Behavior* strat = getStrategy(pointName);
@@ -134,12 +136,14 @@ State<ModbusIP>* RunningState<ModbusIP>::update(Equipment<ModbusIP>* equipment)
RampStrategy* ramp = static_cast<RampStrategy*>(strat);
if (ramp){
if (BMS_Speed_Setpoint > 100){
Fan_Speed_Setpoint = Fan_Max_Speed / 100.0f * Fan_Nominal_Speed;
Fan_Speed_Setpoint = Fan_Max_Speed;
Fan_Speed_Setpoint_RPM = Fan_Max_Speed / 100.0f * Fan_Nominal_Speed;
}
else if (BMS_Speed_Setpoint < 0){
Fan_Speed_Setpoint = Fan_Min_Speed / 100.0f * Fan_Nominal_Speed;
Fan_Speed_Setpoint = Fan_Min_Speed;
Fan_Speed_Setpoint_RPM = Fan_Min_Speed / 100.0f * Fan_Nominal_Speed;
}
ramp->setTarget(Fan_Speed_Setpoint);
ramp->setTarget(Fan_Speed_Setpoint_RPM);
}
}
}
@@ -147,7 +151,7 @@ State<ModbusIP>* RunningState<ModbusIP>::update(Equipment<ModbusIP>* equipment)
// Fan Speed Feedback dynamically ramp to Fan Speed Setpoint sent to Arduino
Strategy_Behavior* speedFeedback = getStrategy("Fan Speed Feedback");
if (speedFeedback){
static_cast<RampStrategy*>(speedFeedback)->setTarget(BMS_Speed_Setpoint);
static_cast<RampStrategy*>(speedFeedback)->setTarget(Fan_Speed_Setpoint);
}
// Apply any strategies defined for the standby state

View File

@@ -135,8 +135,7 @@ modbusMap mb_map[] =
{IR_FLOAT, 73, 0, "Amps Fan 6"},
{IR_FLOAT, 75, 0, "Amps Fan 7"},
{IR_FLOAT, 77, 0, "Amps Fan 8"},
{IR_FLOAT, 79, 0, "Amps Fan 9"},
{IR_FLOAT, 99, 0, "CRAH Heartbeat"},
{IR_FLOAT, 79, 0, "Amps Fan 9"},
{HR_FLOAT, 1, 0, "High Return Air Temp Setpoint"}, // default: 100, set locally on unit
{HR_FLOAT, 3, 0, "Low Return Air Temp Setpoint"}, // default: 72, set locally on unit
@@ -152,7 +151,8 @@ modbusMap mb_map[] =
{HR, 25, 0, "BMS Control Source"}, // Receive signal from PLC 0:Speed, 1:Room Temp
{HR, 26, 2, "BMS Enable Source"}, // Receive signal from PLC 0:Keypad, 1:DI, 2:BMS
{HR_FLOAT, 28, 0, "Fan Speed Feedback"},
{HR_FLOAT, 99, 0, "PLC Heartbeat"}, // This will be seconds from PLC - if doesn't change for 15 seconds set BMS Enable Source to Local (0)
{HR, 95, 0, "CRAH Heartbeat"},
{HR, 96, 0, "BMS Heartbeat"}, // This will be seconds from PLC - if doesn't change for 15 seconds set BMS Enable Source to Local (0)
};
//Size of modbus map used in FOR cycles, automatically calculated.