Hallo LabVIEW-Freunde,
ich bin noch recht neu in der Materie und hänge derzeit beim programmieren fest...
Ich möchte über das "NI USB-6216" mehrere Temperaturen und einen Widerstand über die Zeit messen. Dazu versuchte ich bisher mit dem "DAQ-Assistenten" die Signale einzulesen und mit "Signale auswählen" zu separieren.
Über einen "Channel Delay" innerhalb einer While Struktur soll daraufhin eine Abtastrate ermöglicht werden (machbar?!?), um anschließend mit "Signalverlaufserzeugung_mit_Einheit.vi" den Werten der Name, der Zeitpunkt und die Einheit anzuhängen. Nach "Signale zusammenfassen" soll dann die "Messwerte in Datei schreiben" möglich sein.
Hat mir jemand einen Tipp, oder ne bessere Lösung zu meinem Problem.
Besten dank im Voraus !!
' schrieb:Über einen "Channel Delay" innerhalb einer While Struktur soll daraufhin eine Abtastrate ermöglicht werden (machbar?!?)
Die Abtastrate stellst du bei der Abtastrate ein. Die befindet sich in den Timing-Einstellungen unten rechts und heißt Rate (Hz).
Zitat:,um anschließend mit "Signalverlaufserzeugung_mit_Einheit.vi" den Werten der Name, der Zeitpunkt und die Einheit anzuhängen.
Diese Informationen hast du deinem DAQ-Assistenten doch schon gegeben beim konfigurieren.
Zitat:Nach "Signale zusammenfassen" soll dann die "Messwerte in Datei schreiben" möglich sein.
... wieso nicht ...
Überleg' dir nochmal, ob du die Signale wirklich aufdröseln und dann wieder bündeln musst. Kannste glaub' ich einfach zusammen lassen.
Wenn du auch öfter mal was mit LabVIEW und DAQmx machen willst, solltest du dir vielleicht direkt die ganzen Express VIs sparen und es zu Fuß lernen. Ist nicht viel schwerer.
Gruß dimitri
hey, vielen Dank für Deine flinke Antwort
aber die DAQ Assistent-interne Abtastregelung der Messpunkte bereitet mir noch Schwierigkeiten: ich möchte eine Abtastung von einem Hertz und weniger erreichen. Dabei erscheint der Fehler: "Es wurden einige oder alle der angeforderten Abtastwerte noch nicht erfasst."
(bei hohen Frequenzen wie 1k bestanden keine Probleme)
Ein heraufsetzen des time out Wertes war erfolglos. Mein Verdacht, dass Sample-Anzahl, Rate und timeout aufeinander abgestimmt sein müssen hat sich leider nicht erhärtet.
Hat hier jemand ne Idee?
Versuch' dann mal den Modus '1 Sample (HW-getaktet)'. Dann kannst du auch Abtastraten kleiner 1 Hz angeben ohne die besagte Fehlermeldung. (Hoffe ich doch.)
Gruß dimitri
' schrieb:"Es wurden einige oder alle der angeforderten Abtastwerte noch nicht erfasst."
Das ist aber kein Problem - sondern nur ein Hinweis. Du hast schlicht und einfach zu schnell nachgefragt, ob ein neuer Wert anliegt. Und da nur mit 1Hz abgetastet wird, war halt kein neuer da.
Fazit: Entweder eine Schleife rum machen und erst dann beenden, wenn dieser Hinweis nicht mehr erscheint, oder einfach erst dann einen Wert abholen, wenn was im Puffer ist. Guckst du Puffer-Propertys einer Task.
Ja ist denn der von mir vorgeschlagene Modus nicht prädestiniert für solche Abtastraten? Da wird erst gar nicht mehr gepuffert ... man muss sich keine Gedanken darüber machen und alles funktioniert (jedenfalls der kurze Versuch von mir).
' schrieb:Fazit: Entweder eine Schleife rum machen und erst dann beenden, wenn dieser Hinweis nicht mehr erscheint,
Wie macht man denn sowas konkret? Fehlercluster abfragen?
Zitat:oder einfach erst dann einen Wert abholen, wenn was im Puffer ist. Guckst du Puffer-Propertys einer Task.
Und wie macht man das? Und wo finde ich besagte Puffer-Probertys? Und was soll man dann dort einstellen? Meinst du den Eigenschaftsknoten DAQmx - Puffer? Aber da kann man doch nur die Mindestgröße des Puffer angeben, was sollte das ändern?
' schrieb:Ja ist denn der von mir vorgeschlagene Modus nicht prädestiniert für solche Abtastraten? Da wird erst gar nicht mehr gepuffert ... man muss sich keine Gedanken darüber machen und alles funktioniert (jedenfalls der kurze Versuch von mir).
"1 Sample (HW-getaktet)" ist in diesem Falle an sich geeignet. Aufgrund des nicht vorhandenen Puffers muss alles die übergeordnete Software (While-Schleifen-Dauer!) machen. Da hier nur 1Hz gemacht wird, schafft die das allemal.
Voraussetzung ist aber (davon gehe ich mal aus, mit diesem Mode arbeite ich nicht) folgendes: Am DAQmx-Rd muss als auszulesende Anzahl 1 eingegeben werden und der Timeout muss groß genug sein. Lässt man den 1er weg, passiert auch hier genau das, was beim Standard-Sample-Mode passiert ist: "Es liegen noch keine neuen Samples vor". Kommt im Mode "1 Sample (HW-getaktet)" der DAQmx-Rd zu spät (bei 1Hz z.B. erst nach 5 Sekunden) dann kommt die Meldung sinngemäß "Anwendersoftware zu langsam". Die 1 bei DAQmx-Rd hat aber einen Nachteil: Möglicherweise bleibt das ganze Programm eine Sekunde (1Hz) stehen und ist während dieser Zeit nicht bedienbar (Folge: nicht abbrechbar etc.)
Zitat:Wie macht man denn sowas konkret? Fehlercluster abfragen?
Auch wenn das Teil Errorcluster heißt steht manchmal nur eine Meldung drinnen.
Zitat:Und wo finde ich besagte Puffer-Probertys?
Das sind die Eigenschaftsknoten, die sich auf der Palette befinden, auf der auch DAQmx-Rd etc. steht. Schau mer mal, ob ich nachher ein Bild mache.
' schrieb:Voraussetzung ist aber (davon gehe ich mal aus, mit diesem Mode arbeite ich nicht) folgendes: Am DAQmx-Rd muss als auszulesende Anzahl 1 eingegeben werden und der Timeout muss groß genug sein.
Wir reden hier ja primär vom DAQ-Assistenten, denn damit arbeitet der Autor. Und hier wird einem diese Entscheidung abgenommen ...
[
attachment=22993]
... denn sobald dieser Modus gewählt wird, ist besagter Parameter ausgegraut. Timeout scheint dort standardmäßig auf 10s zu stehen.
Zitat::top1:Auch wenn das Teil Errorcluster heißt steht manchmal nur eine Meldung drinnen.
Du überschätzt mich hier ein bisschen. Das reicht mir nicht als Info:huh:Wie verzögere ich denn eine Schleife auf "unbestimmte" Zeit. Die normale Wait.VI kommt da ja wohl nicht in Frage. Sag' bloß da kommt wieder die Sync-Palette ins Spiel
Zitat:Das sind die Eigenschaftsknoten, die sich auf der Palette befinden, auf der auch DAQmx-Rd etc. steht. Schau mer mal, ob ich nachher ein Bild mache.
Ja die meine ich doch auch...
[
attachment=22994]
... aber was soll man jetzt beim Puffer-Knoten einstellen um das beschriebene Problem zu beheben?
[
attachment=22995]
Beste Grüße dimitri
' schrieb:Wir reden hier ja primär vom DAQ-Assistenten,
Was? Wer macht denn sowas? Naja, gut.
Der Assistent macht doch bloß die Initialisierung einer Task. Liest man auch mit dem Assistenten einen Wert aus?
Zitat:Sag' bloß da kommt wieder die Sync-Palette ins Spiel
Bloß nicht!
Zitat:Ja die meine ich doch auch...
Genau.
Hier suchst du jetzt den Knoten, der dir angibt, wie viele Zeichen sich im Lesepuffer (!) einer Task befinden. Du sollat ja nichts einstellen, sondern feststellen, wie viele Zeichen sich im Eingangspuffer befinden.
Ob dieser Knoten oder die Auswertung des Errorclusters, beides würde prinzipiell gleich ablaufen: Abfrage und Testen, ob ok. War OK, dann den Messwert weiterverarbeiten. Sonst: eben nicht weiterverarbeiten und Warten mit Wait.VI (z.B. 50ms).
Noch was zum Assistenten:
Ich würde den Assistenten nicht verwenden. Lieber im MAX (das ist nämlich genau das selbe wie der Assistent) eine Task erstellen. Diese Task dann in LV auswählen. Dann wird auch nur einmal im Programm die Task geöffnet und gestartet. Daten abfragen (DAQmx-Rd) kann man dann so lange man will. Gestoppt und beendet wird die Task dann wieder nur eineinziges Mal. Ich befürchet beinahe, dass der Anwender hier wieder alles - Öffnen, Starten, Lesen, Stoppen, Schließen - kontinuierlich macht. Das ist schlecht.
' schrieb:Was? Wer macht denn sowas? Naja, gut.
Der Assistent macht doch bloß die Initialisierung einer Task. Liest man auch mit dem Assistenten einen Wert aus?
Jo, tut er. Gibt kein DQrd.
Zitat:Bloß nicht!
Puh! Glück gehabt.
Zitat:Genau.
Hier suchst du jetzt den Knoten, der dir angibt, wie viele Zeichen sich im Lesepuffer (!) einer Task befinden. Du sollat ja nichts einstellen, sondern feststellen, wie viele Zeichen sich im Eingangspuffer befinden.
Ob dieser Knoten oder die Auswertung des Errorclusters, beides würde prinzipiell gleich ablaufen: Abfrage und Testen, ob ok. War OK, dann den Messwert weiterverarbeiten. Sonst: eben nicht weiterverarbeiten und Warten mit Wait.VI (z.B. 50ms).
Also doch normal "waiten". Alles klar, verstanden und gesichert. Ausprobieren werd' ich's aber nicht, da such ich mich ja dumm und duselig ... erst wenn ich's brauchen sollte.
Vielen Dank DirSelbst