Hallo zusammen,
ich habe bei NI
ein Dokument gefunden, das einiges bzgl. der Funktionsweise des CompactDAQ erläutert.
Dort steht auf Seite 7 grob, wie die Übertragung funktioniert (der Text lässt sich leider nicht hier her kopieren).
Mich würde folgendes zur Datenübertragung interessieren:
Nehmen wir als Beispiel das Einlesen über DAQmx mit einer Frequenz von 50 Hz und einer Sample-Anzahl von 10.
Was passiert vom Erzeugen eines Tasks bis zur Festlegung der Samplerate?
Meine Vermutung: Diese Konfigurationsdaten werden an das CompactDAQ übertragen, damit dieses im Endeffekt für den entsprechenden Kanal initialisiert wird.
Was passiert beim manuellen Starten des Tasks (SubVI "Task starten")?
Meine Vermutung: Das CompactDAQ beginnt, die Messdaten zu erfassen.
Nur wohin werden diese geschrieben? In einen RAM des CompactDAQ oder werden diese zum PC gestreamt bzw. alle 10 Werte erfolgt die Übertragung "als Paket" zum PC bzw. in dessen RAM?
Was passiert beim Auslesen (SubVI DAQmx - Lesen") im Modus "kontinuierlich"?
Meine Vermutung:
Sollten die Daten im CompactDAQ-RAM gepuffert werden, werden von dort 10 Werte abgeholt und an den PC übertragen.
Sollten die Daten laufend gestreamt und im PC-RAM gepuffert werden, werden vom PC-RAM 10 Werte ausgelesen, sobald diese verfügbar sind.
Was passiert beim Auslesen (SubVI DAQmx - Lesen") im Modus "endliche Anzahl"?
Meine Vermutung: Der PC schickt dem CompactDAQ ein Signal, dass 10 Messwerte erfasst werden sollen. Daher dauert der Vorgang recht lang im Vergleich zum kontinuierlichen Einlesen, wo diese Übertragung der "Trigger-Daten" nur einmal statt findet. Diese Messwerte werden daraufhin erfasst und entweder sofort gestreamt oder erst, wenn alle Werte erfasst wurden.
Ein fortlaufendes Streamen, sodass die Werte direkt im PC-RAM landen, kann ich mir nicht vorstellen. Speziell bei Abtastfrequenzen von 200 kHz. Ich vermute, das packt USB nicht. Daher kann ich mir nur vorstellen, dass die Werte generell "als Block", d.h. die Anzahl der angeforderten Werte auf einmal überträgt (im oberen Beispiel 10).
Was passiert, wenn ich die Werte langsamer Verarbeite als sie eingelesen werden?
Meine Vermutung: Die ältesten gepufferten Werte (entweder im CompactDAQ-RAM oder im PC-RAM) werden mit den neuen überschrieben (oder aus einer Art Stack herausgeschoben). Sie stehen nicht mehr zur Verfügung.
Der DAQmx-Treiber registriert, dass diese Werte neuer sind als die angeforderten und meldet daher den Fehler, dass die Daten nicht mehr zur Verfügung stehen.
Könnt ihr mich aufklären?