bugfix
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user