mit einem 1D waveform bekomme ich nun beide Signale separat in einem Diagramm angezeigt.
Ich benötige dennoch beide Signale als Zahlenwert da ich mit diesen weiter rechnen muss. Ich kann das Signal nicht aufteilen und seperat als INT anzeigen lassen.
Hallo braendy,
Zitat:mit einem 1D waveform bekomme ich nun beide Signale separat in einem Diagramm angezeigt.
Stell zurück auf "2D array"…
Schalte beim Chart das "Transpose" im Kontextmenü wieder aus…
Zitat:Ich benötige dennoch beide Signale als Zahlenwert da ich mit diesen weiter rechnen muss.
Man kann auch mit Waveforms rechnen…
Zitat:Ich kann das Signal nicht aufteilen und seperat als INT anzeigen lassen.
Um ein Array "aufzuteilen", verwendet man IndexArray.
Und DAQmx liefert dir im Normalfall keine INT-Werte, sondern immer DBL: wieso willst du hier INT anzeigen lassen?
Oje. Ich habs fast befürchtet. Bin grade nämlich selbst ins gleiche Problem gerannt mit dem ich nicht gerechnet hatte. Kann mir einer erklären warum das für AIs offenbar gilt, für AOs aber nicht? Weird.
Weil meine Architektur darauf ausgerichtet ist, dass ich einfach für jeden In bzw. Out einen eigenen Task im Programm bauen lasse und anschließend zur Entkopplung der Hardwarezugriffe pro device einfach sequentiell lesen wollte, ist das in meinem Fall auch etwas weniger einfach zu beheben (wobei mir grade ne erste Idee kommt, dass kann eventuell mein Daq Device Objekt erledigen nachdem die AI Channel übergeben worden sind; tasks wieder killen und nochmal neu als SammelAI erstellen den ich dann nutzen kann; ich weis etwas unsauber aber vermutlich das was sich mit begrenztem Aufwand umsetzen lässt). Anyway:
Ich habe grade mal getestet wie performant der Autostart der Tasks ist der offenbar auch problemlos funktioniert. Hier komme ich bei single channel readout einer Analogspannung auf einem NI USB 6001 bei dem ich alle 8 Kanäle auslesen auf um die 20ms Ausführungszeit auf meinem Rechner. Da ich "nur" mit 100-200ms pollen will sollte das wahrscheinlich ausreichen, so dass ich die Änderung für bessere Performance zur Not auch noch später machen kann.
Im wesentlichen daher zur Info für alle die eine "teilweise" Lösung für das Problem interessiert:
Task einfach nicht starten und stattdessen den "Autostart" das ganze erledigen lassen. NI behauptet selbst das das nicht besonders performant ist, da dann für jeden Read der Task gestartet und gestoppt werden muss. Das verhindert dadurch die Zugriffsverletzung um die es im Thread geht, ohne ein zusammenfassen der Kanäle notwendig zu machen. Für meine Zwecke ist es vermutlich sogar hinreichend performant die konkrete Performance in eurem Fall müsst ihr wahrscheinlich austesten.
Angehängt ein Snippet des Programs das ich zusammengeschossen habe für den (Ausführungszeit-)Test zur Weiterbenutzung. Bitte zerreist mich nicht in der Luft weil ich nix groß anders benannt habe. Das x-y Output gibt euch nen Average über alle Messungen. Nen aktuellen wert könnt ihr ebenfalls jederzeit weiter vorne im Wire exportieren. Das Array war nur um zu sehen das auch wirklich was gelesen wird, die zwei Fehlerstati um zu sehen ob was schief geht. Ausgelesen werden einfach alle vorhandenen AI Kanäle des NI USB 6001 nach vorheriger Konfiguration, ohne expliziten Task Start.
*edit sagt: Es betrifft natürlich deswegen nur die AIs weil die alle über den gleichen Multiplexer laufen. Demzufolge ist der busy wenn auch nur ein AI task gestartet wird.