LabVIEWForum.de - mehrere Signale einlesen

LabVIEWForum.de

Normale Version: mehrere Signale einlesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich benutze ein PXI-System zur Datenerfassung. Ich möchte mehrere Analogsignale einlesen und dann in einer zeitgesteuerten Schleife auswerten. Wenn ich einen einzelnen Wert einlesen will klappt alles wie geschmiert, nur wenn ich mehrere Signale einlesen möchte tut sich einfach gar nix. In der gleichen Schleife hab' ich das ganze nochmal mit Analogen Ausgängen und da funktionierts einwandfrei.
Ich kann mir einfach nicht erklären, warum es nicht funktioniert. Kann mir jemand von euch helfen?

Danke Markus
Nö;)Genauo, wie du das beschreibst, mache ich es auch und es geht.

Ohne VI oder wenigstens Screenshot kann hier maximal eine Glaskugel befragt werden - meine ist nur grade zerbrochen...
Vielleicht kannst du mal deinen Kaffeesatz befragen...

Ansonsten ist hier ein Beispiel.
[attachment=10215](LV 8.0)

Die Ausgabe der Analog-Signale funktioniert ohne Probleme. Die Aufnahme der analogen Signale bereitet mir jedoch Schwierigkeiten. Wie gesagt, nehme ich nur ein analoges Signal auf, funktioniert es ohne Probleme, aber sobald es, wie im Beispiel, mehrere sind krieg ich keine Werte übergeben. Ich bin absolut ratlos.
Mmhh, sieht erstmal nicht wirklich falsch aus. Was heißt, keine Werte?
- Bekommst du einfach nichts aus DAQmx Read raus?
- Wartet DAQmx Read ohne etwas zu messen? -> liegt auch wirklich das Hardware-Signal zur Taktung an?
- Bekommst du einen Error? -> Simple Error Handler oder Error-Cluster-Indicator an den Ausgang des letzten DAQmx Clear Task hängen, um das zu überprüfen

Hinweise:
- Füge mal auch im Read-Task ein DAQmx Start ein. Ich weiß nicht, ob das hier gebraucht wird, aber schaden kann's nicht.... Ok, sehe grade, das geht nicht mit dem Timing Source-VI, aber siehe unten...
- Du verwendest Hardware-Taktung, legst aber keinen Kanal für das Hardware-Signal fest (am DAQmx Timing). Dann wird denk ich die interne Sample Clock verwendet, die aber weit schneller als die von dir festgelegten 2kHz ist. Was willst du eigentlich tun? Willst du mit 2kHz messen? Dann nimm koninuierliche Messung, keine Hardware-Taktung. Willst du die Messung mit einem digitalen Signal synchronisieren? Dann übergebe dem Eingang am DAQmx Timing auch einen Kanalnamen dafür.
- Ich weiß nicht, was du mit der Kombination aus Create Source und DAQmx Create Timing Source vorhast. das habe ich noch nie verwendet. Brauchst du das wirklich???

Ok, das sollten erstmal ne ganze Menge Hinweise sein, an denen du weitergraben kannst. Für mehr Hilfe, brauche ich mehr Infos, was du da eigentlich vorhast. Z.B. wieso der Umstand mit den Timing Sources oder wieso die seltsame Hardwaretaktung...
Ich bin noch ziemlich neu mit LabVIEW und das sind meine ersten Versuche zu Synchronisation.

Also das DAQmx Read gibt nichts raus. Ich bekomme keine Fehlermeldung und das DAQmx Read wartet auch nicht, weil sonst die Ausgänge, die sich ja in der gleichen Schleife befinden, auch nix ausgeben dürften. Wenn ich lediglich einen Kanal verwende funktioniert es ja einwandfrei, nur bei mehreren tut sich einfach gar nix. Error bekomm ich auch keinen, hab' den Error Handler im Beispiel VI nur weggelassen.

Eigentlich will ich doch einfach nur mit einer Abtastrate von 2 kHz messen, aber da ich noch keine Erfahrung damit gemacht hab' und durch die Funktionen des DAQmx Timings noch nicht so recht durchblicke hab' ich diese Struktur gewählt. Ich hab' noch nicht so ganz verstanden, welche Bedeutung die Eingänge am DAQmx Timing haben. Hab' gedacht, dass "Rate" die Frequenz meiner Abtastung oder meines Schreibvorganges bestimmt und ich über "Quelle" einen Timer als Referenztakt angebe. Vielleicht kennt von euch jemand ein gutes Tutorial zu diesem Thema.
Also, wenn ich mit 2 kHz messen möchte muss ich entweder kontinuierliche Messung verwenden oder, wenn ich mit Hardware Taktung arbeiten möchte, am Eingang von DAQmx Timing einen Counter mit einer Frequenz von 2 kHz anlegen. Hab' ich dich da richtig verstanden?
Ich wollte eigentlich mit dem internen RTSI Bus meines PXI Systems zur Taktung arbeiten, hab' aber das Routing nicht hingekriegt, vielleicht kann mir da auch noch jemand ein bisschen nachhelfen. Der NI Support hat mir da bisher noch nicht so richtig weitergeholfen.

Create Source und DAQmx Create Timing Source hab' ich verwendet, weil ich das so in einem Beispiel bei NI gesehen hab'. Wenn ich das richtig verstanden hab' kann ich so die Taktung meiner zeitgesteuerten Schleife danach mit dem Abtasttakt des Tasks synchronisieren. Warum ich beide verwenden muss hab' ich nicht verstanden, aber DAQmx Create Timing Source allein funktioniert nicht. Aus irgendeinem Grund brach' ich auch Create Source. Ich würde gerne die zeitgesteuerte Schleife verwenden, da das ganze auf einem RT-Target betrieben möchte und nicht weiß, wie ich anders die Priorisierung meiner Mess- und meiner Speicherschleife hinkriege. Gibt's da noch andere, bessere Möglichkeiten?

Also im Prinzip sieht das Ganze so komisch aus, weil ich schlichtweg keine Ahnung davon hab'. Bahn
Wäre also über jeglichen Tip oder Hinweis dankbar.
:)Ok, jetzt wird's schon viel klarer... Schön, dass du erstmal selber probiert hast, anstatt einfach das Forum mit "macht mal" zu bombardieren.

Um's erstmal vorweg zu nehmen: Ich habe keine Ahnung, wieso es bei Single Channel funktioniert, bei Multi Channel aber nicht. Aber lass uns erstmal alle anderen Dinge verbessern, vielleicht löst sich das Problem das von selber;)Manchmal kann man ja noch hoffen...

Du hast ganz richtig verstanden: Willst du einfach nur mit einer konstanten Frequenz takten, dann nimmst du Continuous Samples (bei unendlicher Messung, Abbruch erst mit DAQmx Stop oder Clear Task) oder Finite Samples (bei Messung einer endlichen Anzahl von Punkten). Dann gibst du diese Rate am DAQmx Timing an, evtl. noch 'Samples per Channel', wenn du Finite Samples wählst.
Willst du stattdessen nicht eine Rate konstant halten, sondern die Messungen mit einem externen Signal (kann auch ein internes sein, aber meistens gibt es dazu keinen Grund) synchronisieren, dann verwendest du 'Hardware timed single point' und übergibst dem DAQmx Timing die Quelle des Signales. Rate ist in dem Fall NICHT die Messrate, sondern die maximal zu erwartende Frequenz. Sinn macht das z.B. bei Synchronisation eines Encodersignales mit AI - für jeden Encoderpuls eine Messung.
Ein Tutorial kenne ich leider selbst nicht. Ich musste das auch in vielen Stunden Try-and-Error und wälzen unterschiedlichster Hilfen und Knowledge-Base-Seiten mitbekommen. Aber vielleicht weiß ja jemand anderes hier eine gute Zusammenfassung...

Das mit den Timed Loops und den Prioritäten stimmt ebenfalls. Hier gibst du der Schleife die Priorität 200, dann sollte die Schleife für den GUI-Zugriff z.B. die 100 erhalten. Was aber die Rate der Schleife angeht: Was genau hast du denn vor? Musst du wirklich die Schleife genau einmal und ich Echtzeit für jeden Messwert ablaufen lassen? Hab keine Ahnung, ob 2kHz zu schaffen sind... Wenn es nur um die Messwertaufnahme geht, macht es doch auch nix, wenn du die Werte verzögert hast. Musst du dagegen AI und AO synchronisieren, sieht die Sache schon wieder anders aus. Wenn du mir mehr Infos über den Sinn des Programms gibst, kann ich dir auch mehr sagen. Wird das eine Regelung, oder was hast du vor?
Mit dem Programm soll ein Prüfstand gesteuert werden. Es sollen zwei Motoren angesteuert werden, einer davon müsste geregelt werden. Die Regelung müsste dann natürlich in Echtzeit ablaufen. Die Aufnahme der anderen Werte sollte bei 1 kHz bis 500 Hz ablaufen. Die Werte sollen dann alle 2 ms gespeichert werden.
Am liebsten würde ich die Regelung/Steuerung meiner Motoren in eine Schleife mit 2 kHz packen und die Aufnahme der anderen Werte in einer anderen Schleife mit 500 Hz ablaufen lassen, aber da wurde mir von NI empfohlen nur zwei Schleifen zu verwenden. Das hab' ich dann aber auch nicht so ganz verstanden, weil ich doch gerade durch die Priorisierung der Schleifen wieder deren Wichtigkeit einstellen kann.


Ich hab's mit kontinuierlicher Messung Probiert, hat aber nix genutzt. Hab' ich irgendwelche Fehler bei der Einstellung gemacht?
[attachment=10230]
Referenz-URLs