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!
als LV-Neuling habe ich hier schon viel gelesen, was mir auch sehr weitergeholfen hat. Jetzt komme ich aber leider doch nicht weiter und muss mal konkret nach Hilfe fragen.
Also ich möchte mit dem Programm die Hardware NI usb 4431 wie folgt ansteuern: Ausgabe eines (Sinus)Signals über den AO und Erfassung der Signale der Eingänge Ai0 bis Ai3.
Die Idee dahinter ist, das bei späterer Anwendung überprüft werden soll, wieviel von dem Ausgangssignal an den Eingängen "ankommt". Um Rauschen zu minimieren, soll die Messung einer Sinuskurve n-mal erfolgen und die Signalverläufe dann jeweils gemittelt werden. Das habe ich soweit alles hinbekommen. Jetzt zu dem Problem: Bei den Testläufen, bei denen ich die Eingänge direkt mit dem Ausgang verbunden habe, hat sich gezeigt, dass zwischen Beginn der Ausgabe und Erfassung der Eingänge ein Delay vorhanden ist. Ich meine damit, dass die Erfassung der Eingänge nicht bei t_0 und 0V beginnen, sondern die Sinuskurven verschoben sind (siehe 2. Bild).
Wie man bei Bild 1 sieht, ist bei der ersten Messung anscheinend noch kein Ausgangssignal vorhanden, wenn die Messung beginnt und daher kommt dann die Verschiebung.
Ich hoffe das war jetzt einigermaßen verständlich. Also, ich möchte eigentlich "nur", dass wenn ich auf "Messung starte" drücke, n-mal mein kontinuierliches sinus-Signal gemessen wird und die Messung im "Startpunkt" der Sinuskuvre beginnt.
Ach so, durch das Triggern habe ich immerhin erreicht, dass diese Verschiebung konstant ist.
Dazu kann ich nur eines empfehlen:
Die Beispiele unter
Signalerfassung mittels Hardware / DAQmx / Synchronisation
studieren. Das Beispiel heraussuchen, welches Deiner Anwendung am nächsten kommt und das vorsichtig Schritt für Schritt an Deine Anwendung anpassen.
Auf eigene Faust vorzugehen hat keine Chance, denn es gibt für DAQmx keine detaillierte schriftliche Dokumentation, weder bei NI noch in irgend einem Lehrbuch.
Wenn Du zu den Beispielen Fragen hast, helfe ich gern. Du solltes aber außerdem 2 Tage Lernzeit einplanen für das Beipielstudium. Die Synchronisation ist nichts für Anfänger, es ist eher die hohe Schule.
Wenn A und B synchronisiert werden, dann ist das Prinzip z.B: A wird gestartet, sampled aber noch nicht, da es den Sample-Takt von B erhält. Wenn dann B mit seinem eigenen internen Sample-Takt gestartet wird, läuft genau A synchron mit B. Bei Dir sehe ich die beiden Starts gleichzeitig, da ist also schon etwas faul.
@Lucki: Die Beispiele hatte ich mir schon angeschaut und mich da am "Multi-Function-Synch AI-AO.vi" orientiert. Da Sind die beiden Starts ja auch gleichzeitig bzw. nicht sequenziell. Diesbezüglich hatte ich aber auch schon herumporbiert und auch wenn ich die Starts nacheinander in Sequenzrahmen starte (1. Bild), tritt das Delay-Problem auf. Ich hab eben nochmal ins "Multi-Function-Synch AI-AO.vi" reingeschaut, das einzige Wesentliche was ich da nicht übernommen hatte, ist das "Ist Task beendet? VI" in der Schleife. Aber auch wenn ich das bei mir einfüge ändert sich nichts. Dann gibt es ja noch das "Multi-Function-Synch Dig Read Write With Counter.vi" Was ist denn da genau die Funktion des zusätzlichen Counter-Kanals, wäre das evtl. eine Lösung, oder ist das nur für digitale Ein/Ausgabe geeignet?
Habe gerade mal geschaut und mir das 4431 simmuliert. Bei dem Device gibt es keinen Timebase Eintrag. Ansonsten hätte es mit dem MX Trigger und Digital Edge funktioniert.
Also mit dem Vorgehen, das in dem Link den ich gepostet hab genannt wird, klappt es: Vor dem eigentlichen Lesen in der For-Schleife habe ich ein einmaliges Dummy-Lesen eingefügt, dadurch kann ich die Phasenverschiebung ändern. Jetzt muss ich nur noch messen, wieviele Samples genau ich dafür benötige.
Aber irgendwie bin ich nur so halb zufrieden mit der Lösung, da diese dann ja nur sehr individuell ist für das jetzige Delay, was sich doch ändern könnte falls ich mal ein anderes Sinussignal verwenden würde, oder? Doch wenn das schon auf der NI-Seite als Lösung steht, gibt es wohl keine andere Möglichkeit? ...Irgendwie unbefriedigend, ist doch gar nicht so ungewöhnlich, dass man Ein-und Ausgabe exakt im selben Moment starten will. Von daher: an einer anderen Lösung wär ich nachwievor interessiert
Da ich gerade halbwegs an dem selben Problem arbeite, bin ich über das VI "Multi-Device Synch-Analog Input-Cont Acquisition.vi" gestolpert. Habe es auf AO sync AI bezogen... und siehe da es funktioniert bei mir.
Gruß
23.04.2012, 16:48 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2012 16:52 von margro.)
Das klappt beim 4431 anscheinend nicht, siehe Screenshot ...oder ich hab es falsch eingebunden.
Ich hoffe auf Letzteres, denn mit der Dummy-Samples Lesen Variante ist es wirklich nur suboptimal, da ein restliches Delay bleibt, da dieses kleiner als dt zwischen zwei Abtastpunkten ist.
Irgendwie kann ich mir aber auch nicht vorstellen, dass es nicht möglich ist bei Hard- und Software vom selben Hersteller, Ein-und Ausgänge des selben Geräts synchron zu starten. Aber wahrscheinlich liegt es vielmehr an der - derzeitigen - Inkompetenz des Users
Edit: Ah, ich sehe gerade, dass sich da ja verschiedene Varianten in der Case-Struktur befinden. Vielleicht kann ich ja ein andere Variante anwenden.
auf deinem Screenshot hast du am AI den Starttrigger generiert. Wenn du AO als Master nehmen willst, so habe ich es, dann musst du auf dem AO den Starttrigger mit ao/startrigger generieren und den Task als Digiflanke für AI nehmen.