This commit is contained in:
2026-07-06 15:34:56 +02:00
parent 90e61ef380
commit 4e1135dfb5
2 changed files with 86 additions and 21 deletions
+83 -20
View File
@@ -14,6 +14,8 @@ itcPressureOptimizer::itcPressureOptimizer(std::string equipmentName,
const char *equipmentFilename,
int channel)
: TMFeEquipment(equipmentName.c_str(), equipmentFilename) {
fEqConfReadOnlyWhenRunning = false;
fEqConfPeriodMilliSec = 100;
this->equipmentPath = std::string("/Equipment/") + equipmentName;
info.num_channels = channel;
}
@@ -25,14 +27,24 @@ itcPressureOptimizer::HandleInit(const std::vector<std::string> &args) {
}
void itcPressureOptimizer::HandlePeriodic() {
midas::odb o(this->equipmentPath + "/" + Configuration::VARIABLE_DIR);
for (int i = 0; i < info.num_channels; i++) {
info.last_measured[i] = o[Configuration::MEASURED_VARNAME.c_str()][i];
info.last_demand[i] = o[Configuration::DEMAND_VARNAME.c_str()][i];
}
this->mitc_pressc_update_mitc_input();
this->mitc_pressc_update_pressure_demanded();
this->mitc_pressc_recalculate();
for (int i = 0; i < info.num_channels; i++) {
o[Configuration::MEASURED_VARNAME.c_str()][i] = info.last_measured[i];
o[Configuration::DEMAND_VARNAME.c_str()][i] = info.last_demand[i];
}
}
INT itcPressureOptimizer::mitc_pressc_init() {
/*
cm_get_experiment_database(&hDB, NULL);
*/
int status = SUCCESS;
bool isDefaultNameExists;
bool isDefaultThresholdExists;
@@ -147,6 +159,7 @@ INT itcPressureOptimizer::mitc_pressc_init() {
}
info.mitcPath = Configuration::SLASH + Configuration::EQUIPMENT_DIR +
Configuration::SLASH +
info.mitcpressc_settings.mitcequipment +
Configuration::SLASH + Configuration::VARIABLE_DIR;
@@ -163,7 +176,6 @@ INT itcPressureOptimizer::mitc_pressc_init() {
info.last_press_mitc_output = 0;
info.recalculate = TRUE;
info.pending = TRUE;
// info.mitc_input = NULL;
info.press_mitc_output = -1.0f;
info.nvals_mitc_input = 0;
info.nvals_mitc_output = 0;
@@ -297,6 +309,21 @@ INT itcPressureOptimizer::mitc_pressc_init() {
// this is done in mitc_pressc_set() when the last parameter is
// initialized
/*
Hot link
*/
midas::odb to_watch(this->equipmentPath + "/" +
Configuration::VARIABLE_DIR + "/" +
Configuration::DEMAND_VARNAME);
to_watch.watch([&](midas::odb &arg) {
midas::odb o(this->equipmentPath + "/" + Configuration::VARIABLE_DIR);
int index = arg.get_last_index();
float value = o[Configuration::DEMAND_VARNAME][arg.get_last_index()];
this->mitc_pressc_set(index, value);
});
return FE_SUCCESS;
}
@@ -323,6 +350,14 @@ INT itcPressureOptimizer::mitc_pressc_update_mitc_input() {
}
float tpow;
{
std::string mitc_input_path = std::string("/Equipment/") +
info.mitcpressc_settings.mitcequipment +
"/" + Configuration::VARIABLE_DIR;
midas::odb o(mitc_input_path.c_str());
info.mitc_input = o[Configuration::INPUT_VARNAME.c_str()];
}
// TODO : Understand what this piece of code is used, and does the float
// condition correct ... "!=" is suspect
@@ -333,7 +368,11 @@ INT itcPressureOptimizer::mitc_pressc_update_mitc_input() {
DWORD curtime;
// measured MITCPRESSC_MercuryITC Loop0 Temperature Setpoint 1
printf("update temps\n");
if ((info.mitc_input[info.mitcpressc_settings.getvarioxspindex]) != -1) {
printf("last measured\n");
printf("index %d value %f\n", info.mitcpressc_settings.getvarioxspindex,
info.mitc_input[info.mitcpressc_settings.getvarioxspindex]);
if (info.last_measured[1] !=
info.mitc_input[info.mitcpressc_settings.getvarioxspindex]) {
@@ -439,8 +478,10 @@ INT itcPressureOptimizer::mitc_pressc_update_pressure_demanded() {
}
INT itcPressureOptimizer::mitc_pressc_recalculate() {
if (!info.initialised)
if (!info.initialised) {
printf("not initialised\n");
return FE_SUCCESS;
}
if (info.pending) {
info.recalculate = TRUE;
@@ -460,6 +501,7 @@ INT itcPressureOptimizer::mitc_pressc_recalculate() {
if (info.last_measured[4] >= 0.f) {
// Calculate presure
printf("calculate pressure \n");
info.pending = FALSE;
@@ -483,11 +525,12 @@ INT itcPressureOptimizer::mitc_pressc_recalculate() {
// if (p > pmax) p = pmax
c2contrib = info.last_measured[4] * info.last_demand[11];
c1contrib = info.last_demand[10] * info.last_measured[2] -
info.last_measured[1] - c2contrib;
c1contrib =
info.last_demand[10] *
(info.last_measured[2] - info.last_measured[1] - c2contrib);
press = info.last_demand[8] + c1contrib;
info.last_measured[10] - c1contrib;
info.last_measured[10] = c1contrib;
if (c2contrib != 0.0f)
info.last_measured[11] = -c2contrib * info.last_demand[10];
@@ -502,7 +545,7 @@ INT itcPressureOptimizer::mitc_pressc_recalculate() {
press = info.last_demand[8];
// Presure larger than max? -> take max
if (press < info.last_demand[9])
if (press > info.last_demand[9])
press = info.last_demand[9];
// update measured of MITCPRESSC_CalcPressure 5
@@ -518,6 +561,7 @@ INT itcPressureOptimizer::mitc_pressc_recalculate() {
// Check of hkey_demand is missing
if (fabsf(info.last_demand[0] - presst) >= 0.05f) {
midas::odb o(this->equipmentPath);
printf("%f is a new value\n", presst);
o[Configuration::DEMANDE_PATH.c_str()][0] = presst;
}
info.last_demand[0] = presst;
@@ -677,18 +721,37 @@ INT itcPressureOptimizer::mitc_pressc_set(INT channel, float value) {
return FE_SUCCESS;
}
INT itcPressureOptimizer::mitc_pressc_get_demand(INT channel, float *pvalue) {
if (pvalue) {
if ((channel >= 0) && (channel < info.num_channels)) {
if (*pvalue != info.last_demand[channel])
cm_msg(MLOG, "", "Channel %d: Output was %f - now set to %f",
channel, *pvalue, info.last_demand.at(channel));
*pvalue = info.last_demand.at(channel);
} else {
*pvalue = -1.0f;
}
float itcPressureOptimizer::getDemand(int channel) {
float pvalue;
if ((channel >= 0) && (channel < info.num_channels)) {
pvalue = info.last_demand.at(channel);
} else {
pvalue = -1.0f;
}
return FE_SUCCESS;
return pvalue;
}
float itcPressureOptimizer::get(int channel) {
// update variox readout
mitc_pressc_update_mitc_input();
// update pressure demand readout
mitc_pressc_update_pressure_demanded();
// recalculate pressure and nv%
mitc_pressc_recalculate();
if ((channel == info.num_channels - 1) && !info.initialised)
ss_sleep(1000);
float pvalue;
if ((channel >= 0) && (channel < info.num_channels)) {
pvalue = info.last_measured[channel];
} else {
pvalue = -1.0f;
}
return pvalue;
}
INT itcPressureOptimizer::mitc_pressc_get(INT channel, float *pvalue) {
+3 -1
View File
@@ -48,7 +48,7 @@ class itcPressureOptimizer : public TMFeEquipment {
/*
????
*/
INT mitc_pressc_get_demand(INT channel, float *pvalue);
float getDemand(int channel);
/*
@@ -58,6 +58,8 @@ class itcPressureOptimizer : public TMFeEquipment {
std::string getDefaultName(int channel);
float getDefaultThreshold(int channel);
float get(int channel);
};
#endif