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 möchte gleichzeitig analoge und digitale Signale aufzeichnen und die Messung mit einem Reference Trigger starten. Dann möchte ich mir die Werte vor und nach dem Trigger anschauen.
Benutze LabVIEW 8.6 und PXI 6254.
Ich habe folgendes Problem:
Nachdem der Trigger ausgelöst hat sind die beiden Graphen nicht synchron, das heißt die X-achsen stimmen zeitlich nicht überein.
Wenn ich das ganze ohne Trigger laufen lasse, funktioniert es.
ich vermute mal ein wenig, aber ich denke, meine Vermutung stimmt:
Der Ablauf im Pretrigger-VI ist folgendermaßen:
1. Du definierst beide Tasks (AI & DI).
2. Du definierst, dass der DI-Task mit der "Sampleclock" vom AI-Task laufen soll.
3. Du startest den DI-Task, der jetzt auf die Sampleclock vom AI-Task wartet.
4. Du startest den AI-Task im Pretrigger-Modus.
5. Und jetzt kommen wir zu deinem Denkfehler und meiner Vermutung: Mit Start des AI-Task wird der AI-Sampletakt gestartet. Dies muss so sein! Schließlich muss der AI-Task ab diesem Zeitpunkt Daten aufnehmen und puffern, denn woher soll die DAQ-Karte "wissen", wann der Trigger kommt. Erst wenn der Trigger kommt, werden diese gepufferten Daten endgültig der DAQmx-Read dem Enduser zur Verfügung gestellt. Da aber der AI-Sampletakt schon lief, hat natürlich der DI-Task ab Start des AI-Task (und nicht ab Start des Pretriggers) seine Daten aufgezeichnet und ist schon längst fertig.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Hallo,
gibt es eine Möglichkeit den DI-Task mit dem AI-Task zusammen mit dem Pretriggersignal starten zu lassen?
Kann man das Pretriggersignal aus dem Trigger-VI irgendwie verwenden?
' schrieb:Hallo,
gibt es eine Möglichkeit den DI-Task mit dem AI-Task zusammen mit dem Pretriggersignal starten zu lassen?
Kann man das Pretriggersignal aus dem Trigger-VI irgendwie verwenden?
Gruß Daniel
Das hängt m.M. von der Hardwarekarte ab. Bei tuereren Karten wird das Analogtriggern in Hardware getan und dann kannst Du den entsprechenden Analogtrigger des AI Tasks als Starttrigger für die DI Funktion programmieren. Bei billigeren Karten wird der analoge Trigger erst in Software im Rechner gemacht und dann gibt es keine hardwaremässige Art um diesen Trigger als Starttrigger des DI Tasks zu verwenden. Und in Software wirst Du immer schnell mal einige ms oder mehr Delay erhalten.
Bei billigeren Karten sehe ich als einzige Möglichkeit, selber eine externe analoge Triggerschaltung zu machen.
' schrieb:Hallo,
gibt es eine Möglichkeit den DI-Task mit dem AI-Task zusammen mit dem Pretriggersignal starten zu lassen?
Kann man das Pretriggersignal aus dem Trigger-VI irgendwie verwenden?
Gruß Daniel
Da die Zuordnung der Beispiele im NI-Examplefinder zu den Hardwarefähigkeiten einer NI-DAQ-Karte sehr gut ist, sieht es für mich nicht so aus, als ob du einen Digital-In bei der 6254 triggern kannst.
Möglicher (theoretischer, da nicht getester) Workaround: Du bleibst bei deinem Bsp. syndigitalanalogtrigger.vi, die Digital-In-Erfassung stellst du aber auf kontinuierlich um, die Daten sammelst du auf. Abbruch dieser DI-Erfassung, wenn Analog-In fertig ist.
Jetzt suchst du dir aus den erfassten DI-Daten die zur Analog-In passenden Werte heraus, schließlich hast du alle Werte seit Start des Analog-In-Tasks.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' schrieb:Das mit der kontinuierlichen Erfassung des DI kann ich leider nicht machen, da die Messung über Wochen andauern kann bis der Trigger auslöst.
Ui, Wochen, bis der Trigger auslöst..., und was macht das Programm währenddessen?;)Egal.
OK, noch mal meine Idee etwas ausbauen: Wieviele Messwerte vor Auslösung des Triggers und wieviele Messwerte nach Auslösung des Triggers nimmst du auf? Denn das ist die maximale Größe einen Puffers, die du für eine kontinuierliche DI-Erfassung vorsehen müsstest. D.h., du musst dir eigentlich nicht alle DI-Daten merken, sondern immer nur die Puffergröße. Ob so was viel Rechenzeit beansprucht, müsste man mal ausprobieren, wobei das sicher auch von der Sample-Rate abhängt (was sind da typische Werte).
' schrieb:Gibt es sonst keine Möglichkeit über die Software die digitale Erfassung mit dem Trigger der analogen Erfassung zu starten?
Ich habe erst mal keine Idee. Das Problem ist dein "Pretrigger"-Modus: Du willst ja auch einige Daten vor Auslösen des Triggers haben. Aber an die kommst du NUR dran, wenn sowohl Analog-In als auch Digital-In (zumindest im Hintergrund) immer laufen und Daten aufnehmen. Denn wie soll man sonst an Werte vor Auslösen des Triggersignals kommen? Zeitreisen in die Vergangenheit sind nach Einstein nicht möglich.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Zitat:Ui, Wochen, bis der Trigger auslöst..., und was macht das Programm währenddessen? Egal.
Wie meinst du das? Ich dachte das Programm läuft im Hintergrund und wenn der Trigger auslöst startet die eigentliche Messung.
Zitat:OK, noch mal meine Idee etwas ausbauen: Wieviele Messwerte vor Auslösung des Triggers und wieviele Messwerte nach Auslösung des Triggers nimmst du auf? Denn das ist die maximale Größe einen Puffers, die du für eine kontinuierliche DI-Erfassung vorsehen müsstest. D.h., du musst dir eigentlich nicht alle DI-Daten merken, sondern immer nur die Puffergröße. Ob so was viel Rechenzeit beansprucht, müsste man mal ausprobieren, wobei das sicher auch von der Sample-Rate abhängt (was sind da typische Werte).
Ich nehme 500 Samples vor und 500 Samples nach Auslösung des Triggers auf. Typische Samplerate ist 10-50 kHz.
An das Problem mit der Rechenzeit habe ich gar nicht gedacht! Ich habe mir Sorgen um die Fesplattenkapazität gemacht. Wenn ich mehrere Tage kontinuierlich messe kommen da doch einige GB an Daten zustande?
Zitat:Ich habe erst mal keine Idee. Das Problem ist dein "Pretrigger"-Modus: Du willst ja auch einige Daten vor Auslösen des Triggers haben. Aber an die kommst du NUR dran, wenn sowohl Analog-In als auch Digital-In (zumindest im Hintergrund) immer laufen und Daten aufnehmen. Denn wie soll man sonst an Werte vor Auslösen des Triggersignals kommen? Zeitreisen in die Vergangenheit sind nach Einstein nicht möglich.
Mal angenommen ich lasse Analog-In und Digital-In immer laufen und Daten aufnehmen. Gibt es eine Möglichkeit nicht alle Daten des Digital-In zu speichern sondern z.B. ein paar Puffergrößen vor dem Trigger und ein paar Puffergrößen nach dem Trigger? Wie kann man dem Digital-In nach Auslösen des Triggers mitteilen das die Messung beendet ist?
Gruß Daniel
30.07.2009, 20:03 (Dieser Beitrag wurde zuletzt bearbeitet: 30.07.2009 20:04 von rolfk.)
' schrieb:Wie meinst du das? Ich dachte das Programm läuft im Hintergrund und wenn der Trigger auslöst startet die eigentliche Messung.
Ich nehme 500 Samples vor und 500 Samples nach Auslösung des Triggers auf. Typische Samplerate ist 10-50 kHz.
Das ist eine gute Idee!
Zitat:An das Problem mit der Rechenzeit habe ich gar nicht gedacht! Ich habe mir Sorgen um die Fesplattenkapazität gemacht. Wenn ich mehrere Tage kontinuierlich messe kommen da doch einige GB an Daten zustande?
Aber wer sagt denn dass Du alles auf die HD schreibst? Das machst Du eben nicht!
Zitat:Mal angenommen ich lasse Analog-In und Digital-In immer laufen und Daten aufnehmen. Gibt es eine Möglichkeit nicht alle Daten des Digital-In zu speichern sondern z.B. ein paar Puffergrößen vor dem Trigger und ein paar Puffergrößen nach dem Trigger?
LabVIEW ist eine vollumfängliche Programmiersprache. Da gibts grundsätzlich nichts was man nicht programmieren kann. Was Du einfach machen musst ist eine kontinuierliche Datenerfassung wo Analog und Digital synchronisiert sind. Dann liest Du jeweils beide Tasks regelmässig in einer Loop ein und schreibst die Daten in einen Buffer (Schieberegister) und untersuchst den analogen Eingang nach der Triggerkondition. Wenn der Trigger auftritt dann schreibst Du die vorigen Daten aus dem Buffer und die aktuellen Daten auf die Disk und machst eventuel noch einen oder mehrere weitere Loopdurchläufe wo Du alles zur Disk schreibst und danach verlässt Du die Loop und machst ein Task Stop und Task Clear sowohl auf der analogen als auch digitalen Task.
Zitat:Wie kann man dem Digital-In nach Auslösen des Triggers mitteilen das die Messung beendet ist?
Mit Task Stop (und ordnungshalber Task Clear) wie open erwähnt.
Zitat:LabVIEW ist eine vollumfängliche Programmiersprache. Da gibts grundsätzlich nichts was man nicht programmieren kann. Was Du einfach machen musst ist eine kontinuierliche Datenerfassung wo Analog und Digital synchronisiert sind. Dann liest Du jeweils beide Tasks regelmässig in einer Loop ein und schreibst die Daten in einen Buffer (Schieberegister) und untersuchst den analogen Eingang nach der Triggerkondition. Wenn der Trigger auftritt dann schreibst Du die vorigen Daten aus dem Buffer und die aktuellen Daten auf die Disk und machst eventuel noch einen oder mehrere weitere Loopdurchläufe wo Du alles zur Disk schreibst und danach verlässt Du die Loop und machst ein Task Stop und Task Clear sowohl auf der analogen als auch digitalen Task.
Das sind ein paar sehr gute Ideen.
1. Problem: Ich weiß aber nicht wie ich die Daten aus dem Puffer auf die HD speichere die vor dem Trigger vorhanden sind? Ich habe nur die aktuellen Daten ab dem Trigger gespeichert. Denn die Messung beginnt ja erst wenn der Trigger auslöst.
2. Problem: Bei der digitalen Erfassung gehen bei der Speicherung die Zeitinformationen verloren. Bei der analogen Erfassung sind die Zeitinformationen noch vorhanden.