(15.07.2014 10:29 )Magneto schrieb: (15.07.2014 07:04 )cb schrieb: Jeden Datenblock der reinkommt wertest du aus, ob sich der Encoder-Wert geändert hat. Wenn ja bleibt der Encoder-Wert und die AI-Werte im Array, wenn nicht werden die Werte übersprungen. Dabei kommt dann am Ende ein Array raus, das nur die Werte enthält, bei denen ein "Encoder-Tic" aufgetreten ist.
Fragt man dabei den Encoder nicht wieder Einzelwertweise ab, was wieder sehr langsam sein würde?
ich hab's jetzt nicht mit deiner Messkarte getestet, aber normalerweise macht man das unter DAQmx so:
man erstellt einen continuierlichen AI-Task und einen continuierlichen Encoder-Task, bzw. in deinem Fall würde ich nur die (z.B.) steigenden Flanken zählen. Als gemeinsamen Mess-Takt verwendet man den AI-Takt, der wiederum von der internal Clock abgeleitet wird. Der AI Task schickt einen Trigger raus (intern) wenn er gestartet wird und den verwendet man wiederum als Start-Trigger für den Counter-Task.
In den Beispielen musst du also nach folgendem suchen:
1. AI-Task erstellen - das hast du ja schon hin bekommen
2. AI-Timebase exportieren
3. einen getriggerten continuierlichen Flanken-zähl-Task erstellen mit einem Counter erstellen und der als Sample-Clock die AI-Timebase verwendet
4. den AI-Start-Trigger verwenden - muss ggf. geroutet werden mit den Routing VIs - sollte aber auch "so" gehen, weil alles auf einem Board läuft ...
Das wurschdelst du alles zusammen (ja, ist tricky ...) und du bekommst continuierliche DAQmx-Erfassungs-Tasks, der eine liefert dir die Spannungen vom analogen Eingang und der andere liefert dir SYNCHRON DAZU den Zähler-Stand des Flanken-Zähl-Tasks.
Anschaulich formuliert: bei einer Sample-Rate von 1 kHz für den Analogen Task bekommst du vom AI-Task ein n*1000 (n=Anzahl der Kanäle) Samples Array pro Sekunde zurück und vom Flanken-Zähler-Task bekommst du ein 1D-Array mit 1000 Werten, mit den Zähler-Ständen zum Sample-Zeitpunkt zurück. Damit kannst du im Rahmen deiner Auflösung im Post-Processing jeweils ein analoges Sample einem Zähler-Stand zuordnen, bzw. - wie oben bereits angedeutet - eine quasi-winkelsynchrone Abtastung (mit variabler Sample-Rate) ausrechnen. ==> also nix mit software-Timing oder Einzelwert-Abtastung ...
Man kann mit DAQmx ganz wilde Sachen machen wenn man will
- wobei man jetzt auch sagen muss, dann man meiner Meinung nach am besten mit einem cRIO fährt wenn man eine winkelsynchrone Abtastung programmieren will.
Wenn dir die Methode von Gerd lieber ist, dann müsstest du mal im Example-Finder nach "AI" und "external Clock" suchen, oder so ähnlich.
viele Grüße
cb