This commit is contained in:
2026-06-22 13:27:32 +02:00
parent 0d90e772fe
commit c12dc4fefb
+213 -5
View File
@@ -499,27 +499,235 @@ INT itcPressureOptimizer::mitc_pressc_recalculate(MITCPRESSC_INFO *info) {
}
return FE_SUCCESS;
}
/*
_Pressure 0 D
_MercuryITCSetpoint 1
_MercuryITCTemperat(ure) 2
_MercuryITCPower 3
_AveragedPower 4
_CalcPressure 5
_PressureControlMode 6 D
_SetRCPressure 7 D
_PressureCalc_minPressure 8 D
_PressureCalc_maxPressure 9 D
_PressureCalc_const1 10 D
_PressureCalc_const2 11 D
*/
INT itcPressureOptimizer::mitc_pressc_set(MITCPRESSC_INFO *info, INT channel,
float value) {
return 0;
switch (channel) {
case 0: // PRESSURE - only set pressure if not in calculated mode
if (info->last_demand[6] != 1.0f) {
if (info->last_demand[channel] != value) {
info->last_demand[channel] = value;
info->last_demand_set[channel] = ss_time();
info->recalculate = TRUE;
}
} else {
if (std::abs(info->last_demand[channel] - value) > 0.2f) {
cm_msg(MLOG, "",
"PressureControlMode is set to calculated! "
"- Not setting pressure!");
}
}
break;
case 6: // Pressure Control Mode : 1 = Calc(automatic), 0 = Man
if ((info->last_demand[channel] != 1.0f) && (value == 1.0f)) {
info->last_demand[channel] = 1.0f;
info->last_demand_set[channel] = ss_time();
cm_msg(MLOG, "", "Pressure Control Mode is set to Calculated");
info->recalculate = TRUE;
} else if ((info->last_demand[channel] != 0.0f) && (value != 1.0f)) {
info->last_demand[channel] = 0.0f;
info->last_demand_set[channel] = ss_time();
cm_msg(MLOG, "", "Pressure Control Mode is set to Manual");
info->recalculate = TRUE;
}
break;
case 7: // set Pressure for Mercury ITC: 1 = Update Mercury ITC Pressure
// Setpoint
// 0 = do not
if ((info->last_demand[channel] != 1.0f) && (value == 1.0f)) {
info->last_demand[channel] = 1.0f;
info->last_demand_set[channel] = ss_time();
cm_msg(MLOG, "",
"MPC_SetPressure is enabled - Setting Mercury ITC "
"Pressure Setpoint in ODB");
} else if ((info->last_demand[channel] != 0.0f) && (value != 1.0f)) {
info->last_demand[channel] = 0.0f;
info->last_demand_set[channel] = ss_time();
cm_msg(MLOG, "",
"MPC_SetPressure is disabled - Not Setting Mercury ITC "
"Pressure Setpoint in ODB");
info->recalculate = TRUE;
}
break;
case 8: // min pressure
case 9: // max pressure
case 10: // pressure c1
case 11: // pressure c2
if (info->last_demand[channel] != value) {
char name[NAME_LENGTH],
name1[NAME_LENGTH]; // TODO : change to std::string
mitc_pressc_get_name(info, channel, name);
if (info->initialised)
cm_msg(MLOG, "", "Channel %d (%s): output was %f now set to %f",
channel, name, *(info->last_demand + channel), value);
else
cm_msg(MLOG, "", "%s (Channel %d): Output is set to %f", name,
channel, value);
if (channel == 9) {
if (info->last_demand[channel - 1] >= value) {
mitc_pressc_get_name(info, channel - 1, name1);
cm_msg(MERROR, "mitc_pressc_set",
"%s should be larger than %s (%f)", name, name1,
*(info->last_demand + channel - 1));
}
}
info->last_demand[channel] = value;
info->last_demand_set[channel] = ss_time();
info->recalculate = TRUE;
}
break;
}
// all demand values set from ODB during init?
if ((channel == info->num_channels - 1) && !info->initialised) {
info->initialised = TRUE; // flag init done
info->recalculate = TRUE; // flag to recalculate
}
mitc_pressc_recalculate(info);
return FE_SUCCESS;
}
INT itcPressureOptimizer::mitc_pressc_get_demand(MITCPRESSC_INFO *info,
INT channel, float *pvalue) {
return 0;
if (pvalue) {
if ((channel >= 0) && (channel < info->num_channels) &&
(info->last_demand)) {
if (*pvalue != info->last_demand[channel])
cm_msg(MLOG, "", "Channel %d: Output was %f - now set to %f",
channel, *pvalue, *(info->last_demand + channel));
*pvalue = info->last_demand[channel];
} else {
*pvalue = -1.0f;
}
}
return FE_SUCCESS;
}
INT itcPressureOptimizer::mitc_pressc_get(MITCPRESSC_INFO *info, INT channel,
float *pvalue) {
return 0;
// update variox readout
mitc_pressc_update_mitc_input(info);
// update pressure demand readout
mitc_pressc_update_pressure_demanded(info);
// recalculate pressure and nv%
mitc_pressc_recalculate(info);
if ((channel == info->num_channels - 1) && !info->initialised)
ss_sleep(1000);
if (pvalue) {
if ((channel >= 0) && (channel < info->num_channels) &&
info->last_measured) {
if (*pvalue != info->last_measured[channel]) {
*pvalue = info->last_measured[channel];
}
} else {
*pvalue = -1.0f;
}
}
return FE_SUCCESS;
}
/*
Default threshold for measured values index threshold
----------------------------------------------------------------------
_Pressure 0 0.01
_MercuryITCSetpoint 1 0.001
_MercuryITCTemperat(ure) 2 0.0001
_MercuryITCPower 3 0.1
_AveragedPower 4 0.01
_CalcPressure 5 0.01
_PressureControlMode 6 -
_SetRCPressure 7 -
_PressureCalc_minPressure 8 0.01
_PressureCalc_maxPressure 9 0.01
_PressureCalc_const1 10 0.01
_PressureCalc_const2 11 0.01
*/
INT itcPressureOptimizer::mitc_pressc_get_default_threshold(
MITCPRESSC_INFO *info, INT channel, float *pvalue) {
return 0;
switch (channel) {
case 0:
case 4:
case 5:
case 8:
case 9:
case 10:
case 11:
*pvalue = 0.01;
break;
case 3:
*pvalue = 0.1;
break;
case 1:
*pvalue = 0.001;
break;
case 2:
*pvalue = 0.0001;
break;
default:
*pvalue = 1.0;
}
return FE_SUCCESS;
}
INT itcPressureOptimizer::mitc_pressc_get_name(MITCPRESSC_INFO *info,
INT channel, char *name) {
return 0;
if (name != nullptr) {
if (channel == 0)
strcpy(name, "Pressure Setpoint");
else if (channel == 1)
strcpy(name, "MPC_ITC_VarioxSP");
else if (channel == 2)
strcpy(name, "MPC_ITC_VarioxTemp");
else if (channel == 3)
strcpy(name, "MPC_ITC_VarioxPower");
else if (channel == 4)
strcpy(name, "MPC_AveragedPower");
else if (channel == 5)
strcpy(name, "MPC_CalcPressure");
else if (channel == 6)
strcpy(name, "Pressure Control Mode");
else if (channel == 7)
strcpy(name, "MPC_SetPressure");
else if (channel == 8)
strcpy(name, "MPC_PressCalcminPress");
else if (channel == 9)
strcpy(name, "MPC_PressCalcmaxPress");
else if (channel == 10)
strcpy(name, "MPC_PressCalc_const1");
else if (channel == 11)
strcpy(name, "MPC_PressCalc_const2");
else
strcpy(name, "NONE");
}
return FE_SUCCESS;
}