LabVIEWForum.de
1 Sample (HW-getaktet) - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: 1 Sample (HW-getaktet) (/Thread-1-Sample-HW-getaktet)



1 Sample (HW-getaktet) - IchSelbst - 01.12.2009 19:36

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 inLv86_img1 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.


1 Sample (HW-getaktet) - dimitri84 - 02.12.2009 14:59

Ich will hier nicht einer Koryphäe was erzählen, aber prinzipiell würde mich folgendes interessieren:

' schrieb:..., sich erst dann zu beenden, wenn die Rasterzeit, die im MAX angegeben ist, um ist?

Warum erstellst du den Task im Max und nicht im VI? Gibt's da überhaupt einen Unterschied?



Gruß dimitri


1 Sample (HW-getaktet) - IchSelbst - 02.12.2009 15:56

' 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)


1 Sample (HW-getaktet) - rasta - 05.12.2009 08:14

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.

Vielleicht hilft es Dir.

Gruß
Ralf


1 Sample (HW-getaktet) - IchSelbst - 05.12.2009 11:16

' 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.


1 Sample (HW-getaktet) - thomas.sandrisser - 05.12.2009 18:05

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)


1 Sample (HW-getaktet) - IchSelbst - 05.12.2009 19:31

' schrieb:wenn du dir von deinem daq task eine timing source erzeugst und diese an eine timed loop legst (dt = 1)
Das ist natürlich auch eine Lösung. Ich probier's.

Es sieht also so aus, als ob ein DAQmx-Wr nicht selbst warten würde. Schade. Die NI-CAN-Wr-VIs jedenfalls können das.


1 Sample (HW-getaktet) - rasta - 06.12.2009 12:03

' 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 ?

Gruß
Ralf


1 Sample (HW-getaktet) - thomas.sandrisser - 06.12.2009 22:46

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.


1 Sample (HW-getaktet) - IchSelbst - 07.12.2009 19:12

' schrieb:DAQmx Wait For Next Sample Clock Vi in der While
Damit kann ich gut leben.

' 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)
Laut Fehlermeldung kann meine Karte das nicht. Macht aber mix. Hab mich schon für das DAQmxWaitForNextSampleClock entschieden.