INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Automatisierung mittels QMH und Melder



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

20.12.2021, 23:20 (Dieser Beitrag wurde zuletzt bearbeitet: 20.12.2021 23:24 von ar7ur8.)
Beitrag #1

ar7ur8 Offline
LVF-Grünschnabel
*


Beiträge: 15
Registriert seit: Jul 2021

2020
2019
DE



Automatisierung mittels QMH und Melder
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.


Angehängte Datei(en)
0.0 .zip  QMH_Notifier_Ansatz.zip (Größe: 231,29 KB / Downloads: 101)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
21.12.2021, 08:22
Beitrag #2

GerdW Online
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Automatisierung mittels QMH und Melder
Hallo Artur,

Zitat: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 jetzt nicht in deine VIs geschaut, aber mal eine allgemeine Anregung:
Wenn man 1000s warten will, kann man das so machen:
1. man wartet 1× 1000s
2. man wartet 20× 50s
3. man wartet 50× 20s
4. man wartet 1000× 1s

Such dir eine (für deine Anforderungen) passende Option aus… Big Grin

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.12.2021, 10:03 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2021 10:40 von GerdW.)
Beitrag #3

ar7ur8 Offline
LVF-Grünschnabel
*


Beiträge: 15
Registriert seit: Jul 2021

2020
2019
DE



RE: Automatisierung mittels QMH und Melder
Hallo Gerd,

erstmal vielen Dank für deine Antwort, ich denke das könnte der richtige Ansatz sein. Allerdings ist mein Dauermessung-Aufbau mmn derzeit nicht dafür geeignet. Beim letzten Ansatz des QMH habe ich die Vorgänge direkt in der Event-Struktur in die Queue eingefügt. Wenn ich nun aber den Vorgang mehrmals ausführen möchte, verändere ich die Anzahl der Schleifenausführungen und passe die Wartezeit an (Stunden, Minuten, Sekunden). Somit läuft diese Schleife eine bestimmte Zeit (was ja auch alles andere als optimal ist in der Event-Struktur). Selbst wenn ich jetzt eine Reihe von "Warten (1s)" Vorgängen habe - die am Anfang eingefügten Vorgänge werden erst bei der nächsten Ausführung erfasst und ausgeführt.

Ich nehme an, dass ich den Aufbau der Dauermessung überarbeiten müsste, habe aber noch keine andere Lösung.

Edit GerdW: Anhänge immer direkt im Forum anhängen!


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.12.2021, 10:41 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2021 11:01 von GerdW.)
Beitrag #4

GerdW Online
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Automatisierung mittels QMH und Melder
Hallo Artur,

Zitat:Somit läuft diese Schleife eine bestimmte Zeit (was ja auch alles andere als optimal ist in der Event-Struktur).
Hier liegt dein Grundproblem!

Ein Event sollte immer so schnell wie möglich abgearbeitet werden! Wenn du dagegen eine stundenlange Wartezeit einfügst, wird dein Programm nie vernünftig funktionieren…

- Das Aufrufen einer "Ablauf Dauermessung" sollte ein anderes Event sein als das Warten auf den nächsten Step. Keine geschachtelten Schleifen im Event!
- Ein "Wait ms" mit einer Wartezeit im Stundenbereich sollte NIE verwendet werden, egal ob in einem Event oder nicht…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.12.2021, 11:34 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2021 11:40 von ar7ur8.)
Beitrag #5

ar7ur8 Offline
LVF-Grünschnabel
*


Beiträge: 15
Registriert seit: Jul 2021

2020
2019
DE



RE: Automatisierung mittels QMH und Melder
(21.12.2021 10:41 )GerdW schrieb:  - Das Aufrufen einer "Ablauf Dauermessung" sollte ein anderes Event sein als das Warten auf den nächsten Step. Keine geschachtelten Schleifen im Event!
okay, dann werde ich das wohl überarbeiten müssen.. passt der allgemeine QMH Aufbau dafür, oder muss ich da eine andere Lösung suchen? Momentan weiß ich leider nicht wirklich wie ich das umsetzen soll..

Zitat:- Ein "Wait ms" mit einer Wartezeit im Stundenbereich sollte NIE verwendet werden, egal ob in einem Event oder nicht…
Das war mir leider bis jetzt nicht ganz klar. Was ist denn die "best practice" für solche Fälle?

Eine andere Frage die mich außerdem beschäftigt ist die Eingabe des Programmablaufs. Momentan wird diese ja durch ein Array Bedienelement gemacht. Nach längerer Verwendung merke ich allerdings, dass es nicht die beste Lösung ist weil:
- die Reproduzierbarkeit fehlt
- zu wenig Eingabeparameter (und alle gleich für jeden Schritt)

ideal wäre es mmn, wenn ich so etwas wie ein Skript (CSV oder INI Datei) erstellen könnte, bei dem ich die Schritte sowie die jeweils dafür notwendigen Parameter festlege. Dieses Skript wird dann quasi "abgearbeitet".
Gibt es dafür eine Möglichkeit oder werde ich da nicht weit kommen?

Danke im Voraus!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.12.2021, 11:41
Beitrag #6

GerdW Online
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Automatisierung mittels QMH und Melder
Hallo Artur,

Zitat:Das war mir leider bis jetzt nicht ganz klar. Was ist denn die "best practice" für solche Fälle?
Das hatte ich doch oben schon geschrieben: statt einmal 1000s zu warten kann man auch 1000× 1s warten. Oder man wartet bis zu einem bestimmten Timestamp, natürlich auch mit 1s-Intervallen…

Zitat:ideal wäre es mmn, wenn ich so etwas wie ein Skript (CSV oder INI Datei) erstellen könnte, bei dem ich die Schritte, sowie die jeweils dafür notwendigen Parameter festlege. Dieses Skript wird dann quasi "abgearbeitet".
Gibt es dafür eine Möglichkeit oder werde ich da nicht weit kommen?
Nimm eine CSV-Datei und lese sie ein.
Dann "einfach" die Daten aus der CSV-Datei entsprechend deiner Requirements parsen und in eine sinnvolle (programm-interne) Datenstruktur packen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
21.12.2021, 11:53 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2021 12:04 von ar7ur8.)
Beitrag #7

ar7ur8 Offline
LVF-Grünschnabel
*


Beiträge: 15
Registriert seit: Jul 2021

2020
2019
DE



RE: Automatisierung mittels QMH und Melder
Hallo Gerd,

wenn ich richtig verstehe, muss dann nach jeder Sekunde ein neues Event mit dem Vorgang "Warten 1s" kommen? Müsste dafür nicht auch eine For-Schleife mit einer bestimmten Iterationsanzahl verwendet werden?
In diesem Fall wäre während dieser Ausführung ja auch die Case Struktur "geblockt".

Ich bitte mich zu entschuldigen, falls ich etwas nicht richtig verstehe. Stehe nur mittlerweile ein wenig auf dem Schlauch bei diesem Thema..

(21.12.2021 11:41 )GerdW schrieb:  Nimm eine CSV-Datei und lese sie ein.
Dann "einfach" die Daten aus der CSV-Datei entsprechend deiner Requirements parsen und in eine sinnvolle (programm-interne) Datenstruktur packen…

Okay, das hört sich schon mal gut an. Gibt es auch die Möglichkeit die csv-Datei in LabVIEW zu erstellen, bzw. zu bearbeiten (nur bestimmte Werte in bestimmte Felder)? Auf diese Weise könnte ich sicherstellen, dass auch andere Benutzer das Programm bedienen und eigene Abläufe generieren können.
Wäre in diesem Fall vielleicht so etwas wie ein "Schritt hinzufügen" Fenster sinnvoll, bei dem man den zunächst die Messung auswählt und abhängig davon dann die möglichen Parameter gewählt werden können?
Diese Daten könnten ja dann der bereits vorhandenen oder neuen csv-Datei angehängt werden oder?

Vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.12.2021, 13:58
Beitrag #8

GerdW Online
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Automatisierung mittels QMH und Melder
Hallo Artur,

Zitat:wenn ich richtig verstehe, muss dann nach jeder Sekunde ein neues Event mit dem Vorgang "Warten 1s" kommen? Müsste dafür nicht auch eine For-Schleife mit einer bestimmten Iterationsanzahl verwendet werden?
In diesem Fall wäre während dieser Ausführung ja auch die Case Struktur "geblockt".
Verwendest du einen QMH oder eine "event-based statemachine"?

Wenn du, wie geschrieben einen QMH verwendest, dann schickst du einmal einen Befehl "Wait until t+1000s". Der entsprechende State im QMH wartet eine Sekunde und sendet sich selbst "wait until t+999s", usw.…

Zitat:Okay, das hört sich schon mal gut an.
Das kan man alles programmieren!
Man muss es "nur" programmieren…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.12.2021, 16:06
Beitrag #9

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
RE: Automatisierung mittels QMH und Melder
Servus Artur,

ich habe auch mal (als eher Unerfahrener) ein Blick draufgeworfen und ein Snippet für die anderen erstellt (zumindest als grobe Überischt als Bild, haben ja nicht all zu viele lv21).

Ich habe bisher gute Erfahrungen mit dem QMH von Delacor gemacht (DQMH aus dem VIPM) und so wie ich das hier verstanden habe, passt der sehr gut für deine Aufgabe.
Hier die Frage, muss Temperatur+ und Temperatur- separat sein (passieren die gleichzeitig?) sonst liese sich das zusammenfassen (auch ohne DQMH).
Musst du warten bis die anderen fertig sind? Oder wozu dient die Occurence? Hier solltest du aber nicht die Schleife blockieren, nur damit du auf das Ergebnis wartest.

Soweit was mir auf- und eingefallen ist.

MfG Timo


Angehängte Datei(en) Thumbnail(s)
   

"Auch aus Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen."
Johann Wolfgang von Goethe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.12.2021, 19:37 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2021 19:40 von GerdW.)
Beitrag #10

GerdW Online
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Automatisierung mittels QMH und Melder
Hallo Artur,

jetzt habe ich mal deine VIs angeschaut - und habe Fragen über Fragen…

- In deinem Beispiel gibt es einige Loops, wo du Referenzen nicht durchverdrahtest: das solltest du dringend nachbessern…
- Warum überall diese ganzen Wartezeiten? Wenn du einen Ausgang an- und ausschalten willst, kannst du auch eine Loop verwenden und brauchst keine zusätzliche lokale Variable mehr…
- Warum Wartezeiten in Schleifen, die sowieso (endlos) auf einen Notifier warten?
- Ich hoffe, in deinem "richtigen" Programm gibt es eine Möglichkeit, das Programm auch (sinnvoll) zu beenden?
- Du hast von einem QMH geschrieben, dein VI basiert aber auf Notifiern, UserEvents und dann auch noch irgendwelche Occurances!? Wieso dieser Mix aus gleich drei verschiedenen Elementen?

Zitat:Momentan wird diese ja durch ein Array Bedienelement gemacht.
Ich bevorzuge (Multicolumn)Listboxen, um dem User eine Tabelle in einem ansprechenden UI anzuzeigen. Der User kann darin einfach eine Zeile auswählen und dein Programm kann dazu passende Controls anzeigen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Fehler Melder wladimir s 7 6.702 14.05.2016 15:24
Letzter Beitrag: BNT
  Kommunikation bei mehrfach ausgeführten SubVis (Melder) I3erry 3 3.483 24.06.2015 13:01
Letzter Beitrag: GerdW
  Schleifenkommunikation: Melder und Benutzer-Ereignisse oder lokale Variablen lumaxo 7 5.399 19.03.2015 17:49
Letzter Beitrag: lumaxo
  Problem mit Melder, setzt sich auf anderen Wert zurück dali4u 3 3.937 20.11.2014 10:01
Letzter Beitrag: GerdW
  Melder Performance D_Sev 13 9.471 08.09.2014 10:56
Letzter Beitrag: GerdW
  Automatisierung, diverse OPC_Variablen TrueSetzen Knusperbaer 2 2.671 16.05.2013 15:47
Letzter Beitrag: jg

Gehe zu: