LabVIEWForum.de
Pufferproblem, error 200279 - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Pufferproblem, error 200279 (/Thread-Pufferproblem-error-200279)

Seiten: 1 2


Pufferproblem, error 200279 - aschub - 26.11.2013 10:55

Hallo,

ich hoffe, hier kann mir jemand helfen, ich probiere schon seit Tagen rum und bekomme immer wieder den gleichen Fehler.

Ich habe ein HauptVI, mit dem ich aus 22 Kanälen Messdaten mit 1kHz auslese und mir graphisch anzeigen lasse. Das läuft fehlerlos. In einem SubVI, in dem sich eine for-schleife befindet, sollen alle Messdaten in eine Datei gespeichert werden. Wahrscheinlich ist diese Schleife das Problem, aber ich weiß nicht, wie ich das Speichern anders lösen kann. Wenn das SubVI aktiv ist und Werte abspeichert, tritt nach einigen Sekunden der Fehler -200279 (Pufferproblem) auf. Ich habe jeweils am DAQmx timer und -reader schon verschiedene Konstanten bei "Samples to read" angeschlossen, habe aber immer wieder diesen Fehler.

Hat jemand eine Idee, was ich dagegen tun kann?
Im Anhang findet Ihr beide VIs.

Gruß
Anja


RE: Pufferproblem, error 200279 - Y-P - 26.11.2013 11:11

Deine Speicher-SubVIs fehlen.

Gruß Markus


RE: Pufferproblem, error 200279 - GerdW - 26.11.2013 11:12

Hallo Anja,

1. Es ist überhaupt keine gute Idee, ein subVI vor dem Hochladen umzubenennen, da dann das HauptVI sein subVI nicht mehr findet...

2. Es ist keine gute Idee, "schöne" Datentypen wie Array of Waveform nach DDT umzuwandeln...

3. Es ist keine gute Idee, im subVI eine unnötige FOR-Loop zu verwenden. Überhaupt sollte hier viel aufgeräumt werden, ich habe mal ein paar Ansatzpunkte programmiert (s. Anhang).

4. Es ist überhaupt keine gute Idee, Dateioperationen in einer zeitkritischen Schleife (wie DAQ) zu erledigen. Dafür gibt es das Producer-Consumer-Schema!


RE: Pufferproblem, error 200279 - aschub - 26.11.2013 13:02

Hallo Gerd,hallo Markus,

danke für die Hinweise. Diesmal habe ich nichts umbenannt und alle SubVIs hochgeladen.

zu 2.: die Umwandlung in DDT habe ich gemacht, weil ich die Messwerte extrahieren will ohne bei allen Kanälen zusätzlich die Zeitstempel zu haben und sie in strings umzuwandeln, um sie letztendlich in eine csv-Datei zu speichern. Gehtr sicherlich auch anders, aber wie?

zu 3.: Danke, habe ich nun für alle Kanäle angepasst

Deinen 4. Punkt verstehe ich leider nicht. Kannst Du das bitte genauer erklären?

Auch mit aufgeräumtem SubVI habe ich leider noch den Fehler.

Gruß
Anja


RE: Pufferproblem, error 200279 - GerdW - 26.11.2013 13:08

Hallo Anja,

zu 2. Du bekommst ein Array of Waveforms vom DAQmxRead. Dieses kann man mit IndexArray in die einzelnen Signale zerlegen, dafür braucht man kein SplitSignal-ExpressVI. Mit GetWaveformComponents kannst du dir die Y-Daten ausgeben lassen - ohne dass du zwingend den t0-Zeitstempel benutzen musst...

zu 4. Dateioperationen sind Funktionen, deren Laufzeit nicht bekannt ist und die auch stark schwanken kann. Zusammen mit dem nicht unerheblichen Aufwand, den du beim Formatieren deiner Werte machst, wird also die DAQ-Schleife ausgebremst. Deshalb trennt man DAQ und Dateihandling üblicherweise in zwei parallele Schleifen auf und nutzt dafür das Producer-Consumer-Schema...


RE: Pufferproblem, error 200279 - jg - 26.11.2013 13:41

Mir erschließt sich nicht, was du mit dem SubVI "Aufzeichnung speichern 2(SubVI).vi" erreichen willst. Das läuft x-mal parallel (bzw. im System hintereinander, das nicht reentrant) und überschreibt das Chart sozusagen dauernd. Hmm

Probier doch mal das Speichern als TDMS. Das Format ist ausgelegt für das Handling vieler Daten, eine Schnittstelle zu Excel existiert ebenfalls, und du musst nicht diese grausame Formatierungs-Orgie durchführen, die du dir gerade antust.

Natürlich erfolgt das Speichern auch bei TDMS nicht in der Erfassungsschleife, wie Gerd schon erwähnt hat.

Gruß, Jens


RE: Pufferproblem, error 200279 - aschub - 26.11.2013 16:26

Hallo Jens, hallo Gerd,

danke für die Tipps. Das "Aufzeichnung speichern..." war noch ein Überbleibsel aus der alten Version, habe ich entfernt, hatte keine Aufgabe mehr. Mit TDMS habe ich auch schon rumprobiert, aber bis ich diese Dateien dann in Matlab analysieren kann, muss ich etliche Zwischenschritte machen, z.B. die Zeit umformatieren, in .xlsx umwandeln etc. Mit .csv kann ich in Matlab am einfachsten arbeiten.
Meine Frage zu den 2 parallelen Schleifen: ich habe ja das HauptVI in einer grossen Schleife mit einer state machine. Soll ich dazu parallel eine zweite Schleife laufen lassen, die sich mit der Speicherung befasst? Oder war das anders gemeint? Kennt Ihr dazu einfache Beispiele? Alles was ich dazu gefunden habe, ist gleich wieder so komplex.

Gruß
Anja


RE: Pufferproblem, error 200279 - aschub - 27.11.2013 08:31

Guten Morgen,

ich habe nun ein producer-customer-Schema verwendet und habe folgende Frage dazu: die queues transportieren doch immer nur die Werte von einem Kanal, muss ich dann also für jeden Kanal ein queue anlegen? Oder gibt es eine Möglichkeit, alle in einem zu transportieren?

Gibt es sonst noch Verbesserungsvorschläge zu meinen VIs?

Gruß
Anja


RE: Pufferproblem, error 200279 - GerdW - 27.11.2013 09:02

Hallo Anja,

Zitat:die queues transportieren doch immer nur die Werte von einem Kanal, muss ich dann also für jeden Kanal ein queue anlegen?
Wenn man sowas hier absichtlich programmiert:
[attachment=47475]
dann darf man sich auch nicht wundern, wenn die Queue nur die Werte eines einzigen Kanals (den ersten mit Index 0) transportiert!

Man kann eine Queue auch für ein Array of Waveforms erstellen und alle Kanäle in einer Queue übertragen...

Zitat:Gibt es sonst noch Verbesserungsvorschläge zu meinen VIs?
- IndexArray statt SplitSignal
- aufräumen
- OPC-Kommunikation in subVI erledigen (gehört mit zu Aufräumen...)
- 4fach "SetDynamicDataAttributes" durch eine FOR-Loop ersetzen...
- 4fach OPC-Read in eine Schleife packen...
- wieso packst du ein Tab-Control-Terminal in eine Disable-Struktur?
- DAQmx-Kanäle in einer FOR-Loop definieren...
- durchgängige ErrorCluster-Verdrahtung und -Auswertung...


RE: Pufferproblem, error 200279 - aschub - 27.11.2013 10:00

Hallo Gerd,

danke, ein paar Dinge habe ich bereits umgesetzt. Leider funktioniert mein Speichern nicht so richtig, was stimmt denn da nicht?

Dann habe ich auch noch nicht verstanden, wie ich die DAQmx Kanäle in einer for-loop definieren soll. Kannst Du es mir noch genauer beschreiben?

Gruß
Anja