(19.08.2024 11:23 )Minako schrieb: Hi ihr Beiden,
war leider kein schöner Urlaub. Wir sind am umziehen.... Waren leider so doof und haben uns kein Unternehmen gebucht.
Aber egal. Zurück zum Thema.
Diese 10 Messungen sind unabhängig voneinander. Wie ich geschrieben hatte werden diese nicht zeitgleich gestartet und somit auch nicht zeitgleich ausgewertet.
Es wird bei jeder Messung ein neues Gerät angesprochen, welches von Hand angegeben werden muss.
Auch alle anderen Einstellungen werden von Hand angegeben und können zueinander verschieden sein.
Natürlich könnte ich ein subvi erstellen damit ich alle 10 Schleifen auf dem Bildschirm betrachten kann aber das ändert nichts an den 10 Schleifen.
@Martin.Henz
Reentrantes VI höre ich zum ersten mal. Ich hab mir mal eine Erklärung durchgelesen und bin nicht ganz sicher, ob ich das richtig verstanden habe...
Ich schreibe ein Sub VI welches die Grundfunktion der Messung durchführen kann.
Mein Main VI kann dann über eine Event case alle start und stop Buttons für alle 10 Messungen in 2*10 Fällen verwalten, welche auf das Sub vi zugreifen und das kann mit der Einstellung auf reentrantes VI vollständig parallel ablaufen?
Das könnte eine Lösung sein, wenn das so funktioniert.
@Timo
Es muss unabhängig voneinander sein. Zumindest verstehe ich das Ganze als unabhängig, wenn jede Messung zu einem anderen Zeitpunkt gestartet werden soll und auch beendet wird. Im Notfall auch mal abgebrochen wird. Dabei sollen nicht alle Messungen, sondern nur die eine Abgebrochen werden.
Also - so wie ich den letzten Satz verstehe - laufen potentiell mehrere Messungen auch mal parallel. Falls nein - SubVI und in eine Schleife und alles ist gut (lediglich ne Auswahl welches Gerät grade gestartet werden soll).
Falls ich richtig verstanden habe:
Worauf Martin eventuell hinaus wollte ist, den Asynchronen Call zu nutzen. Sprich: Du startest das SubVI, wartest aber nicht auf das Ende der Ausführung. Daher: Deine Schleife muss die Messung nur starten, aber nicht stoppen. Das ganze Reentrant (bei den Einstellungen des VIs) damit mehrere Instanzen des SubVI gleichzeitig laufen dürfen. Du musst dir dann lediglich überlegen wie du mit dem gestarteten VI "kommunizierst" (zumindest sollte man das wenn man im HauptVI auch die Möglichkeit haben will die SubVIs zu beenden). Hierzu kannst du Queues oder ähnliches verwenden. Prinzipiell kannst du dir damit vom SubVI auch Daten an deine Oberfläche zurücksenden lassen (so gewünscht) und auch den "Ende" status damit abfragen. Der "Ende"-Baustein für asynchrone Calls hilft dir wahrscheinlich weniger, da der eigentlich nur auf das Ausführungsende wartet (mit Timeout (hat der den?) müsste man pollen können welche der VIs schon beendet sind). Dann kannst du die "normalen" Datenflussausgänge des VIs zum VI Ende noch auslesen. Ich hatte dafür bisher allerdings noch keine Use Case - wenn ich sowieso zwischendurch über Queue mit dem VI reden muss / will, dann muss ich das eh handeln, dann kann ich da auch meine Daten rüber schieben.
Wichtig: Machst du's über Queues musst du dir überlegen wie du die antwortenden VIs auseinanderhälst, bzw. das VI was du "kontaktieren willst" eindeutig identifizierst. Eine Queue pro VI start erlaubt eine eindeutige identifikation (ohne Name erzeugen und eindeutige ID nutzen), für den Rücklauf kannst du eine gemeinsame Queue nutzen, dann musst du im HauptVI nur einen Kanal auswerten und dann zuordnen von wem der kam (das SubVI sollte eine eindeutige ID zurücksenden, z.B. die Queue referenznummer - irgendwas was du leicht vergleichen kannst).
Hoffe das war nicht zu wirr und die Idee ist verstanden.
Ich nutze so ein ähnliches Konzept aktuell um in einer Klasse quasi "Listener" zu erstellen, die dann Daten aus Hardwareschnittstellen an ein GUI streamen.
Gruß Kiesch