LabVIEWForum.de - Automatisierung mittels QMH und Melder

LabVIEWForum.de

Normale Version: Automatisierung mittels QMH und Melder
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo Gerd,

erstmal vielen Dank für die vielen ausführlichen Antworten, du bist wirklich eine große Hilfe!

(21.12.2021 13:58 )GerdW schrieb: [ -> ]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.…

Ich würde am liebsten einen QMH verwenden und nicht das, was ich in meinem Anhang aufgebaut habe, da ich dann lediglich zwei Schleifen habe. Was genau meinst du denn mit einem Befehl "Wait until t+1000s"?
Du meinst also der Case "Warten" würde diese Anweisung bekommen und dann wiederum 1 Sekunde später sich selbst mit Hilfe der Queue aufrufen, verstehe ich das richtig?

Zitat:- In deinem Beispiel gibt es einige Loops, wo du Referenzen nicht durchverdrahtest: das solltest du dringend nachbessern…
das mit den Referenzen verstehe ich nicht ganz. Welche meinst du denn genau? soweit ich weiß habe ich alle Melder und User-Event Referenzen verbunden, oder meinst du was anderes?

Zitat:- 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…
das mit den Wartezeiten bei den Cases mit den LEDs ist das, was mir auf die schnelle eingefallen ist, um kenntlich zu machen, dass der Vorgang ausgeführt wurde (ein-aus) und die Wartezeit im Case ist eben die Dauer des Ein-Status. Wahrscheinlich gibt es eine wesentlich einfachere und elegantere Art, das zu lösen.

Zitat:- Warum Wartezeiten in Schleifen, die sowieso (endlos) auf einen Notifier warten?
wenn du die 100ms bei den einzelnen While-Schleifen meinst, dann wollte ich damit lediglich bezwecken, dass sie nicht mit maximaler geschwindigkeit ausgeführt werden, aber ich vermute du hast recht, sie werden ja ohne den Notifier garnicht ausgeführt.. mein Fehler

Zitat:- Ich hoffe, in deinem "richtigen" Programm gibt es eine Möglichkeit, das Programm auch (sinnvoll) zu beenden?
also falls ich einen QMH verwende, werde ich das wohl über ein User-Event lösen. Gibt es da noch was, was ich beim Beenden beachten sollte? Wie gesagt, mir fehlt leider noch die Erfahrung.

Zitat:- 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?
Der QMH den ich anfangs beschrieben habe ist mein erster Ansatz gewesen, und er funktioniert auch gut, bis auf die Sache mit den Einzelaufrufen während der Dauermessung. Deshalb wollte ich ja was anderes aufbauen und bin bei dem gelandet, was ich angehängt habe. Das VI soll ja nur den Ansatz verdeutlichen. Die Occurances habe ich eingefügt um sicherzustellen, dass der nächste Vorgang erst eingeleitet wird, wenn der aktuelle abgeschlossen ist (scheint bei dem Impedanz Vorgang zu klappen).

Hallo Timo,

tut mir leid, ich weiß leider noch nicht wie ich solche Snippets erstellen kann und habe garnicht daran gedacht, dass einige das VI nicht öffnen können.. vielen Dank für deine Mühe.
Ich werde mir deinen Vorschlag mal ansehen, vielleicht passt das ja wirklich.
Zu deiner Frage: Temperatur +/- sowie Spannung +/- müssen eigentlich keine getrennte Vorgänge sein. Dabei muss lediglich sichergestellt werden dass ein bestimmter Wert bei den zugehörigen Geräten eingestellt wird. Deshalb habe ich erstmal für die Spannungsquelle ein SubVI erstellt, das in Abhändigkeit vom aktuellen Wert der angelegten Spannung den Step wählt (z.B. +/-0,2V im Bereich 0-5V und +/-1V im Bereich 5-60V). Falls ich das mit der Schritteingabe besser hinbekomme, werde ich das wahrscheinlich auch ändern und einfach den Wert vorgeben (weiß ja jetzt auch wie User-Events funktionieren, da sollte das kein Problem sein hoffe ich).
Bei den Messungen muss ich lediglich warten bis die Lagerstrom- Spannungsmessung sowie die Impedanzmessung fertig sind, da diese beiden über eine Art Switch am Prüfling angeschlossen werden und deshalb nicht gleichzeitig laufen können. Ansonsten wäre es mmn nur noch beim Vorgang "Warten" wichtig zu warten, bis dieser abgeschlossen ist. (mit den neuesten Ideen von Gerd wird dieser aber hoffentlich nicht die Queue besetzen).

Ich denke am besten versuche ich meinen QMH Ansatz umzubauen und füge diesen anschließend hier an.
Hallo Gerd,

Ich habe nun versucht den Ansatz mit jeweils 1 Sekunde warten in einem QMH umzusetzen. Es scheint auch ganz gut zu klappen (die 10 Sekunden Gesamtwartezeit können bei einer vorhandenen Benutzereingabe frei gewählt werden). Außerdem habe ich das Beenden des Programms so gemacht, wie in einem der LabVIEW Kurse, die ich erwähnt hatte (ich hoffe das ist so richtig).
Wenn der Aufbau des "Warten" Cases dem entspricht, was du gemeint hattest, werde ich dieses VI weiter ausbauen.

Ich habe allerdings noch die Frage wie ich es schaffen würde den Gesamten "Ablauf" (also z.B. Messung... Warten.. dann wieder Messung, Warten und schließlich von vorn mehrmals auszuführen, weil du sagtest es sollen keine verschachtelten Loops verwendet werden)

PS: Timo, ich habe versucht das VI für LabVIEW Versionen ab 2016 kompatibel zu machen, ich hoffe das ist mir gelungen.
Hallo Artur,

Zitat:Wenn der Aufbau des "Warten" Cases dem entspricht, was du gemeint hattest, werde ich dieses VI weiter ausbauen.
Ja, so in etwa… Smile

Die aktuelle Umsetzung hat dann ein Problem, wenn die Abarbeitung der States durch äußere Einflüsse verzögert wird: dann kann es passieren, dass >10s gewartet wird, obwohl eigentlich nur 10× 1s angeordnet wurde…
Die evtl. bessere Umsetzung setzt deshalb einen Zielzeitpunkt, bis zu dem gewartet werden soll: das Kommando lautet dann "warte bis t", wobei sich "t" aus aktueller Zeit und Wartedauer ergibt. Der State wartet eine Sekunde und prüft dann, ob die aktuelle Zeit >= t ist: falls nein, dann den State nochmal aufrufen…

Zitat:Ich habe allerdings noch die Frage wie ich es schaffen würde den Gesamten "Ablauf" (also z.B. Messung... Warten.. dann wieder Messung, Warten und schließlich von vorn mehrmals auszuführen, weil du sagtest es sollen keine verschachtelten Loops verwendet werden)
Indem du alle diese Befehle in die Queue packst: hier ist es dann sinnvoll, wirklich mit Queues zu arbeiten und nicht nur mit Notifier…
Hallo Gerd,

(22.12.2021 12:12 )GerdW schrieb: [ -> ]Hallo Artur,

Ja, so in etwa… Smile

Die aktuelle Umsetzung hat dann ein Problem, wenn die Abarbeitung der States durch äußere Einflüsse verzögert wird: dann kann es passieren, dass >10s gewartet wird, obwohl eigentlich nur 10× 1s angeordnet wurde…
Die evtl. bessere Umsetzung setzt deshalb einen Zielzeitpunkt, bis zu dem gewartet werden soll: das Kommando lautet dann "warte bis t", wobei sich "t" aus aktueller Zeit und Wartedauer ergibt. Der State wartet eine Sekunde und prüft dann, ob die aktuelle Zeit >= t ist: falls nein, dann den State nochmal aufrufen…

meinst du etwa so?
[attachment=62126]

Zitat:Indem du alle diese Befehle in die Queue packst: hier ist es dann sinnvoll, wirklich mit Queues zu arbeiten und nicht nur mit Notifier…

also kann ich das komplett ohne eine For-Loop hinbekommen, die die Ausführung bzw. das Packen in die Queue steuert? (ausgenommen die Autoindizierte For-Loop für das Eingabe-Array bzw. Listbox)

Momentan stelle ich mir das in etwa so vor:
-Benutzer legt die Messungen sowie die Wartezeit zwischen diesen fest
-Benutzer legt die Anzahl der Ausführungen fest
-Dauermessung Start aktiviert den Vorgang und die Queue wird mit den entsprechenden Messungen/Wartezeiten gefüllt.

ich kann mir bis jetzt nicht wirklich vorstellen wie ich die Anzahl der Ausführungen verarbeiten soll ohne eine For-Loop...
Hallo zusammen!

ich habe nun endlich versucht die mehrmalige Ausführung der Dauermessung hinzubekommen. Im Anhang befindet sich ein Ausschnitt mit meiner Lösung sowie der Case "Warten".
Ist ein solcher Ansatz in meinem Fall sinnvoll, oder sollte ich etwas anderes versuchen? Ich habe vor allem versucht ohne eine zeitliche Verzögerung in den For-Loops auszukommen.

Vielen Dank im Voraus!

[attachment=62136]
[attachment=62137]
Hallo zusammen!

Mein Programm besteht aus einem Queued Message Handler aus zwei While-Loops, deshalb meine Frage: was ist der beste Weg, wenn ich auf dem Frontpanel eine Temperaturanzeige implementieren möchte?
Also das Programm wird gestartet und die Temperatur wird z.B. jede Sekunde aktualisiert. Muss ich dafür eine zusätzliche Loop machen?
Zur Erfassung der Temperatur wird ein NI cDAQ - 9174 mit einem Temperaturmessmodul NI-9210 verwendet. Der Aufbau der Temperaturmessung ist ja nicht sonderlich schwer, nur verstehe ich nicht, wo ich diesen am elegantesten in mein Programm einbauen kann.

Vielen Dank im Voraus!
Hallo Artur,

ich habe deine Threads mal zusammengelegt - das dürfte dem Verständnis deiner neuen Frage dienlich sein…

Zitat:Also das Programm wird gestartet und die Temperatur wird z.B. jede Sekunde aktualisiert. Muss ich dafür eine zusätzliche Loop machen?
Wo genau kommt in deinem jetzigen Programm der Temperaturwert her?
Sieht das VI noch so aus wie vor Weihnachten?
Kannst du den aktuellen Stand hier anhängen?
(29.12.2021 17:52 )GerdW schrieb: [ -> ]Hallo Artur,

ich habe deine Threads mal zusammengelegt - das dürfte dem Verständnis deiner neuen Frage dienlich sein…

Hallo Gerd,

danke, daran hatte ich nicht gedacht.

Zitat:Wo genau kommt in deinem jetzigen Programm der Temperaturwert her?
Sieht das VI noch so aus wie vor Weihnachten?
Kannst du den aktuellen Stand hier anhängen?

Die Temperatur soll während der gesamten Laufzeit an einem Wälzlagerprüfstand gemessen werden (Außen und Innenring). Die beiden Anzeigeelemente habe ich in das Frontpanel eingefügt und überlege momentan wie ich am besten die kontinuierliche Messung hinbekommen kann, ohne die Funktionen des QMH zu beeinträchtigen.

Das VI sieht nicht mehr aus wie vor Weihnachten, da ich deinen Rat befolgt und die Struktur mit den Meldern gelöscht habe. Nun ist es nur ein QMH (zwei Queues und zusätzlich noch ein User Event zum Beenden des Programms). Bei dem angehängten VI ist bislang nur die Simulierte Lagerstrommessung dabei sowie das Warten-Case. Damit konnte ich zumindest die Dauermessung mit einem Skript testen.
Beim Start muss ein (leerer) Ordner ausgewählt werden, in dem dann drei Ordner für die jeweiligen Messungen sowie Berichte erstellt werden. Leider kann ich noch nicht alle Funktionen implementieren, da mir für manche die Hardware fehlt. Muss es nach den Feiertagen an der Uni machen.

Vielen Dank im Voraus!
Hat keiner eine Idee, wie ich das umsetzen könnte?

Ich habe überlegt den Initialisierungsteil der Temperaturmessung außerhalb der While-Loops zu lassen und den "Acquisition"-Teil in der oberen (Event Handling Loop) entweder im Timeout Event der Event-Struktur oder einfach in der While Loop.
Würde das so funktionieren?

Vielen Dank im Voraus!
Hallo Artur,

über den Jahreswechsel haben viele Urlaub und wollen sich entspannen… Smile

Zitat:Ich habe überlegt den Initialisierungsteil der Temperaturmessung außerhalb der While-Loops zu lassen und den "Acquisition"-Teil in der oberen (Event Handling Loop) entweder im Timeout Event der Event-Struktur oder einfach in der While Loop. Würde das so funktionieren?
Ohne jetzt in deinen Sourcecode zu schauen: Wahrscheinlich…

Warum machst du keinen Initialisierungs-State/-Case in deinem QMH? (Würde ich als "sauberere" Lösung empfinden.)
Seiten: 1 2 3
Referenz-URLs