Schaltzeiten ermitteln

borromeus

Level-1
Beiträge
2.271
Reaktionspunkte
329
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forenmitglieder.

Wir haben ein kniffliges Problem, in der Theorie auch schon gelöst, vielleicht gibt es aber was besserer/einfacheres:

Man stelle sich einen Anlagenteil mit 12 Ventilen vor.

Für jedes Ventile gibt es eine gewünschte Intervallzeit, wann dieses öffnen soll, sowie eine Öffnungszeit, wie lange dieses offen sein soll.
Intervallzeit: 30min - 180min, für jedes Ventil separat einstellbar
Öffnungszeit: 1-5min, für jedes Ventil separat einstellbar

Jetzt wird ein Algorithmus benötigt, die Ventile so zu schalten, dass das INTERVALL zwischen den jeweiligen Auf-Impulsen maximal ist.
Natürlich dürfen auch 2 Ventile nie gleichzeitig offen sein.

Gruß
Karl
 
Fängt ja schonmal damit an, dass es überhaupt keine Lösung gibt wenn:
Sum(Tö) > Max(Tin -Tön)

D.h. wenn für alle 12 Ventile ein Intervall (Ti) von 30 Minuten und eine Öffnungsdauer (Tö) von 5 Minuten eingestellt wird, gibt es keine Lösung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oder muss das Ventil nur irgendwann in der eingestellten Intervallzeit öffnen, d.h. egal wann, und nicht fest wenn 100 Minuten Intervall und 5 Minuten Öffnungszeit, dann alle 95 Minuten öffnen?

Die Sequenzdauer nach der sich das Muster für die 12 Ventile wiederholt wird ansonsten nämlich sehr lang, wenn im ungünstigsten Fall bei allen Zeiten Primzahlen eingestellt werden.
 
Sum(Tö) < Max(Tin -Tön)
Das ganze wird jetzt manuell gemacht, pi mal Auge.
Also das geht sich schon aus.
Was ich noch verschwiegen habe, es können 1-12 Ventile angewählt werden, das heisst meistens sind ja nur 5-6 in Betrieb. Theoretisch können es aber 1-12 sein.

Leider wird man aber keine fixe Sequenz finden, sondern das Öffnen wird dynamisch ermittelt.
Unsere Lösung schaut in etwa so aus (wurde auch schon programmiert und funktioniert auch so):

es läuft für jedes Ventil ein Integrator (T_Kx, x=1…12) vom Wunschintervall (PARA_Tx) mit TI=1
und U=-1 nach unten (pro Sekunde zählt er 1 runter).
Es wird das minimale Wunschintervall ermittelt, das ein Ventil hat (=T_MIN).
Es wird die Anzahl der Ventile gezählt, die innerhalb von T_MIN betätigt werden wollen (=NUM_K).
T_MIN/NUM_K gibt die Taktzeit (=T_TAKT).
Wenn T_TAKT abgelaufen ist, wird das Ventil mit dem niedrigsten Wert von T_Kx geöffnet und
die Zeit beginnt mit neu berechnetem T_TAKT erneut zu laufen.
Wollen mehrere Ventile gleichzeitig öffnen gewinnt das, mit der niedrigsten Nummer, das andere kommt unmittelbar als nächstes.
 
D.h. jemand gibt ein, dass sein Ventil alle 100 Minuten für 5 Minuten öffnen soll, aber es öffnet dann manchmal doch nicht nach 95 Minuten? Das ist aber unschön.

Die Frage ist dann, was hat Priorität.
Denn wenn die eingestellten Zeiten zu 100% eingehalten werden müssen, kommt man nicht umhin die Sequenzen komplett vorab zu analysieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja Tom, unschön hin oder her, es ist die Anforderung des Betriebes, dass möglichst lange Intervalle eingehalten werden sollen, das ist die höchste Prämisse.

zu vorab analysieren: das habe ich probiert, ich schaffe keinen deterministischen Algorythmus.
Stell Dir auch vor, fünf Ventile sind in Betrieb und nun schaltet einer ein sechstes dazu. Den wird man nicht so einfach einreihen können, weil sich ja nun die nächsten Pausen- Intervalle verkürzen werden.

Bei unserem Test mit realen Zeiten und Schaltdauern waren die Abweichungen im Bereich von Sekunden zu 2 Minuten.

Aber wenn Du- und Du bist vermutlich eh dafür geeignet :ROFLMAO:, etwas besseres auf Lager hast, schreib es bitte auf- softwaretechnische Umsetzung ist kein Problem... solange ich keinen Quine programmieren muss......
 
Grad' nochmal drüber nachgedacht. Es wird so gut wie immer Überschneidungen geben, wenn die Intervallzeiten der einzelnen Ventile unterschiedlich eingestellt werden. Darum ist es wenig sinnvoll da vorab etwas zu analysieren. Außer man würde die eingegebenen Zeiten dann so anpassen, dass es keine Überschneidungen mehr gibt. Aber das macht dein Algorithmus ja jetzt auch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Könntest Du vielleicht noch erklären, warum die Anzahl der Ventile, der Intervall- und Öffnungszeiten variabel ist, Du aber trotzdem alle diese Ventile zeitlich verteilen musst?
Ich verstehe gerade noch nicht, warum diese Ventile alle einzelne, unabhängige, manuell eingestellte Parameter bekommen und dann aber alle zusammen verarbeitet werden...
 
..Intervallzeit: 30min - 180min, für jedes Ventil separat einstellbar
Öffnungszeit: 1-5min, für jedes Ventil separat einstellbar..
Ich hätte da auch noch ein paar Fragen.

Werden sowohl für die Intervallzeit als auch für die Öffnungszeit jeweils MIN- und MAX-Werte als Parameter vorgegeben? Es sind also insgesamt vier Parameter pro Ventil? Wie soll nach einer Freigabe gestartet werden? Was soll geschehen wenn die Aufteilung nicht mehr aufgeht? Auch wenn du sagst, in der Praxis passt das schon, so muss man es in einem Algorithmus ja irgendwie berücksichtigen.

Vielleicht hilft die Relativitätstheorie, um einen Raum für eine neue Zeit zu schaffen :ROFLMAO: ?


Gruß, Onkel
 
@Borromeus:
Ich hätte dazu vielleicht noch eine (geringfügig andere) Idee :
- Für jedes angewählte Ventil läßt du (wie gehabt) die Pausenzeit ablaufen.
- Ist für diese Ventil die Zeit abgelaufen wird es in ein FIFO mit seiner Intervallzeit eingetragen
- Das Ventil im FIFO an der Position 1 wird geschaltet (wenn dort eines steht). Ist von ihm die Zeit abgelaufen so wird es aus dem FIFO gelöscht und ggf. folgende Einträge rücken auf und werden ggf. ausgeführt.

Der Unterschied (für mich) zu eurer bisherigen Lösung wäre, dass der Vorrang der Ventile sich nicht mehr zwangsläufig aus ihrem Index ergibt. Ggf. können Vorgabe-(Wunsch-)Zeiten sogar besser einhalten werden.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Könntest Du vielleicht noch erklären, warum die Anzahl der Ventile, der Intervall- und Öffnungszeiten variabel ist, Du aber trotzdem alle diese Ventile zeitlich verteilen musst?
Ich verstehe gerade noch nicht, warum diese Ventile alle einzelne, unabhängige, manuell eingestellte Parameter bekommen und dann aber alle zusammen verarbeitet werden...

Das sind Waschventile von einzelnen Anlagenteilen.
Diese haben miteinander nichts zu tun.
Es kann immer nur einer gewaschen werden, weil sonst der Druck zusammenbricht.
Jeder Anlagenteil hat separate Waschintervalle und Waschdauer.
Die Dauer zwischen den Waschungen soll maximal man, damit der Bedienmann nach einer Waschung Zeit hat manuell aus dem Waschwassersystem etwas zu entnehmen.
 
Ich hätte da auch noch ein paar Fragen.

Werden sowohl für die Intervallzeit als auch für die Öffnungszeit jeweils MIN- und MAX-Werte als Parameter vorgegeben? Es sind also insgesamt vier Parameter pro Ventil? Wie soll nach einer Freigabe gestartet werden? Was soll geschehen wenn die Aufteilung nicht mehr aufgeht? Auch wenn du sagst, in der Praxis passt das schon, so muss man es in einem Algorithmus ja irgendwie berücksichtigen.

Vielleicht hilft die Relativitätstheorie, um einen Raum für eine neue Zeit zu schaffen :ROFLMAO: ?


Gruß, Onkel

Pro Ventil: Puls und Pause sowie eine binäre Freigabe (sprich wenn der Anlagenteil überhaupt in Betrieb ist).
Nach der Freigabe beginnt die Pausenzeit zu laufen.
Wenn die Aufteilung nicht mehr geht, das ist ja dann wenn keine Intervallzeit mehr übrigbleibt, werden wir einen Alarm ausgeben.

Ja, mit der Raumzeit beschäftige ich mich im Moment auch, aber leider ist das für mich noch weniger klar wie das Ventilspektakel hier.
 
@Borromeus:
Ich hätte dazu vielleicht noch eine (geringfügig andere) Idee :
- Für jedes angewählte Ventil läßt du (wie gehabt) die Pausenzeit ablaufen.
- Ist für diese Ventil die Zeit abgelaufen wird es in ein FIFO mit seiner Intervallzeit eingetragen
- Das Ventil im FIFO an der Position 1 wird geschaltet (wenn dort eines steht). Ist von ihm die Zeit abgelaufen so wird es aus dem FIFO gelöscht und ggf. folgende Einträge rücken auf und werden ggf. ausgeführt.

Der Unterschied (für mich) zu eurer bisherigen Lösung wäre, dass der Vorrang der Ventile sich nicht mehr zwangsläufig aus ihrem Index ergibt. Ggf. können Vorgabe-(Wunsch-)Zeiten sogar besser einhalten werden.

Gruß
Larry

Okay, so eine Lösung haben wir bei einer ähnlichen Aufgabe schon gemacht. Diesen Baustein kann ich natürlich hier auch einbauen.
 
Zurück
Oben