Ich bekomme es jetz hin eine simulierte 32DI Karte des DAQ zu lesen.
Ist die Programmierung so sinnig?
Ich möchte die Werte zyklisch einlesen. Deswegen die zeitgesteuerte Schleife. Allerdings verstehe ich die Einstellung der Quelle nicht so richtig. Wenn ich eine 1kHz Quelle wähle und eine Periode von 20 (ms?) wähle entspricht das einer Aktualisierungsrate von 50Hz?
Außerdem erzeugt das DAQmx ein zweidimensionales Array. Ich möchte brauche aber immer nur die aktuellen Werte, finde allerdings keine Funktion um dies zu ändern. Kann es hier zu Speicherproblemen kommen, weil das das DAQmx alle Werte die jemals gelesen wurden speichert?
Hallo AMueller,
Zitat:Ich möchte die Werte zyklisch einlesen. Deswegen die zeitgesteuerte Schleife.
Wenn du das machen willst, solltest du eine DAQmx-Samplerate einstellen und auf HW-getaktete Erfassung umstellen!
Die TWL ist hier wenig sinnvoll…
Du hast einen ganzen Port als Kanalauswahl angegeben. Einlesen mit DAQmxRead willst du dann aber "1Kanal 1Sample"!? Stell doch wenigstens auf das Einlesen des ganzen Ports um! (s. Anhang)
Zitat:Außerdem erzeugt das DAQmx ein zweidimensionales Array.
Das hängt von deinen Einstellungen ab - undist auch sehr sinnvoll: mehrere Kanäle, mehrere Samples…
Zitat:Ich möchte brauche aber immer nur die aktuellen Werte
Entweder nur ein Sample abfragen oder IndexArray nutzen!
Zitat:Kann es hier zu Speicherproblemen kommen, weil das das DAQmx alle Werte die jemals gelesen wurden speichert?
"Das DAQmx" speichert keine Werte…
Funktioniert soweit ganz gut. Auch mit der Analogkarte.
Aber warum hast du die Bausteine: Task stoppen und Task zurücksetzen noch angefügt? In der aktuellen Version werde ich diese ja nie ausführen. Oder habe ich da einen Denkfehler? Es funktioniert auf jeden Fall auch ohne bisher.
Hallo AMueller,
weil diese Bausteine zu einer "ordentlichen" Programmierung gehören…
Egal wo, der Ablauf ist immer: Initialisieren/Öffnen, Arbeiten/Nutzen, Deinitialisieren/Schließen. Das gilt für DAQmx, aber auch für Dateien, Queues, VISA, TCP, egal wo!
Macht Sinn es der Vollständigkeit halber immer mitzuführen.
Allerdings habe ich jetzt ein anderes Problem.
Sobald ich bei den Analogwerten auf Kanal 0 einen vollen Sinus aufgenommen habe, beendet sich die Messwertaufnahme selbstständig.
Hallo AMueller,
Zitat:Sobald ich bei den Analogwerten auf Kanal 0 einen vollen Sinus aufgenommen habe, beendet sich die Messwertaufnahme selbstständig.
Deine Messwerterfassung wird beendet, sobald du den STOPP-Button klickst. Nicht früher, nicht später!
Kannst du dein Problem etwas genauer beschreiben? Gibt es Fehlermeldungen?
Warum fragst du nicht feste Sampleblöcke ab? So wie ich es gezeigt hatte?
Warum die parallel laufende Schleife? Wieso ist die auf "unendlich lang laufend" eingestellt?
Zitat:Deine Messwerterfassung wird beendet, sobald du den STOPP-Button klickst. Nicht früher, nicht später!
So wie ich es jetzt habe, wird genau ein Sinus aufgenommen. Sobald dieser vollständig ist, beendet sich die Messwertaufnahme ohne das ich den Stop-Button betätige.
Zitat:Kannst du dein Problem etwas genauer beschreiben? Gibt es Fehlermeldungen?
Fehler-200278
Digital - SW-Timed Input-Hardwaregetaktet.vi<append>
<B>Es wurde versucht, ein Sample zu lesen: </B>1000
<B>Eigenschaft: </B>RelativZu
<B>Zugehöriger Wert: </B>Aktuelle Leseposition
<B>Eigenschaft: </B>Offset
<B>Zugehöriger Wert: </B>0
<B>Task-Name: </B>_unnamedTask<244>
Zitat:Warum fragst du nicht feste Sampleblöcke ab? So wie ich es gezeigt hatte?
Ich will doch pro Kanal immer nur eine Sample haben, also einen Wert einlesen. Oder verstehe ich da was falsch bei der Bedeutung eines Sample?
Dein Beispiel läuft bei mir leider gar nicht. Es wird kein Eingang gelesen.
Zitat:Warum die parallel laufende Schleife? Wieso ist die auf "unendlich lang laufend" eingestellt?
Die parallele Schleife mit dem Graph war nur zu testzwecken da um den Analogwert darzustellen.
Die Schleife mit dem Taster ist daraus entstanden, dass ich von dem Stop-Taster keine lokale Variable erstellen kann um zwei Schleifen zu stoppen.
Gibt es hier eine schönere Lösung?
Ziel des ganzen ist es, ein zyklisches Lesen und Schreiben aller Ein und Ausgänge zu ermöglichen, wie es bei einer richtigen SPS der Fall ist.
Hallo AMueller,
Zitat:wird genau ein Sinus aufgenommen. Sobald dieser vollständig ist, beendet sich die Messwertaufnahme ohne das ich den Stop-Button betätige.
Die Schleife, in der die Messwerte aufgenommen werden, wird NUR durch den STOPP-Button beendet! Anders geht es nicht…
Zitat:Fehler-200278
Was sagt die Fehlermeldung? "Die Erfassung wurde gestoppt!"
Warum wurde sie gestoppt? Weil du es so programmiert hast!
Und wo? Genau, beim DAQmxTiming. Jeder der Inputs hat eine Bedeutung und einen Default-Wert. Du solltest dir mal den Input "Sample-Mode" anschauen…
Zitat:Ich will doch pro Kanal immer nur eine Sample haben, also einen Wert einlesen.
Und warum liest du dann dein boolsches Array als 2D ein?
Abgesehen davon: bei 200Hz Samplerate mit Einzelwerten arbeiten zu wollen, ist nicht sehr sinnvoll. Die Rechenlast steigt dann schon und bei geringfügig höheren Sampleraten bekommst du wieder andere DAQmx-Fehler präsentiert…
Außerdem gibt es da die Links in meiner Signatur und die ganzen LabVIEW-Beispiel-VIs. Da sind auch welche dabei, die die hardware-getriggerte Messwerterfassung erläutern…
Ja die Erfassung wurde gestoppt. Das meinte ich. Ich dachte aber die Schelife wäre gestoppt worden. Mit kontinuierliche funktioniert es jetzt.
Die 200Hz Samplerrate ist momentan nur so hoch gewählt, weil es sonst ewig dauert bis ein voller Sinus beim Analogsignal eingelesen ist mit der simulierten DAQ.
Ich habe das 2D Array benutzt, weil ich nur dann Werte erhalte. Jetzt habe ich es auf 1D geändert und erhalte wieder keine Werte.
In dem Screenshot im Anhang sieht man Array "Daten". Dieses sollte ja eigentlich mit einsen und Nullen gefült sein.
Hallo AMueller,
Zitat:Jetzt habe ich es auf 1D geändert und erhalte wieder keine Werte.
Falsch, das ist eindeutig eine Null im "data"-Indicator!
Du liest hier portweise ein ("Digital 1D U8"): es werden 8 bit in einem U8-Wert angezeigt.
Bei 32 lines solltest du eigentlich "Digital 1D U32" einlesen…