Dein Warenkorb ist gerade leer!
Funktion Kompressor
Kompressor Funktion …
------------------------------------------------------------------
🔧 Parameterstruktur pro Kompressor:
------------------------------------------------------------------
typedef struct {
uint8_t aktiv; // 0 = deaktiviert, 1 = aktiviert
uint8_t digital_output; // GPIO oder Mapping für Start/Stopp
// Starttemperaturen (Differenz zum Sollwert) [°C]
float start_temp_sommer;
float start_temp_winter;
// Hysterese [°C]
float hyst_sommer;
float hyst_winter;
// Kompressorpause [s]
uint16_t pause_zeit_s;
// Alarmparameter Niederdruck
uint8_t nd_digital_input; // GPIO-Eingang
uint8_t nd_alarm_relais; // Alarmrelais (Priorität)
uint8_t nd_alarm_prio;
uint16_t nd_startverzoegerung_s;
uint8_t max_neustarts_nd;
uint16_t nd_reset_intervall_s;
float nd_min_druck; // wenn Drucksensor vorhanden
// Alarmparameter Hochdruck
uint8_t max_neustarts_hd;
uint16_t hd_reset_intervall_s;
float hd_max_druck;
uint8_t hd_modus; // 0 = Stopp, 1 = Betrieb fortsetzen
// Laufzeit [h]
uint32_t laufzeit_kompressor_h;
} KompressorParam;
------------------------------------------------------------------
🧠 Globale Systemstruktur:
------------------------------------------------------------------
typedef struct {
KompressorParam k1;
KompressorParam k2;
bool winterbetrieb_aktiv;
bool saugdrossel_1_aktiv;
bool saugdrossel_2_aktiv;
bool hgbp_ventil_aktiv;
} KompressorSystem;
------------------------------------------------------------------
🔄 Sequencing-Logik (Laufzeitausgleich):
------------------------------------------------------------------
void pruefe_laufzeitausgleich(KompressorSystem *sys) {
if (!(sys->saugdrossel_1_aktiv && sys->saugdrossel_2_aktiv)) return;
if (!sys->hgbp_ventil_aktiv) return;
int32_t diff = (int32_t)sys->k1.laufzeit_kompressor_h - (int32_t)sys->k2.laufzeit_kompressor_h;
if (abs(diff) < 20) return;
KompressorParam *mehr = diff > 0 ? &sys->k1 : &sys->k2;
KompressorParam *weniger = diff > 0 ? &sys->k2 : &sys->k1;
bool is_winter = sys->winterbetrieb_aktiv;
float start_mehr = is_winter ? mehr->start_temp_winter : mehr->start_temp_sommer;
float start_weniger = is_winter ? weniger->start_temp_winter : weniger->start_temp_sommer;
if (start_mehr < start_weniger) {
// Werte tauschen
float tmp_start = mehr->start_temp_sommer;
mehr->start_temp_sommer = weniger->start_temp_sommer;
weniger->start_temp_sommer = tmp_start;
tmp_start = mehr->start_temp_winter;
mehr->start_temp_winter = weniger->start_temp_winter;
weniger->start_temp_winter = tmp_start;
float tmp_hyst = mehr->hyst_sommer;
mehr->hyst_sommer = weniger->hyst_sommer;
weniger->hyst_sommer = tmp_hyst;
tmp_hyst = mehr->hyst_winter;
mehr->hyst_winter = weniger->hyst_winter;
weniger->hyst_winter = tmp_hyst;
}
}
------------------------------------------------------------------
Tags:

Schreibe einen Kommentar