LabVIEWForum.de - DAQ - Task und Kanal Synchronisierung

LabVIEWForum.de

Normale Version: DAQ - Task und Kanal Synchronisierung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo und Guten Morgen zusammen,

bei einem Projekt komme ich derzeit nicht weiter und möchte euch hier im Forum um ein klein wenig Hilfe bitten. Zuerst eine teilweise Auflistung der Hardware und eine kurze Beschreibung meines Vorhabens.

Hardware:
- mehrere NI-9188 Chassis
- pro Chassis verschiedene Module wie z.B. NI-9213 (Thermoelemente), NI-9203 (AI), NI-9265 (AO), NI-9422 (DI), NI-9472 (DO)

Vorhaben:
Mit der Hardware soll zum einen eine Messdatenaufnahme in einem Prüfstand und zum anderen auch eine Ansteuerung von Ventilen und Massenstromreglern für die Steuerung des Prüfstandes erfolgen. Das spätere Bedien- und Aufzeichnungsprogramm soll auf einem PC laufen und durch eine Person bedient werden. Wichtig hierbei ist die zeitlich exakte Synchronisierung der jeweiligen Kanäle der AO/AI/DO/DI und Thermoelement-Module untereinander. Das ganze wird dann noch in einer TDMS Datei gespeichert.

Was funktioniert:
Die einzelnen Module auszulesen und anzusteuern funktioniert einwandfrei. Entweder einzeln oder alle Kanäle der AI-Module in einem Task zusammengefasst. Letzteres bietet mir schon eine exakte zeitliche Synchronisierung aller Kanäle verschiedener AI-Module in einem einzelnen Chassis.

Mein(e) Problem(e):
Wie funkioniert eine Synchronisierung einzelner Tasks? Wenn ich pro Thermoelement Modul (insgesamt 2 Stück in einem Chassis) je einen Task erstelle, wie kann man diese dann synchron auslesen? Gleiches gilt für die Kombination mit den anderen AI/AO/DI/AO Modulen. Die Beispiele funktionieren leider nicht ganz so wie ich es mir erhofft hatte.

Wie bekommt man eine Synchronisierung von Modulen in zwei verschiedenen Chassis hin? Fehlt mir hier die Synchronisierungskarte NI-9469? Davon gehe ich mal aus.

Ausprobiert habe ich diese beiden Links:
http://www.ni.com/white-paper/11549/de
http://www.ni.com/white-paper/4322/en

Inkl. den Beispielen in Labview 2012 und den Beispielen aus dem letzten Link. Bei der Triggerung kommt jedesmal eine Fehlermeldung (habe ich gerade nicht parat, kommt noch).

Ich werde nachher noch das VI hochladen.

Danke im Voraus an diejenigen die mir hier weiterhelfen können. Wenn etwas unverständlich ist oder euch Informationen fehlen bitte ich genauso um Rückmeldung wie bei allen hilfreichen Tipps. Vielleicht hat schon jemand etwas ähnliches aufgebaut.

Grüße
pandamir
Musst du wirklich absolut synchron (aka "simultan") abtasten? Mal abgesehen davon, dass das bei Temperaturwerten ja eh nicht allzu sinnvoll ist, wirst du mit deinen Modulen da kein Glück haben...die haben ja alle vor dem DAC eine MUX!

Um einzelne Tasks synchron zu starten, musst du sie einzeln für "Triggerung" konfigurieren und starten, dann aber durch eine gemeinsame Triggerleitung, ähm, triggern...die beiden von dir verlinkten Dokumente zeigen genau wie's geht!

Welches Problem hast du konkret?

A.
Danke für die Antwort.

Also so wahnsinnig synchron muss es nicht sein. Insbesondere bei Temperaturwerten, wie du schon geschrieben hast, wird es kritisch. Die Module haben 16 Eingänge für die TE und so schnell lesen die auch nicht aus.

Konkret möchte ich alle 100ms für jeden Kanal bei jedem Modul einen Wert aufnehmen (mit dem Problem das die TE eben diesen Versatz pro Kanal haben).

Wenn ich nun einen Task für Modul 1 á 16 Thermoelement Kanälen erstelle und für Modul 2 (im gleichen Chassis) ebenfalls einen Task mit 16 Thermoelement Kanälen und diese auslese habe ich für jeden Task einen unterschiedlichen Zeitstempel.

Ich möchte aber beide Module zeitgleich auslesen.

Die im Link dargestellten Beispiele habe ich nachgebaut, leider funktionieren sie nicht. Ich werde heute nachmittag das VI hochladen. Evtl. übersehe ich einfach etwas.
(10.10.2012 08:36 )pandamir schrieb: [ -> ]Wenn ich nun einen Task für Modul 1 á 16 Thermoelement Kanälen erstelle und für Modul 2 (im gleichen Chassis) ebenfalls einen Task mit 16 Thermoelement Kanälen und diese auslese habe ich für jeden Task einen unterschiedlichen Zeitstempel.

Ich möchte aber beide Module zeitgleich auslesen.

Warum packst du die Module nicht in den gleichen Task? Bei nem simulierten System funktioniert das jedenfalls Modulübergreifend...
[attachment=41810]
(10.10.2012 06:45 )pandamir schrieb: [ -> ]Wie bekommt man eine Synchronisierung von Modulen in zwei verschiedenen Chassis hin? Fehlt mir hier die Synchronisierungskarte NI-9469? Davon gehe ich mal aus.
Ja, und zwar in jedem deiner Chassis!

Aber dran denken: Du wirst auch dann immer noch einen Zeitversatz zwischen den einzelnen Messkanälen haben...

A.
(10.10.2012 10:09 )Achim schrieb: [ -> ]
(10.10.2012 08:36 )pandamir schrieb: [ -> ]Wenn ich nun einen Task für Modul 1 á 16 Thermoelement Kanälen erstelle und für Modul 2 (im gleichen Chassis) ebenfalls einen Task mit 16 Thermoelement Kanälen und diese auslese habe ich für jeden Task einen unterschiedlichen Zeitstempel.

Ich möchte aber beide Module zeitgleich auslesen.

Warum packst du die Module nicht in den gleichen Task? Bei nem simulierten System funktioniert das jedenfalls Modulübergreifend...

Hi,

das hab ich auch schon gemacht und funktioniert einwandfrei. Wie schaffe ich es aber, wenn ich z.B. Analogausgänge mit Analogeingängen synchron haben möchte? Die kann ich nicht in den gleichen Task packen.

Wenn ich von meinem Projekt her eben für jedes Modul einen Task haben möchte (egal ob das nun Sinn macht oder nicht), sollte es dennoch machbar sein diese auf irgendeine Art und Weise zu synchronisieren bzw. die beiden Tasks gleichzeitig zu starten. Aktuell startet der eine etwas zeitverzögert 8oder läuft nicht mit dem anderen synchron) und gibt mir in Folge dessen eben auch die Werte mit einem anderen Zeitstempel aus.
Du kannst nur absolut synchron starten (durch nen gemeinsamen Trigger), aber da wird sich über kurz oder lang ein Zeitversatz ergeben...weil da unterschiedliche Hardware (n verschiedene Module) sich gemeinsame Ressourcen (Chassis) teilen!

Mit nem separaten gemeinsamen Takt (extern oder per internem Counter erzeugt), wird es wohl gehen...

http://digital.ni.com/public.nsf/allkb/8...1E006D3BBA
http://zone.ni.com/devzone/cda/epd/p/id/5197

Das ganze ist nicht so trivial, ich kann dir aber jetzt nicht konkret weiterhelfen...dass müsste ich mit HW testen, die ich nicht habe!

A.
(10.10.2012 10:28 )Achim schrieb: [ -> ]
(10.10.2012 06:45 )pandamir schrieb: [ -> ]Wie bekommt man eine Synchronisierung von Modulen in zwei verschiedenen Chassis hin? Fehlt mir hier die Synchronisierungskarte NI-9469? Davon gehe ich mal aus.
Ja, und zwar in jedem deiner Chassis!

Aber dran denken: Du wirst auch dann immer noch einen Zeitversatz zwischen den einzelnen Messkanälen haben...

A.

Hat mir der Herr von NI auch gerade erklärt Big Grin

Ich denke ich werde mir was ganz anderes überlegen müssen.

Ursprünglich wollte ich zu einem Zeitpunkt x alle an den Modulen anstehenden Werte bei allen Chassis anzeigen lassen und speichern. Auf die Kanäle heruntergebrochen geht das wegen den Multiplexern nicht, wäre aber auch zu verschmerzen. Also allen Modulen einen einzigen Zeitstempel verpassen.

Gleiches bei den AO und DO Modulen. Ich sende einen AO-Wert bei 11:50,236 los und durch die Taktung auf eine bestimmte Zeit (z.B. Start bei 11:00,000) mit einem bestimmten dt (z.B. 100ms) wäre dieser erst um 11:50,300 gesendet (an meine an die AO-Module angeschlossene Hardware) geworden.

Aber jedes der von mir erwähnten AI/AO/DI/DO-Module und auch die TE-Module haben ihren eigenen Taktgeber (so habe ich das zumindest verstanden). Packe ich alle Module in einem Chassis in einen Task ist das kein Problem. Mache ich aber für jedes Modul einen eigenen Task auf bekomme ich das nicht mehr hin diese in einem VI zu synchronisieren.

Wie es aussieht komme ich nicht drum herum, alle AI/DI Module in einem Chassis in einen Task zu packen und die AO/DO Werte mit einem eigenen Zeitstempel zu versehen oder programmiertechnisch das Senden der Werte an die AO/DO Module nur zu einem bestimmten Zeitpunkt zu zu lassen.

Morgen mal ein wenig herumprobieren Smile trotzdem Danke für die Antworten.
(10.10.2012 10:44 )Achim schrieb: [ -> ]Du kannst nur absolut synchron starten (durch nen gemeinsamen Trigger), aber da wird sich über kurz oder lang ein Zeitversatz ergeben...weil da unterschiedliche Hardware (n verschiedene Module) sich gemeinsame Ressourcen (Chassis) teilen!

Mit nem separaten gemeinsamen Takt (extern oder per internem Counter erzeugt), wird es wohl gehen...

http://digital.ni.com/public.nsf/allkb/8...1E006D3BBA
http://zone.ni.com/devzone/cda/epd/p/id/5197

Das ganze ist nicht so trivial, ich kann dir aber jetzt nicht konkret weiterhelfen...dass müsste ich mit HW testen, die ich nicht habe!

A.

Damit habe ich es auch schon probiert. Aber ich fürchte meine Hardware unterstützt diese Art der Triggerung / Synchronisierung nicht. Geht nur mit speziellen Modulen, soweit ich das verstanden habe.
Hallo Forum ,
nach langem suchen habe ich mich entschlossen mein Anliegen in diesem thread publik zu machen.

Ich benutze ein NI-cDAQ 9174. In diesem Element stecken drei unterschiedliche Messgarten.
Es handelt sich dabei zum einen um eine NI 9205 welche Analoge Signale aufnimmt, wie Temperatur Windgeschwindigkeit etc.
Messgarte zwei ist eine NI9203 welche ausschließlich Paramter des Windes aufnimmt, ebenfalls Analog.
Bei der dirtten und letzten Messkarte handelt es sich um eine Digitalemessgarte und zwar um eine NI 9421.

Nach mehrfachen Kontakt mit dem Support von National Instruments, der uns mehrfach bestätigt hat, dass es mit Hilfe des NI cDAQ 9174 möglich sein sollte diese drei Messkarten Hardwareseitig zu takten.Das heist das das Problem welches ich habe anscheind Softwareseitig ist.

Die lezte Messkarte soll mit Hilfe eines Drehzahlsensors die Drehzahl einer Windturbine aufnehmen. Dafür verwende ich eine Counterfunktion, was dem VI entnommen werden kann.Da nicht immer Wind vorhanden ist steht die Windturbine entsprechened bei Windsille. Dennoch sollen alle anderen gewünschten Paramter weiterhin aufgezeichnet werden.

Nun meine Frage wieso Funktioniert die Taktung der drei Messkarten nicht und wer kann mir weiter helfen?
Ich habe das VI so aufgebaut, wie es auf mehrern Natinonal Instrumentsseiten zu sehen ist, die sich ebenfalls mit Synchronisation befassen.

Ich bedanke mich bereits im Vorraus bei euch für eure Hilfe.
Mit freundlichen Grüßen
Spoony
Im Anhang befindet sich das SubVi das in dem Hauptprogramm die synchrone Datenaufnahme gewährleisten soll.

Der Fehlercode der auftritt lautet wie folgt:

Possible reason(s):

An attempt has been made to perform a route when the source and the destination are the same terminal.

In many cases, such as when configuring an external clock or a counter source, you must select a PFI, PXI Trigger, or RTSI line as the source terminal.

Property: Start.DigEdge.Src
Property: Start.DigEdge.Edge
Source Device: cDAQ1
Source Terminal: ai/StartTrigger

Task Name: _unnamedTask<214>
Seiten: 1 2 3
Referenz-URLs