LabVIEWForum.de
Zustand nach Ende eines Task definieren - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Zustand nach Ende eines Task definieren (/Thread-Zustand-nach-Ende-eines-Task-definieren)



Zustand nach Ende eines Task definieren - marhi - 11.05.2015 12:57

Hallo zusammen,

ich benutze eine NI USB-6211 Karte zur Signalerzeugung fuer ein 5V Rechtecksignal. Das entsprechende VI wird von einem Aufrufer gestartet und gestoppt (siehe Anhang).Mein Problem besteht darin, dass der Zustand nach stoppen des VI mal 0V und mal 5 V sind, scheinbar sporadisch. Wie kann ich erzwingen, dass am Ende der Pegel low ist? Ich verstehe nicht, warum das überhaupt passiert. Selbst wenn ich vor dem Task Release ein "Warten bis beendet" einbaue, ändert sich das Verhalten nicht. Normal würde ich erwarten, dass nach Vollenden des Tasks der Kanal immer wieder auf Null geht. Eine Methode, um den Kanal zurückzusetzen habe ich ebenfalls nicht gefunden. Wer kann also helfen? Vielen Dank für einen Hinweis...

marhi


RE: Zustand nach Ende eines Task definieren - GerdW - 11.05.2015 13:17

Hallo marhi,

Zitat:Wie kann ich erzwingen, dass am Ende der Pegel low ist?
Indem man einmal explizit eine Null ausgibt, bevor man den DAQmxTask beendet…

Zitat:Normal würde ich erwarten, dass nach Vollenden des Tasks der Kanal immer wieder auf Null geht.
Wieso?
Es bleibt der zuletzt gesetzte Werte erhalten!
Einen DAQmxTask zu löschen bedeutet nicht, dass die Hardware "abgeschaltet" wird…


RE: Zustand nach Ende eines Task definieren - Lucki - 11.05.2015 14:53

Ein andere Möglichkeit ist, die ganze Messkarte zurückzusetzen. Das ist in der Regel das Einfachste, leider es ist nur so, dass die Funktion in der Palette gut versteckt ist. Deshalb konntest Du sie auch nicht finden.
Es sei Dir aber hier verraten - bitte nicht weitersagenBig Grin - :
Mess-IO / DAQmx / DAQmx Gerätekonfiguration


RE: Zustand nach Ende eines Task definieren - marhi - 11.05.2015 15:36

(11.05.2015 13:17 )GerdW schrieb:  Es bleibt der zuletzt gesetzte Werte erhalten!
Einen DAQmxTask zu löschen bedeutet nicht, dass die Hardware "abgeschaltet" wird…

Hallo GerdW. Das verstehe ich schon, aber der letzte von mir gesetzte Wert ist ja 0 - soll es zumindest sein.


RE: Zustand nach Ende eines Task definieren - GerdW - 11.05.2015 15:45

Hallo marhi,

Zitat:soll es zumindest sein
"soll" ist nicht "muss"…
Du kannst deinen DAQmxTask jederzeit abbrechen - z.B. über den Stopp-Button in der WhileLoop. Dies kann auch passieren, während die Ausgabe noch läuft - und schon bleibt der Ausgang auf einem zufälligen Wert stehen…

Wenn man wirklich sicher sein will, welcher Wert nach einem zufälligen Abbruch der Ausgabe ausgegeben wird, dann muss man diesen Wert auch in die Ausgabe schreiben!


RE: Zustand nach Ende eines Task definieren - marhi - 11.05.2015 16:21

(11.05.2015 15:45 )GerdW schrieb:  Hallo marhi,

Zitat:soll es zumindest sein
"soll" ist nicht "muss"…
Du kannst deinen DAQmxTask jederzeit abbrechen - z.B. über den Stopp-Button in der WhileLoop. Dies kann auch passieren, während die Ausgabe noch läuft - und schon bleibt der Ausgang auf einem zufälligen Wert stehen…

Wenn man wirklich sicher sein will, welcher Wert nach einem zufälligen Abbruch der Ausgabe ausgegeben wird, dann muss man diesen Wert auch in die Ausgabe schreiben!

Hallo GerdW, danke, ich hatte das auch vermutet und nach der Schleife Null Schreiben eingebaut (siehe Bild), allerdings nicht mit dem gewünschten Erfolg. Auch Warten auf Task-Ende vor der Freigabe des Tasks hat nichts gebracht.
Kann es sein, dass die Null am Ende des Puffers angehängt wird und so gar nicht zum Tragen kommt. Mit der Wait Funktion komme ich immer in den Timeout. Kann/muss der Puffer zurueckgesetzt werden, bevor ich die Null schreibe?

Vielen Dank weiterhin für jede Hilfe.
(11.05.2015 14:53 )Lucki schrieb:  Ein andere Möglichkeit ist, die ganze Messkarte zurückzusetzen. Das ist in der Regel das Einfachste, leider es ist nur so, dass die Funktion in der Palette gut versteckt ist. Deshalb konntest Du sie auch nicht finden.
Es sei Dir aber hier verraten - bitte nicht weitersagenBig Grin - :
Mess-IO / DAQmx / DAQmx Gerätekonfiguration

Hallo Lucki, danke, da funktioniert zwar, aber verlangsamt die Beendigung des VIs enorm. Da es bei mir zeitkritisch zugeht, ist das leider keine geeignete Lösung meines Problems...
Gruß, marhi


RE: Zustand nach Ende eines Task definieren - marhi - 11.05.2015 16:41

Hallo GerdW,

ich habe jetzt eine Lösung, die funktioniert: ich setze den Task zunächst zurueck und initialisiere ihn dann neu mit der gewünschten Null. Ist das aber wirklich der eleganteste Ansatz? Ich habe das Gefühl, das ist eher von hinten durch die Brust ins Auge... Wenn du noch Input geben kannst für eine auch handwerklich saubere Lösung, wäre ich dankbar. Gruß, marhi


RE: Zustand nach Ende eines Task definieren - GerdW - 11.05.2015 20:10

Hallo marhi,

gib doch mal eine kleine Wartezeit zwischen dem Setzen der Null und dem löschen des Tasks.
Wenn du den Task unmittelbar nach dem Schreiben der Null löscht, wird eben dieses Ausgeben der Null wahrscheinlich gar nicht mehr ausgeführt!

Merke:
Diese (und ähnliche Funktionen wie VISAWrite) schicken die Daten nur in den Buffer des Hardwaretreibers. Dieser Treiber schickt die Daten dann im Hintergrund auf den Ausgabepin - wenn es von der Zeit her "passt", z.B. im Takt deiner Samplerate. Wenn du aber sofort den Befehl zum Abbruch des Task hinterherschickst, wird der Buffer auch gleich mit entfernt…


RE: Zustand nach Ende eines Task definieren - marhi - 12.05.2015 08:10

Hi GerdW,

selbst bei sehr kurzem Puffer - habe ihn auf nur 10Zyklen gesetzt - und sehr langer Wartezeit (5s) ändert sich das Verhalten nicht.
Werde darum mit meiner obigen Lösung vorlieb nehmen.

Danke und Gruß, marhi