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 komm irgendwie nicht weiter. Entweder geht's nicht oder ich finde nichts. Und zwar folgendes:
Ich will eine analoge Ausgabe machen - und zwar Einzelwertausgabe, HW-getaktet, 10Hz (zehn Hertz = 100ms). Ich hab also im MAX eine Task angelegt PCI-6731 (eine reale Karte), 2 Kanäle, 1 Sample (HW-getataktet), 10Hz, interner Takt. Wenn ich diese Task im MAX ausführen lasse, geht alles wie ich will. Nachweis: Stelle ich 10Hz ein, läuft alles problemlos. Stelle ich 1kHz ein, kommt die Meldung "Anwendersoftware zu langsam". So täte ich das haben wollen.
Jetzt hab ich genau diese Task in1 geladen, gestartet, schreibe in While-Schleife Daten drauf, usw. Nur: Da werden die Daten nicht mit dem in der Task angegebenen Raster 10Hz ausgegeben, sondern in der Geschwindigkeit der While-Schleife. Siehe Bild.
In der While-Schleife befindet sich eine 25ms-Wartezeit und eine Berechnung für die Schleifenlaufzeit (Ergebnis X-Y). Ich will haben, dass X-Y 100ms anzeigt, obwohl die Wartezeit mit 25ms angegeben ist. Da der DAQmx-Write auf 10Hz eingestellt ist, sollte dieses Element solange warten, bis die 100ms um sind => Anzeige 100ms. Angezeigt wird aber 25ms. Weiteres Problem: Stelle ich die Schleifenzeit auf 200ms, so kommt nicht wie im MAX die Meldung "Anwendersoftware zu langsam". Nächstes Problem: verwende ich als Karte keine reale PCI-6731 sondern eine simulierte PCI-6731 - dann geht auch in LV alles so wie im MAX und so wie ich mir das vorstelle.
Meine Frage:
Wie bringe ich das Element DAQmx-Write dazu, sich erst dann zu beenden, wenn die Rasterzeit, die im MAX angegeben ist, um ist? Geht das überhaupt so wie ich mir das vorstelle? Warum geht's im MAX anders als in LV?
Was ich eben nicht machen will, ist ein Array (oder Signalverlauf) für eine halbe Stunde zu berechnen, und das dann ausgeben. Ich will eben Einzelwertausgabe machen.
Im Examplefinder hab ich eben keine Einzelwertausgabe mit 1 Sample (HW-getaktet) gefunden.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Ich will hier nicht einer Koryphäe was erzählen
Ja. Aber: Nur durch gegenseitiges Erzählen fällt mir, wenn nicht dir, ein, was anders ist oder ich noch probieren könnte.
' schrieb:Warum erstellst du den Task im Max und nicht im VI?
Ganz einfach: Weil's schneller geht. Zumal für Testzwecke wie diesen. Außerdem sagt dir der MAX auch gleich, ob was falsch eingestellt ist. LV sagt das nicht direkt.
Im wahren Leben geht es dann so: Erst im MAX eine Task erstellen mit allem was dazu gehört. Dann diese Task in LV per Kontextmenü in ein Konfigurations-SubVI umwandeln. Dann macht auch LV genau das selbe, was der MAX auch gemacht hat. Jetzt muss es in LV gehen wie im MAX: Geht's im MAX, muss es auch in LV gehen.
Zitat:Gibt's da überhaupt einen Unterschied?
Eigentlich möchte ich - und wohl auch NI - es so haben, dass es in beiden Systemen gleichmäßig läuft.
Apropos NI-Hotline: Naja, schau mer mal ... (spricht: die einzig guten verlassen regelmäßig den Hotlineposten)
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Hallo IchSelbst,
von SignalExpress weiß ich, das bei Anwahl HW-getaktet die Task bei jeder Iteration getartet und gestoppt wird. Deshalb die Variante1 im Anhang mit der Vermutung das der MAX dies ebenfalls macht..
Mir ist noch etwas aufgefallen und zwar wenn man den
DAQ-Assi einrichtet - Rechtsclick - in NI-DAQmx-Task umwandeln - DAQ-Assi wieder mit OK bestätigen –Rechtsclick auf die Task-Konstante – Code erzeugen – Screenshot 2 wird ein
DAQmx Wait For Next Sample Clock Vi in der While erzeugt.
' schrieb:Von SignalExpress weiß ich, das bei Anwahl HW-getaktet die Task bei jeder Iteration getartet und gestoppt wird.
Eigentlich müsste es da zu Synchronitätsproblemen kommen. Das macht aber nichts, weil:
Zitat:Mir ist noch etwas aufgefallen und zwar wenn man den DAQ-Assi einrichtet - Rechtsclick - in NI-DAQmx-Task umwandeln - DAQ-Assi wieder mit OK bestätigen –Rechtsclick auf die Task-Konstante – Code erzeugen – Screenshot 2 wird ein DAQmx Wait For Next Sample Clock Vi in der While erzeugt.
"Wait For Next Sample Clock " - das klingt doch recht vielversprechend. Werd ich mal suchen und ausprobieren.
[*grübel*]
Obwohl sich dann die Frage stellt, warum es mit einer simuliertes Karte geht, mit einer realen nicht. Außerdem: Wenn sich der DAQmx-Wr nicht an den Sampleclock hält, warum dann dieses Element?
Hinweis:
Der Experte bei NI ist auch noch am Problem lösen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Wait for next Sample clock funktioniert (sofern du nicht noch einen wait timer einbaust in die schleife!). die schoenere loesung waere jedoch, wenn du dir von deinem daq task eine timing source erzeugst und diese an eine timed loop legst (dt = 1)
' schrieb:die schoenere loesung waere jedoch, wenn du dir von deinem daq task eine timing source erzeugst und diese an eine timed loop legst (dt = 1)
Zum Verständnis: wie im Screenshot ?
Außerdem interessieren mich Deine Erfahrungen mit TimedLoops weil einige hier im Forum diese strikt verweigern..
Wenn man den Task direkt an die Timing Source anschließen kann, somit wäre auch eine Synchronisation von mehreren Geräten bzw. Tasks (mittels Synchronize Timed Structure Starts.vi) möglich.
Gibt es da Erfahrungswerte ?
Du hast die falsche timing source function genommen. Diese verwendest du eigentlich nur, wenn du mehrere unterschiedliche TLs synchronisiert starten, takten oder unter der gleichen timing source betreiben willst.
im fall von daqmx verwende daqmx create timing source.
die synchronisation im fall von TLs ist ausschliesslich in software realisiert. wenn du mehrere DAQ karten synchronisieren willst, solltest du eine HW synchronisation ueber PXITRIG or RTSI implementieren.
Ich kann aus meiner Zeit in deutschland sagen, dass ich bei richtiger verwendung noch keine probleme gesehen habe.
07.12.2009, 19:12 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2009 19:13 von IchSelbst.)