HerrBärt schrieb:
> Kurzum: Das ganze geht schon irgendwie mit verschachtelten
> if-else-Prüfungen, wird aber sehr schnell unübersichtlich. Das
> geschilderte Szenario soll nur ein Beispiel sein. Da kommt einem ja
> schon etwas Boolsche Algebra in den Sinn. Also jede Menge Gleichungen
> aufstellen und dann so weit wie möglich vereinfachen.
> Wie geht man so eine Art von Regelung im__Allgemeinen am besten an?
Für dir ein paar Zwischenvariablen ein.
Welche 'Zustände' gibt es.
Da gibt es die Abhängigkeit, dass Pumpe1 laufen muss und dass Pumpe2
laufen muss. Und es gibt den Fall, dass der Brenner laufen muss.
zb (Ich nehm jetzt nur den Trivialfall, den du ausgeführt hast)
1 | //
|
2 | // was gilt für die Pumpen?
|
3 | // (ist mehr oder weniger gleichbedeutend mit:
|
4 | // welcher Heizkreis braucht Energie?)
|
5 | //
|
6 | if( Temperatur1 < Minimum )
|
7 | Pumpe1 = TRUE;
|
8 | else if( Temperatur1 > Maximum )
|
9 | Pumpe1 = FALSE;
|
10 |
|
11 | if( Temperatur2 < Minimum )
|
12 | Pumpe2 = TRUE;
|
13 | else if( Temperatur2 > Maximum )
|
14 | Pumpe2 = FALSE;
|
15 |
|
16 |
|
17 | //
|
18 | // Für den Brenner als ganzes ist die Sache recht einfach
|
19 | // Wenn einer der beiden Heizkreise Energie braucht, seine
|
20 | // Pumpe also läuft, dann muss auch der Brenner laufen
|
21 | //
|
22 | if( Pumpe1 || Pumpe2 )
|
23 | Brenner = TRUE;
|
24 | else
|
25 | Bremmer = FALSE;
|
Und da kannst du jetzt natürlich noch zusätzliche Bedingungen einbauen,
die regeln, wann denn noch die jeweiligen Pumpen laufen sollen.
Der Trick besteht darin, sich Zwischenzustände zu machen, die aufgrund
irgendwelcher Anforderungen auf ein/aus gehen und diesen Zustand dann in
der Hierarchie immer weiter in Richtung Quelle (Heizung) tragen.
> wenn beide Mindesttemperaturen unterschritten soll Heizkreis
> 1 Priorität vor Heizkreis 2 haben.
Ok. das heisst also konkret
1 | if( Temperatur1 < Minimum )
|
2 | Pumpe1 = TRUE;
|
3 | else if( Temperatur1 > Maximum )
|
4 | Pumpe1 = FALSE;
|
5 |
|
6 | if( Temperatur2 < Minimum )
|
7 | Pumpe2 = TRUE;
|
8 | else if( Temperatur2 > Maximum )
|
9 | Pumpe2 = FALSE;
|
10 |
|
11 | if( Temperatur1 < Minimum && Temperatur2 < Minimum )
|
12 | {
|
13 | Pumpe1 = TRUE;
|
14 | Pumpe2 = FALSE;
|
15 | }
|
Und so baust du eben 1 Fall nach dem anderen ein, dessen Aussage darin
besteht, ob die Pumpe im zugehörigen Fall laufen muss oder nicht. Wenn
da im Endeffekt rauskommt, das gar keine Pumpe laufen muss, dann wertet
das der nachfolgende Heizungsabschnitt sowieso so aus, dass er die
Heizung dann auch abstellen kann.