LabVIEWForum.de - Anfänger braucht Hilfe: Analoge Werte schreiben und auslesen

LabVIEWForum.de

Normale Version: Anfänger braucht Hilfe: Analoge Werte schreiben und auslesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen!

Ich muss für meine Diplomarbeit ein Programm für das Ni-USB 6002 programmieren. Dieses Programm steuert ein Messgerät und sollte folgendes können:
Es soll kontinuierlich ein analoges Spannungssignal ausgegeben werden, welches im Laufe der Messung linear ansteigt. Zusätzlich sollen die Signale am analogen Eingang aufgezeichnet werden. Dazu sollen jeweils etwa 100-1000 Werte gemittelt werden. Es soll in ein Wert pro Sekunde gespeichert werden. Wichtig ist, dass das Messintervall sehr genau ist, also nur um max. 0,1% von der Sekunde abweicht. Im Optimalfall sollte man das Messintervall noch verändern können.

Natürlich habe ich mich schon selbst daran versucht, und meine mich schön langsam auch mit der Programmierung zurecht zu finden. Ich habe auch schon einen ersten Entwurf, der aber leider noch weit davon entfernt ist, das zu machen was ich will. Zum Üben habe ich erstmal den Ausgang mit dem Eingang der USB Karte verbunden. Zuerst habe ich mich damit beschäftigt, die Daten sekundlich auszulesen, zu mitteln und in ein Messfile zu schreiben.
Das funktioniert anscheinend auch, allerdings kann ich die Messzeit pro Wert nicht variieren. Ich kann lediglich "Samples to read" bzw. die "Rate" verändern, dann verändert sich auch die Messrate meines Programms. Aber das kann ja nicht die saubere Lösung für das Problem sein...

Langer Rede kurzer Sinn: Hat jemand von euch eine Idee wie ich mein Problem gut und sauber lösen kann? Ich erwarte von euch keinen Code, ich bin sehr wohl gewillt das selber zu machen. Ein paar Tipps zur Bewerkstelligung wären allerdings schon sehr hilfreich.

Liebe Grüße,
Michael
Hallo Michael,

herzlich willkommen im Forum!

Zitat:Ich muss für meine Diplomarbeit ein Programm für das Ni-USB 6002 programmieren. Dieses Programm steuert ein Messgerät und sollte folgendes können:
Es soll kontinuierlich ein analoges Spannungssignal ausgegeben werden, welches im Laufe der Messung linear ansteigt. Zusätzlich sollen die Signale am analogen Eingang aufgezeichnet werden. Dazu sollen jeweils etwa 100-1000 Werte gemittelt werden. Es soll in ein Wert pro Sekunde gespeichert werden. Wichtig ist, dass das Messintervall sehr genau ist, also nur um max. 0,1% von der Sekunde abweicht. Im Optimalfall sollte man das Messintervall noch verändern können.
- Deine NI6002 erlaubt hardware-timing sowohl beim AI als auch beim AO, was schon mal sehr gut ist…
- LabVIEW bringt jede Menge BeispielVIs mit, sehr viele davon auch zum Thema DAQmx…
- Um ein "genaues Messintervall" zu erreichen, solltest du (wie in deinem DAQAssi) eine Samplerate verwenden: damit bestimmt die Messhardware die Taktrate - und die ist ziemlich genau…

Vorschlag:
- schau dir die BeispielVIs zum Ausgeben von Waveforms an
- schau dir die BeispielVIs zum Einlesen von AI-Werten an
- schau dir die Beispiele zum Synchronisieren von AI und AO an (ist das bei deiner Aufgabe wichtig?)
- versuche die ExpressVIs zu meiden, sie bringen dir später nur Ärger ein…
- wenn du einen Wert pro Sekunde speichern willst, solltest du so viele Sample einesen, wie deine Samplerate eingestellt ist und diese dann mitteln…

Zitat:Ich kann lediglich "Samples to read" bzw. die "Rate" verändern, dann verändert sich auch die Messrate meines Programms. Aber das kann ja nicht die saubere Lösung für das Problem sein...
Doch, das ist es: wenn die Hardware das Timing bestimmt, bist du wesentlich genauer als mit Wartezeiten unter WindowsOS!
Zeit := Samplerate*Sampleanzahl…

Tipp:
- ab und zu mal AutoCleanup benutzen
- auf korrekte Datentypen achten: am einfachsten Konstanten/Controls/Anzeigen per Rechtsklick auf den jeweiligen In/Out einer Funktion erzeugen…
Hallo!

Sorry für die verspätete Rückmeldung und danke für die schnelle Antwort!
Ich hab das Programm jetzt hinbekommen, es scheitert nur an einer kleinen Sache, die ich bei Gott nicht verstehen kann. Wenn ich beim angefügten Programm die Messung mit "Start Measurement" starte, funktioniert alles wie es soll. Allerdings sieht man beim Öffnen des Datenfiles, dass das Programm in die erste Spalte des Datenfiles auch zusätzliche Daten aus alter Messung anfügt.

Damit ihr den Fehler auch reproduzieren könnt:
1. start voltage 0, emd voltage 30, step time 100, step size 1
2. Start Measurement
3. Nach Ende der Messung das Programm mit rotem Knopf beenden
4. Programm erneut starten und Messung starten
--> Nach Ende der zweiten Messung merkt man beim Betrachten des Datenfiles den Fehler.

Seltsamerweise tritt das Problem nicht auf, wenn man vor dem Start der 2. Messung bei Merge Signals kurz auf 3 Channels und gleich wieder zurück auf 2 zieht.

Bitte entschuldigt den schrecklichen Programmierstil. ich will das Programm nur zum Laufen bringen, dann wird es nicht mehr verändert.

Bei Fragen stehe ich jederzeit zur Verfügung!

Lg
Michael
Hallo ElBerto,

Zitat:Bitte entschuldigt den schrecklichen Programmierstil.
Nein.

Zitat:ich will das Programm nur zum Laufen bringen, dann wird es nicht mehr verändert.
Du solltest das VI aber DRINGEND überarbeiten! Wirklich!

Es ist voller RaceConditions - die eben auch zu den von dir beschriebenen Problemen führen können!

Also bitte:
- möglichst ALLE "value"-Propertynodes durch Drähte ersetzen
- ungenutzte Terminals benutzen!
- AutoCleanup benmühen
- NIE das Label von Controls/Indicators löschen (im FP verstecken ist i.O.)
- Schieberegister nutzen, um Werte in Schleifen zu speichern

Nur mal als Anregung ein kleiner Ausschnitt deines VIs nach ein paar simplen Anpassungen (ohne Anspruch auf Vollständigkeit!):
[attachment=58718]
Danke für die Antwort!
ich werde mal anfangen soweit ich kann mein Programm zu bereinigen. Wenn ich fertig bin werde ich es erneut posten, um vll noch den ein oder anderen Verbesserungsvorschlag zu bekommen.

Lg
Referenz-URLs