LabVIEWForum.de - Zu großer Zeitversatz bei Signalausgabe

LabVIEWForum.de

Normale Version: Zu großer Zeitversatz bei Signalausgabe
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo!

Ich habe dieses kleine Programm erstellt und habe folgendes Problem. Die Übergabe der Zeit von der Analyse meines ankommenden Signals funktioniert ganz gut und ich über gebe immer den Zeitpunkt meines maximalen Wertes. Der Wert "Time of Maximum" wird richtig an die "Elapsed Time 2" Funktion über geben und ich addiere einen Wert (2) als Verzögerung hinzu, warte dann noch eine Sekunde und gebe dann das Signal für meinen externen Trigger frei. Aber diese Freigabe dauert zu lange und die Zeit ist auch nicht reproduzierbar. Was kann ich da machen?
Das ankommenden Signal ist sinusförmig und hat eine Frequenz von 1Hz.
In dem Bild seht ihr die Ausleseparameter für das ankommende Signal!


I/O Karte PCI 6013

LabVIEW Version 8.0

Danke!
Also die "elapsed Time" wird mir der Zielzeit vorgegeben und nicht mit der Startzeit. Lies mal in der Hilfe nach, was da komisches über "Startzeit festlegen" steht. Daran habe ich mich noch nie vergriffen und ich würde sagen das benutzt kaum jemand. Was mit außerdem auffällt: Nicht 2 verschiedene DAQ-Assistenten für die Ausgabe verwenden. In den Case kommen nur die unterschiedlichen Datenkonstanten rein, der DAQ-Assistent sollte außerhalb liegen, dann brauchst Du auch nicht zwei davon. (Noch besser wäre allerdings, den DAQ-Assistenten nur bei jeder Änderung der Daten aufzurufen)
Mir ist das ganze Konstrukt undurchsichtig. Z.B sehe ich nicht, wo Du, wie Du schreibst, eine "Wartezeit von1 s" hinzufügst. Daß das VI "elapsed Time" niemals wartet, das weißt Du schon?
' schrieb:Also die "elapsed Time" wird mir der Zielzeit vorgegeben und nicht mit der Startzeit. Lies mal in der Hilfe nach, was da komisches über "Startzeit festlegen" steht. Daran habe ich mich noch nie vergriffen und ich würde sagen das benutzt kaum jemand. Was mit außerdem auffällt: Nicht 2 verschiedene DAQ-Assistenten für die Ausgabe verwenden. In den Case kommen nur die unterschiedlichen Datenkonstanten rein, der DAQ-Assistent sollte außerhalb liegen, dann brauchst Du auch nicht zwei davon. (Noch besser wäre allerdings, den DAQ-Assistenten nur bei jeder Änderung der Daten aufzurufen)
Mir ist das ganze Konstrukt undurchsichtig. Z.B sehe ich nicht, wo Du, wie Du schreibst, eine "Wartezeit von1 s" hinzufügst. Daß das VI "elapsed Time" niemals wartet, das weißt Du schon?

Danke für deine Antwort Lucki!
Aber leider bin ich nicht so der Fachmann auf dem Gebiet. Benutzt man die Elapsed Time Funktion nicht dazu durch die Angabe einer Zeit (Start) noch 1 oder beliebige Sekunden zu warten und die folgende Funktion erst nach Ablauf der Zeit zu starten? Da die Funktion nicht wartet addiere ich ja vorher den Wert 2 zu meinem Zeitwert um dem Programm die nötige Zeit zu geben reagieren zu können.

Wie kann ich denn nur ein einziges DAQ_Element für beide Funktionen (analoge Eingabe und digitale Ausgabe) benutzen?
Bin stark frustriert, habe auführlich geantwortet und dann vergessen den "speichern" -Knopf zu drücken.
Also wenigstens ganz kurz:
Ja, die "elapsed time" wartet nicht, sondern gib (u.a.) nur den Status aus, ob die Zeit verstrichen ist oder nicht.
Jedes Warten in der Haupschleife (im Sinne einer zusätzlichen Verzögerung) wäre auch falsch, da Du kontinuierliche Datenerfassung hast. Das funktioniert bei Dir so: Der DAQ-Assistent blockiert, bis wieder 100 Daten im Buffer sind. Bei 100Hz hast Du also eine Schleifendurchlaufzeit von 1s. Die Schleifenwartezeit synchronisiert sich also mit den Daten im Puffer. Wenn Du da noch zusätzliche Warteintervalle einfügst, besteht die Gefahr, daß der Puffer mit der Zeit überläuft.
Zu den DAQ-Assistenten: Selbstverständlich brauchts Du getrennte Assistenten für Input und Output. Aber nicht mehrere Aissistenten für den Zugriff auf die gleiche Hardware(Leitung). Bei Dir scheint das aber gutzugehen, es ist nur unnötig. Bei einmaliger Ausgabe ist wahrscheinlich die ganze Task nach der Ausgabe vergessen, so daß LV gar nicht mitbekommt, daß du mit zwei verschiednen Assitienten auf die gleiche Leitun zugreifst. Aber wenn es LV bemerken würde, dann wäre LV böse auch Dich und würde Dich bestrafen O
Vielen Dank schon mal für deine Mühe! Ärgerlich wenn man die Daten nicht speichert, passiert mir auch häufiger.

Hast du vielleicht eine Idee wie ich das Problem umgehen könnte, ohne einen direkten Zeitvergleich oder vielleicht einen ganz anderen Ansatz? Ich bekomme so einfach kein annehmbares Signal (zeitlich) für meinen externen Kameratrigger. Im Grunde müsste das doch einfacher gehen, da ich mein Eingangssignal (konstant 1Hz) sauber analysieren kann und den Zeitpunkt des Maximums kenne. Ich möchte eine oder zwei Schwingungen später zum gleichen Zeitpunkt (Maximum) ein Bild machen also ein Signal an meinem Trigger schicken. Die Zeitverzögerung die durch die Laufzeit des Signals und die Verarbeitung des Triggers entstehen sind sehr sehr klein.#

Danke!
Referenz-URLs