20.12.2021, 23:20
Hallo zusammen!
Ich bin noch immer recht neu in LabVIEW und versuche gerade eine Anwendung zur Automatisierung von Dauermessungen zu erstellen. Dabei geht es vor allem um Messungen die aus 2-5 Schritten bestehen und in bestimmten Zeitabständen (stündlich, täglich usw.) wiederholt werden müssen.
Um dies zu realisieren wählte ich zunächst den Ansatz einen Queued Message Handlers, indem ich die Queue mit Array Inhalten (bestehend aus einem Cluster mit einem Enum zur Schrittauswahl, einem Integer zur Auswahl Anzahl und einem Integer zur Auswahl der Wartezeit) fütterte. Dieser Ansatz funktioniert auch ziemlich gut, bis auf einige Funktionen, die dadurch nur bedingt möglich sind. Und zwar: mein größtes Problem ist, dass die einzelnen Messungen (Lagerstrom/Spannungsmessung, Impedanzmessung) und die anderen Vorgänge während der laufenden Dauermessung nicht einzeln ausgeführt werden können, auch wenn sie nicht verwendet werden. Mir ist natürlich klar, dass das aufgrund der Casestruktur so ist, also habe ich zunächst versucht bei den Einzel-Events die Schritte mittels "Element vorne einfügen" in die Queue zu füttern. Das funktioniert zwar, jedoch wird der Vorgang erst ausgeführt, wenn der aktuelle Vorgang fertig ist (falls eine längere Wartezeit geplant ist - unbrauchbar). Ich habe alles nach Antworten durchgesucht und auch die LabVIEW Core 1-3 Learnpaths durchgemacht, ohne eine bessere Idee zu finden als die, die ich heute aufgebaut habe.
Bei diesem Ansatz befinden sich die einzelnen Messungen (und andere Vorgänge) in separaten While-Schleifen mit Case-Strukturen. Diese werden dann mit Hilfe von Meldern ausgeführt. Die Meldungen für einzelne Ausführungen werden dabei aus der Event-Struktur gesendet. Die Meldungen bei einer Dauermessung werden mit Hilfe eines QMH (fast nach dem alten Entwurf) in Form von User-Events (für die zuvor genannte Event-Struktur) generiert. Insgesamt habe ich also drei Haupt-While-Loops, die für die Ausführung zuständig sind und sieben weitere While-Loops mit den Messungen/Vorgängen.
Mir ist bewusst, dass ich mit diesem Ansatz gegen viele Richtlinien von LabVIEW verstoße und ich bin deshalb auch selbst unzufrieden mit meiner "Lösung", auch wenn sie (zumindest für mich) zu funktionieren scheint. Nach nun knapp zwei Wochen muss ich allerdings zugeben, dass mir keine bessere Lösung einfällt und suche deshalb hier nach Hilfe.
Beim Aufruf der "notifier_main - Kopie.vi" führt der Start-Button eine Dauermessung mit der im Array ausgewählten Reihenfolge aus. Die LEDs sollen dabei die Ausführung der einzelnen Messungen/Vorgänge andeuten. Rechts neben den LEDs kann die Einzelausführung vorgenommen werden.
Ich hoffe, dass ich mein Problem, sowie die Ansätze verständlich rüberbringen konnte und bin für jede Anregung/Kritik offen und dankbar.
Artur
PS: das angehängte VI ist bei weitem nicht fertig und soll lediglich Architektur testen. Ich bitte fehlende Stopp-Buttons, sowie die nur einmal vorhandene Occurance zu entschuldigen.
Ich bin noch immer recht neu in LabVIEW und versuche gerade eine Anwendung zur Automatisierung von Dauermessungen zu erstellen. Dabei geht es vor allem um Messungen die aus 2-5 Schritten bestehen und in bestimmten Zeitabständen (stündlich, täglich usw.) wiederholt werden müssen.
Um dies zu realisieren wählte ich zunächst den Ansatz einen Queued Message Handlers, indem ich die Queue mit Array Inhalten (bestehend aus einem Cluster mit einem Enum zur Schrittauswahl, einem Integer zur Auswahl Anzahl und einem Integer zur Auswahl der Wartezeit) fütterte. Dieser Ansatz funktioniert auch ziemlich gut, bis auf einige Funktionen, die dadurch nur bedingt möglich sind. Und zwar: mein größtes Problem ist, dass die einzelnen Messungen (Lagerstrom/Spannungsmessung, Impedanzmessung) und die anderen Vorgänge während der laufenden Dauermessung nicht einzeln ausgeführt werden können, auch wenn sie nicht verwendet werden. Mir ist natürlich klar, dass das aufgrund der Casestruktur so ist, also habe ich zunächst versucht bei den Einzel-Events die Schritte mittels "Element vorne einfügen" in die Queue zu füttern. Das funktioniert zwar, jedoch wird der Vorgang erst ausgeführt, wenn der aktuelle Vorgang fertig ist (falls eine längere Wartezeit geplant ist - unbrauchbar). Ich habe alles nach Antworten durchgesucht und auch die LabVIEW Core 1-3 Learnpaths durchgemacht, ohne eine bessere Idee zu finden als die, die ich heute aufgebaut habe.
Bei diesem Ansatz befinden sich die einzelnen Messungen (und andere Vorgänge) in separaten While-Schleifen mit Case-Strukturen. Diese werden dann mit Hilfe von Meldern ausgeführt. Die Meldungen für einzelne Ausführungen werden dabei aus der Event-Struktur gesendet. Die Meldungen bei einer Dauermessung werden mit Hilfe eines QMH (fast nach dem alten Entwurf) in Form von User-Events (für die zuvor genannte Event-Struktur) generiert. Insgesamt habe ich also drei Haupt-While-Loops, die für die Ausführung zuständig sind und sieben weitere While-Loops mit den Messungen/Vorgängen.
Mir ist bewusst, dass ich mit diesem Ansatz gegen viele Richtlinien von LabVIEW verstoße und ich bin deshalb auch selbst unzufrieden mit meiner "Lösung", auch wenn sie (zumindest für mich) zu funktionieren scheint. Nach nun knapp zwei Wochen muss ich allerdings zugeben, dass mir keine bessere Lösung einfällt und suche deshalb hier nach Hilfe.
Beim Aufruf der "notifier_main - Kopie.vi" führt der Start-Button eine Dauermessung mit der im Array ausgewählten Reihenfolge aus. Die LEDs sollen dabei die Ausführung der einzelnen Messungen/Vorgänge andeuten. Rechts neben den LEDs kann die Einzelausführung vorgenommen werden.
Ich hoffe, dass ich mein Problem, sowie die Ansätze verständlich rüberbringen konnte und bin für jede Anregung/Kritik offen und dankbar.
Artur
PS: das angehängte VI ist bei weitem nicht fertig und soll lediglich Architektur testen. Ich bitte fehlende Stopp-Buttons, sowie die nur einmal vorhandene Occurance zu entschuldigen.