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!
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...
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 weitersagen - :
Mess-IO / DAQmx / DAQmx Gerätekonfiguration
(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.
11.05.2015, 15:45 (Dieser Beitrag wurde zuletzt bearbeitet: 11.05.2015 15:46 von GerdW.)
"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!
"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 weitersagen - :
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
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
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…
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.