' schrieb:Von meiner Programmierung her geht es in der ersten Schleife darum eine Befehlskette in Form eines 2D Arrays zusammenzustellen.
In der zweiten Schleife geht es nun darum diese Befehlskette auszuführen, indem die einzelnen Befehle an die entsprechende Portnummer geschickt werden.
ABER!
Weshalb ich diesen parallelen Aufwand betreibe, ist die Tatsache dass das Erstellen einer neuen Befehlskette möglich sein soll noch während das Ausführen im Gange ist.
Sprich der Benutzer hat eine Befehlskette eingegeben, welche den Temperaturverlauf für 4 verschiedene Öfen vorgibt.
Jetzt klickt er auf OK und die Befehle werden ausgefüht.
Jetzt bemerkt er nach einiger Zeit (der Temperaturverlauf ist noch nicht beendet), dass er sich bei einer der Öfen geirrt hat. D.h. er möchte für diesen einen neuen Befehl erstellen ohne dass die anderen davon beinträchtigt werden.
Gut, jetzt bin ich dabei. (Jetzt brauch ich auch kein Muster mehr).
Vorschlag:
Mach ein VI, in dem der Benutzer seine Verläufe generiert. Dass dieses VI schon aufwändig werden kann, steht hier nicht zur Debatte. Irgendwann ist der Bediener mit Erstellen eines Verlaufes respektive mehrerer Verläufe fertig. Zu diesem Zeitpunkt klickt der Bediener auf einen Button "Daten zur Ausführung senden". Jetzt sendet dieses VI den Verlauf respektive die Verläufe mittels Queue an das ausführende VI. (Dass bei vier Öfen vier mal per Queue gesendet wird, steht auch nicht nicht zur Debatte. Hat den Vorteil: Oh, da passt einer nicht, dann ändern wir nur einen). Nach dem Senden läuft diese VI weiter. Der Benutzer will ja schließlich einen Verlauf anpassen können.
Außerdem hast du ein zweites VI (eigenlich einen zweiten "Prozess"), das die Verläufe abarbeitet. (Überlegung: Das VI abreitet nur einen einzigen Ofen ab. Durch Instanzierung des VIs (invariante Ausführung), können beliebig viele genau dieser VIs parallel laufen.) Dieses VI holt sich die Daten aus der Queue - und arbeitet genau diesen Ablauf ab.
Durch das Managemant der Verläufe mittels Queue/Melder entsteht eine Entkopplung zwischen Eingabe und Abarbeitung der Verläufe.
Bedenke, dass das Abarbeiten eines Verlaufes ggf. angehalten werden muss. Das würde auch per Queue aus der Eingabemaske heraus geschehen können.
Das, was du bisher als While-Schleife bezeichnet hast, fällt eher unter den Begriff "Task", "Prozess" etc. Im Endeffekt würdest du diese beiden "Haupt-VIs" ganz einfach parallel in ein übergeordnetes VI legen - dann würde beide parallel ausgeführt werden.
Kannst du meiner Intension, die beiden Vorgänge "Eingabe" und "Abarbeitung" so wie beschrieben zu trennen und entsprechend abzuarbeiten, folgen?
Und noch ein Nachtrag:
Ich sehe gerade du hast LV 61? Gibts denn da schon Queues? Kommst du nicht irgendwie an was aktuelles?