A2.6: Software/ Algorithmus zur Implementierung eines Zweipunktreglers (30min)
Infothek Software/ Algorithmus zur Implementierung eines Zweipunktreglers
Auf Ihrer Suche nach einem Code zur Realisierung Ihres Zweipunktreglers finden Sie mit den Suchwörtern "zweipunktregler python" einen Pythonquellcode für einen Zweipunktregler mit Hysterese. Hysterese bedeutet, dass der Einschaltpunkt der Kühlung eine andere Temperatur ist, als die, bei der die Kühlung ausgeschaltet wird. Dieses Verhalten ist im Zustandsdiagramm rechts
dargestellt. Wenn man der Richtung der roten Pfeile folgt, ist das Verhalten des Reglers zu verstehen. Auf der Ordinate (y-Achse) ist der Ausgangszustand des Reglers dargestellt, auf der Abszisse (x-Achse) die Raumtemperatur.
Sie müssten dann Antworten auf diese Frage geben können: Welchen Zustand hat der Reglerausgang bei einer Raumtemperatur von 30°C, wenn die untere Solltemperatur 25°C beträgt und die Hysterese 7 Kelvin? Welche Information fehlt bei dieser Frage?
Die Führungsgröße w, also hier die untere Solltemperatur und die Hysterese können entweder auch als Topics in der Cloud oder lokal zum Beispiel in einer Konfigurationsdatei gespeichert werden. (Infos dazu unter https://wiki.python.org/moin/ConfigParserExamples)
Rechts die UML-Darstellung der Klasse Controller
```class Controller():
def __init__(self, cloud, fan):
self.__cloud=cloud # Konfigurationen und Werte
self.__fan=fan # Der Aktor für den Zweipunktregler
self.__splow=self.__cloud.get_setpointTemp() # untere Grenze
self.__hyst=self.__cloud.get_hyst() #Hysterese speichern
self.__sphigh=self.__splow+self.__hyst # obere Grenze
def control(self):
# Vergleich Ist- und Solltemperatur und Kühlung ansteuern
# hier ist der Regler als Zweipunktregler mit Hysterese implementiert
temperature = self.__cloud.get_roomTemp() # Aktuelle Temperatur aus der Cloud lesen
if temperature <= self.__splow:
self.__fan.off() # Kühlung ausschalten, wenn es kalt ist
elif temperature > self.__sphigh:
self.__fan.on() # Kühlung einschalten, wenn es zu warm wird
return
# ********************* Ende class Controller
if __name__ == '__main__':
# Erzeugen der Fan und Cloudobjekte (wird später erklärt)
.
.
.
climate=Controller(mycloud, myfan)
while True:
mycloud.update() # aktuelle Temperatur (usw.) in die Cloud schreiben (wird später erklärt)
climate.control()
```Aufgaben
- Besprechen Sie den objektorientiert geschriebenen Code im Klassenverband (Klären Sie folgende Begriffe: Klasse, Objekt, Attribut, Methode, Klassendiagramm, Link, Aggrgation vs. Komposition, Konstruktor).
- Geben Sie ein Dokument ab, in dem Sie im Freitext die Begriffe
- Klasse,
- Objekt,
- Attribut,
- Methode,
- Punktnotation,
- private,
- public,
- UML-Klassendiagramm,
- UML-Link
- Aggregation
- Komposition
- Konstruktor erklären.
- Erklären Sie im zusätzlichen Textabgabefeld, warum eine Hysterese das Regelverhalten gegenüber einer Lösung ohne zwei verschiedene Schaltpunkte verbessert.
Hilfen
Understanding self and __init__ method in python Class