From 84135f70a024cbbd3687a875662c4c191b77397f Mon Sep 17 00:00:00 2001 From: Uwe Jakobeit Date: Thu, 2 Apr 2026 09:41:51 +0200 Subject: [PATCH] Controller.hpp removed (replaced by Controller.h); build results added --- app/app | Bin 380768 -> 380808 bytes app/libapp_lib.a | Bin 1767622 -> 1769418 bytes controller/Controller.hpp | 2530 ------------------------------------ controller/libctrl_algo.so | Bin 27712 -> 21376 bytes 4 files changed, 2530 deletions(-) mode change 100755 => 100644 app/libapp_lib.a delete mode 100755 controller/Controller.hpp diff --git a/app/app b/app/app index 0c6447331548b27afc72947d54f6c56812700f53..c83352ff7d4927a2b05359b0f923f29d48ae1bef 100755 GIT binary patch delta 56636 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�uj+?W`zEKumkHqO7F_ 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 XSW;mf35zJ_ diff --git a/app/libapp_lib.a b/app/libapp_lib.a old mode 100755 new mode 100644 index c7d547067a0ddfd59afb741f764565e1d9ca14cb..48a480dd34f26af65e0aec9a1d459320487a1bf1 GIT binary patch delta 119783 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ν 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 E0C>|;9{>OV diff --git a/controller/Controller.hpp b/controller/Controller.hpp deleted file mode 100755 index e1ac976..0000000 --- a/controller/Controller.hpp +++ /dev/null @@ -1,2530 +0,0 @@ -#pragma once - -#ifdef BUILD_TARGET_SOM - -#if defined(_WIN32) -#define BINDER_SIMULINK_API_EXPORT __declspec(dllexport) -#else -#define BINDER_SIMULINK_API_EXPORT __attribute__((visibility("default"))) -#endif -#include "algorithm/ControllerBase.hpp" -#include "asio/SignalConnection.hpp" - -#endif - -#include -#include -#include -#include -#include -#include -#include - -const double PI_CONST = 3.14159265358979323846; - -#define MAX std::max -#define MIN std::min - -namespace UTILITY_FUNCTIONS { - -inline double limit(double x, double lo, double hi) { - return (x < lo) ? lo : (x > hi) ? hi : x; -} - -inline double max3(double a, double b, double c) { - return std::max(a, std::max(b, c)); -} -inline double min3(double a, double b, double c) { - return std::min(a, std::min(b, c)); -} - -inline bool is_valid(double x) { return std::isfinite(x); } - -// ST: REAL_TO_INT(x) i.d.R. trunc Richtung 0. Bei Siemens oft ROUND? Du nutzt -// häufig +0.5. -inline int real_to_int(double x) { return static_cast(x); } - -// Platzhalter für GET_VALUE_* (kommt vermutlich aus Parameter-/Recipe-System) -inline std::int32_t GET_VALUE_DINT(int /*a*/, int /*b*/, int /*c*/, int /*d*/) { - // TODO: an dein Parameter-System anbinden - return 0; -} -inline double GET_VALUE_REAL(int /*a*/, int /*b*/, int /*c*/, int /*d*/) { - // TODO: an dein Parameter-System anbinden - return 0.0; -} - -} // namespace UTILITY_FUNCTIONS - -// ------------------------- -// Regelkern (ST -> C++) -// ------------------------- - -class PWM { -public: - PWM(double zyklus_min, double zyklus_max, double initial_zykluszeit = -1.0) { - Zykluszeit = 0.0; - Ausgabe = 0.0; - Zyklus_MAX = zyklus_max; - Zyklus_MIN = zyklus_min; - } - /*(* Puls Pause Generierung Kühlung *) - Zyklus_Kuehlventil := Zyklus_Kuehlventil + sampling_time; - - IF Ausgabe_Kuehlventil > 0.0 THEN - Kuehlventil := NOT Status_Untertemperatur; - Ausgabe_Kuehlventil := Ausgabe_Kuehlventil - sampling_time; - IF Ausgabe_Kuehlventil < 0.0 THEN - Zykluszeit_Kuehlventil := Zykluszeit_Kuehlventil - - Ausgabe_Kuehlventil * 100.0 / MAX(Stellgrad_Kuehlventil, sampling_time / - Zykluszeit_Kuehlventil_MAX * 100.0); Ausgabe_Kuehlventil := 0.0; END_IF; ELSE - Kuehlventil := FALSE; - END_IF; - - IF Stellgrad_Kuehlventil > sampling_time / Zykluszeit_Kuehlventil_MAX * 100.0 - THEN IF Zyklus_Kuehlventil >= Zykluszeit_Kuehlventil OR Zyklus_Kuehlventil >= - MAX(2.0 * Zykluszeit_Kuehlventil_MIN, sampling_time * 100.0 / - Stellgrad_Kuehlventil) THEN Ausgabe_Kuehlventil := MIN(Ausgabe_Kuehlventil + - Stellgrad_Kuehlventil / 100.0 * Zykluszeit_Kuehlventil_MIN, - Zykluszeit_Kuehlventil); Zykluszeit_Kuehlventil := Zykluszeit_Kuehlventil_MIN; - Zyklus_Kuehlventil := 0.0; - END_IF; - END_IF;*/ - - bool step(double Stellgrad, double samplingTime) { - Zyklus += samplingTime; - bool output_bool; - if (Ausgabe > 0.0) { - output_bool = true; - Ausgabe -= samplingTime; - if (Ausgabe < 0.0) { - Zykluszeit -= - Ausgabe * 100 / MAX(Stellgrad, samplingTime / Zyklus_MAX * 100.0); - Ausgabe = 0.0; - } - - } else { - output_bool = false; - } - if (Stellgrad > samplingTime / Zyklus_MAX * 100.0) { - if (Zyklus >= Zykluszeit || - Zyklus >= MAX(2.0 * Zyklus_MIN, samplingTime * 100.0 / Stellgrad)) { - Ausgabe = MIN(Ausgabe + Stellgrad / 100.0 * Zyklus_MIN, Zyklus); - Zykluszeit = Zyklus_MIN; - Zyklus = 0.0; - } - } - return output_bool; - } - -private: - double Zyklus = 0.0; - double Ausgabe = 0.0; - double Zykluszeit = 0.0; - double Zyklus_MAX = 0.0; - double Zyklus_MIN = 0.0; -}; - -class ClimateAlgorithm { -public: - struct BinInputs { - // Eingangswerte aus bool_inXX / real_inXX / reset_flag - bool reset_flag{}; - bool Sammelalarm_quittiert{}; - bool Tuer_offen{}; - bool Sollwert_Feuchte_aktiv{}; - bool Steuerkontakt_Standby{}; - bool Steuerkontakt_Befeuchtung_aus{}; - bool Steuerkontakt_Entfeuchtung_aus{}; - bool Entleerbehaelter_Oben{}; - bool Wasserkanister_leer{}; - bool Entleerbehaelter_Unten{}; - bool Sammelalarm{}; - } binInput; - - struct AnalogInputs { - double Istwert_Temperatur{}; - double Sollwert_Temperatur{}; - double Temperaturband{}; - double Istwert_Ueberwachungsregler{}; - double Klasse_Ueberwachungsregler{}; - double Grenzwert_Untertemperatur{}; - double Istwert_Feuchte{}; - double Sollwert_Feuchte{}; - double Feuchteband{}; - double Sollwert_Luefter{}; - double Istwert_Temperatur_Tuer{}; - double Istwert_Temperatur_Verdampferausgang{}; - double Temperatur_Feuchtemodul{}; - double Bandalarm_nach{}; - double Betauungsschutz{}; - double real_in11{}; // du nutzt real_in11 später direkt in alarm_15 - } analogInput; - - struct BinOutputs { - // bool_outXX - bool bool_out01{}; - bool bool_out02{}; - bool bool_out03{}; - bool bool_out07{}; - bool bool_out09{}; - bool bool_out11{}; - bool bool_out12{}; - bool bool_out13{}; - bool bool_out14{}; - bool bool_out16{}; - bool bool_out17{}; - bool bool_out18{}; - bool bool_out19{}; - bool bool_out20{}; - bool bool_out21{}; - bool bool_out23{}; - } binOut; - - struct AnalogOutputs { - // real_outXX (nur die, die du im ST setzt) - double real_out01{}; - double real_out02{}; - double real_out04{}; - double real_out05{}; - double real_out06{}; - double real_out07{}; - double real_out08{}; - double real_out09{}; - double real_out10{}; - double real_out11{}; - double real_out12{}; - double real_out13{}; - double real_out14{}; - double real_out16{}; - double Stellgrad_Feuchtemodul{}; // ...out17 - double real_out18{}; - double real_out19{}; - double real_out20{}; - double real_out21{}; - double real_out25{}; - double real_out26{}; - double Stellgrad_Heizung{}; - double Stellgrad_Kuehlung{}; - double Stellgrad_Befeuchtung{}; - double Stellgrad_Entfeuchtung{}; - double Counter_Tuer{}; - } analogOut; - - struct Alarm { - // alarm_01..alarm_15 - bool Startup{}; - bool alarm_01{}; - bool alarm_02{}; - bool alarm_03{}; - bool alarm_04{}; - bool alarm_05{}; - bool alarm_06{}; - bool alarm_07{}; - bool alarm_08{}; - bool alarm_09{}; - bool alarm_10{}; - bool alarm_11{}; - bool alarm_12{}; - bool alarm_13{}; - bool alarm_14{}; - bool alarm_15{}; - } alarmOut; - - ClimateAlgorithm() = default; - - void Step(void) { - using UTILITY_FUNCTIONS::is_valid; - using UTILITY_FUNCTIONS::limit; - - // --------------------------- - // Eingangswerte (ST Zuweisungen) - // --------------------------- - Sammelalarm_quittiert = binInput.Sammelalarm_quittiert; - Tuer_offen = binInput.Tuer_offen; - Sollwert_Feuchte_aktiv = true; - Steuerkontakt_Standby = false; - Steuerkontakt_Befeuchtung_aus = false; - Steuerkontakt_Entfeuchtung_aus = false; - Entleerbehaelter_Oben = binInput.Entleerbehaelter_Oben; - bool Wasserkanister_leer = false; - Entleerbehaelter_Unten = binInput.Entleerbehaelter_Unten; - Sammelalarm = false; - Istwert_Temperatur = analogInput.Istwert_Temperatur; - Istwert_Ueberwachungsregler = Istwert_Temperatur; - Sollwert_Temperatur = analogInput.Sollwert_Temperatur; - Istwert_Feuchte = analogInput.Istwert_Feuchte; - Sollwert_Feuchte = analogInput.Sollwert_Feuchte; - // uj - not needed double Sollwert_Luefter = analogInput.Sollwert_Luefter; - Istwert_Temperatur_Tuer = analogInput.Istwert_Temperatur_Tuer; - double Istwert_Temperatur_Verdampferausgang = analogInput.Istwert_Temperatur_Verdampferausgang; - Temperatur_Feuchtemodul = analogInput.Temperatur_Feuchtemodul; - double Betauungsschutz = 50.0; - double Feuchteband = 10; - double Temperaturband = 5; - bool reset_flag = binInput.reset_flag; - - // Zähler reset_flag - // ----------------- - if (reset_flag) { - Counter_reset_flag = 0; - } else { - Counter_reset_flag += 1; - } - Startup_finished = - (Counter_reset_flag > static_cast(10 * 4)); - - // ------------------------------------------ - // Verzögerte Abschaltung Regelung bei Türöffnung - // ------------------------------------------ - // f_PostDoorOpeningCutOffDelaed(...) - if (Tuer_offen || Steuerkontakt_Standby) { - Counter_Regelung_AUS += sampling_time; - } else { - Counter_Regelung_AUS = 0.0; - } - Regelung_AUS = (Counter_Regelung_AUS > 60.0); - - // ------------------- - // Nachlauf Türöffnung - // ------------------- - // f_PostDoorOpening(..) - if (!Startup_finished) { - Counter_Tuer_offen = 0.0; - Counter_Tuer_geschlossen = 600.0; - } else if (Tuer_offen) { - Counter_Tuer_offen += sampling_time; - Counter_Tuer_geschlossen = 0.0; - } else { - Counter_Tuer_offen = 0.0; - Counter_Tuer_geschlossen += sampling_time; - } - - Sollwert_Temperatur_MIN = -5.0; - Sollwert_Temperatur_MAX = 100.0; - - // ------------------------------------------ - // Sollwert Feuchte (Limit-Kennfeld) - // ------------------------------------------ - // f_HumiditySetValueByVector(...) - Index_Sollwert_Feuchte_Limit = 1; - while (Kennfeld_Sollwert_Feuchte_Limit[0][Index_Sollwert_Feuchte_Limit] < - Sollwert_Temperatur && - Index_Sollwert_Feuchte_Limit < 10) { - Index_Sollwert_Feuchte_Limit++; - } - - Interpolation_Sollwert_Feuchte_Limit = limit( - (Kennfeld_Sollwert_Feuchte_Limit[0][Index_Sollwert_Feuchte_Limit - 1] - - Sollwert_Temperatur) / - (Kennfeld_Sollwert_Feuchte_Limit[0] - [Index_Sollwert_Feuchte_Limit - 1] - - Kennfeld_Sollwert_Feuchte_Limit[0][Index_Sollwert_Feuchte_Limit]), - 0.0, 1.0); - - Sollwert_Feuchte_Max = - Kennfeld_Sollwert_Feuchte_Limit[1][Index_Sollwert_Feuchte_Limit] * - Interpolation_Sollwert_Feuchte_Limit + - Kennfeld_Sollwert_Feuchte_Limit[1][Index_Sollwert_Feuchte_Limit - 1] * - (1.0 - Interpolation_Sollwert_Feuchte_Limit); - - Sollwert_Feuchte_Min = - Kennfeld_Sollwert_Feuchte_Limit[2][Index_Sollwert_Feuchte_Limit] * - Interpolation_Sollwert_Feuchte_Limit + - Kennfeld_Sollwert_Feuchte_Limit[2][Index_Sollwert_Feuchte_Limit - 1] * - (1.0 - Interpolation_Sollwert_Feuchte_Limit); - - Sollwert_Feuchte = - limit(Sollwert_Feuchte, Sollwert_Feuchte_Min, Sollwert_Feuchte_Max); - - - - // Abschaltung Feuchteregelung - // f_CutOffHumidityControl(...) - Befeuchtung_aus = - (!Sollwert_Feuchte_aktiv) || Steuerkontakt_Befeuchtung_aus || - (Sollwert_Temperatur > 95.0) || (Sollwert_Temperatur < 5.0); - Entfeuchtung_aus = - (!Sollwert_Feuchte_aktiv) || Steuerkontakt_Entfeuchtung_aus || - (Sollwert_Temperatur > 95.0) || (Sollwert_Temperatur < 5.0); - - // (p_H2Omax, Taupunkt etc.) - p_H2Omax_Sollwert = 6.112 * std::exp(17.62 * Sollwert_Temperatur / - (243.12 + Sollwert_Temperatur)); - p_H2Omax_Istwert = 6.112 * std::exp(17.62 * Istwert_Temperatur / - (243.12 + Istwert_Temperatur)); - - Taupunkt_Istwert = - (241.2 * std::log(std::max(Istwert_Feuchte, 0.001) / 100.0) + - (4222.03716 * Istwert_Temperatur) / (241.2 + Istwert_Temperatur)) / - (17.5043 - std::log(std::max(Istwert_Feuchte, 0.001) / 100.0) - - (17.5043 * Istwert_Temperatur) / (241.2 + Istwert_Temperatur)); - - if (Temperatursprung) { - Sollwert_Feuchte_Absolut = - limit(Sollwert_Feuchte * p_H2Omax_Sollwert / p_H2Omax_Istwert, 0.0, - Sollwert_Feuchte); - } else { - Sollwert_Feuchte_Absolut = Sollwert_Feuchte; - } - if (!is_valid(Sollwert_Feuchte_Absolut)) { - Sollwert_Feuchte_Absolut = Sollwert_Feuchte; - } - - // ------------------ - // Überwachungsregler - // ------------------ - // f_SuperVisor - - /* - Modus_Ueberwachungsregler = - static_cast(UTILITY_FUNCTIONS::GET_VALUE_DINT(71,0,3,0)); - Grenzwert_Uebertemperatur = UTILITY_FUNCTIONS::GET_VALUE_REAL(71,0,4,0); - Offset_Ueberwachungsregler = UTILITY_FUNCTIONS::GET_VALUE_REAL(71,0,5,0); - - if (Modus_Ueberwachungsregler > 0) { - Schaltwert_Uebertemperatur = limit(Sollwert_Temperatur + - Offset_Ueberwachungsregler, -30.0, 110.0); Schaltwert_Untertemperatur = - limit(Sollwert_Temperatur - Offset_Ueberwachungsregler, -30.0, 110.0); } - else { Schaltwert_Uebertemperatur = Grenzwert_Uebertemperatur; - Schaltwert_Untertemperatur = Grenzwert_Untertemperatur; - } - - const double maxUeberw = std::max(Istwert_Ueberwachungsregler, - Istwert_Temperatur); const double minUeberw = - std::min(Istwert_Ueberwachungsregler, Istwert_Temperatur); - - if ( (maxUeberw > Schaltwert_Uebertemperatur) || - (Status_Uebertemperatur && (maxUeberw > Schaltwert_Uebertemperatur - - 1.0)) || (StatusQuittierung_Uebertemperatur && (Klasse_Ueberwachungsregler - < 3.0)) ) { Counter_Status_Uebertemperatur += 1; } else { - Counter_Status_Uebertemperatur = 0; - } - - Status_Uebertemperatur = (Counter_Status_Uebertemperatur >= - static_cast(10 * 4)); StatusQuittierung_Uebertemperatur = - (Status_Uebertemperatur && Counter_Status_Uebertemperatur < - static_cast(11 * 4)) || (StatusQuittierung_Uebertemperatur && - Sammelalarm_quittiert); - - if ( ((minUeberw < Schaltwert_Untertemperatur) || - (Status_Untertemperatur && (minUeberw < Schaltwert_Untertemperatur - + 1.0))) && (Klasse_Ueberwachungsregler >= 3.0) ) { - Counter_Status_Untertemperatur += 1; - } else { - Counter_Status_Untertemperatur = 0; - } - - Status_Untertemperatur = (Counter_Status_Untertemperatur >= - static_cast(10 * 4)); StatusQuittierung_Untertemperatur = - (Status_Untertemperatur && Counter_Status_Untertemperatur < - static_cast(11 * 4)) || (StatusQuittierung_Untertemperatur && - Sammelalarm_quittiert); - - if (Status_Untertemperatur || StatusQuittierung_Untertemperatur) { - Sollwert_Temperatur = std::max(Sollwert_Temperatur, - Schaltwert_Untertemperatur); - } - if (Status_Uebertemperatur || StatusQuittierung_Uebertemperatur) { - Sollwert_Temperatur = std::min(Sollwert_Temperatur, - Schaltwert_Uebertemperatur); - }*/ - - // ------------------------ - // Parametersatzumschaltung - // ------------------------ - // f_SwitchParameterSet(...) - Index_Feuchte = static_cast( - 8 - - UTILITY_FUNCTIONS::real_to_int( - limit((Sollwert_Feuchte - 10.0) / (90.0 - 10.0) * 8.0, 0.0, 8.0) + - 0.5)); - Index_Temperatur = - static_cast(UTILITY_FUNCTIONS::real_to_int( - limit((Sollwert_Temperatur - 10.0) / (90.0 - 10.0) * 8.0, 0.0, - 8.0) + - 0.5)); - Index_Temperatur_ohne_Feuchte = - static_cast(UTILITY_FUNCTIONS::real_to_int( - limit((Sollwert_Temperatur - (-20.0)) / (100.0 - (-20.0)) * 12.0, - 0.0, 12.0) + - 0.5)); - - Regler_Heizung_Xp = F_Xp_Heizung * Kennfeld_Regler_Heizung_Xp[Index_Temperatur_ohne_Feuchte]; - Regler_Kuehlung_Xp = F_Xp_Kuehlung * - Kennfeld_Regler_Kuehlung_Xp[Index_Temperatur_ohne_Feuchte]; - Regler_Befeuchtung_Xp = - F_Xp_Befeuchtung_BINDER * - Kennfeld_Regler_Befeuchtung_Xp[Index_Feuchte][Index_Temperatur]; - Regler_Entfeuchtung_Xp = - F_Xp_Entfeuchtung * - Kennfeld_Regler_Entfeuchtung_Xp[Index_Feuchte][Index_Temperatur]; - Regler_Tuer_Xp = F_Xp_Tuer; - - // --------------------- - // PID Regler Temperatur - // --------------------- - // F_PID PID_Temperature(...) - Regelabweichung_Temperatur = Sollwert_Temperatur - Istwert_Temperatur; - - // Zykluszeit Regelabweichung Temperatur - if (!Startup_finished || !is_valid(Standardregelabweichung_Temperatur) || - !is_valid(Standardgradient_Regelabweichung_Temperatur) || - Standardgradient_Regelabweichung_Temperatur <= 0.0) { - Zykluszeit_Regelabweichung_Temperatur = 600.0; - } else { - Zykluszeit_Regelabweichung_Temperatur = - limit(2.0 * 3.1415 * Standardregelabweichung_Temperatur / - Standardgradient_Regelabweichung_Temperatur * 60.0, - 120.0, 1200.0); - } - Zykluszeit_Regelabweichung_Heizung = - std::min(Zykluszeit_Regelabweichung_Temperatur, 300.0); - Zykluszeit_Regelabweichung_Kuehlung = - std::max(Zykluszeit_Regelabweichung_Temperatur, 600.0); - - Amplitude_Regelabweichung_Temperatur = - 1.4142 * Standardregelabweichung_Temperatur; - - // Mittelwert Regelabweichung Temperatur - if (!Startup_finished || !is_valid(Regelabweichung_Temperatur_Mittelwert) || - Temperatursprung) { - Regelabweichung_Temperatur_Mittelwert = 0.0; - } else if (is_valid(Regelabweichung_Temperatur)) { - const double alpha = - (Zykluszeit_Regelabweichung_Temperatur / sampling_time); - Regelabweichung_Temperatur_Mittelwert = limit( - Regelabweichung_Temperatur_Mittelwert + - (Regelabweichung_Temperatur - - Regelabweichung_Temperatur_Mittelwert) / - alpha, - Regelabweichung_Temperatur - 1.0, Regelabweichung_Temperatur + 1.0); - } - - // Standardregelabweichung Temperatur - if (!Startup_finished || !is_valid(Standardregelabweichung_Temperatur) || - Temperatursprung) { - Standardregelabweichung_Temperatur = 0.0; - } else if (is_valid(Regelabweichung_Temperatur)) { - const double n = (Zykluszeit_Regelabweichung_Temperatur / sampling_time); - Standardregelabweichung_Temperatur = std::min( - std::sqrt(((Regelabweichung_Temperatur - - Regelabweichung_Temperatur_Mittelwert) * - (Regelabweichung_Temperatur - - Regelabweichung_Temperatur_Mittelwert) + - Standardregelabweichung_Temperatur * - Standardregelabweichung_Temperatur * (n - 1.0)) / - n), - 1.0); - } - - // Gradient Regelabweichung Temperatur - // f_PID_Temperaure.GradientDifference(...) - if (!Startup_finished || !is_valid(Regelabweichung_Temperatur_Gradient)) { - Regelabweichung_Temperatur_Gradient = 0.0; - } else if (is_valid(Regelabweichung_Temperatur) && - is_valid(Regelabweichung_Temperatur_alt)) { - Regelabweichung_Temperatur_Gradient = limit( - Regelabweichung_Temperatur_Gradient + - ((Regelabweichung_Temperatur - Regelabweichung_Temperatur_alt) * - (60.0 / sampling_time) - - Regelabweichung_Temperatur_Gradient) / - (10.0 / sampling_time), - -4.0, 2.0); - } - - // Standardgradient Temperatur - // f_PID_Temperaure.StandardGradient(...) - if (!Startup_finished || - !is_valid(Standardgradient_Regelabweichung_Temperatur) || - Temperatursprung) { - Standardgradient_Regelabweichung_Temperatur = 0.0; - } else if (is_valid(Regelabweichung_Temperatur)) { - const double n = (Zykluszeit_Regelabweichung_Temperatur / sampling_time); - Standardgradient_Regelabweichung_Temperatur = - limit(std::sqrt((Regelabweichung_Temperatur_Gradient * - Regelabweichung_Temperatur_Gradient + - Standardgradient_Regelabweichung_Temperatur * - Standardgradient_Regelabweichung_Temperatur * - (n - 1.0)) / - n), - 0.01, 1.0); - } - - // Temperatursprung - // f_TemperatureJumpHandler(...) - if (!Startup_finished) { - Counter_Temperatursprung = 0.0; - } else if (((Sollwert_Temperatur != Sollwert_Temperatur_alt) && - (std::abs(Regelabweichung_Temperatur) > 1.0)) || - Tuer_offen) { - Counter_Temperatursprung = - std::max(Counter_Temperatursprung + sampling_time, 0.0); - } else if (Regelabweichung_Temperatur < - std::max(0.2, Amplitude_Regelabweichung_Temperatur) && - Regelabweichung_Temperatur > - -std::max(0.2, Amplitude_Regelabweichung_Temperatur)) { - Counter_Temperatursprung = - std::min(Counter_Temperatursprung - sampling_time, 0.0); - } else if (Regelabweichung_Temperatur > - std::max(0.5, 2.0 * Amplitude_Regelabweichung_Temperatur) || - Regelabweichung_Temperatur < - -std::max(0.5, 2.0 * Amplitude_Regelabweichung_Temperatur)) { - Counter_Temperatursprung = - std::max(Counter_Temperatursprung + sampling_time, -120.0); - } - Temperatursprung = (Counter_Temperatursprung > 0.0) || - (Temperatursprung && Counter_Temperatursprung > -60.0); - - // Anti-wind-up Heizung (dynamisches Clamping) - // ------ F_PID_Temperatuer.AntiWindUpHeater(...) - if ((Counter_Tuer_geschlossen < 180.0) || (Counter_Tuer_offen > 0.0)) { - Regler_Heizung_MIN = 0.0; - Regler_Heizung_I_Anteil_MIN = 0.0; - Regler_Heizung_MAX = 100.0; - Regler_Heizung_I_Anteil_MAX = - limit(100.0 - P_Anteil_Heizung, Regler_Heizung_I_Anteil_MIN, - Stellgrad_Heizung_Mittelwert); - } else { - Regler_Heizung_MIN = 0.0; - Regler_Heizung_I_Anteil_MIN = 0.0; - Regler_Heizung_MAX = 100.0; - if (Temperatursprung) { - Regler_Heizung_I_Anteil_MAX = - limit(100.0 - P_Anteil_Heizung, Regler_Heizung_I_Anteil_MIN, - Regler_Heizung_MAX); - } else { - Regler_Heizung_I_Anteil_MAX = 100.0; - } - } - //---------------------- - - // Anpassung Xp Heizung - // // ------------F_PID_Temperatuer.AdaptXp(...) - if (Regelabweichung_Temperatur > Amplitude_Regelabweichung_Temperatur && - Regelabweichung_Temperatur_Mittelwert > 0.05 && !Temperatursprung) { - Regler_Heizung_Xp /= 2.0; - } - // Achtung: du referenzierst hier Zykluszeit_Regelabweichung_Feuchte später - // – steht unten. Wir setzen default, falls noch uninitialisiert: - if (!is_valid(Zykluszeit_Regelabweichung_Feuchte) || - Zykluszeit_Regelabweichung_Feuchte <= 0.0) { - Zykluszeit_Regelabweichung_Feuchte = 600.0; - } - - Regler_Heizung_Xp = - Regler_Heizung_Xp * - limit(Zykluszeit_Regelabweichung_Feuchte / 300.0, 1.0, 2.0) * - limit(1.0 + Amplitude_Regelabweichung_Temperatur / 0.5 + - Stellgrad_Kuehlung_Mittelwert / -100.0, - 1.0, 2.0); -//-----------// ------------F_PID_Temperatuer.AdaptXp(...)--------------------------------------------------- - - // P/I/D Heizung - //----------------- F_PID_Temperature.step(...) - if (!Startup_finished || !is_valid(Regelabweichung_Temperatur)) { - P_Anteil_Heizung = 0.0; - } else { - P_Anteil_Heizung = 100.0 / Regler_Heizung_Xp * Regelabweichung_Temperatur; - } - - if (!Startup_finished || !is_valid(I_Anteil_Heizung)) { - I_Anteil_Heizung = 0.0; - } else if (!Regelung_AUS && is_valid(Regelabweichung_Temperatur) && - Counter_Tuer_geschlossen > 60.0) { - I_Anteil_Heizung = limit( - I_Anteil_Heizung + 100.0 / Regler_Heizung_Xp / - (1.0 * Zykluszeit_Regelabweichung_Heizung) * - sampling_time * Regelabweichung_Temperatur, - Regler_Heizung_I_Anteil_MIN, Regler_Heizung_I_Anteil_MAX); - } - - if (!Startup_finished || !is_valid(D_Anteil_Heizung)) { - D_Anteil_Heizung = 0.0; - } else if (is_valid(Regelabweichung_Temperatur) && - is_valid(Regelabweichung_Temperatur_alt) && - Counter_Tuer_geschlossen > 0.0) { - D_Anteil_Heizung = - D_Anteil_Heizung + - (100.0 / Regler_Heizung_Xp * - (0.1 * Zykluszeit_Regelabweichung_Heizung) * - (Regelabweichung_Temperatur - Regelabweichung_Temperatur_alt) / - sampling_time - - D_Anteil_Heizung) / - (Tau_Heizung_Tv / sampling_time); - } - - if (Counter_Tuer_offen > 60.0 || Regelung_AUS || !Startup_finished) { - Stellgrad_Heizung = 0.0; - } else { - Stellgrad_Heizung = - limit(P_Anteil_Heizung + I_Anteil_Heizung + D_Anteil_Heizung, - Regler_Heizung_MIN, Regler_Heizung_MAX); - } - - if (!Startup_finished || !is_valid(Stellgrad_Heizung_Mittelwert)) { - Stellgrad_Heizung_Mittelwert = 0.0; - } else if (Temperatursprung) { - Stellgrad_Heizung_Mittelwert = Stellgrad_Heizung; - } else if (is_valid(Stellgrad_Heizung)) { - Stellgrad_Heizung_Mittelwert = - Stellgrad_Heizung_Mittelwert + - (Stellgrad_Heizung - Stellgrad_Heizung_Mittelwert) / - (Zykluszeit_Regelabweichung_Temperatur / sampling_time); - } - - - // ------------ F_PID_Temperature.step(...) !!!!! todo uj umbenennen in Heizung !!!!!!!!!!!!!!!!!!! - - - // ---------------------------------------------------- - // Ab hier: Kühlung + Feuchte-PIDs + Tür-PID + Aktorlogik - // ---------------------------------------------------- - // => in gleicher Art übersetzen (Muster ist identisch). - // - // Für dieses Snippet: wir übernehmen für die Outputs zumindest die Werte, - // die schon berechnet sind, und lassen Stellgrade der restlichen Aktoren, - // falls nicht berechnet, auf gültigen Default stehen. - - // Regelabweichung Kühlung - // F_ PID PID_Cooling() - double Regelabweichung_Kuehlung = Regelabweichung_Temperatur; - - // Gradient Regelabweichgun Kuehlung - - if (!Startup_finished) { - Regelabweichung_Kuehlung_Gradient = 0.0; - - } else { - Regelabweichung_Kuehlung_Gradient = - limit((Regelabweichung_Kuehlung - Regelabweichung_Kuehlung_alt) * - 60.0 / sampling_time - - Regelabweichung_Kuehlung_Gradient, - -4.0, 2.0); - } - - // Faktor Kuehlung - - if (!Startup_finished || Temperatursprung) { - Faktor_Kuehlung = 5.0; - } else if (Regelabweichung_Kuehlung < -0.1) { - Faktor_Kuehlung = std::min(Faktor_Kuehlung + sampling_time, 5.0); - } else { - Faktor_Kuehlung = std::max(Faktor_Kuehlung - sampling_time / 60.0, 0.2); - } - - // --------------------------- Gegenheizen Band !!! Überwacher !!!!! - double Regelabweichung_Entfeuchtung = Regelabweichung_Feuchte; - if (!Startup_finished || Temperatursprung || - (Counter_Temperatursprung > -600.0 && - Faktor_Gegenheizen_Band == 10.0)) { - Faktor_Gegenheizen_Band = 10.0; - - } else if (Stellgrad_Heizung_Mittelwert - Sollwert_Gegenheizen < -1.0) { - if (Regelabweichung_Entfeuchtung > 0.5) { - Faktor_Gegenheizen_Band = - std::max(Faktor_Gegenheizen_Band - sampling_time / 10.0, 0.0); - } else { - Faktor_Gegenheizen_Band = - std::min(Faktor_Gegenheizen_Band + sampling_time / 60.0, 10.0); - } - - } else if (Stellgrad_Heizung_Mittelwert - Sollwert_Gegenheizen > 1.0 && - Stellgrad_Kuehlung_Mittelwert < -5.0) { - if (Regelabweichung_Entfeuchtung < -0.5) { - Faktor_Gegenheizen_Band = - std::max(Faktor_Gegenheizen_Band - sampling_time / 10.0, 0.0); - } else { - Faktor_Gegenheizen_Band = - std::min(Faktor_Gegenheizen_Band + sampling_time / 600.0, 5.0); - } - } - else { - Faktor_Gegenheizen_Band = - std::max(Faktor_Gegenheizen_Band - sampling_time / 60.0, 0.1); - } - // --------------------------- Gegenheizen Band - - // -----------------------Sollwert Gegenheizen für I-Anteilverschiebung - - double Faktor_Entfeuchtung_Kuehlung = 0.0; - double Offset_Kuehlung = Faktor_Entfeuchtung_Kuehlung; - Offset_Kuehlung = - Faktor_Entfeuchtung_Kuehlung * Stellgrad_Entfeuchtung_Mittelwert * - std::max((50.0 - Stellgrad_Heizung_Mittelwert) / (50 - 0.0), 0.0) * - (8.0 - Stellgrad_Befeuchtung_Standby) / (8.0 - 2.0); -//------------------------------------------------------------ - - - // P-Anteil Kühlung - // f_PID_Cooling.SetP - double P_Anteil_Kuehlung = 0.0; - if (!Startup_finished) { - P_Anteil_Kuehlung = 0.0; - } else { - P_Anteil_Kuehlung = 100.0 / Regler_Kuehlung_Xp * Faktor_Kuehlung * - Regelabweichung_Kuehlung; - } - - // Begrenzung I-Anteil Kühlung bei Türöffnung - // f_PID_Cooling.Limit_I_PostDoorOpening(...) - double Regler_Kuehlung_MAX = 0; - double Regler_Kuehlung_MIN = 0; - double Regler_Kuehlung_I_Anteil_MAX = 0; - double Regler_Kuehlung_I_Anteil_MIN = 0; - - if ((Counter_Tuer_geschlossen < 180.0) || (Counter_Tuer_offen > 0.0)) { - Regler_Kuehlung_MAX = I_Anteil_Kuehlung; - Regler_Kuehlung_MIN = -100.0; - Regler_Kuehlung_I_Anteil_MAX = I_Anteil_Kuehlung; - Regler_Kuehlung_I_Anteil_MIN = limit( -100.0 - P_Anteil_Kuehlung, Regler_Kuehlung_MIN, Regler_Kuehlung_MAX); - } else { - Regler_Kuehlung_MAX = 0.0; - Regler_Kuehlung_MIN = -100.0; - Regler_Kuehlung_I_Anteil_MAX = 0.1 / Regler_Kuehlung_Xp * 100.0; - Regler_Kuehlung_I_Anteil_MIN = limit( -100.0 - P_Anteil_Kuehlung + Regelabweichung_Kuehlung_Gradient / 0.5 * 100.0, - Regler_Kuehlung_MIN, - Regler_Kuehlung_MAX); - } - - // f_PID_Cooling.Step(...) - // I Anteil Kühlung - if (!Startup_finished) { - I_Anteil_Kuehlung = 0.0; - } else if (Counter_Tuer_geschlossen > 60.0) { - I_Anteil_Kuehlung = - limit(I_Anteil_Kuehlung + - 100.0 / Regler_Kuehlung_Tn * sampling_time * - (Regelabweichung_Kuehlung + - (Stellgrad_Heizung - Sollwert_Gegenheizen) / 100.0 * - Regler_Heizung_Xp * Theta_I_Kuehlung * - Faktor_Gegenheizen_Band), - Regler_Kuehlung_I_Anteil_MIN, Regler_Kuehlung_I_Anteil_MAX); - } - - // D-Anteil Kühlung - - if (!Startup_finished) { - D_Anteil_Kuehlung = 0.0; - } else if (Counter_Tuer_geschlossen > 0.0) { - D_Anteil_Kuehlung += - (100.0 / Regler_Kuehlung_Xp * Regler_Kuehlung_Tv * - (Regelabweichung_Kuehlung - Regelabweichung_Kuehlung_alt) / - sampling_time - - D_Anteil_Kuehlung) / - (Tau_Kuehlung_Tv / sampling_time); - } - - // Berechnung Stellgrad Kühlung - // f_ - if (Counter_Tuer_offen > 60.0 || !Startup_finished) { - Stellgrad_Kuehlung = 0.0; - } else { - Stellgrad_Kuehlung = limit(P_Anteil_Kuehlung + I_Anteil_Kuehlung + - D_Anteil_Kuehlung + Offset_Kuehlung, - Regler_Kuehlung_MIN, Regler_Kuehlung_MAX); - } - - // Berechnung Stellgrad Mittelwert - - if (!Startup_finished) { - Stellgrad_Kuehlung_Mittelwert = 0.0; - } else { - Stellgrad_Kuehlung_Mittelwert = - limit(Stellgrad_Kuehlung_Mittelwert + - (Stellgrad_Kuehlung - Stellgrad_Kuehlung_Mittelwert) / - (600.0 / sampling_time), - Stellgrad_Kuehlung - 0.5 * 100.0 * Regler_Kuehlung_Xp, - Stellgrad_Kuehlung + 0.5 * 100.0 / Regler_Kuehlung_Xp); - } - // ------------------- F_ PID PID_Cooling() - - - // PID Regler Feuchte - // f_PID_Humidiy - Regelabweichung_Feuchte = Sollwert_Feuchte_Absolut - Istwert_Feuchte; - - // Berechnung Regelabweichung Feuchte Mittelwert - if (!Startup_finished) { - Regelabweichung_Feuchte_Mittelwert = 0.0; - } else { - Regelabweichung_Feuchte_Mittelwert = limit( - Regelabweichung_Feuchte_Mittelwert + - (Regelabweichung_Feuchte - Regelabweichung_Feuchte_Mittelwert) / - (60.0 / sampling_time), - Regelabweichung_Feuchte - 10.0, Regelabweichung_Feuchte + 10.0); - } - - // Feuchtesprung - // f_PID_Hunidity.HandleJump(...) - if (!Startup_finished) { - Counter_Feuchtesprung = 0.0; - } else if (Sollwert_Feuchte != Sollwert_Feuchte_alt && - std::abs(Regelabweichung_Feuchte) > 2.0) { - Counter_Feuchtesprung = - std::max(Counter_Feuchtesprung + sampling_time, 0.0); - } else if (std::abs(Regelabweichung_Feuchte) < 2.0 || - std::abs(Regelabweichung_Feuchte_Mittelwert) < 2.0) { - Counter_Feuchtesprung = - std::min(Counter_Feuchtesprung - sampling_time, 0.0); - } else if (std::abs(Regelabweichung_Feuchte_Mittelwert) > 5.0) { - Counter_Feuchtesprung = - std::max(Counter_Feuchtesprung + sampling_time, -120.0); - } - - Feuchtesprung = (Counter_Feuchtesprung > 0.0 || - (Feuchtesprung && Counter_Feuchtesprung > -120.0)); - - // Regelabweichung Befeuchtung - - double Regelabweichung_Befeuchtung = Regelabweichung_Feuchte; - - // Gradient regelabweichung Feuchte - - if (!Startup_finished) { - Regelabweichung_Befeuchtung_Gradient = 0.0; - } else { - Regelabweichung_Befeuchtung_Gradient = limit( - Regelabweichung_Befeuchtung_Gradient + - ((Regelabweichung_Befeuchtung - Regelabweichung_Befeuchtung_alt) * - 60.0 / sampling_time - - Regelabweichung_Befeuchtung_Gradient) / - 60.0 * sampling_time, - -20.0, 5.0); - } - - // Begrenzung I-Anteil bei Türöffnung - double Regler_Befeuchtung_MIN = 0.0; - double Regler_Befeuchtung_MAX = 0.0; - double Regler_Befeuchtung_I_Anteil_MIN = 0.0; - double Regler_Befeuchtung_I_Anteil_MAX = 0.0; - - if ((Counter_Tuer_geschlossen < 180.0) || (Counter_Tuer_offen > 0.0)) { - Regler_Befeuchtung_MIN = - std::max(Stellgrad_Befeuchtung_Standby - 2.0, Standby_Feuchtemodul); - Regler_Befeuchtung_MAX = std::min(100.0, Stellgrad_Feuchtemodul_MAX); - Regler_Befeuchtung_I_Anteil_MIN = 0.0; - Regler_Befeuchtung_I_Anteil_MAX = - limit(100.0 - P_Anteil_Befeuchtung, Regler_Befeuchtung_I_Anteil_MIN, - Stellgrad_Befeuchtung_Mittelwert); - } else { - if (Feuchtesprung) { - Regler_Befeuchtung_MIN = - std::max(Stellgrad_Befeuchtung_Standby - 2.0, Standby_Feuchtemodul); - } else { - Regler_Befeuchtung_MIN = - std::max(std::min(Stellgrad_Befeuchtung_Standby + - 0.25 * P_Anteil_Befeuchtung + - D_Anteil_Befeuchtung + Z_Anteil_Befeuchtung, - Stellgrad_Befeuchtung_Standby + 2.0), - std::max(Stellgrad_Befeuchtung_Standby - 1.0, - Standby_Feuchtemodul)); - } - Regler_Befeuchtung_MAX = std::min(100.0, Stellgrad_Feuchtemodul_MAX); - Regler_Befeuchtung_I_Anteil_MIN = 0.0; - Regler_Befeuchtung_I_Anteil_MAX = - limit(100.0, Regler_Befeuchtung_I_Anteil_MIN, - Stellgrad_Befeuchtung_Mittelwert); - } - - // Anteil P-Anteil Befeuchtung bei Feuchtesprung und Türöffnung - - if (Counter_Tuer_geschlossen < 180.0 && Feuchtesprung) { - Regler_Befeuchtung_Xp = Regler_Befeuchtung_Xp * 2.0; - } else if (Counter_Tuer_geschlossen > 300.0 && Feuchtesprung) { - Regler_Befeuchtung_Xp = Regler_Befeuchtung_Xp / 2.0; - } else { - Regler_Befeuchtung_Xp = - Regler_Befeuchtung_Xp * - (1.0 + Stellgrad_Entfeuchtung_Mittelwert / -100.0); - } - - // P-Anteil Befeuchtung - - if (!Startup_finished) { - P_Anteil_Befeuchtung = 0.0; - } - - else { - P_Anteil_Befeuchtung = - 100.0 / Regler_Befeuchtung_Xp * Regelabweichung_Befeuchtung; - } - - // I-Anteil Befeuchtung - - if (!Startup_finished) { - I_Anteil_Befeuchtung = 0.0; - } else if (Counter_Tuer_geschlossen > 60.0) { - I_Anteil_Befeuchtung = limit( - I_Anteil_Befeuchtung + 100.0 / Regler_Befeuchtung_Xp / - Regler_Befeuchtung_Tn * sampling_time * - Regelabweichung_Befeuchtung, - Regler_Befeuchtung_I_Anteil_MIN, Regler_Befeuchtung_I_Anteil_MAX); - } - - // D-Anteil Befeuchtung - if (!Startup_finished) { - D_Anteil_Befeuchtung = 0.0; - } else if (Counter_Tuer_geschlossen) { - D_Anteil_Befeuchtung += - (100.0 / Regler_Befeuchtung_Xp * Regler_Befeuchtung_Tv * - (Regelabweichung_Befeuchtung - Regelabweichung_Befeuchtung_alt) / - sampling_time - - D_Anteil_Befeuchtung) / - (Tau_Befeuchtung_Tv / sampling_time); - } - - // Z-Anteil Befeuchtung - - if (!Startup_finished || Feuchtesprung) { - Z_Anteil_Befeuchtung = 0.0; - } else if (Counter_Tuer_geschlossen > 0.0) { - Z_Anteil_Befeuchtung += - (100.0 / Regler_Befeuchtung_Xp * Regler_Befeuchtung_Tz * - ((Regelabweichung_Befeuchtung - - Regelabweichung_Befeuchtung_alt) - - (Regelabweichung_Befeuchtung_alt - - Regelabweichung_Befeuchtung_alt_alt)) / - sampling_time - - Z_Anteil_Befeuchtung) / - (Tau_Befeuchtung_Tz / sampling_time); - } - // Regler_Befeuchtung_MAX = 10.0; - // Berechnung Stellgrad Befeuchtung - if (Counter_Tuer_offen > 60.0 || !Startup_finished) { - Stellgrad_Befeuchtung = 0.0; - } else { - Stellgrad_Befeuchtung = - limit(P_Anteil_Befeuchtung + I_Anteil_Befeuchtung + - D_Anteil_Befeuchtung + Z_Anteil_Befeuchtung, - Regler_Befeuchtung_MIN, Regler_Befeuchtung_MAX); - } - - // Berechnung Stellgrad befeuchtung Mittelwert - - if (!Startup_finished) { - Stellgrad_Befeuchtung_Mittelwert = 0.0; - } else { - Stellgrad_Befeuchtung_Mittelwert = - limit(Stellgrad_Befeuchtung_Mittelwert + - (Stellgrad_Befeuchtung - Stellgrad_Befeuchtung_Mittelwert) / - (600.0 / sampling_time), - Stellgrad_Befeuchtung - 5.0 * 100.0 / Regler_Befeuchtung_Xp, - Stellgrad_Befeuchtung + 5.0 * 100.0 / Regler_Befeuchtung_Xp); - } - - if (!Startup_finished) { - Stellgrad_Befeuchtung_Standby = 4.0; - } else if (!(Feuchtesprung && Counter_Feuchtesprung < 300.0)) { - Stellgrad_Befeuchtung_Standby = - limit(Stellgrad_Befeuchtung_Standby + - (Stellgrad_Befeuchtung - Stellgrad_Befeuchtung_Standby) / - (600.0 / sampling_time), - 2.0, 8.0); - } - - // Regelabweichung Entfeuchtung - - Regelabweichung_Entfeuchtung = Regelabweichung_Feuchte; - - // Gradient Regelabweichung Entfeuchtung - - if (!Startup_finished) { - Regelabweichung_Entfeuchtung_Gradient = 0.0; - } - - else { - Regelabweichung_Entfeuchtung_Gradient = - limit(Regelabweichung_Entfeuchtung_Gradient + - ((Regelabweichung_Entfeuchtung - - Regelabweichung_Entfeuchtung_alt) * - 60.0 / sampling_time - - Regelabweichung_Entfeuchtung_Gradient) / - 60.0 * sampling_time, - -20.0, 5.0); - } - - // Faktor Entfeuchtung - - if (!Startup_finished) { - Faktor_Entfeuchtung = 5.0; - } else if (Regelabweichung_Entfeuchtung < -0.5) { - Faktor_Entfeuchtung = - std::min(Faktor_Entfeuchtung + sampling_time / 60.0, 5.0); - } else { - Faktor_Entfeuchtung = std::max(Faktor_Entfeuchtung - sampling_time, 0.2); - } - - // Gegenbefeuchten Band - - if (!Startup_finished || Feuchtesprung || - (Counter_Feuchtesprung > -600.0 && - Faktor_Gegenbefeuchten_Band == 5.0)) { - Faktor_Gegenbefeuchten_Band = 5.0; - } else if (Stellgrad_Befeuchtung_Mittelwert - Sollwert_Gegenbefeuchten < - -1.0) { - if (Regelabweichung_Kuehlung > 0.05) { - Faktor_Gegenbefeuchten_Band = - std::max(Faktor_Gegenbefeuchten_Band - sampling_time / 10.0, 0.0); - } else { - Faktor_Gegenbefeuchten_Band = - std::min(Faktor_Gegenbefeuchten_Band + sampling_time / 60.0, 5.0); - } - - } else if (Stellgrad_Befeuchtung_Mittelwert - Sollwert_Gegenbefeuchten > - 1.0 && - Stellgrad_Entfeuchtung_Mittelwert < -10.0) { - if (Regelabweichung_Kuehlung < -0.05) { - Faktor_Gegenbefeuchten_Band = - std::max(Faktor_Gegenbefeuchten_Band - sampling_time / 10.0, 0.0); - } else { - Faktor_Gegenbefeuchten_Band = - std::min(Faktor_Gegenbefeuchten_Band + sampling_time / 600.0, 2.0); - } - } else { - Faktor_Gegenbefeuchten_Band = - std::max(Faktor_Gegenbefeuchten_Band - sampling_time / 60.0, 0.2); - } - - // Sollwert Gegenbefeuchten für I-Anteilverschiebung - - Sollwert_Gegenbefeuchten = - 6.0 - 4.0 * (-Stellgrad_Entfeuchtung_Mittelwert / 100.0); - double Offset_Entfeuchtung = 0.0 * Stellgrad_Kuehlung_Mittelwert; - - //(* P-Anteil Entfeuchtung *) - - double P_Anteil_Entfeuchtung = 0.0; - if (!Startup_finished) { - P_Anteil_Entfeuchtung = 0.0; - } else { - P_Anteil_Entfeuchtung = 100.0 / Regler_Entfeuchtung_Xp * - Faktor_Entfeuchtung * - Regelabweichung_Entfeuchtung; - } - // I-Anteil Entfeuchtung - if (!Startup_finished) { - I_Anteil_Entfeuchtung = 0.0; - } else if (Counter_Tuer_geschlossen > 60.0) { - I_Anteil_Entfeuchtung = limit( - I_Anteil_Entfeuchtung + - 100.0 / Regler_Entfeuchtung_Xp / Regler_Entfeuchtung_Tn * - sampling_time * - (Regelabweichung_Entfeuchtung + - (Stellgrad_Befeuchtung - Sollwert_Gegenbefeuchten) / 100.0 * - Regler_Befeuchtung_Xp * Theta_I_Entfeuchtung * - Faktor_Gegenbefeuchten_Band), - Regler_Entfeuchtung_I_Anteil_MIN, Regler_Entfeuchtung_I_Anteil_MAX); - } - // D-Anteil Entfeuchtung - if (!Startup_finished) { - D_Anteil_Entfeuchtung = 0.0; - } else if (Counter_Tuer_geschlossen > 0.0) { - D_Anteil_Entfeuchtung = - D_Anteil_Entfeuchtung + - (100.0 / Regler_Entfeuchtung_Xp * Regler_Entfeuchtung_Tv * - (Regelabweichung_Entfeuchtung - - Regelabweichung_Entfeuchtung_alt) / - sampling_time - - D_Anteil_Entfeuchtung) / - (Tau_Entfeuchtung_Tv / sampling_time); - } - - // Begrenzung Stellgrad und I-Anteil - - if ((Counter_Tuer_geschlossen < 180.0) || (Counter_Tuer_offen > 0.0)) { - Regler_Entfeuchtung_MAX = I_Anteil_Entfeuchtung; - Regler_Entfeuchtung_MIN = -100.0; - Regler_Entfeuchtung_I_Anteil_MAX = I_Anteil_Entfeuchtung; - Regler_Entfeuchtung_I_Anteil_MIN = - limit(-100.0 - P_Anteil_Entfeuchtung, Regler_Entfeuchtung_MIN, - Regler_Entfeuchtung_I_Anteil_MAX); - } else { - Regler_Entfeuchtung_MAX = 0.0; - Regler_Entfeuchtung_MIN = -100.0; - Regler_Entfeuchtung_I_Anteil_MAX = 1.5 / Regler_Entfeuchtung_Xp * 100.0; - Regler_Entfeuchtung_I_Anteil_MIN = - limit(-100.0 - P_Anteil_Entfeuchtung + - Regelabweichung_Entfeuchtung_Gradient / 20.0 * 100.0, - Regler_Entfeuchtung_MIN, Regler_Entfeuchtung_I_Anteil_MAX); - } - - // Berechnung Stellgrad Entfeuchtung - - if (Counter_Tuer_offen > 60.0 || !Startup_finished) { - Stellgrad_Entfeuchtung = 0.0; - } else { - Stellgrad_Entfeuchtung = - limit(P_Anteil_Entfeuchtung + I_Anteil_Entfeuchtung + - Offset_Entfeuchtung + D_Anteil_Entfeuchtung, - Regler_Entfeuchtung_MIN, Regler_Entfeuchtung_MAX); - } - - // Berechnung Stellgrad entfeuchtung Mittelwert - - if (!Startup_finished) { - Stellgrad_Entfeuchtung_Mittelwert = 0.0; - } else { - Stellgrad_Entfeuchtung_Mittelwert = limit( - Stellgrad_Entfeuchtung_Mittelwert + - (Stellgrad_Entfeuchtung - Stellgrad_Entfeuchtung_Mittelwert) / - (600.0 / sampling_time), - Stellgrad_Entfeuchtung - 5.0 * 100.0 / Regler_Entfeuchtung_Xp, - Stellgrad_Entfeuchtung + 5.0 * 100.0 / Regler_Entfeuchtung_Xp); - } - - // PID Regler Tür - // f_PID_Door(...) - double Offset_Temperatur_Tuer; - if (Feuchtesprung) { - Offset_Temperatur_Tuer = 0.0; - } else { - Offset_Temperatur_Tuer = - 2.0 * Betauungsschutz / 100.0 * - limit((90.0 + Stellgrad_Kuehlung_Mittelwert) / (90.0 - 80.0), 0.0, - 1.0); - } - - // Regelabweichung - if (!Tuer_offen || - std::abs(Regelabweichung_Tuer) > - std::abs(Sollwert_Temperatur + Offset_Temperatur_Tuer - - Istwert_Temperatur_Tuer)) { - Regelabweichung_Tuer = Sollwert_Temperatur + Offset_Temperatur_Tuer - - Istwert_Temperatur_Tuer; - } - - // P-Anteil - - // Anti-Windup über dynamisches Integrator Clamping - - double Regler_Tuer_MAX = limit( - (100.0 + Stellgrad_Kuehlung) / (100.0 - 80.0) * 100.0, 0.0, 100.0); - double Regler_Tuer_MIN = 0.0; - double Regler_Tuer_I_Anteil_MAX = - limit(100.0 - P_Anteil_Tuer, 0.0, Regler_Tuer_MAX); - double Regler_Tuer_I_Anteil_MIN = 0.0; - - if (!Startup_finished) { - P_Anteil_Tuer = 0.0; - } else { - P_Anteil_Tuer = 100.0 / Regler_Tuer_Xp * Regelabweichung_Tuer; - } - - // I-Anteil - if (!Startup_finished) { - I_Anteil_Tuer = 0.0; - } else if (Temperatursprung && Regelabweichung_Tuer > 0.0) { - I_Anteil_Tuer = limit(I_Anteil_Tuer, Regler_Tuer_I_Anteil_MIN, - Regler_Tuer_I_Anteil_MAX); - } else if (!Tuer_offen) { - I_Anteil_Tuer = - limit(I_Anteil_Tuer + 100.0 / Regler_Tuer_Xp / Regler_Tuer_Tn * - sampling_time * Regelabweichung_Tuer, - Regler_Tuer_I_Anteil_MIN, Regler_Tuer_I_Anteil_MAX); - } - // D-Anteil - - if (!Startup_finished) { - D_Anteil_Tuer = 0.0; - } else { - D_Anteil_Tuer = D_Anteil_Tuer + - (100.0 / Regler_Tuer_Xp * Regler_Tuer_Tv * - (Regelabweichung_Tuer - Regelabweichung_Tuer_alt) / - sampling_time - - D_Anteil_Tuer) / - (Tau_Tuer_Tv / sampling_time); - } - - double Stellgrad_Tuer; - // Berechnung Stellgrad Tür - if (Tuer_offen || !Startup_finished) { - Stellgrad_Tuer = limit(P_Anteil_Tuer + I_Anteil_Tuer + D_Anteil_Tuer, - Regler_Tuer_MIN, Regler_Tuer_MAX); - } - - // Kennfelder Kühlung/Entfeuchtung - - int Index_Ueberhitzung = 1; - while (Kennfeld_Ueberhitzung[0][Index_Ueberhitzung] < Istwert_Temperatur && - Index_Ueberhitzung < 12) { - Index_Ueberhitzung++; - } - double Interpolation_Ueberhitzung = limit((Kennfeld_Ueberhitzung[0][Index_Ueberhitzung - 1] - Istwert_Temperatur) / - (Kennfeld_Ueberhitzung[0][Index_Ueberhitzung - 1] - Kennfeld_Ueberhitzung[0][Index_Ueberhitzung]), - 0.0, 1.0); - double Skalierung_Ueberhitzung_Kennfeld_Min = Kennfeld_Ueberhitzung[1][Index_Ueberhitzung] * - (Interpolation_Ueberhitzung + Kennfeld_Ueberhitzung[1][Index_Ueberhitzung - 1]) * - (1.0 - Interpolation_Ueberhitzung); - double Skalierung_Ueberhitzung_Kennfeld_Max = Kennfeld_Ueberhitzung[2][Index_Ueberhitzung] * - (Interpolation_Ueberhitzung + Kennfeld_Ueberhitzung[2][Index_Ueberhitzung - 1]) * - (1.0 - Interpolation_Ueberhitzung); - double Sollwert_Ueberhitzung = Kennfeld_Ueberhitzung[3][Index_Ueberhitzung] * - (Interpolation_Ueberhitzung + Kennfeld_Ueberhitzung[3][Index_Ueberhitzung - 1]) * - (1.0 - Interpolation_Ueberhitzung); - - //(* Entfeuchtung und Abtauung aus Kennfeld *) - int Index_Entfeuchtung = 1; // todo uj - warum nicht mit 0 starten? - while ((Kennfeld_Entfeuchtung[0][Index_Entfeuchtung] < Istwert_Temperatur) && (Index_Ueberhitzung < 12)) { - Index_Entfeuchtung++; - } - double Interpolation_Entfeuchtung = limit((Kennfeld_Entfeuchtung[0][Index_Entfeuchtung - 1] - - (Istwert_Temperatur) / (Kennfeld_Entfeuchtung[0][Index_Entfeuchtung - 1] ) - - Kennfeld_Entfeuchtung[0][Index_Entfeuchtung]), - 0.0, 1.0); - double Skalierung_Entfeuchtungsventil = Kennfeld_Entfeuchtung[1][Index_Entfeuchtung] * - Interpolation_Entfeuchtung + - Kennfeld_Entfeuchtung[1][Index_Entfeuchtung - 1] * - (1.0 - Interpolation_Entfeuchtung); - double Abtauzyklus_Pause = - Kennfeld_Entfeuchtung[2][Index_Entfeuchtung] * - Interpolation_Entfeuchtung + - Kennfeld_Entfeuchtung[2][Index_Entfeuchtung - 1] * - (1.0 - Interpolation_Entfeuchtung); - double Abtauzyklus_Dauer = - Kennfeld_Entfeuchtung[3][Index_Entfeuchtung] * - Interpolation_Entfeuchtung + - Kennfeld_Entfeuchtung[3][Index_Entfeuchtung - 1] * - (1.0 - Interpolation_Entfeuchtung); - - // Ende - f_PID_Door(...) - - // Überhitzungsregelung - - // Temperatur Verdampferausgang PT1 - // f_PT1.Vapourize(...) - if (!Startup_finished) { - Istwert_Temperatur_Verdampferausgang_PT1 = - Istwert_Temperatur_Verdampferausgang; - } else { - Istwert_Temperatur_Verdampferausgang_PT1 += - (Istwert_Temperatur_Verdampferausgang - - Istwert_Temperatur_Verdampferausgang_PT1) / - (60.0 * 4.0); - } - - // Skalierung Überhitzung - if (Istwert_Temperatur_Verdampferausgang < - (Istwert_Temperatur + Sollwert_Ueberhitzung)) { - Counter_Durchzug = MIN(Counter_Durchzug + sampling_time, 10.0); - } else { - // uj-todo; template for MAX - // Counter_Durchzug = MAX(MAX(Counter_Durchzug-sampling_time,-10),0); - } - if (Counter_Durchzug >= 10.0) { - Durchzug = true; - } else if (Counter_Durchzug <= -10.0) { - Durchzug = false; - } - - double Skalierung_Ueberhitzung_PT1 = Skalierung_Ueberhitzung_Kennfeld_Max; - - // Magnetventil Kühlung - - // Stellgrad Kühlung - - if (Counter_Verdichter_aus > 60.0 && Counter_Verdichter_aus < 600.0) { - Stellgrad_Kuehlventil = 1.0; - } else if (Istwert_Temperatur > 120.0 || Counter_Kuehlung_Freigabe <= 0.0) { - Stellgrad_Kuehlventil = 0.0; - } else { - Stellgrad_Kuehlventil = MAX(-Stellgrad_Kuehlung, 0.0) * - Skalierung_Ueberhitzung_PT1 * - Counter_Kuehlung_Freigabe; - } - - // Ende - f_PT1.Vapourize(...) - - // PWM Generierung Kuehlventil - // bool step(double Stellgrad,double sampling_time){ - - // f_PWMCoolingValve.Step(...) - Kuehlventil = PWM_Kuehlventil.step(Stellgrad_Kuehlventil, sampling_time); - - // Magnetventil Entfeuchtung - double T_Entfeuchtung; - if (!Startup_finished) { - T_Entfeuchtung = Istwert_Temperatur; - } else if (Entfeuchtungsventil) { - T_Entfeuchtung = - limit(T_Entfeuchtung + - ((Istwert_Temperatur - T_Entfeuchtung) * U_Entfeuchtung - - P_Entfeuchtung) / - (4.0 * C_Entfeuchtung), - -30.0, Istwert_Temperatur); - } else { - T_Entfeuchtung = - limit(T_Entfeuchtung + - ((Istwert_Temperatur - T_Entfeuchtung) * U_Entfeuchtung) / - (4.0 * C_Entfeuchtung), - -30.0, Istwert_Temperatur); - } - // Stellgrad Entfeuchtung - - if (Istwert_Temperatur > 120.0 || Counter_Entfeuchtung_Freigabe <= 0.0) { - Stellgrad_Entfeuchtungsventil = 0.0; - } else { - Stellgrad_Entfeuchtungsventil = MAX(-Stellgrad_Entfeuchtung, 0.0) * - Skalierung_Entfeuchtungsventil * - Counter_Entfeuchtung_Freigabe; - } - - // Abtauzyklus - bool Freigabe_Abtauzyklus = - Istwert_Feuchte > Sollwert_Feuchte_Absolut + 2.5; - if (!Freigabe_Abtauzyklus) { - Counter_Freigabe_Abtauzyklus = 0.0; - } else { - Counter_Freigabe_Abtauzyklus += sampling_time; - } - double Skalierung_Abtauzyklus_Dauer = 0.0; - ; - if (Abtauzyklus_Pause > 0.0 && Abtauzyklus_Dauer > 0.0) { - Skalierung_Abtauzyklus_Dauer = - limit(Counter_Freigabe_Abtauzyklus / - (10.0 * (Abtauzyklus_Pause + Abtauzyklus_Dauer) * 60.0), - 1.0, 5.0); - } - if (Counter_Abtauzyklus > - (Abtauzyklus_Pause + Abtauzyklus_Dauer * Skalierung_Abtauzyklus_Dauer) * - 60.0) { - Counter_Abtauzyklus = 0.0; - } else if ((T_Entfeuchtung < 0.0 && Freigabe_Abtauzyklus) || Abtauzyklus) { - Counter_Abtauzyklus += sampling_time; - } - - else { - Counter_Abtauzyklus = MAX(Counter_Abtauzyklus - sampling_time, 0.0); - } - Abtauzyklus = Counter_Abtauzyklus > Abtauzyklus_Pause * 60.0 && - Abtauzyklus_Pause > 0.0; - - if (Abtauzyklus) { - Stellgrad_Entfeuchtungsventil = 0.0; - } - // Ende -f_PWMCoolingValve.Step(...) - - - // PWM Entfeuchtungsventil - // f_PWMDeHumizeValve.Step(...) - Entfeuchtungsventil = PWM_Entfeuchtungsventil.step( - Stellgrad_Entfeuchtungsventil, sampling_time); - - // Druckausgleich vor Start Verdichter - if (!Verdichter && Counter_Entfeuchtung_Freigabe > 5.0) { - Entfeuchtungsventil = true; - } - - // Heizung Kessel - - if (Freigabe_Heizung) { - Stellgrad_HeizungKessel = - MAX(Stellgrad_Heizung * Counter_Heizung_Freigabe, 0.0); - } else { - Stellgrad_HeizungKessel = 0.0; - } - - // PWM Heizung Kessel - HeizungKessel = PWM_Heizung_Kessel.step(Stellgrad_HeizungKessel, 0.25); - - // Betauungsschutz - - double Stellgrad_Betauungsschutz_MAX = limit( - (90.0 + Stellgrad_Kuehlung_Mittelwert) / (90.0 - 80.0) * 100.0, 0.0, - limit((Sollwert_Temperatur - 25.0) / (-20.0 - 25.0) * Betauungsschutz, - 0.0, Betauungsschutz)); - - if (!Startup_finished) { - Stellgrad_Betauungsschutz = 0.0; - } - - // Tuerheizung - Stellgrad_HeizungTuer = - limit(Stellgrad_Tuer + Stellgrad_Betauungsschutz / 10.0, 0.0, 100.0); - - HeizungTuer = PWM_Heizung_Tuer.step(Stellgrad_HeizungTuer, 0.25); - - // Heizung Kesselrand - - Stellgrad_HeizungKesselrand = - limit(Stellgrad_Tuer * - limit(1.0 + Betauungsschutz / 100.0 * 2.0 * - (90.0 + Stellgrad_Kuehlung_Mittelwert) / - (90.0 - 80.0), - 1.0, 2.0) + - Stellgrad_Betauungsschutz, - 0.0, 100.0); - - // Ende - f_PWMDeHumizeValve.Step(...) - - - // PWM Kesselrand - // Ende - f_PWMKesselRand.Step(...) - HeizungKesselrand = PWM_Heizung_Kesselrand.step(Stellgrad_HeizungKesselrand, 0.25); - // Ende - f_PWMKesselRand.Step(...) - - { - // Binder Feuchtemodul - - // Sperrsignal Feuchtemodul - - bool Sperrsignal_Feuchte = false; - - // Gradient Feuchtemodul - - if (!Startup_finished) { - Temperatur_Feuchtemodul_Gradient = 0; - } else { - Temperatur_Feuchtemodul_Gradient += - ((Temperatur_Feuchtemodul - Temperatur_Feuchtemodul_alt) * 60.0 * - 4.0 - - Temperatur_Feuchtemodul_Gradient) / - (4.0 * 10.0); - } - - Sollwert_Temperatur_Feuchtemodul = - Sollwert_Temperatur_Feuchtemodul_MIN + - Stellgrad_Feuchtemodul_Mittelwert / 100.0 * - (Sollwert_Temperatur_Feuchtemodul_MAX - - Sollwert_Temperatur_Feuchtemodul_MIN); - - // Offset Stellgrad Feuchtemodul - - double Temperatur_Feuchtemodul_Standby = - Sollwert_Temperatur_Feuchtemodul - - (Stellgrad_Entfeuchtung_Mittelwert - 0.0) / (-100.0 - 0.0) * 60.0; - double Standby_Feuchtemodul = - limit((Temperatur_Feuchtemodul_Standby - Temperatur_Feuchtemodul) / - 10.0 * 5.0, - 0.0, 5.0); - - // Stellgrad Feuchtemodul - Stellgrad_Feuchtemodul = limit( - Stellgrad_Befeuchtung + - 2.0 * limit(Stellgrad_Befeuchtung - Stellgrad_Feuchtemodul_PT1, - -2.0, 2.0) + - Stellgrad_Feuchtemodul_Nachfuellen, - 0.0, 100.0); - - // Begrenzung Temperatur Feuchtemodul über Temperatur - double Stellgrad_Feuchtemodul_MAX_Temperatur = limit( - (Temperatur_Feuchtemodul_MAX - Temperatur_Feuchtemodul) / 40.0 * 100.0, - 0.0, 100.0); - - double Temperatur_Feuchtemodul_Gradient_MAX = 10.0; - if (Temperatur_Feuchtemodul < 90.0) { - Temperatur_Feuchtemodul_Gradient_MAX = 10.0; - } else { - Temperatur_Feuchtemodul_Gradient_MAX = limit( - 20.0 - - (Temperatur_Feuchtemodul - (Temperatur_Feuchtemodul_MAX - 60.0)) / - 60.0 * 20.0 - - Stellgrad_Feuchtemodul_MAX / 100.0 * 10.0, - 5.0, 20.0); - } - - double Stellgrad_Feuchtemodul_MAX_adaptiv = 10.0; - if (!Startup_finished) { - Stellgrad_Feuchtemodul_MAX_adaptiv = 10.0; - } else if (Temperatur_Feuchtemodul < 80.0) { - Stellgrad_Feuchtemodul_MAX_adaptiv = 10.0; - } else if (Stellgrad_Feuchtemodul + 20.0 > - Stellgrad_Feuchtemodul_MAX_adaptiv && - Stellgrad_Feuchtemodul_MAX_adaptiv < - Stellgrad_Feuchtemodul_MAX_Temperatur && - Temperatur_Feuchtemodul_Gradient < - 2.0 * Temperatur_Feuchtemodul_Gradient_MAX && - !Sperrsignal_Feuchte) { - Stellgrad_Feuchtemodul_MAX_adaptiv = - limit(Stellgrad_Feuchtemodul_MAX_adaptiv + - 20.0 * - limit((Temperatur_Feuchtemodul_Gradient_MAX - - Temperatur_Feuchtemodul_Gradient) / - Temperatur_Feuchtemodul_Gradient_MAX, - -2.0, 1.0) / - (60.0 * 4.0), - 0.0, Stellgrad_Feuchtemodul_MAX_Temperatur); - } else { - Stellgrad_Feuchtemodul_MAX_adaptiv = - limit(Stellgrad_Feuchtemodul_MAX_adaptiv - 5.0 / (60.0 * 4.0), 10.0, - Stellgrad_Feuchtemodul_MAX_Temperatur); - } - - // Begrenzung Stellgrad_Feuchtemodul - - Stellgrad_Feuchtemodul_MAX = - MIN(Stellgrad_Feuchtemodul_MAX_Temperatur - 5.0, - Stellgrad_Feuchtemodul_MAX_adaptiv + Stellgrad_Feuchtemodul_Boost); - - Stellgrad_Feuchtemodul = - MIN(Stellgrad_Feuchtemodul, Stellgrad_Feuchtemodul_MAX); - - // Stellgrad Feuchtemodul Boost - - if (!Startup_finished || Temperatur_Feuchtemodul < 80.0) { - Stellgrad_Feuchtemodul_Boost = 0.0; - } else if (Stellgrad_Feuchtemodul < - Stellgrad_Feuchtemodul_MAX_adaptiv - 10.0) { - Stellgrad_Feuchtemodul_Boost = - MIN(Stellgrad_Feuchtemodul_Boost + 10.0 / 60.0 * sampling_time, - 2.0 * Stellgrad_Feuchtemodul_MAX_Temperatur); - } else { - Stellgrad_Feuchtemodul_Boost = MAX( - Stellgrad_Feuchtemodul_Boost - (Stellgrad_Feuchtemodul + 10.0 - - Stellgrad_Feuchtemodul_MAX_adaptiv) / - 60.0 * sampling_time, - 0.0); - } - if (!Startup_finished) { - Stellgrad_Feuchtemodul_PT1 = Stellgrad_Feuchtemodul; - } else if (is_valid(Stellgrad_Feuchtemodul_PT1)) { - Stellgrad_Feuchtemodul_PT1 = 0.0; - } else { - Stellgrad_Feuchtemodul_PT1 = - Stellgrad_Feuchtemodul_PT1 + - (Stellgrad_Feuchtemodul - Stellgrad_Feuchtemodul_PT1) / (4.0 * 30.0); - } - - // Nachfüllen Befeuchtungsmodul - - double Stellgrad_Nachfuellen_Temperatur = 0.0; - double Skalierung_Nachfuellen_Temperatur_P_Anteil = 0.0; - double Skalierung_Nachfuellen_Temperatur_D_Anteil = 0.0; - - if (!Startup_finished) { - Stellgrad_Nachfuellen_Temperatur = 0.0; - Skalierung_Nachfuellen_Temperatur_D_Anteil = 0.0; - Skalierung_Nachfuellen_Temperatur_D_Anteil = 0.0; - Skalierung_Nachfuellen_Temperatur_I_Anteil = 0.0; - } else { - Stellgrad_Nachfuellen_Temperatur = limit( - MAX(Temperatur_Feuchtemodul - Sollwert_Temperatur_Feuchtemodul, 0.0) * - 2.0 + - MIN(Temperatur_Feuchtemodul - Sollwert_Temperatur_Feuchtemodul, - 0.0) * - 1.0, - -20.0, 50.0); - Skalierung_Nachfuellen_Temperatur_P_Anteil = limit( - MAX(Temperatur_Feuchtemodul - Sollwert_Temperatur_Feuchtemodul, 0.0) / - 20.0 + - MIN(Temperatur_Feuchtemodul - Sollwert_Temperatur_Feuchtemodul, - 0.0) / - 40.0, - -0.2, 5.0); - Skalierung_Nachfuellen_Temperatur_D_Anteil = - limit(Temperatur_Feuchtemodul_Gradient / 10.0, -5.0, 5.0); - Skalierung_Nachfuellen_Temperatur_I_Anteil = - limit(Skalierung_Nachfuellen_Temperatur_I_Anteil + - limit(Skalierung_Nachfuellen_Temperatur_P_Anteil + - Skalierung_Nachfuellen_Temperatur_D_Anteil, - -0.2, 25.0) * - sampling_time / 1200.0, - 0.0, 5.0); - } - double Stellgrad_Nachfuellen = 0.0; - Stellgrad_Feuchtemodul_Nachfuellen = 0.0; - - if (Temperatur_Feuchtemodul > Temperatur_Feuchtemodul_MAX && - Temperatur_Feuchtemodul_Gradient > 0.0) { - Stellgrad_Nachfuellen = 20.0; - Stellgrad_Feuchtemodul_Nachfuellen = 0.0; - } else { - Stellgrad_Nachfuellen = limit( - ((Stellgrad_Feuchtemodul_PT1 - Stellgrad_Feuchtemodul_Nachfuellen) * - (MAX(Skalierung_Nachfuellen_Temperatur_P_Anteil + - Skalierung_Nachfuellen_Temperatur_D_Anteil, - 0.0) + - Skalierung_Nachfuellen_Temperatur_I_Anteil) + - Stellgrad_Nachfuellen_Temperatur) * - 2.0 * 7.9681 / Durchflussmenge_Einlassventil_Feuchtemodul, - 0.0, 100.0); - Stellgrad_Feuchtemodul_Nachfuellen = - 0.5 * Stellgrad_Nachfuellen * - Durchflussmenge_Einlassventil_Feuchtemodul / 60.0 * 4.19 * 75.0 / - 600.0; - } - //(* Entleeren des Kessels *) - bool Entleeren_Kessel = false; - if (Startup_finished && Temperatur_Feuchtemodul < 70.0) { - Entleeren_Kessel = Counter_Entleeren_Kessel < 60.0; - Counter_Entleeren_Kessel += sampling_time; - } else { - Counter_Entleeren_Kessel = 0.0; - Entleeren_Kessel = false; - } - - //(* Abschlämmen des Kessels *) - Abschlaemmintegral = - Abschlaemmintegral + 0.1 * Durchflussmenge_Einlassventil_Feuchtemodul / - Durchflussmenge_Abschlaemmventil_Feuchtemodul * - Stellgrad_Nachfuellen / 100.0 * sampling_time; - - if (Entleeren_Kessel) { - Abschlaemmventil = true; - Stellgrad_Abschlaemmventil_zyklisch = 100.0; - } else { - Counter_Zyklus_Abschlaemmventil += sampling_time; - if (Abschlaemmintegral > 0.25 && Temperatur_Feuchtemodul_Gradient < 0.0) { - Abschlaemmventil = true; - Stellgrad_Abschlaemmventil_zyklisch = 2.5; - Counter_Zyklus_Abschlaemmventil = 0.0; - Abschlaemmintegral -= 0.25; - } else { - Abschlaemmventil = false; - if (Counter_Zyklus_Abschlaemmventil >= 10.0) { - Stellgrad_Abschlaemmventil_zyklisch = 0.0; - } - } - } - - // Stellgrad_Feuchtemodul = 2.0; - - // PWM Befeuchtungsmodul - HeizungFeuchtemodul = - PWM_Heizung_Feuchtemodul.step(Stellgrad_Feuchtemodul, 0.25); - // PWM Nachfüllen - Nachfuellen = PWM_Nachfuellen.step(Stellgrad_Nachfuellen, 0.25); - - // Abwassermanagement - if (!Entleerbehaelter_Unten || !Entleerbehaelter_Oben || Entleeren_Kessel) { - Counter_Nachlauf_Entleeren = 10.0; - Counter_Pause_Entleeren += sampling_time; - if (Counter_Pause_Entleeren > 30.0) { - Counter_Pause_Entleeren = 0.0; - } - - } else { - Counter_Nachlauf_Entleeren = - MAX(Counter_Nachlauf_Entleeren - sampling_time, 0.0); - Counter_Pause_Entleeren = 0.0; - } - bool Entleeren_Pause = false; - Entleeren = Counter_Nachlauf_Entleeren > 0.0; - Entleeren_Pause = Counter_Pause_Entleeren > 27.0; - Entleerpumpe = Entleeren && !Entleeren_Pause; - - if (!Startup_finished) { - Zyklus_Entleeren_Mittelwert = 600.0; - } else if (Entleeren && !Entleeren_alt) { - Zyklus_Entleeren_Mittelwert = limit( - Zyklus_Entleeren_Mittelwert + - (Counter_Zyklus_Entleeren - Zyklus_Entleeren_Mittelwert) / 10.0, - 10.0, 3600.0); - Counter_Zyklus_Entleeren = 0.0; - } else { - Counter_Zyklus_Entleeren += sampling_time; - } - - if (Steuerkontakt_Standby || Istwert_Temperatur > 110.0) { - Counter_Kuehlung_Freigabe = 0.0; - } else { - if (Stellgrad_Kuehlung < 0.0 || Stellgrad_Heizung < 2.0 || - Counter_Tuer_geschlossen < 300.0) { - Counter_Kuehlung_Freigabe = - MIN(Counter_Kuehlung_Freigabe + sampling_time / 10.0, 1.0); - } else { - Counter_Kuehlung_Freigabe = - MAX(Counter_Kuehlung_Freigabe - sampling_time / 300.0, 0.0); - } - } - Freigabe_Kuehlung = Counter_Kuehlung_Freigabe >= 1.0 || - (Freigabe_Kuehlung && Counter_Kuehlung_Freigabe > 0.0); - // * Freigabe Kühlung *) - - // (* Freigabe Entfeuchtung *) - if (Steuerkontakt_Standby || Istwert_Temperatur > 110.0) { - Counter_Entfeuchtung_Freigabe = 0.0; - } else { - if (Stellgrad_Entfeuchtung < 0.0 || Stellgrad_Befeuchtung < 2.0 || - Counter_Tuer_geschlossen < 300.0) { - Counter_Entfeuchtung_Freigabe = - MIN(Counter_Entfeuchtung_Freigabe + sampling_time / 10.0, 10.0); - } else { - Counter_Entfeuchtung_Freigabe = - MAX(Counter_Entfeuchtung_Freigabe - sampling_time / 300.0, 0.0); - } - } - Freigabe_Entfeuchtung = - Counter_Entfeuchtung_Freigabe >= 1.0 || - (Freigabe_Entfeuchtung && Counter_Entfeuchtung_Freigabe > 0.0); - - // (* Freigabe Heizung *) - if (Steuerkontakt_Standby || Istwert_Temperatur > 110.0) { - Counter_Heizung_Freigabe = 0.0; - } else { - if (Stellgrad_Heizung < 0.0 || Stellgrad_Kuehlung > -2.0 || - Counter_Tuer_geschlossen < 300.0) { - Counter_Heizung_Freigabe = - MIN(Counter_Heizung_Freigabe + sampling_time / 10.0, 10.0); - } else { - Counter_Heizung_Freigabe = - MAX(Counter_Heizung_Freigabe - sampling_time / 300.0, 0.0); - } - } - Freigabe_Heizung = Counter_Heizung_Freigabe >= 1.0 || - (Freigabe_Heizung && Counter_Heizung_Freigabe > 0.0); - // (* Freigabe Befeuchtung *) - if (Steuerkontakt_Standby || Istwert_Temperatur > 110.0) { - Counter_Befeuchtung_Freigabe = 0.0; - } else { - if (Stellgrad_Befeuchtung < 0.0 || Stellgrad_Entfeuchtung > -2.0 || - Counter_Tuer_geschlossen < 300.0) { - Counter_Befeuchtung_Freigabe = - MIN(Counter_Befeuchtung_Freigabe + sampling_time / 10.0, 10.0); - } else { - Counter_Befeuchtung_Freigabe = - MAX(Counter_Befeuchtung_Freigabe - sampling_time / 300.0, 0.0); - } - } - Freigabe_Befeuchtung = - Counter_Befeuchtung_Freigabe >= 1.0 || - (Freigabe_Befeuchtung && Counter_Befeuchtung_Freigabe > 0.0); - - // Verdichterabscaltung - - if (!Startup_finished) { - Drehzahl_Verdichter_adaptiv = Drehzahl_Verdichter_MAX; - } else if (Temperatursprung) { - Drehzahl_Verdichter_adaptiv = - MAX(Drehzahl_Verdichter_Kuehlung, Drehzahl_Verdichter_Entfeuchtung); - } else if (is_valid(Stellgrad_Kuehlung)) { - Drehzahl_Verdichter_adaptiv = - limit(Drehzahl_Verdichter_adaptiv + - (-Stellgrad_Kuehlung - 25.0) / 100.0 * - (Drehzahl_Verdichter_MAX - Drehzahl_Verdichter_MIN) / - (4.0 * 600.0), - Drehzahl_Verdichter_MIN, Drehzahl_Verdichter_MAX); - } - - Drehzahl_Verdichter_Kuehlung = - Drehzahl_Verdichter_MIN + - (MAX(-Stellgrad_Kuehlung_Mittelwert, -Stellgrad_Kuehlung) - 30.0) / - (90.0 - 30.0) * (Drehzahl_Verdichter_MAX - Drehzahl_Verdichter_MIN); - Drehzahl_Verdichter_Entfeuchtung = - Drehzahl_Verdichter_MIN + - 0.5 * - (MAX(-Stellgrad_Entfeuchtung_Mittelwert, -Stellgrad_Entfeuchtung) - - 50.0) / - (90.0 - 50.0) * (Drehzahl_Verdichter_MAX - Drehzahl_Verdichter_MIN); - - if (Verdichter) { - Drehzahl_Verdichter = - limit(MAX(Drehzahl_Verdichter_Kuehlung, - MAX(Drehzahl_Verdichter_Entfeuchtung, - Drehzahl_Verdichter_adaptiv)), - Drehzahl_Verdichter_MIN, Drehzahl_Verdichter_MAX); - } else { - Drehzahl_Verdichter = 1000.0; - } - - Stellgrad_Verdichter = - Drehzahl_Verdichter / Drehzahl_Verdichter_MAX * 100.0 * (160.0 / 200.0); - /* - (* -------------------- *) - (* Verflüssigerregelung *) - (* -------------------- *) */ - - Verfluessiger = Verfluessiger && - ((Drehzahl_Verdichter_adaptiv - Drehzahl_Verdichter_MIN) / ((Drehzahl_Verdichter_MAX - Drehzahl_Verdichter_MIN) < 0.30) && - (-Stellgrad_Kuehlung_Mittelwert < 30.0) && - (-Stellgrad_Entfeuchtung_Mittelwert < 60.0) || ((Drehzahl_Verdichter_adaptiv - Drehzahl_Verdichter_MIN) / (Drehzahl_Verdichter_MAX - Drehzahl_Verdichter_MIN) < 0.20) && - (-Stellgrad_Kuehlung_Mittelwert < 20.0) && - -Stellgrad_Entfeuchtung_Mittelwert < 50.0); - - }// Ende Feuchtemodul - - // ---------------------------------------- - // Werte die auf Veränderung geprüft werden - // ---------------------------------------- - Sammelalarm_quittiert_alt = Sammelalarm_quittiert; - Istwert_Temperatur_alt = Istwert_Temperatur; - Regelabweichung_Temperatur_alt = Regelabweichung_Temperatur; - Sollwert_Temperatur_alt = Sollwert_Temperatur; - Istwert_Feuchte_alt = Istwert_Feuchte; - Regelabweichung_Feuchte_alt_alt = Regelabweichung_Feuchte_alt; - Regelabweichung_Feuchte_alt = Regelabweichung_Feuchte; - Sollwert_Feuchte_alt = Sollwert_Feuchte; - Durchzug_alt = Durchzug; - Regelabweichung_Tuer_alt = Regelabweichung_Tuer; - HeizungFeuchtemodul_alt = HeizungFeuchtemodul; - Regelabweichung_Befeuchtung_alt_alt = Regelabweichung_Befeuchtung_alt; - Regelabweichung_Entfeuchtung_alt = Regelabweichung_Entfeuchtung; - - - - // ---------------- - // Rückgabewerte - // ---------------- - // F_Outputs out{}; - - binOut.bool_out01 = (std::abs((Sollwert_Temperatur - Istwert_Temperatur)) > Temperaturband); // du nutzt Temperaturband-Alarm - // separat; hier nur Beispiel - binOut.bool_out02 = (std::abs((Sollwert_Feuchte - Istwert_Feuchte)) > Feuchteband) && - (!Befeuchtung_aus) && (!Entfeuchtung_aus); - binOut.bool_out03 = Befeuchtung_aus || Entfeuchtung_aus; - binOut.bool_out07 = (!Status_Uebertemperatur) && - (!(std::abs(Istwert_Ueberwachungsregler - Istwert_Temperatur) > 20.0)); - alarmOut.Startup = Startup_finished; - - binOut.bool_out09 = HeizungKessel; - binOut.bool_out11 = HeizungTuer; - binOut.bool_out12 = HeizungKesselrand; - binOut.bool_out13 = Verfluessiger; - binOut.bool_out14 = Nachfuellen; - binOut.bool_out16 = Entleerpumpe; - binOut.bool_out17 = HeizungFeuchtemodul; - binOut.bool_out20 = Abschlaemmventil; - binOut.bool_out18 = Kuehlventil; - binOut.bool_out19 = Entfeuchtungsventil; - binOut.bool_out21 = Verdichter; - binOut.bool_out23 = !Sammelalarm_quittiert; - - analogOut.real_out01 = Istwert_Temperatur; - analogOut.real_out02 = Istwert_Temperatur; - analogOut.real_out04 = Istwert_Temperatur; - analogOut.real_out05 = limit(Istwert_Feuchte, 0.0, 100.0); - analogOut.real_out06 = limit(Istwert_Feuchte, 0.0, 100.0); - analogOut.real_out07 = Sollwert_Feuchte; - analogOut.real_out08 = limit(Istwert_Feuchte, 0.0, 100.0); - analogOut.real_out09 = Stellgrad_HeizungKessel; - analogOut.real_out10 = Stellgrad_Pumpe; - analogOut.real_out11 = Stellgrad_HeizungTuer; - analogOut.real_out12 = Stellgrad_HeizungKesselrand; - analogOut.real_out13 = Stellgrad_Feuchtemodul; - analogOut.real_out14 = Stellgrad_Abschlaemmventil_zyklisch; - analogOut.real_out16 = Temperatur_Feuchtemodul; - analogOut.Stellgrad_Feuchtemodul = Stellgrad_Feuchtemodul; - analogOut.real_out18 = Stellgrad_Kuehlventil; - analogOut.real_out19 = Stellgrad_Entfeuchtungsventil; - analogOut.real_out20 = Stellgrad_Luefter; - analogOut.real_out21 = Stellgrad_Verdichter; - analogOut.real_out25 = Schaltwert_Uebertemperatur; - analogOut.real_out26 = Schaltwert_Untertemperatur; - analogOut.Stellgrad_Heizung = Stellgrad_Heizung; - analogOut.Stellgrad_Kuehlung = Stellgrad_Kuehlung; - analogOut.Stellgrad_Befeuchtung = Stellgrad_Befeuchtung; - analogOut.Stellgrad_Entfeuchtung = Stellgrad_Entfeuchtung; - analogOut.Counter_Tuer = Counter_Tuer_offen; - - // alarms (wie ST) - alarmOut.alarm_01 = Bandalarm_Temperatur; - alarmOut.alarm_02 = Bandalarm_Feuchte; - alarmOut.alarm_03 = Tueralarm; - alarmOut.alarm_04 = false; - alarmOut.alarm_05 = false; - alarmOut.alarm_06 = Alarm_Wasser_Befeuchtungsmodul && !Befeuchtung_aus; - alarmOut.alarm_07 = Alarm_Abwasser_Befeuchtungsmodul; - alarmOut.alarm_08 = (Alarm_Heizung_Befeuchtungsmodul || Alarm_PT100_Befeuchtungsmodul) && - !Befeuchtung_aus; - - // alarm_09..alarm_15 sind im ST mit Selbsthaltung/Quittierung etc.: - alarmOut.alarm_09 = (((Istwert_Temperatur_Tuer < -50.0) || (Istwert_Temperatur_Tuer > 120.0)) && - Startup_finished) ||(alarm_09 && Sammelalarm_quittiert); - - alarmOut.alarm_10 = (std::abs(Istwert_Ueberwachungsregler - Istwert_Temperatur) > 20.0) || - ((((Istwert_Ueberwachungsregler < -50.0) || - (Istwert_Ueberwachungsregler > 120.0) && Startup_finished))) || - (alarm_10 && Sammelalarm_quittiert); - - alarmOut.alarm_11 = - Status_Uebertemperatur || StatusQuittierung_Uebertemperatur; - alarmOut.alarm_12 = - Status_Untertemperatur || StatusQuittierung_Untertemperatur; - - alarmOut.alarm_13 = (((Istwert_Temperatur_Verdampferausgang < -50.0) || - (Istwert_Temperatur_Verdampferausgang > 120.0)) && - Startup_finished) || - (alarm_13 && Sammelalarm_quittiert); - - alarmOut.alarm_14 = - (Counter_Wasserkanister_leer > 10.0 && Startup_finished) || - (alarm_14 && Sammelalarm_quittiert); - - alarmOut.alarm_15 = - ((analogInput.real_in11 > Sollwert_Feuchte_Max && !Befeuchtung_aus) || - (analogInput.real_in11 < Sollwert_Feuchte_Min && !Entfeuchtung_aus)) || - (alarm_15 && Sammelalarm_quittiert); - - // Selbsthaltung der Alarm-Bits (wie ST-OR alarm_x ...) - alarm_09 = alarmOut.alarm_09; - alarm_10 = alarmOut.alarm_10; - alarm_13 = alarmOut.alarm_13; - alarm_14 = alarmOut.alarm_14; - alarm_15 = alarmOut.alarm_15; - - // return out; - } - -private: - // ===== ST: VAR CONSTANT ===== - static constexpr double sampling_time = 0.25; - - static constexpr std::array, 4> Kennfeld_Ueberhitzung{ - {// 0: Temperatur - std::array{-20.0, -10.0, 0.0, 10.0, 20.0, 30.0, 40.0, 50.0, - 60.0, 70.0, 80.0, 90.0, 100.0}, - // 1: Skalierung Min - std::array{0.01, 0.02, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, - 0.8, 0.9, 1.0, 1.0}, - // 2: Skalierung Max - std::array{0.01, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, - 1.0, 1.0, 1.0}, - // 3: Sollwert Überhitzung - std::array{-6.0, -8.0, -10.0, -8.0, -6.0, -8.0, -10.0, -12.0, - -16.0, -20.0, -24.0, -28.0, -32.0}}}; - static constexpr std::array, 4> Kennfeld_Entfeuchtung{ - {// 0: Temperatur - std::array{-20.0, -10.0, 0.0, 10.0, 20.0, 30.0, 40.0, 50.0, - 60.0, 70.0, 80.0, 90.0, 100.0}, - // 1: Skalierung Entfeuchtung - std::array{0.08, 0.08, 0.08, 0.10, 0.12, 0.14, 0.16, 0.18, - 0.20, 0.22, 0.24, 0.26, 0.28}, - // 2: Abtauzyklus Pause - std::array{120.0, 120.0, 120.0, 120.0, 120.0, 90.0, 60.0, - 60.0, 60.0, 0.0, 0.0, 0.0, 0.0}, - // 3: Abtauzyklus Dauer - std::array{60.0, 60.0, 60.0, 30.0, 20.0, 10.0, 8.0, 4.0, 2.0, - 0.0, 0.0, 0.0, 0.0}}}; - - // Kennfelder (nur die, die oben genutzt werden; den Rest kannst du genauso - // hinzufügen) - static constexpr std::array Kennfeld_Regler_Heizung_Xp{ - 0.2, 0.5, 0.8, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; - static constexpr std::array Kennfeld_Regler_Kuehlung_Xp{ - 0.1, 0.1, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.0}; - static constexpr std::array, 9> - Kennfeld_Regler_Befeuchtung_Xp{ - {std::array{1.00, 0.54, 0.31, 0.18, 0.11, 0.07, 0.05, 0.03, - 0.02}, - std::array{1.00, 0.54, 0.31, 0.18, 0.11, 0.07, 0.05, 0.03, - 0.02}, - std::array{1.00, 0.54, 0.31, 0.18, 0.11, 0.07, 0.05, 0.03, - 0.02}, - std::array{1.00, 0.54, 0.31, 0.18, 0.11, 0.07, 0.05, 0.03, - 0.02}, - std::array{1.00, 0.54, 0.31, 0.18, 0.11, 0.07, 0.05, 0.03, - 0.02}, - std::array{1.00, 0.54, 0.31, 0.18, 0.11, 0.07, 0.05, 0.03, - 0.02}, - std::array{1.00, 0.54, 0.31, 0.18, 0.11, 0.07, 0.05, 0.03, - 0.02}, - std::array{1.00, 0.54, 0.31, 0.18, 0.11, 0.07, 0.05, 0.03, - 0.02}, - std::array{1.00, 0.54, 0.31, 0.18, 0.11, 0.07, 0.05, 0.03, - 0.02}}}; - static constexpr std::array, 9> - Kennfeld_Regler_Entfeuchtung_Xp{ - {std::array{1.00, 0.80, 0.60, 0.50, 0.40, 0.35, 0.30, 0.25, - 0.20}, - std::array{1.00, 0.80, 0.60, 0.50, 0.40, 0.35, 0.30, 0.25, - 0.20}, - std::array{1.00, 0.80, 0.60, 0.50, 0.40, 0.35, 0.30, 0.25, - 0.20}, - std::array{1.00, 0.80, 0.60, 0.50, 0.40, 0.35, 0.30, 0.25, - 0.20}, - std::array{1.00, 0.80, 0.60, 0.50, 0.40, 0.35, 0.30, 0.25, - 0.20}, - std::array{1.00, 0.80, 0.60, 0.50, 0.40, 0.35, 0.30, 0.25, - 0.20}, - std::array{1.00, 0.80, 0.60, 0.50, 0.40, 0.35, 0.30, 0.25, - 0.20}, - std::array{1.00, 0.80, 0.60, 0.50, 0.40, 0.35, 0.30, 0.25, - 0.20}, - std::array{1.00, 0.80, 0.60, 0.50, 0.40, 0.35, 0.30, 0.25, - 0.20}}}; - - static constexpr std::array, 3> - Kennfeld_Sollwert_Feuchte_Limit{ - {std::array{0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}, - std::array{80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80}, - std::array{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}; - - // Zeitkonstanten etc. - static constexpr double Tau_Heizung_Tv = 10.0; - - // Faktoren - static constexpr double F_Xp_Heizung = 3.8; - static constexpr double F_Xp_Kuehlung = 33.6; - static constexpr double F_Xp_Befeuchtung_BINDER = 131.0; - static constexpr double F_Xp_Entfeuchtung = 100.0; - static constexpr double F_Xp_Tuer = 10.0; - - // ===== ST: VAR (Zustände / Merker) ===== - // (ich halte hier nur die, die im übersetzten Teil genutzt werden; den Rest - // kannst du 1:1 ergänzen) - double Istwert_Temperatur{}; - double Istwert_Temperatur_alt{}; - double Sollwert_Temperatur{}; - double Sollwert_Temperatur_alt{}; - double Sollwert_Gegenbefeuchten = 0.0; - double Regelabweichung_Befeuchtung_alt = 0.0; - double P_Anteil_Befeuchtung = 0.0; - double Counter_Entfeuchtung_Freigabe = 0.0; - bool Freigabe_Entfeuchtung = false; - double Counter_Heizung_Freigabe = 0.0; - bool Freigabe_Heizung = false; - double Counter_Befeuchtung_Freigabe = 0.0; - bool Freigabe_Befeuchtung = false; - bool Abtauzyklus = false; - double Counter_Zyklus_Entleeren = 0.0; - double Drehzahl_Verdichter_Kuehlung = 0.0; - double Drehzahl_Verdichter_Entfeuchtung = 0.0; - double Drehzahl_Verdichter = 0.0; - - /*PWM(double zyklus_min, double zyklus_max, double initial_zykluszeit = -1.0) - noexcept : Zyklus(0.0), Ausgabe(0.0), Zykluszeit((initial_zykluszeit > 0.0) ? - initial_zykluszeit : zyklus_max), Zyklus_MIN(zyklus_min), - Zyklus_MAX(zyklus_max) - {} - - bool step(double Stellgrad,double sampling_time,double Zyklus_MIN,double - Zyklus_MAX){*/ - PWM PWM_Heizung_Kessel = {10.0, 600.0, 0.0}; - PWM PWM_Heizung_Tuer = {10.0, 600.0, 0.0}; - PWM PWM_Nachfuellen = {10.0, 600.0, 0.0}; - PWM PWM_Heizung_Kesselrand = {10.0, 600.0, 0.0}; - PWM PWM_Heizung_Feuchtemodul = {10.0, 600.0, 0.0}; - PWM PWM_Kuehlventil = {10.0, 600.0, 0.0}; - PWM PWM_Entfeuchtungsventil = {10.0, 600.0, 0.0}; - - double Istwert_Ueberwachungsregler{}; - std::uint32_t Modus_Ueberwachungsregler{}; - double Offset_Ueberwachungsregler{}; - double Klasse_Ueberwachungsregler{}; - bool Wasserkanister_leer{}; - double Regler_Tuer_Tn = 700.0; - double Regler_Tuer_Tv = 60.0; - double Tau_Tuer_Tv = 60.0; - double Regler_Entfeuchtung_MAX = 0.0; - double Regler_Entfeuchtung_MIN = 0.0; - double Regler_Entfeuchtung_I_Anteil_MAX = 0.0; - double Regler_Entfeuchtung_I_Anteil_MIN = 0.0; - bool Freigabe_Kuehlung = false; - double Sollwert_Temperatur_Feuchtemodul_MIN = 110.0; - double Sollwert_Temperatur_Feuchtemodul_MAX = 130.0; - double Zyklus_Entleeren_Mittelwert = 600.0; - - double Grenzwert_Uebertemperatur{}; - double Schaltwert_Uebertemperatur{}; - bool Status_Uebertemperatur{}; - std::uint32_t Counter_Status_Uebertemperatur{}; - bool StatusQuittierung_Uebertemperatur{}; - - double Grenzwert_Untertemperatur{}; - double Schaltwert_Untertemperatur{}; - bool Status_Untertemperatur{}; - std::uint32_t Counter_Status_Untertemperatur{}; - bool StatusQuittierung_Untertemperatur{}; - - double Istwert_Feuchte{}; - double Istwert_Feuchte_alt{}; - double Sollwert_Feuchte{}; - double Sollwert_Feuchte_alt{}; - double Counter_Entleeren_Kessel{}; - - bool Regelung_AUS{}; - double Counter_Regelung_AUS{}; - bool Steuerkontakt_Standby{}; - bool Sammelalarm{}; - bool Sammelalarm_quittiert{}; - bool Sammelalarm_quittiert_alt{}; - double Regler_Kuehlung_Tv = 5.0; - double Tau_Kuehlung_Tv = 30.0; - double Theta_I_Kuehlung = 1.0; - - // Feuchte absolut - double p_H2Omax_Sollwert{}; - double p_H2Omax_Istwert{}; - double Taupunkt_Istwert{}; - double Sollwert_Feuchte_Absolut{}; - double Sollwert_Temperatur_Feuchtemodul{}; - double Counter_Kuehlung_Freigabe = 0.0; - - // Tür - bool Tuer_offen{}; - double Counter_Tuer_offen{}; - double Counter_Tuer_geschlossen{}; - double Istwert_Temperatur_Tuer{}; - double Regelabweichung_Tuer{}; - double Regelabweichung_Tuer_alt{}; - double Abschlaemmintegral = 0.0; - double Standby_Feuchtemodul = 0.0; - double Regelabweichung_Befeuchtung_alt_alt = 0.0; - double Regelabweichung_Entfeuchtung_alt = 0.0; - double Durchflussmenge_Einlassventil_Feuchtemodul = 400.0; - double Durchflussmenge_Abschlaemmventil_Feuchtemodul = 1500.0; - - // Startup / reset - std::uint32_t Counter_reset_flag{}; - bool Startup_finished{}; - - // Feuchte limit - std::uint16_t Index_Sollwert_Feuchte_Limit{}; - double Interpolation_Sollwert_Feuchte_Limit{}; - double Sollwert_Feuchte_Min{}; - double Sollwert_Feuchte_Max{}; - - // Abschaltung Feuchte-Regler - bool Sollwert_Feuchte_aktiv{}; - bool Steuerkontakt_Befeuchtung_aus{}; - bool Steuerkontakt_Entfeuchtung_aus{}; - bool Befeuchtung_aus{}; - bool Entfeuchtung_aus{}; - double Sollwert_Gegenheizen = 2.0; - // Parameter Indizes - std::uint16_t Index_Feuchte{}; - std::uint16_t Index_Temperatur{}; - std::uint16_t Index_Temperatur_ohne_Feuchte{}; - - // Reglerparameter - double Regler_Heizung_Xp{}; - double Regler_Kuehlung_Xp{}; - double Regler_Befeuchtung_Xp{}; - double Regler_Entfeuchtung_Xp{}; - double Regler_Tuer_Xp{}; - double Regler_Befeuchtung_Tv = 30.0; - double Regler_Befeuchtung_Tn = 100.0; - double Regler_Befeuchtung_Tz = 1200.0; - double Tau_Befeuchtung_Tv = 10.0; - double Tau_Befeuchtung_Tz = 5.0; - - // Regelkern Temperatur - double Sollwert_Temperatur_MIN{}; - double Sollwert_Temperatur_MAX{}; - - double Regelabweichung_Temperatur{}; - double Regelabweichung_Temperatur_alt{}; - double Regelabweichung_Temperatur_Mittelwert{}; - double Standardregelabweichung_Temperatur{}; - double Regelabweichung_Temperatur_Gradient{}; - double Standardgradient_Regelabweichung_Temperatur{}; - double Zykluszeit_Regelabweichung_Temperatur{}; - double Amplitude_Regelabweichung_Temperatur{}; - double Zykluszeit_Regelabweichung_Heizung{}; - double Zykluszeit_Regelabweichung_Kuehlung{}; - double Regelabweichung_Kuehlung_Gradient{}; - double Regelabweichung_Kuehlung_alt{}; - double Faktor_Kuehlung{}; - double Faktor_Gegenheizen_Band{}; - double I_Anteil_Kuehlung{}; - double D_Anteil_Kuehlung{}; - double Regelabweichung_Befeuchtung_Gradient{}; - double I_Anteil_Befeuchtung{}; - double Istwert_Temperatur_Verdampferausgang_PT1 = 0.0; - double D_Anteil_Befeuchtung{}; - bool Temperatursprung{}; - double Counter_Temperatursprung{}; - double Faktor_Entfeuchtung{}; - double Faktor_Gegenbefeuchten_Band = 5.0; - double I_Anteil_Entfeuchtung = 0.0; - double D_Anteil_Entfeuchtung = 0.0; - double I_Anteil_Tuer = 0.0; - double P_Anteil_Tuer; - double Regler_Heizung_MIN{}; - double Regler_Heizung_MAX{}; - double Regler_Heizung_I_Anteil_MIN{}; - double Regler_Heizung_I_Anteil_MAX{}; - double P_Anteil_Heizung{}; - double I_Anteil_Heizung{}; - double D_Anteil_Heizung{}; - double Stellgrad_Heizung{}; - double Stellgrad_Heizung_Mittelwert{}; - double Regelabweichung_Entfeuchtung_Gradient = 0.0; - double D_Anteil_Tuer = 0.0; - double Counter_Verdichter_aus = 0.0; - double Counter_Freigabe_Abtauzyklus = 0.0; - double Counter_Abtauzyklus; - double Stellgrad_Feuchtemodul_MAX{}; - double Skalierung_Nachfuellen_Temperatur_I_Anteil{}; - double Counter_Zyklus_Abschlaemmventil = 0.0; - const double Regler_Kuehlung_Tn = 200.0; - - double Stellgrad_Feuchtemodul_Boost{}; - const double Temperatur_Feuchtemodul_MAX = 200.0; - - // Feuchte - nur Platzhalter (weil spätere Ausdrücke referenzieren) - double Regelabweichung_Feuchte{}; - double Regelabweichung_Feuchte_alt{}; - double Regelabweichung_Feuchte_alt_alt{}; - double Regelabweichung_Feuchte_Mittelwert{}; - double Standardregelabweichung_Feuchte{}; - double Regelabweichung_Feuchte_Gradient{}; - double Standardgradient_Regelabweichung_Feuchte{}; - double Zykluszeit_Regelabweichung_Feuchte{}; - double Amplitude_Regelabweichung_Feuchte{}; - bool Feuchtesprung{}; - double Counter_Feuchtesprung = 0.0; - double Offset_Regelabweichung_Befeuchtung{}; - double Offset_Regelabweichung_Entfeuchtung{}; - double Stellgrad_Kuehlung{}; - double Stellgrad_Kuehlung_Mittelwert{}; - double Stellgrad_Befeuchtung{}; - double Stellgrad_Befeuchtung_Mittelwert{}; - double Stellgrad_Befeuchtung_Standby{}; - double Stellgrad_Entfeuchtung{}; - double Stellgrad_Entfeuchtung_Mittelwert{}; - double Z_Anteil_Befeuchtung{}; - - // Aktoren/Signale (Defaults, bis restliche Logik ergänzt ist) - bool HeizungKessel{}; - double Stellgrad_HeizungKessel{}; - bool HeizungTuer{}; - double Stellgrad_HeizungTuer{}; - bool HeizungKesselrand{}; - double Stellgrad_HeizungKesselrand{}; - bool Verfluessiger{}; - bool Nachfuellen{}; - bool Entleerpumpe{}; - bool HeizungFeuchtemodul{}; - bool HeizungFeuchtemodul_alt{}; - bool Abschlaemmventil{}; - double Stellgrad_Abschlaemmventil_zyklisch{}; - bool Kuehlventil{}; - double Stellgrad_Kuehlventil{}; - bool Entfeuchtungsventil{}; - double Stellgrad_Entfeuchtungsventil{}; - bool Verdichter{}; - double Stellgrad_Verdichter{}; - double Stellgrad_Pumpe{}; - double Stellgrad_Luefter{}; - double Stellgrad_Betauungsschutz{}; - double Temperatur_Feuchtemodul_Gradient = 0.0; - double Stellgrad_Feuchtemodul_MAX_adaptiv = 0.0; - double Counter_Nachlauf_Entleeren = 0.0; - double Counter_Pause_Entleeren = 0.0; - - // “Durchzug” (wird später in Überhitzungslogik gesetzt) - bool Durchzug{}; - bool Durchzug_alt{}; - double Counter_Durchzug{}; - - // Befeuchtungsmodul Zustände (Platzhalter, damit “Werte die auf Veränderung - // geprüft werden” passt) - double Temperatur_Feuchtemodul{}; - double Temperatur_Feuchtemodul_alt{}; - double Stellgrad_Feuchtemodul{}; - double Stellgrad_Feuchtemodul_Mittelwert{}; - double Stellgrad_Feuchtemodul_PT1{}; - double Stellgrad_Feuchtemodul_Nachfuellen{}; - bool Entleeren{}; - bool Entleeren_alt{}; - bool Entleerbehaelter_Oben{}; - bool Entleerbehaelter_Unten{}; - double Counter_Wasserkanister_leer{}; - double Regler_Entfeuchtung_Tv = 5.0; - double Regler_Entfeuchtung_Tn = 200.0; - double Tau_Entfeuchtung_Tv = 60.0; - double Theta_I_Entfeuchtung = 0.1; - double C_Entfeuchtung = 200.0; - double U_Entfeuchtung = 0.4; - double P_Entfeuchtung = 500.0; - double Regler_Entfeuchten_I_Anteil_MIN = 0.0; - double Drehzahl_Verdichter_MIN = 1800.0; - double Drehzahl_Verdichter_MAX = 4500.0; - double Drehzahl_Verdichter_adaptiv = 0.0; - - // Alarmbits mit Selbsthaltung - bool alarm_09{}; - bool alarm_10{}; - bool alarm_13{}; - bool alarm_14{}; - bool alarm_15{}; - bool Alarm_Wasser_Befeuchtungsmodul{}; - bool Alarm_Abwasser_Befeuchtungsmodul{}; - bool Alarm_PT100_Befeuchtungsmodul{}; - bool Alarm_Heizung_Befeuchtungsmodul{}; - bool Bandalarm_Temperatur{}; - bool Bandalarm_Feuchte{}; - bool Tueralarm{}; -}; - -// namespace UTILITY_FUNCTIONS - -// double PT100_ResistanceToTemperature_Linear(double R) -// { -// constexpr double R0 = 100.0; -// constexpr double alpha = 0.00385; // IEC-Näherung - -// return (R - R0) / (R0 * alpha); -// } - -class PT1 { -public: - PT1() = default; - void initialize(double fs, double t_cutoff) { - fs_ = fs; - ts_ = 1 / fs_; - double f_cutoff = 1. / t_cutoff; - tau_ = 1 / (2 * PI_CONST * f_cutoff); - lambda_ = 2 * tau_ / ts_; - b0_ = k_ / (1. + lambda_); - b1_ = k_ / (1. + lambda_); - a0_ = (1. - lambda_) / (1. + lambda_); - }; - - double step(double x) { - - double y = b0_ * x + s1_; - // s1 = b1*x - a1*y - s1_ = b1_ * x - a0_ * y; - return y; - }; - -private: - double s1_ = 0.; - double fs_ = 1.; - double ts_ = 1.; - double tau_ = 1.; - double a0_ = 0.; - double b0_ = 0.; - double b1_ = 0.; - double k_ = 1.; - double lambda_ = 1.; -}; - -#ifdef BUILD_TARGET_SOM -namespace appengine::state { -class IStateVariable; -} -#endif - -#ifdef BUILD_TARGET_SOM -class Controller : public ControllerBase { -public: - bool initialize(const char *configFilePath, - appengine::IAppLogic *appLogic) override; - void step() override; - void terminate() override; - -private: - appengine::IAppLogic *appLogic_{nullptr}; - - // Beispiel: du wirst für diese ST-Logik sehr viele StateVars mappen; - // hier nur exemplarisch: - std::shared_ptr tempVariable_; - std::shared_ptr tempSetPointVariable_; - - // TODO: bool_inXX / real_inXX / bool_outXX / real_outXX / alarm_XX als - // StateVariables holen (oder je nach AppEngine: arrays/IO mapping) - - ClimateAlgorithm algo_{}; - PT1 FILTERED_TEMP{}; - PT1 FILTER_TUER{}; - // Eingänge - std::shared_ptr const_duty_cycle_; - std::shared_ptr const_freq_; - std::shared_ptr Wasserstand_Oben_Config_; - std::shared_ptr Wasserstand_Unten_Config_; - std::shared_ptr Fuellstand_Config_; - std::shared_ptr SV_Tuer_Variable_; - std::shared_ptr SV_Verdampferausgang_; - std::shared_ptr SV_Befeuchtungsmodul_; - std::shared_ptr SV_Verdichter_on_; - std::shared_ptr Startup_; - std::shared_ptr CounterTuer_; - - // ausgänge - std::vector subscriptions_{}; - std::shared_ptr Heizung_Bef_Config_; - std::shared_ptr MV_Kuehlung_Config_; - std::shared_ptr Abschlaemmen_Config_; - std::shared_ptr Entleerpumpe_Config_; - std::shared_ptr Heizung_Kesselrand_Config_; - std::shared_ptr - Freigabe_Verfluessigerluefter_Config_; - std::shared_ptr Heizung_Innenraum_Config_; - std::shared_ptr Heizung_Tuer_Config_; - std::shared_ptr Uebertemperatur_Config_; - std::shared_ptr MV_Entfeuchtung_Config_; - std::shared_ptr MV_Druckluft_Config_; - std::shared_ptr - Ansteuerung_Wassereinlass_Config_; - std::shared_ptr - Ansteuerung_Verdichter_Config_; - std::shared_ptr Verdichter_Duty_Config; - std::shared_ptr Luefter_Innenraum_Config_; - - std::shared_ptr SV_Stellgrad_Heizung; - std::shared_ptr SV_Stellgrad_Kuehlung; - std::shared_ptr SV_Stellgrad_Befeuchtung; - std::shared_ptr SV_Stellgrad_Entfeuchtung; - // Regelgrößen - std::shared_ptr SV_Sollwert_Temperatur_; - std::shared_ptr SV_Temperatur_Variable_; - std::shared_ptr SV_Sollwert_Feuchte_; - std::shared_ptr SV_Feuchte_Variable_; - - // std::vector subscriptions_{}; -}; - -extern "C" BINDER_SIMULINK_API_EXPORT ControllerBase *create(); - -#else -class Controller { - -public: - bool initialize(const char *configFilePath); - void step(); - void terminate(); - -private: -#if 0 - appengine::IAppLogic *appLogic_{nullptr}; - - // Beispiel: du wirst für diese ST-Logik sehr viele StateVars mappen; - // hier nur exemplarisch: - std::shared_ptr tempVariable_; - std::shared_ptr tempSetPointVariable_; - - // TODO: bool_inXX / real_inXX / bool_outXX / real_outXX / alarm_XX als StateVariables holen - // (oder je nach AppEngine: arrays/IO mapping) - - ClimateAlgorithm algo_{}; - PT1 FILTERED_TEMP{} ; - PT1 FILTER_TUER{}; - // Eingänge - std::shared_ptr const_duty_cycle_; - std::shared_ptr const_freq_; - std::shared_ptr Wasserstand_Oben_Config_; - std::shared_ptr Wasserstand_Unten_Config_; - std::shared_ptr Fuellstand_Config_; - std::shared_ptr SV_Tuer_Variable_; - std::shared_ptr SV_Verdampferausgang_; - std::shared_ptr SV_Befeuchtungsmodul_; - std::shared_ptr SV_Verdichter_on_; - std::shared_ptr Startup_; - std::shared_ptr CounterTuer_; - - // ausgänge - std::vector subscriptions_{}; - std::shared_ptr Heizung_Bef_Config_; - std::shared_ptr MV_Kuehlung_Config_; - std::shared_ptr Abschlaemmen_Config_; - std::shared_ptr Entleerpumpe_Config_; - std::shared_ptr Heizung_Kesselrand_Config_; - std::shared_ptr Freigabe_Verfluessigerluefter_Config_; - std::shared_ptr Heizung_Innenraum_Config_; - std::shared_ptr Heizung_Tuer_Config_; - std::shared_ptr Uebertemperatur_Config_; - std::shared_ptr MV_Entfeuchtung_Config_; - std::shared_ptr MV_Druckluft_Config_; - std::shared_ptr Ansteuerung_Wassereinlass_Config_; - std::shared_ptr Ansteuerung_Verdichter_Config_; - std::shared_ptr Verdichter_Duty_Config; - std::shared_ptr Luefter_Innenraum_Config_; - - std::shared_ptr SV_Stellgrad_Heizung; - std::shared_ptr SV_Stellgrad_Kuehlung; - std::shared_ptr SV_Stellgrad_Befeuchtung; - std::shared_ptr SV_Stellgrad_Entfeuchtung; - // Regelgrößen - std::shared_ptr SV_Sollwert_Temperatur_; - std::shared_ptr SV_Temperatur_Variable_; - std::shared_ptr SV_Sollwert_Feuchte_; - std::shared_ptr SV_Feuchte_Variable_; - - //std::vector subscriptions_{}; -#endif -}; - -#endif diff --git a/controller/libctrl_algo.so b/controller/libctrl_algo.so index 8f8a7d8364019f344353abe4cda2f92cb6cef1bf..f28ae240cabe81b116070f2eedb9437db6426e1e 100755 GIT binary patch delta 4624 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