LabVIEWForum.de - DAQ Datenoutput an zwei Ziele mit unterschiedlichen Intervallen

LabVIEWForum.de

Normale Version: DAQ Datenoutput an zwei Ziele mit unterschiedlichen Intervallen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich bräuchte ein wenig Hilfe bei folgendem Problem:

Ich habe eine DAQ Express VI, aus der ich gerne Werte auf 2 Wegen auslesen möchte. Der erste Weg ist recht einfach, dort sollen die Werte einfach kontinuierlich an einen Chart gesendet werden (also eine Art Live Ansicht).
Gleichzeitig möchte ich aber genau alle x Sekunden (das x wird vorher vom User eingegeben und reicht von 0,1s bis 300s) einen Wert in ein Array bzw. in einen Indexing Tunnel schreiben, der dann später in einem Array gespeichert wird. Dabei soll auch der Zeitpunkt der Datenaufzeichnung der einzelnen Messpunkte mit rausgeschrieben werden, damit man das im Array später auch sehen kann.

Mein erster Ansatz war das über eine Wait Funktion zu lösen, die genau den vom User gewählten Zeitintervall abwartet und dann einen einzigen Wert vom DAQ ausliest. Leider lassen sich dabei nicht parallel weitere Werte auslesen und in den Chart schreiben.

Noch eine allgemeine Frage zum DAQ:
Wenn ich im DAQ Express VI kontinuierlich messen auswähle und z.B. 100Hz einstelle, und zB. 50000 Samples einstelle, läuft dann das DAQ Express VI solange bis diese Zahl erreicht ist, oder muss sich das Express VI dazu in einer Schleife befinden? Was mache ich, wenn ich nicht weiß, wie viele Samples ich brauchen werde?

Mein Ziel wäre also folgendes:
Ein DAQ Express VI, dass mit Hardware Timing kontinuierlich Werte rausschreibt von denen alle x Sekunden ein Signal mit allen Sensorwerten, die am DAQ angeschlossen sind, abgegriffen und in ein extra Array gespeichert werden. Parallel dazu soll eine Schleife laufen, die Abbruchkriterien überprüft, die ebenfalls vom User vorgegeben werden können (max. Messzeit, Stop Button, Anzahl Messwerte im Array). Auch parallel dazu soll zum gleichen Zeiptunkt wie ein Messwert rausgeschrieben wird auch ein Bild mit einer Kamera gemacht werden.

Das ganze findet in einer State Machine statt.

Wie setze ich das am besten um?

Vielen Dank im Voraus für eure Rückmeldung!

PS Im Anhang habe ich meinen Versuch angehängt, die zwar die Werte im richtigen Intervall rausschreibt, aber keine Live Ansicht parallel dazu erlaubt.
Hallo moto,

Zitat:Im Anhang habe ich meinen Versuch angehängt
Du hast ein Snippet angehangen, in dem ein Großteil der Drähte "broken" ist…
Wie soll man damit irgendetwas anfangen?

Zitat:Ich habe eine DAQ Express VI, aus der ich gerne Werte auf 2 Wegen auslesen möchte. Der erste Weg ist recht einfach, dort sollen die Werte einfach kontinuierlich an einen Chart gesendet werden (also eine Art Live Ansicht). Gleichzeitig möchte ich aber genau alle x Sekunden (das x wird vorher vom User eingegeben und reicht von 0,1s bis 300s) einen Wert in ein Array bzw. in einen Indexing Tunnel schreiben, der dann später in einem Array gespeichert wird.
Einfach alle x Sekunden den gerade erst gelesenen Wert nicht nur anzeigen, sondern auch abspeichern!

Zitat:Mein erster Ansatz war das über eine Wait Funktion zu lösen, die genau den vom User gewählten Zeitintervall abwartet und dann einen einzigen Wert vom DAQ ausliest.
Korrekt erkannt: Parallel Werte aus dem identischen DAQmx-Kanal lesen geht nicht. Brauchst du aber auch nicht: wenn du den Wert schon gelesen hast, kannst du ihn doch beliebig oft weiterverwenden…

Zitat:Wenn ich im DAQ Express VI kontinuierlich messen auswähle und z.B. 100Hz einstelle, und zB. 50000 Samples einstelle, läuft dann das DAQ Express VI solange bis diese Zahl erreicht ist, oder muss sich das Express VI dazu in einer Schleife befinden?
Das ExpressVI macht genau das, was du konfigurierst! Wenn du 50k Samples bekommen willst, dann wird das ExpressVI diese auch liefern - ohne "Schleife drumherum"!
(Das dauert bei 100Hz Samplerate dann eben mal 500s oder 8m20s - blöd, wenn man dann den falschen Timeout setzt…)

Zitat:Mein Ziel wäre also folgendes: Ein DAQ Express VI
Mein Ziel (und mein Vorschlag an dich) wäre immer, auf einen DAQAssi zu verzichten und die normalen DAQmx-Funktionen zu verwenden.
LabVIEW kommt mit jeder Menge BeispielVIs zum Thema DAQmx und es gibt einen prima Einsteiger-Hinweis zu DAQmx (siehe meine Signatur)!
Das grundlegende Prinzip bei der Datenerfassung ist: Der Datenverkehr zwischen Messmodul (Enthält Echtzeit-System zur autarken Datenerfassung) ) und PC (Windows, kein Echtzeitystem) erfolgt nicht direkt, sondern über Puffer.
Bei Kontinuierlicher Erfassung (und nicht nur da) heißt das: Die Datenerfassung wird nach der Konfigurierung mit "Start" (oder dem ersten Lesezugriff auf den Puffer) angestoßen. DAQmxRead hat mit der Datenerfassung selbst nichts zu tun. Es liest nur die Daten aus dem Puffer, und zwar so: Es wartet, bis die angegebene Anzahl von Samples im Puffer sind. Die Schleife, in der es sich befindet, wird so lange blockiert. Ist die Anzahl erreicht, liest es die Daten mit einem Mal aus. Die Schleife ist dann nicht mehr blockiert, man kann die Daten auswerten, speichern oder was weiß ich. Und da die Kontinuierliche Datenerfassung zeitlich nicht begrenzt ist, kann man bei dieser Gelgenheit auch entscheiden, ob man die Erfassung stoppen möchte. (Wichtig: kein "Wait" in der Schleife, es kann sonst zum Pufferüberlauf kommen)
Vorsschlag für Deinen Fall:
Ich würde immer 10 Samples auslesen, dann macht bei fs=100 Hz die Schleife alle 100ms einen Durchlauf.
Herausziehen der Einzelsamples: bei dt=100 ms entspricht das einem Schleifendurchlauf. Also bei jedem Durchlauf aus dem Array einen Einzelwert herausziehen. (besser:Den Mittelwert der 10 Samples).
Entsprechend bei dt=300s nur bei jedem 3000sten Schleifendurchlauf eine Sample aus dem Array herausziehen.
(Dein Express-Vi funktioniert beim Lesen auch so wie beschrieben).
Hallo zusammen,

vielen Dank erstmal für eure Rückmeldungen.

Könntet ihr mir einen Denkanstoß oder ein Snippet geben, wie das Herausziehen der Einzelsamples am besten und effektivsten umzusetzen ist?

Vielen Dank nochmal!

Beste Grüße,
moTo
Hallo moto,

Zitat:Könntet ihr mir einen Denkanstoß oder ein Snippet geben, wie das Herausziehen der Einzelsamples am besten und effektivsten umzusetzen ist?
Das hat Ludwig doch schon gesagt: ein Mittelwert über den gerade gelesenen Sampleblock ist üblich.
Oder eben per IndexArray eines der Samples auswählen…
Referenz-URLs