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 folgende Frage:
Ich habe ein Programm gebastelt welches Daten einer NI PCI 44-61 - Karte mit DAQ-mx einließt und auch wieder ausgiebt (vorerst unbearbeitet). Dies soll möglichst in Echtzeit geschehen, also Idealfall wäre Einlesezeitpunkt eines Samples gleich dem Ausgabezeitpunkt. Dass das so nicht geht ist mir klar. Die
Frage wäre welche Zeitverzögerungen realistisch sind?
Ich komme im Moment auf 150 - 200 ms Zeitverzögerung zwischen Ein- und Ausgabesignal. Wenn ich diesen Wert nicht verbessern kann kann ich nur mit einem FPGA-board weitermachen, das würde ich beim aktuellen Entwicklungsstatus aber gerne noch vermeiden.
Vielen Dank schonmal fürs Antworten und Grüße, Martin
Das VI könnte ich morgen mal hochladen. Die Systemlast ist nicht sehr hoch, vielleicht 20%. Kompilieren als ausführbare Exe-datei bringt auch nichts. Gabs nicht auch irgendne Möglichkeit mit der ich Schritt für Schritt rausfinde an welchem Punkt des VIs die Zeit verloren geht?
11.08.2010, 08:40 (Dieser Beitrag wurde zuletzt bearbeitet: 11.08.2010 08:46 von Lucki.)
' schrieb:Gabs nicht auch irgendne Möglichkeit mit der ich Schritt für Schritt rausfinde an welchem Punkt des VIs die Zeit verloren geht?
Ja, schon, aber das nützt Dir hier nichts, denn hier liegt ein grundsätzlicher Programmier- (oder sogar Denk-) fehler vor. Denn die Verzögernung könnte nicht nur "schneller vonstatten gehen", wie Schrotti schreibt, sondern sie kann, wenn gewünscht, auch Null sein. Bei DAQmx gibt es Beispiele zur Synchronisation von Input und Ortput, bei denen das so ist. Es verstößt ja keineswegs gegen ein Kausalitätsprinzio, wenn Input und Output gleichzeitig getriggert werden, und das funktioniert normalerweise mit jeder Karte.
' schrieb:Ja, schon, aber das nützt Dir hier nichts, denn hier liegt ein grundsätzlicher Programmier- (oder sogar Denk-) fehler vor. Denn die Verzögernung könnte nicht nur "schneller vonstatten gehen", wie Schrotti schreibt, sondern sie kann, wenn gewünscht, auch Null sein. Bei DAQmx gibt es Beispiele zur Synchronisation von Input und Ortput, bei denen das so ist. Es verstößt ja keineswegs gegen ein Kausalitätsprinzio, wenn Input und Output gleichzeitig getriggert werden, und das funktioniert normalerweise mit jeder Karte.
Ja aber da ich die Daten welche ich Einlese bearbeite und auch wieder ausgebe muss es doch eine Verzögerung geben, meiner Meinung nach im besten Falle so groß wie das Messfenster, also 1/Abtastrate*Sampleanzahl.
Am besten ich lade gleich mal mein VI hoch. Es ist wirklich ein bisschen zum verzweifeln. Ich finde einige Beispiele mit synchroner Ein- und Ausgabe aber keines davon wo die Eingabewerte wieder ausgelesen werden, die Datenstreams sind sonst quasi immer unabhängig voneinander, bei mir aber nicht.
noch zur Erkärung: Das Problem ist meiner Meinung nach:
Beim Lesen ist die Reihenfolge: Channel u. Task konfigurieren --> Task starten --> DaqMx-Lesen
Beim Schreiben ist die Reihenfolge: Channel u. Task konfigurieren --> DaqMx-Schreiben --> Task starten, danach wieder DaqMx-Schreiben
Wenn ich nun beide Tasks synchronisiert starte, weiß der Schreiben-Task beim ersten mal noch gar nicht was er schreiben soll. Dafür habe ich quasi ein Dummy-signal eingebaut. Das ergibt den gleichen Effekt von der Verzögerung her wie wenn ich das DaqMx-Lesen an den Eingang des ersten Schreiben-tasks anklemme.
Hoffe das verdeutlicht mein Problem ein bisschen, wenn nicht bitte nachfragen.
Viele Grüße, Martin
12.08.2010, 16:49 (Dieser Beitrag wurde zuletzt bearbeitet: 12.08.2010 16:49 von macoio.)
hat keiner eine Idee? Ich beschreib das Problem auch noch genauer wenn das noch nicht klar rübergekommen ist.
Die Fragestellung lässt sich eigentlich auf: Wie mache ich eine Echtzeitverarbeitung mit Ein- und Ausgabe ein und derselben Daten. Dazu gibt es keine LabView - Beispiele im Beispielexplorer, bei allen mir bekannten Beispielen werden nicht die eingelesenen sondern andere Daten ausgegeben, dass macht aber gerade die Schwierigkeit aus.
Habe mich hier herausgehalten, weil mir das VI verdrahtuns- und dimensionsmäßig zu unübersichtlich ist, und ich habe nur einen 1280*1024 Monitor. Laut schreiende Hilfstexte in riesengroßen Lettern gehen bei mir eher weniger gut ins Hirn rein als eine normale Größe.
Habe den Verdacht, daß die DAQmx-Tasks bei jedem Schleifendurchlaf immer beendet und neu initialisiert werden, bin mir aber nicht sicher. Wenn ja, würde das die beanstandete Langsamkeit gut erklären.
hm ok, ich lad morgen nochmal ne komprimierte geordnete Version hoch. Die Tasks werden erst bei Programmbeendung gestoppt und gelöscht, daran kann es nicht liegen. Ich denke das es irgendwie an der Adressierung des Puffers der Karte liegt aber ich komm nicht dahinter.