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 habe einen AO mit Finite Samples konfiguriert, wobei die Samplezahl größer als die im DAQmx-Write-VI übergebene Samplezahl ist. Also beispielsweise sollen insgesamt 1000 Samples ausgegeben werden, in den Puffer geschrieben werden aber nur 100. Dann wird diese Sequenz eben 10x wiederholt.
Sinn des ganzen: meine Karte ist recht flott, mehrere hundert kS/s, die ich auch nutzen muss. Der Puffer der Karte kann aber nur 8000 Samples speichern. Deswegen generiere ich nur eine Periode des Signals und lass die Karte die komplette Messsequenz zusammenbauen.
Nun habe ich aber ein Problem: ganz am Schluss muss der Kanal sofort Null sein. Bisher warte ich, bis die Ausgabe beendet ist und schreibe dann Null in den DAQmx-Write. Das ist zu langsam. Inzwischen macht dann meine Reglerschaltung am Prüfstand unschöne Dinge. Nun kann ich aber auch nicht einfach das letzte Sample meiner Sequenz zu Null machen, weil ja dann diese Null in jder erzeugten Periode drin wäre - ich brauche sie ja nur am Ende.
Gibt es eine Option, der Karte zu sagen, dass sie alle Kanäle auf Null setzen soll, wenn die Ausgabe beendet ist? Oder fällt euch eine andere Lösung ein?
Das war nur ein anschauliches Beispiel. Vielleicht bisschen unglücklich in dem Zusammenhang.
Tatsächlich sieht es eher folgendermaßen aus:
- gleichzeitige Ausgabe von 2 Kanälen, also nur 4000 Samples pro Kanal im Puffer
- Ausgabe z.B. mit 100kS/s für 1s bis 2s
- Signal z.B. mit 50Hz, d.h. 20ms Periodendauer
- wenn ich also für jeden Kanal je eine Periode in den Puffer schreibe, belege ich bereits 2 * 20ms * 100kS/s = 4000 Samples
Ich könnte also in dem speziellen Fall auch zwei Perioden schreiben, aber sicher keine (2s * 50Hz =) 100 Perioden.
Wenn ich auf unter 50Hz gehe, passen nicht mal zwei Perioden rein.
Ich komme also nicht drum herum, für eine lange Sequenz nur eine Periode zu übertragen. Und doch muss das letzte Sample zwingend Null sein, ohne dass diese Null am Ende von jeder Periode der Sequenz auftaucht...
Die ultimativ richtige Lösung wäre natürlich, den Sample-Modus auf "nicht regenerativ" umzustellen. Dann mußt Du allerdings ständig Daten in DAQmxWrite nachschieben. Und die wären antürlich immer gleich, ausgenommen beim letzten Mal. Aber offenbar wolltest Du genau das vermeiden. Warum? Hast Du vielleicht ein USB-Modul und du glaubst, die Schnittstelle schafft den Durchsatz nicht? Hast Du es denn überhaupt mal probiert?
Andere Möglichkeit: Man kann ja auch die ganze Karte rücksetzen, dann sind alle Ausgangspannungen Null. Allerdings braucht das vermutlich seine Zeit und ist deshalb nicht geeignet. Aber probieren geht über studieren..
du triffst mit allem genau ins Schwarze.
Ich schaffe es nicht, so schnell den Puffer immer wieder aufzufüllen. Das habe ich schon probiert. Ich habe ein USB-Modul, aber selbst bei PCI-Karten könnte ich mir das schwer vorstellen. Das ist rein schon in der Software schwierig, diese Datenmengen bereitzustellen.
Das Karte-Rücksetzen mache ich im Moment (bzw. schreibe ich eine Null in den Ausgang). Das dauert etwa 30ms und diese Zeit reicht schon, den Prüfstand in einen Zustand zu versetzen, der potentiell gefährlich werden kann. Das ganze System ist hochdynamisch, ich brauche also wirklich eine Null größenordnungsmäßig innerhalb meiner Samplezeit (1 / 100kS/s = 10us).
Ich muss sagen, es wundert mich, dass es die Option nicht zu geben scheint, die Karte standardmäßig immer auf Null zu ziehen, sobald keine Werte ausgegeben werden sollen. Das wäre sogar das erwartete Normalverhalten. Auch nach vielen Jahren LabVIEW stolpere ich immer wieder über diesen Effekt, bisher hatte er nur noch nie so krasse Auswirkungen für mich. Und es wundert mich auch, dass offenbar sonst niemanden dieses Verhalten stört, ich finde zumindest nicht wirklich Inhalte dazu im Netz.
(13.12.2013 10:21 )monoceros84 schrieb: Ich muss sagen, es wundert mich, dass es die Option nicht zu geben scheint, die Karte standardmäßig immer auf Null zu ziehen, sobald keine Werte ausgegeben werden sollen. Das wäre sogar das erwartete Normalverhalten.
Da gebe ich Dir Recht, so exquisit ist diese Forderung nicht. Aber auch wenn das nicht zu gehen scheint: vielleicht gibt es einen Trick, von dem wir nichts wissen. Bevor Du aufgibts, würde ich jedenfalls die versammelte Intelligenz von NI mal befragen.
Edit: Lese gerade in der Spezifikation: "Formfaktor: USB". Heißt das nicht im Klartext, dass es sich um das Uralt- USB handelt, und nicht um USB2 oder USB3? Dann wundert mich nichts mehr!
Ich habe dem NI Support geschrieben und hoffe nun, vielleicht doch noch was rauszufinden.
Ich vermute mal, die Karte selbst ist im USB2-Standard. Zumindest poppt die Windows-Meldung bei mir auf, dass die Hardware eine höhere Leistung erzielen könnte, wenn sie an einen USB2-Port gesteckt würde. Der PC hat nämlich selbst leider nur USB1.1 - einerseits aus bürokratischen Gründen und zum zweiten, weil dort eine PCI-Messkarte noch drin steckt, die in moderne PCs allein aufgrund ihrer Größe gar nicht reinpassen würde (und das, obwohl sie neu ist). Bevor die Frage kommt, die lässt sich so einfach nicht austauschen, das sind 4 Kanäle simultan (4 AD-Wandler) mit bis zu 3MS/s.
Klar, man könnte jetzt noch mit USB2-PCI-Karten testen. Aber das verschiebt mir höchstens die machbare Grenze etwas. Spätestens wenn ich an die Messbereichsgrenzen gehen will, AO mit 1MS/s pro Kanal zur Generierung von Spannungen im kHz-Bereich und Messzeiten von unter 100ms (für vergleichbare Periodenzahlen wie im Beispiel oben), dann kommt die Software nicht mehr hinterher - unabhängig vom verwendeten USB-Standard.
Deinen Pessimismus kann ich nicht verstehen. Immerhin erhöht sich der Netto-Datendurchsatz bei USB 2 gegenüber USB 1 von unter 6.6 auf bis 280 Mbit/s - das müßte doch locker reichen. Und eine USB2.0 PCI Karte gibt es für 2.95 Euro - daran wirds doch auch nicht scheitern.