Jump to content

Python Projekt mit vielen Regeln wie am besten Strukturieren


DoIT

Recommended Posts

Hallo zusammen,

 

ich bin gerade dabei ein aufwendigeres und umfangreiches Projekt mit den Tinkerforge Modulen in Python umzusetzen. Es geht um eine Anlagensteuerung/Prozesssteuerung. Wobei hier viele Temperatursensoren ausgewertet und verarbeitet werden müssen. Aktuell sind es ca. 30 Sensoren, welche aber durchaus noch mehr werden können. So wäre 100 Sensoren auch möglich.
Abhängig von den Temperaturwerten oder anderen Ereignissen sollen Aktionen passieren(Pumpen, Motoren, Ventile, Kompressoren, LEDs).
Es müssen auch diverse Parameter in das System immer wieder eingegeben und aktualisiert werden.
Bin nun soweit alle Sensoren mithilfe eines ORM(peewee) in eine Datenbank zu legen und die Werte entsprechend auszuwerten. Nun stehe ich aber gerade vor der Überlegung wie ich diese für mich komplexe Struktur umsetzen soll. Die Parameter sollen natürlich auch in die Datenbank.

Folgende Struktur hätte ich mir aktuell überlegt:

Tinkerforge LCD mit einer Menüstruktur die über Haupt und Unterpunkte verfügt und über einen Drehencoder angesteuert werden soll. So eine Art Orderstruktur in der die Sensorwerte als auch die Parameter geändert werden können. Ich habe zwar gesehen, dass es ein Menü für das Display gibt aber ich denke nicht das ich dieses auf meinen Fall adaptieren könnte?

 

Dann benötige ich eine Arte Modus (Anlagenzustand) Struktur also in welcher sich die Anlage gerade befindet. Es dürfen z.B. gewisse Ventile oder Motoren nur dann angesteuert werden, wenn z.B. Sensoren einen gewissen Wert nicht überschritten haben. Das Ganze kann manuell gesteuert werden oder soll vom User über Regeln möglich sein.

Beispiel.
Sensor 0 > 30C° und Sensor 14 < 50°C and Systemmodus = “no Errors” Dann Schalte Motor1 ein bis Sensor 0 < 10°C

Jetzt muss natürlich berücksichtig werden, wenn z.B. in der Zwischenzeit ein Error passiert das diese Regel abgebrochen werden sollte.

 

Jetzt wäre es natürlich möglich das Ganze in If else in python direkt abzubilden jedoch wäre das für den User nur schwer möglich selber Regeln zu definieren.

 

Einen für mich derart kompliziertes verknüpftes aber dennoch dynamisches System habe ich noch nie benötigt.

Jetzt habe ich versucht zu suchen ob es hier bereits etwas gibt auf dem ich Aufbauen könnte. Bzw. was mir die Arbeit erleichtert, aber nichts wirklich gefunden.

Meine Frage daher, hatte jemand schonmal so ein Problem und wie hat er es gelöst. Oder eine Idee wie ich das ganzen angehen sollte? Vielleicht auch Tipps? Was ist von meiner Struktur zu halten?

Ich hoffe ich habe mein Problem verständlich dargestellt. Wenn nicht bitte ich um eine kurze Rückmeldung dann möchte ich es gerne nochmals Versuchen.

Danke für eure Hilfe.
Grüße
Markus

 

Link to comment
Share on other sites

Das über eine Datenbank zu vereinheitlichen ist eine gute Idee.

Deine Regeln sind aber komplexer formuliert als sie müssten. Da würde ich die Zustände/Stellwerte der Ausgänge mit zu den Eingaben der Regeln nehmen. Das erlaubt dir dann

Sensor 0 > 30C° und Sensor 14 < 50°C and Systemmodus = “no Errors” then Schalte Motor1 ein bis Sensor 0 < 10°C

so zu formulieren

if Sensor0 > 30C° and Sensor14 < 50°C and Systemmodus = “no Errors” and Motor1 aus then schalte Motor1 ein

if Sensor0 < 10°C and Motor1 an then schalte Motor1 aus

Dadurch kannst du dieses bei 30°C einschalten und 10°C ausschalten des Motors einfacher abbilden, weil dadurch diese "bis" Komponente entfällt und die Regeln selbst zustandslos sind.

Du wirst nicht darum herum kommen die Regeln an irgendeiner Stelle ausformulieren zu müssen. Aber ich würde mich auf eine einfach nicht-verschachtelte Struktur von if-this-then-that beschränken.

Der sich immer wiederholende Ablauf wäre

- den Zustand/Messwert aller Eingänge und Parameter bestimmen

- mit all diesen Eingabewerten die Regeln nacheinander auswerten, um die neuen Zustände/Stellwerte der Ausgänge zu bestimmen

- die Ausgänge auf die bestimmten Zustände/Stellwerte setzen

Da die Regeln nicht Aktionen, sondern Zustände/Stellwerte bestimmen, kommt das System auch damit zurecht, wenn sich Regeln widersprechen, weil in diesem System einfach die letzte Regel gewinnt.

Link to comment
Share on other sites

Danke für deine Antwort :-)

Ja das ist eine super Idee.

Eine Frage hätte ich da jetzt aber noch. Verstehe ich das richtig das diese Regelen zu jedem Zeitpunkt ausgeführt werden können und das Ergebnis dann von den aktuellen Zuständen der Sensoren und Parameter abhängt?

Sobald eine Änderung passiert werden alle Regelen nacheinander abgearbeitet wobei eben die letzte Regel im grunde die Entscheidungshoheit hat.

 

Das bedeutet ich definiere einen Abfragezyklus für alle Sensoren bzw. Eingänge. Und dannach wird dieses Regelset aufgerufen.

 

Ich muss aber beim erstellen dieses Regeln aufpassen das sich diese möglichst nicht gegenseitig aushebeln.

 

Darauf habe ich noch gar nicht gedacht. Das hat natürlich den Vorteil das die Regeln "dümmer" werden können und nicht warten müssen bis etwas passiert.

Habe ich das so richtig verstanden?

Danke.

Gruß

Markus

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...