LabVIEWForum.de
daqmx ao stockt - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: daqmx ao stockt (/Thread-daqmx-ao-stockt)



daqmx ao stockt - yoyo - 25.07.2012 12:46

ich versuche einen feedback loop zu implementieren, der jededsmal, wenn ein neuer wert berechnet wurde diesen via eines cDAQ-9188 ausgeben soll. Dise funktioniert meistens auch recht gut, nun habe ich aber ein komisches verhalten beobachtet:

im angehängten test-vi sende ich bei jedem durchlauf des loops ein 1d-array mit nullen an das daq. im schnitt braucht der loop ca 35ms um einmal durchzulaufen. von zeit zu zeit stockt er aber und braucht für einen durchlauf viel länger, nämlich ca 270ms, bevor er dann mit dem nächsten wieder auf 35ms runter kommt.

ich hab dann die zeitpunkte, zu denen das passiert etwas genauer angeschaut und bemerkt, dass dieses stocken immer genau alle 10 sekunden (oder ein vielfaches davon, also 20 / 30 / etc sekunden) auftritt. und wenn man die absolute zeit anschaut, zu der das passiert, fällt auf, dass die stocker immer zur selben zeit auftreten. also z.b. um 13:21:41.8 und 13:21:51.8 und 13:22:11.8 (hh:mm:ss). auch wenn das vi dazwischen gestoppt und neu gestartet wird. wenn ich das daq aber vom computer trenne und wieder neu anschliesse ändert sich diese absolute zeit (dann z.b. 13:25:07.4 & 13:25:17.4 etc)

das ganze ist grösstenteils unabhängig davon wieviele channels ich sende und ob ich im loop noch ein "wait ms" einfüge. bei vielen channels und ohne wartezeit stockt der loop einfach jede 10 sekunden, bei weniger channels und/oder mit wait auch mal erst nach 20 oder 30 sekunden. aber immer zum gleichen absoluten zeitpunkt und immer nach vielfachen von 10 sekunden.

hat irgendjemand eine idee woran das liegen könnte?




RE: daqmx ao stockt - Y-P - 25.07.2012 14:58

Offtopic2 Bitte LVF-Regeln beachten. Rulez
Vor allem den Abschnitt mit der Groß- und Kleinschreibung.

Gruß Markus


RE: daqmx ao stockt - Lucki - 26.07.2012 07:13

Da du die Konfiguration im MAX vorgenommen hast, kann man sie leider nicht sehen. Ich gehe aber mal davon aus, dass die Einstellung "kontinuierlich" und "nicht regenerierend" ist. Puffergröße leider unbekannt.
Was stört Dich überhaupt an diesen Pausen? Es wird doch bei jedem Schleifendurchlauf nur der Puffer nachgefüllt. Entscheidend ist doch nicht die Frage, ob die Pufferauffüllung, sondern ob die Datenausgabe kontinuierlich erfolgt. Dazu müsstest Du die ausgegebene Spannung beobachten. Voraussetzung ist da natürlich, dass du ein strukturiertes Muster ausgibst, wenn es lauter Nullen sind, merkt man nicht, ob die Ausgabe läuft oder ob sie stockt.


RE: daqmx ao stockt - yoyo - 26.07.2012 16:46

Also, ich hab mir das mal angeschaut. Via Property-nodes bekomm ich raus, dass regeneration erlaubt ist und Buffer Grössen hab ich zwei verschiedene gefunden: Die OutputBufferSize ist 0 und die OnboardBufferSize ist 8191. Leider weiss ich nicht, was der Unterschied zwischen den beiden ist und woher die Einstellungen genau kommen. Wo und wie ich nachschauen kann, ob die Einstellung auf kontinuierlich gesetzt ist, weiss ich nicht. Aber da das vi eigentlich so lange läuft bis ich Stop drücke, gehe ich davon aus, dass es kontinuierlich ist.

Das Problem mit den Pausen ist, dass ich ein Feedback System implementiere. Grob gesagt sieht das ganze Programm so aus, dass in einem paralell laufenden Loop Daten gemessen werden und diese dann im Feedback-Loop verarbeitet und die Kontrollvariabeln neu gesetzt werden. Das heisst ich messe z.B. alle 40ms und will noch vor der nächsten Messung die Kontrollparameter neu anpassen. Das funktioniert auch, solange der Feedback-loop in 35ms einmal durchläuft. Wenn er aber plötzlich stecken bleibt, werden im Mess-loop immer noch alle 40ms Daten aquiriert, die sich dann in einem Buffer stauen und warten bis der Feedback-loop wieder zur verfügung steht. Ist dies dann wieder der Fall bekommt die Feedback-Berechnung in den nächsten paar Durchläufen Daten, die überhaupt nicht auf die Änderungen reagieren, die vom Feedback gemacht wurden, da sie ja schon vorher aufgezeichnet worden sind. Irgendwann hat der Feedback-loop dann den Mess-loop wieder eingeholt und kann sich wieder beruhigen. Aber jedesmal, wenn dieser Delay passiert "verschluckt" sich mein ganzes Feedback halt.

Also eigentlich will ich keinen Buffer haben, sondern jeden Wert, den ich setzte auch sofort ausgeben.

Ich hoffe, das ist einigermassen verständlich...


RE: daqmx ao stockt - BerndDasBrot - 26.07.2012 17:19

Es scheint mit dem timeout am DAQ write zusammenzuhängen, wo 10 sek angegeben sind. Versuche es mal mit 0, vielleicht behebt es das Problem.

Gruss, BDB


RE: daqmx ao stockt - yoyo - 27.07.2012 09:10

Das hab ich schon probiert, mit diversen verschiedenen Werten. Dadurch ändert sich leider überhaupt nichts.


RE: daqmx ao stockt - Lucki - 27.07.2012 14:46

Zu den Betriebsarten "regenerativ" und "non regenerativ"
Bei "regenerativ" werden nur einmal Daten in den Buffer geschriiben. Die Ausgabe wiederholt sich dann unendlich, das VI DAQmxWrite wird nur ein einziges Mal aufgerufen.
Bei "non regenerativ" ist das nicht so. Es muss dann mit DAQmxWrite laufend der Buffer nachgefüllt werden, bevor er leer ist.

Was passiert, wenn man die Betriebsart "regenerativ" wählt und dann trotzden laufend Daten in den Puffer nachschiebt, das weiß ich ehrlich selbst nicht. Es passt aber nicht zusammen.

Was Du eigentlich genau willst, kann man am VI auch nicht erkennen, denn wenn Du nur Nullen ausgibt, ist es ja ein Nopnsens-VI - das Ganze entspricht der Ausgabe des Einzelwertes "0"

Auf meinen Vorschlag, den Ausgang Dir mal anzuscheuen, bist Du auch nicht eingegangen. Fehlt es an einem Oszilliskop oder was ist sonst der Grund?