25.06.2009, 15:00
(Dieser Beitrag wurde zuletzt bearbeitet: 25.06.2009 15:01 von abrissbirne.)
Beitrag #1
|
abrissbirne
LVF-Stammgast
Beiträge: 480
Registriert seit: Aug 2007
LV2009, LV2010
2007
EN
66123
Deutschland
|
PCI Kartentimer richtig konfigurieren
Hallöchen,
in diesem Teil des LabVIEW Forums bin ich relativ selten zu sehen, was bedeutet das ich auch nicht wirklich Fit im Umgang mit DAQ Karten bin. Ich habe mir Teilweise den Content des Getting Started Links zu Gemüte geführt, Examples im Example Launcher angesehen und das Forum durchstöbert. Bei Letzterem bin ich auch schonmal ansatzweise fündig geworden und zwar hier: Kontinuierliche Datenaufnahme bei einer PCI-6221 Karte 8.Antwort (Lucki).
Erstmal meine Problemstellung:
Hardware PCI-6221 (37 Pin) und eine zweite Datenaufnahmekarte eines 3rd Party Herstellers. Nu möchte ich zwei Datenaufnahmen miteinander (sehr genau) synchronisieren (triggern). Ich habe mir überlegt das ich den Counter meiner NI Karte dazu benutze. Also muss ich mir einen Task erstellen welcher mir Ticks generiert (evt. irgendeine Timebase der Karte?) und einen Task der diese verarbeitet (Counter Out der Karte PFI6). Wenn ich soweit alles verstanden habe sind die Tasks sozusagen meine Messprojekte denen ich ein oder mehrere Messkanäle zufügen kann. Ich möchte das Timing komplett auslagern, damit diese nicht von der CPU abhängig ist.
Zwei Varianten:
1) Datenaufnahme 1 oder 2 startet die andere wird nach Ablauf einer Zeit (generiert durch den Counter) gestartet (Trigger).
2) Datenaufnahmen werden nach einer gemeinsamen Offsetzeit gleichzeitig gestartet.
Die Zeiten sollen vom User eingestellt werden können (ich möchte keine Express VI's nutzen um alle Möglichkeiten im Programm ausschöpfen zu können).
Hatte es früher mit Timed Loops versucht. Dort sollte man angeblich den Takt des Counters als Iterationszeit nutzen können. Dies hat allerdings nie wirklich funktioniert. Der Softwaretrigger ist für meine Aufgabenstllung aber zu ungenau.
Leider habe ich bislang kein Lauffähiges Beispiel produzieren können. Rein von dem was ich bisher gelesen habe sollte dies doch realisierbar sein.
Sorry für den halben Roman, aber die Aufgabenstellung sollte wenigstens rübergekommen sein.
Danke,
eure abrissbirne
|
|
|
25.06.2009, 19:05
Beitrag #2
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
PCI Kartentimer richtig konfigurieren
' schrieb:Hatte es früher mit Timed Loops versucht. Dort sollte man angeblich den Takt des Counters als Iterationszeit nutzen können. Dies hat allerdings nie wirklich funktioniert.
siehste ... vergiss Timed Loops, das war IMHO von anfang an ne Totgeburt da man sie eigentlich gar nie braucht weil man ein exaktes Timing immer viel besser mit der Hardware hinbekommt.
Wenn du jetzt 2 NI Karten hättest, die beide über einen RTSI-Bus verfügen hätte ich jetzt gesagt: erzeuge dir mit dem Counter der M-Serie einen Messtakt und route den Ausgang von CTR0 auf RTSI1 (z.B.) und verwende den Takt bei beiden Messkarten als Messtakt (kann man bei DAQmx beim Timing VI angeben wo der Takt herkommt).
Da du keinen RTSI-Bus hast müsste deine 3rd Party Karte über soetwas wie einen Trigger-Eingang verfügen. Dann kannst du wieder einen Messtakt erzeugen, den auf der NI-Karte als Messtakt verwenden und halt extern über ein Kabel wieder bei der anderen Karte einschleifen.
Damit die beiden Karten synchron starten brauchst du auch noch einen Start-Trigger. Da kann man vielleicht einen DIO zweckentfremden, wenn du sowieso schon extern verkabelst ..
Möglich ist das auf jeden Fall (wenn die 3rd Party Karte externe Trigger unterstützt ...)
|
|
|
25.06.2009, 21:29
Beitrag #4
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
PCI Kartentimer richtig konfigurieren
Die verlinkten Tutorials schon angeschaut?
http://www.LabVIEWforum.de/Getting-Started...Qmx-t12509.html
Und dann ist der NI-Examplefinder eine tolle Fundgrube für fast jede Art von DAQmx-Problem:
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!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
26.06.2009, 14:23
Beitrag #5
|
abrissbirne
LVF-Stammgast
Beiträge: 480
Registriert seit: Aug 2007
LV2009, LV2010
2007
EN
66123
Deutschland
|
PCI Kartentimer richtig konfigurieren
' schrieb:Die verlinkten Tutorials schon angeschaut?
http://www.LabVIEWforum.de/Getting-Started...Qmx-t12509.html
Und dann ist der NI-Examplefinder eine tolle Fundgrube für fast jede Art von DAQmx-Problem:
[attachment=47226:Image01.png]
Gruß, Jens
Steht alles in meinem ersten Post
Mir geht es darum die Funktionen des DAQmx richtig zu verstehen. Dazu muss ich wissen was welche Funktion auf der Hardware bewirkt. Nach dem lesen des Tutorials hab ich das ganze bislang so verstenden.
Task = Anlegen eines Messprojektes. Innerhalb eines Messprojektes können verschiedene Kanäle bedient werden, die alle vom selben Typ sein müssen.
Kanal = Messaufgabe.
D.h. für mein Fall brauche ich einen Task für den Messtakt (Counter (ctr 0 dev 1 = PFI6)) und einen Task für die Detektion des Messtaktes (auf PFI6). Ist das soweit schonmal korrekt?
Was ich nicht so ganz verstehe ist, wie genau ich den Messtakt werden lassen kann und was es mit dem Puffern auf sich hat. Ich möchte den Takt nicht puffern, sondern direkt erfassen wenn er auftaucht. Manchmal muss man einen Task starten und manchmal nicht. Ich sehe da noch keine Logik.
Ich werde nächste Woche nicht im Haus sein, aber ich hoffe die Woche darauf weiter mit euch über das Thema diskutieren zu können, damit ich den DAQmx Treiber richtig verstehe.
Danke,
eure abrissbirne
|
|
|
28.06.2009, 19:01
Beitrag #7
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
PCI Kartentimer richtig konfigurieren
' schrieb:D.h. für mein Fall brauche ich einen Task für den Messtakt (Counter (ctr 0 dev 1 = PFI6))
Ja, genau, siehe meinen Screenshot, da ist genau das entsprechende Bsp zu sehen.
' schrieb:und einen Task für die Detektion des Messtaktes (auf PFI6). Ist das soweit schonmal korrekt?
Jein, was du brauchst, ist einen Analog-In-Task mit einem externen Messtakt. Hier 2 entsprechende Bsps aus dem NI-Examplefinder:
' schrieb:Was ich nicht so ganz verstehe ist, wie genau ich den Messtakt werden lassen kann und was es mit dem Puffern auf sich hat. Ich möchte den Takt nicht puffern, sondern direkt erfassen wenn er auftaucht.
Du pufferst nicht den Messtakt, sondern die erfassten Samples. Das übernimmt aber alles der DAQmx-Treiber für dich. Der pufferst erst im FIFO-Puffer der Messkarte, schiebt dann per DMA in den RAM, puffert dort in einem FIFO-Puffer, und dort holst du dann erfasste Messwerte per DAQmx-Read ab.
' schrieb:Manchmal muss man einen Task starten und manchmal nicht. Ich sehe da noch keine Logik.
Jeden Task musst du irgendwann starten, sonst geht da gar nichts...
So, ich fasse noch mal zusammen, was i2dx und ich dir vorschlagen (ich glaube, wir liegen da ideenmäßig völlig konform):
1. Du erstellst dir auf der 6221 einen Messtakt (per z.B. "Continous-Pulse-Train"). Das Signal routest du per Kabel als externer Messtakt an die andere Karte, und es müsste möglich sein, dies intern als Messtakt an die 6221 zu routen. Ansonsten auch dies extern routen.
2. Für die Datenerfassung auf der NI-6221 nimmst du jetzt die Beispiele mit externen Takt (s.o.) als Grundlage. Es wird jetzt jedesmal, wenn das Messtaktsignal von low auf high geht, eine Datenerfassung getriggert. Wenn das auf deiner Nicht-NI-Karte genauso möglich ist, dann hast du es schon mal geschafft, dass die beiden Karten Signale quasi synchron erfassen.
3. Bei DAQmx gibt es noch eine nette Funktionalität: Trigger zum Start einer Datenerfassung. (s. ebenfalls oben, das Bsp mit Dig Start). Erst wenn ein Digitaler Eingang z.b. von low auf high geht, startet wirklich die Erfassung von Messwerten. Wenn das deine Nicht-NI-Karte auch kann, dann wäre dies sehr gut. Dann erstellst du noch einen dritten Task, in diesem Fall einen Digital-Out-Task. Der entsprechende DO-Pin wird dann mit dem Triggereingängen verdrahtet. In dem DO-Taks schaltest du dann den entsprechenden DO von Low auf High, was dann die Datenerfassung erst startet, und auch dies dann synchron.
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!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
07.07.2009, 14:38
Beitrag #8
|
abrissbirne
LVF-Stammgast
Beiträge: 480
Registriert seit: Aug 2007
LV2009, LV2010
2007
EN
66123
Deutschland
|
PCI Kartentimer richtig konfigurieren
Hallo,
wollte kurz Feedback über den Stand der Dinge geben. Bin bei meiner Sache ein gutes Stück vorangekommen. Ich habe einen Task erstellt, welcher einen getriggerten Timer startet. Ein zweiter Task überwacht den Digitalen Eingang, den ich physikalisch mit dem Counterausgang verbunden habe auf Wertänderungen. Ich starte quasi meinen Überwachungstask, meinen Timingtask und habe nun einfach mal ein Eingang per Buttonklick auf Highpegel gesetzt. Dieser Pegel startet nun die Datenaufnahme (soll er zumindest mal) und der Timer läuft los. Klappt echt gut. Leider kann ich das nur für Langsame Pegelwechsel kontrollieren.
Gibt es eigentlich eine eine andere Lösung die Pins zu verschalten als physikalisch zu verdrahten? Die Routing VI's fallen raus, da ich diese nur für einen Task routen kann. Und hat jemand einen Tipp wie ich die Geschichte für schnelle Frequenzen auf Richtigkeit überprüfen kann?
Danke schonmal für all eure vorherigen Posts. Ich bin "nun" der Überzeugung, das Timed Loops nix bringen (thx to i2dx )
|
|
|
| |