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