From 71563cba88cb370688e7a94cbca2d7e780b7daaa Mon Sep 17 00:00:00 2001 From: Uwe Jakobeit Date: Mon, 6 Apr 2026 01:16:09 +0200 Subject: [PATCH] added some comments; minor (prelimnary) structural adaptions --- controller/Controller.cpp | 196 ++++++++++++++++++++++++++------------ 1 file changed, 136 insertions(+), 60 deletions(-) diff --git a/controller/Controller.cpp b/controller/Controller.cpp index 1f57f75..33798ed 100755 --- a/controller/Controller.cpp +++ b/controller/Controller.cpp @@ -1,6 +1,20 @@ +/* +File: Controller.cpp +Description: This is a C++ source file containing implementation code for a program or library component. +Rev: 0.1 +Created: 06.04.26 +Author: Uwe Jakobeit +Copyright: Binder GmbH TUT 2026 +Purpose: Prelimnary version of control algorithm +Notes: [Any relevant details, such as dependencies, usage examples, or known issues.] +*/ + + + #include "Controller.h" + #ifdef BUILD_TARGET_SOM #include "application/AppLogic.hpp" #include "application/Environment.hpp" @@ -16,7 +30,8 @@ bool Controller::initialize(const char *configFilePath, appengine::IAppLogic *ap auto deviceState = appLogic->deviceState(); - +MV_ Magnet Variable +SV_ State Variable // Beispiel: SV_Temperatur_Variable_ = deviceState.getVariableByKey("Temperatur_Innenraum"); @@ -136,80 +151,105 @@ bool Controller::initialize(const char *configFilePath, appengine::IAppLogic *ap return true; } + + #endif - -void Controller::step() { +void Controller::stepSOM(void) +{ #ifdef BUILD_TARGET_SOM - ClimateAlgorithm::Inputs in{}; - in.Istwert_Temperatur = FILTERED_TEMP.step(SV_Temperatur_Variable_->toType()); - in.Sollwert_Temperatur = SV_Sollwert_Temperatur_ ->toType(); - in.Entleerbehaelter_Oben = Wasserstand_Oben_Config_->toType(); - in.Entleerbehaelter_Unten = Wasserstand_Unten_Config_->toType(); - in.Istwert_Feuchte = SV_Feuchte_Variable_->toType(); - in.Sollwert_Feuchte = SV_Sollwert_Feuchte_->toType(); - in.Istwert_Temperatur_Tuer = FILTER_TUER.step(SV_Tuer_Variable_->toType()); - in.Betauungsschutz = 50.0; - in.Grenzwert_Untertemperatur = -80.0; - in.Feuchteband=10.0; - in.Istwert_Temperatur_Verdampferausgang = SV_Verdampferausgang_->toType(); - in.Sollwert_Feuchte = SV_Sollwert_Feuchte_->toType(); - in.Istwert_Ueberwachungsregler=in.Istwert_Temperatur; - in.Klasse_Ueberwachungsregler = 3.0; - in.reset_flag =false; - in.Sammelalarm = false; - in.Sollwert_Feuchte_aktiv = true; - in.Temperaturband = 5.0; - in.Temperatur_Feuchtemodul = SV_Befeuchtungsmodul_->toType(); - in.Wasserkanister_leer = false; - in.Tuer_offen = false; + ClimateAlgorithm::Inputs in{}; + in.Istwert_Temperatur = FILTERED_TEMP.step(SV_Temperatur_Variable_->toType()); + in.Sollwert_Temperatur = SV_Sollwert_Temperatur_ ->toType(); + in.Entleerbehaelter_Oben = Wasserstand_Oben_Config_->toType(); + in.Entleerbehaelter_Unten = Wasserstand_Unten_Config_->toType(); + in.Istwert_Feuchte = SV_Feuchte_Variable_->toType(); + in.Sollwert_Feuchte = SV_Sollwert_Feuchte_->toType(); + in.Istwert_Temperatur_Tuer = FILTER_TUER.step(SV_Tuer_Variable_->toType()); + in.Betauungsschutz = 50.0; + in.Grenzwert_Untertemperatur = -80.0; + in.Feuchteband=10.0; + in.Istwert_Temperatur_Verdampferausgang = SV_Verdampferausgang_->toType(); + in.Sollwert_Feuchte = SV_Sollwert_Feuchte_->toType(); + in.Istwert_Ueberwachungsregler=in.Istwert_Temperatur; + in.Klasse_Ueberwachungsregler = 3.0; + in.reset_flag =false; + in.Sammelalarm = false; + in.Sollwert_Feuchte_aktiv = true; + in.Temperaturband = 5.0; + in.Temperatur_Feuchtemodul = SV_Befeuchtungsmodul_->toType(); + in.Wasserkanister_leer = false; + in.Tuer_offen = false; - // TODO: reset_flag und bool_inXX lesen: - // in.reset_flag = deviceState.getVariableByKey("reset_flag")->toType(); - // in.Sammelalarm_quittiert = ... bool_in01 - // ... - // in.Istwert_Temperatur = real_in01 - // ... + // TODO: reset_flag und bool_inXX lesen: + // in.reset_flag = deviceState.getVariableByKey("reset_flag")->toType(); + // in.Sammelalarm_quittiert = ... bool_in01 + // ... + // in.Istwert_Temperatur = real_in01 + // ... - // Minimal-Beispiel (falls du erstmal nur Temperatur/Setpoint testest): - //in.Istwert_Temperatur = tempVariable_ ? tempVariable_->toType() : 0.0; - //in.Sollwert_Temperatur = tempSetPointVariable_ ? tempSetPointVariable_->toType() : 25.0; + // Minimal-Beispiel (falls du erstmal nur Temperatur/Setpoint testest): + //in.Istwert_Temperatur = tempVariable_ ? tempVariable_->toType() : 0.0; + //in.Sollwert_Temperatur = tempSetPointVariable_ ? tempSetPointVariable_->toType() : 25.0; - auto out = algo_.step(in); + auto out = algo_.step(in); - Heizung_Bef_Config_ -> setValue(out.bool_out17); - MV_Kuehlung_Config_ ->setValue(out.bool_out18); - Abschlaemmen_Config_->setValue(out.bool_out20); - Entleerpumpe_Config_->setValue(out.bool_out16); - Heizung_Kesselrand_Config_->setValue(out.bool_out12); - Freigabe_Verfluessigerluefter_Config_->setValue(out.bool_out13); - Heizung_Innenraum_Config_->setValue(out.bool_out09); - Heizung_Tuer_Config_->setValue(out.bool_out11); - Uebertemperatur_Config_->setValue(true); - MV_Entfeuchtung_Config_->setValue(out.bool_out19); - MV_Druckluft_Config_->setValue(false); + Heizung_Bef_Config_ -> setValue(out.bool_out17); + MV_Kuehlung_Config_ ->setValue(out.bool_out18); + Abschlaemmen_Config_->setValue(out.bool_out20); + Entleerpumpe_Config_->setValue(out.bool_out16); + Heizung_Kesselrand_Config_->setValue(out.bool_out12); + Freigabe_Verfluessigerluefter_Config_->setValue(out.bool_out13); + Heizung_Innenraum_Config_->setValue(out.bool_out09); + Heizung_Tuer_Config_->setValue(out.bool_out11); + Uebertemperatur_Config_->setValue(true); + MV_Entfeuchtung_Config_->setValue(out.bool_out19); + MV_Druckluft_Config_->setValue(false); - Ansteuerung_Wassereinlass_Config_->setValue(out.bool_out14); - //Ansteuerung_Verdichter_Config_->setValue(out.real_out21*20.0); - SV_Verdichter_on_->setValue(1); - Ansteuerung_Verdichter_Config_->setValue(static_cast (out.real_out21*10.0)); - Verdichter_Duty_Config->setValue(500); + Ansteuerung_Wassereinlass_Config_->setValue(out.bool_out14); + //Ansteuerung_Verdichter_Config_->setValue(out.real_out21*20.0); + SV_Verdichter_on_->setValue(1); + Ansteuerung_Verdichter_Config_->setValue(static_cast (out.real_out21*10.0)); + Verdichter_Duty_Config->setValue(500); - SV_Stellgrad_Heizung->setValue(out.Stellgrad_Heizung); - SV_Stellgrad_Kuehlung->setValue(out.Stellgrad_Kuehlung); - SV_Stellgrad_Befeuchtung ->setValue(out.Stellgrad_Befeuchtung); - SV_Stellgrad_Entfeuchtung->setValue(out.Stellgrad_Entfeuchtung); - Startup_->setValue(out.Startup); - CounterTuer_->setValue(out.Counter_Tuer); + SV_Stellgrad_Heizung->setValue(out.Stellgrad_Heizung); + SV_Stellgrad_Kuehlung->setValue(out.Stellgrad_Kuehlung); + SV_Stellgrad_Befeuchtung ->setValue(out.Stellgrad_Befeuchtung); + SV_Stellgrad_Entfeuchtung->setValue(out.Stellgrad_Entfeuchtung); + Startup_->setValue(out.Startup); + CounterTuer_->setValue(out.Counter_Tuer); - // TODO: bool_outXX / real_outXX / alarm_XX setzen: - // deviceState.getVariableByKey("bool_out01")->set(out.bool_out01); - // deviceState.getVariableByKey("real_out09")->set(out.real_out09); + // TODO: bool_outXX / real_outXX / alarm_XX setzen: + // deviceState.getVariableByKey("bool_out01")->set(out.bool_out01); + // deviceState.getVariableByKey("real_out09")->set(out.real_out09); #endif } +void Controller::step(void) +{ +#ifdef BUILD_TARGET_SOM + + stepSOM(); + +#else + stepDesk(); + +#endif +} + + +void Controller::stepDesk(void) +{ + inputs = model->getInputs(); + qDebug() << "Tist.: " << inputs->data()->analog.Istwert_Temperatur; + +} + + + + void Controller::terminate() { #ifdef BUILD_TARGET_SOM subscriptions_.clear(); @@ -222,3 +262,39 @@ ControllerBase *create() { return new Controller; } #endif + +// initialize algorithm according to configuration ( not yet available 02.04.26 ) +// return plainly true (until otherwise) +bool Controller::initialize(const char *configFilePath) +{ + bool result = false; + + // uncomment when available + // result = (configFilePath != (const char *) nullptr); + + // DataModel* model = new DataModel; + // QList* inputs; + // model->getInputs(); + + return result; +} + +bool Controller::initialize( QList* inputs) +{ + return true; +} + +bool Controller::initialize( DataModel* instance) +{ + model = instance; + + inputs = model->getInputs(); + + return inputs != nullptr; +} + + + + + +