INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

PCI Kartentimer richtig konfigurieren



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!

25.06.2009, 15:00 (Dieser Beitrag wurde zuletzt bearbeitet: 25.06.2009 15:01 von abrissbirne.)
Beitrag #1

abrissbirne Offline
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.06.2009, 19:05
Beitrag #2

cb Offline
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.

siehsteWink... 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 ...)

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.06.2009, 21:11
Beitrag #3

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
PCI Kartentimer richtig konfigurieren
' schrieb:siehsteWink... 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.
Tongue

' schrieb: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).
Hört sich gut an, ist aber wie gesagt keine NI Karte.

' schrieb: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.
Jup, so hab ichs mir vorgestellt. Der externe Triggereingang ist vorhanden und kann verkabelt werden.

' schrieb: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 ...)
Jetzt ist meine Frage wie kann ich diesen Messtakt erzeugen und verwenden? Ich habe es wie gesagt mit zwei Tasks versucht (siehe oben). Ich blicke noch nicht wirklich durch (mit den DAQmx Funktionen). Wie kann ich zu den Tasks, Kanäle erzeugen die diese Aufgabe erfüllen (ohne Express VI's).

Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.06.2009, 21:29
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.06.2009, 14:23
Beitrag #5

abrissbirne Offline
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 PostBig Grin
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.06.2009, 23:00
Beitrag #6

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
PCI Kartentimer richtig konfigurieren
naja, im Prinzip ist es so:

auf der Messkarte läuft eine Firmware. Mit dem konfigurieren des DAQmx-Treibers generiert man eine Reihe von Befehlen, die die Firmware auf der Karte veranlassen bestimmte Funktionen auszuführen (z.B. einen Buffer bereitstellen wenn man das Timing VI verwendet und eine Sample-Rate und eine Block-Größe einstellt ...)

Mit den Routing Funktionen werden "Schalter" umgelegt, die bewirken dass ein Signal das an einer bestimmten Stelle erzeugt wird (z.B. Ausgang des Counter Chips) an der gewünschten Stelle "rauskommt".

Wenn man z.B. eine Analoge Erfassung auf einer M-Serie mit 4 Kanälen programmiert wird der Multiplexer so eingestellt dass er in der gewünschen Sample-Rate die 4 Kanäle auf den AD-Wandler umschaltet, der interne Speicher auf der Karte wird so konfiguriert dass er die Messdaten zwischenspeichert, der Kommunikations-Chip (z.B. PCI-Bus oder USB) wird so konfiguriert dass er zum richtigen Zeitpunkt die Daten über den Bus schickt, usw. usf ...

Ein Task ist mehr oder weniger ein Abstraktes Gebilde das einfach nur dazu dient eine bestimmte Aufgabe zu identifizieren / verwalten und z.B. auch Ressourcen zu reservieren ... (das erkennt man u.A. daran dass man nicht 2 Tasks auf ein und die selbe Hardware erstellen kann ...)

Auf der M-Serie sollte ein 80 MHz Timer sein, das wäre auch der maximale Messtakt den du erzeugen kannst ...

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
28.06.2009, 19:01
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.07.2009, 14:38
Beitrag #8

abrissbirne Offline
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 i2dxWink)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Incremetalgeber an 6251-USB, wie korrekt konfigurieren? lab-joe 4 5.188 20.08.2010 08:15
Letzter Beitrag: Y-P
  Konfigurieren von externen Trigger PFI 0 1johleh 4 7.462 06.05.2010 10:02
Letzter Beitrag: 1johleh
  Datenerfassung richtig konfigurieren johannes_r 3 5.040 26.08.2009 12:53
Letzter Beitrag: eckilein
  Digitale Ausgänge konfigurieren A.Lincoln 6 6.805 06.06.2008 09:35
Letzter Beitrag: Kvasir
  DAQ richtig konfigurieren manuel001 2 4.379 22.09.2007 22:06
Letzter Beitrag: manuel001

Gehe zu: