Hallo und erstmal alles Gute im Neuen Jahr!
Ich habe jetzt das ganze mal am USB2.0 getestet. Erfolglos...
(16.12.2013 08:54 )Lucki schrieb: Und zwar so: Es wird ein zweiter Puffer auf dem PC angelegt. Der kann recht groß sein, so dass Du z.B die Samples für den gesamten Zyklus mit einem Mal reinschreiben könntest. Der Datentransport zur Karte findet über DMA statt, die "windowsinterrupt-gefährdete" CPU hat damit nichts mehr zu tun. Beim Datentransport zur Karte findet ein Handshaking derart statt, dass der interne Kartenpuffer immer möglichst gefüllt bleibt. Dieses Handshaking, sowie die Konvertierung der parallelen Daten zu USB-Seriell, werden von untergeordneten, in "Echtzeit" arbeitenden Intelligenzen erledigt, die CPU hat damit ebenfalls nichts zu tun.
Fazit: Wenn Die USB-Schnittstelle den Datendurchsatz schafft, dann müsste es funktionieren.
Wähle ich DMA aus, erscheint folgende Fehlermeldung:
Code:
Error -200077 occurred at Property Node DAQmx Channel (arg 2) in AO_rate.vi
Possible reason(s):
Requested value is not a supported value for this property.
Property: AO.DataXferMech
You Have Requested: DMA
You Can Select: USB Bulk, Programmed I/O
Channel Name: NI_USB_6351/ao0
Die Karte scheint also kein DMA zu können?
Mit USB Bulk erhalte ich folgendes:
Code:
Error -200621 occurred at DAQmx Wait Until Done.vi:2
Possible reason(s):
Onboard device memory underflow. Because of system and/or bus-bandwidth limitations, the driver could not write data to the device fast enough to keep up with the device output rate.
Reduce your sample rate, or reduce the number of programs your computer is executing concurrently.
Und schließlich mit Programmed I/O:
Code:
Error -201026 occurred at AO_rate.vi
Possible reason(s):
Data Transfer Mechanism is set to Programmed I/O which is not supported for hardware-timed operations for this device and Channel Type.
Change Data Transfer Mechanism, do not configure Sample Clock timing, or set Sample Timing Type to On Demand.
Also erstmal ganz unabhängig davon, wie sinnvoll diese Übertragungsvarianten für mich sein können, geht genau das, was ihr empfehlt, scheinbar nicht. Lade ich nicht erst alle Daten auf den Kartenspeicher, bevor ich die Ausgabe starte, funktioniert es ab gewissen Sampleraten einfach nicht mehr. Trotz USB 2.0.
Anbei der Vollständigkeit halber mein Test-VI.
Die Antwort des Supports...
Zitat:Die übliche Vorgehensweise zum Ausgeben eines Pegels von 0V nach der Ausgabe ist, wie schon von Ihnen verwendet, das Schreiben einer '0' in DAQmx-Write.
Bei bestimmten DSA-Karten von uns lässt sich der Standardwert der analogen Ausgabe als Eigenschaft festlegen - beim USB-6351 ist dies leider nicht möglich. Hier wird der letzte in den AD-Wandler geschriebene Wert als Gleichspannung beibehalten.
Was man noch überprüfen könnte:
Sie haben gesagt, dass Sie in der Software warten, bis die Ausgabe beendet ist - wie haben Sie diese Abfrage realisiert?
Wenn Sie die Funktion "DAQmx Is Task Done?" oder "Wait until Done" verwenden, müssen Sie beachten dass diese Statusabfrage mit einer Frequenz von 10Hz abläuft - es kann also im schlechtesten Fall 100ms dauern bis die Änderung registriert wird.
Zumindest erstmal die Aussage, dass ich nicht blind war und man einen Stadardwert tatsächlich nicht festlegen kann.
Der Vorschlag zur Abhilfe nützt mir nichts, weil es keine Rolle spielt, ob ich nun ein paar Millisekunden schneller bin oder nicht - ich muss die Null sofort haben. Selbst 1ms ist mir da schon zu lang. Deswegen ja eine Karte mit so hoher Samplerate, um tatsächlich im Bereich 100kS/s ausgeben zu können und den Regler im Prüfstand stabil zu halten.
Habt ihr noch Meinungen zu meinen Ausgabe-Tests? Mach ich noch was falsch?