LabVIEWForum.de
Datenaufnahme über RS422 ruckelt - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Datenaufnahme über RS422 ruckelt (/Thread-Datenaufnahme-ueber-RS422-ruckelt)



Datenaufnahme über RS422 ruckelt - frankne - 12.11.2009 11:35

Hallo,

ich habe mir dieses kleine Programm zum Testen meines Sensors gebaut.
[attachment=22453]

Der Sensor:
hat eine Baudrate von 115200
jeder Messwert hat in ASCII eine Breite von 6bytes
Die Messrate kann sein: 350Hz 700Hz 1000Hz...

Wenn ich den Sensor auf 350Hz einstelle, dann werden die Daten in "Waveform Chart" kontinuierlich dargestellt.
Erhöhe ich jedoch die Rate auf 700Hz oder mehr ruckelt die Darstellung.

Wie kommt das? Reicht die Baudrate nicht aus?

Viele Grüße
Frank


Datenaufnahme über RS422 ruckelt - IchSelbst - 12.11.2009 11:51

' schrieb:Erhöhe ich jedoch die Rate auf 700Hz oder mehr ruckelt die Darstellung.
Das ist auch richtig so.
700Hz ist schneller als 2ms. Will sagen, die Anzeige am Bildschirm wird in kürzeren Zeitabständen als 2ms refresht. So schnell kann keiner kucken. Der Graph braucht eine bestimmte Zeit, um "Bilder" am FP anzuzeigen. Diese Zeit vergeht aber im Hintergrund und ohne den Datenfluß anzuhalten (was auch sinnvoll ist)! Kommen jetzt zu schnell neue Daten, kommt der Graph nicht mehr mit Refresh nach - und es ruckelt.

Zitat:Reicht die Baudrate nicht aus?
Dieser Effekt ist von der Baudrate ansich unabhängig.

Du solltest dir Gedanken machen, den Graph z.B. nur alle 100ms zu refreshen.

Außerdem:
Du verwendest ein Array-Element mit der Funktion "An Array anhängen" in einer Whileschleife. Dieses Verfahren ist sehr speicherintensiv und kann ebenfalls zu Laufzeitproblemen führen. Möglicherweise kannst du das durch ein ausreichend langes, initialisiertes Array und der Funktion "In Array ersetzen" ersetzen.


Datenaufnahme über RS422 ruckelt - frankne - 12.11.2009 15:19

Hallo,

ich glaub ich habe das mit dem Ruckeln ziemlich ungenau beschrieben:
bei 700Hz läuft der Graph anfangs schön durch, dann bleibt er dann für ne halbe Sek stehen und dies wiederholt sich ständig.

Ich denke nich, dass das nur an dem Graphen liegt, denn in einem anderen Programm, welches nur die Daten mit Zeit speichert habe ich den selben Effekt. Es kommen ca 10 Messwerte, dann mehrmals Timeout und dann wieder 10 Messwerte.

VG Frank


Datenaufnahme über RS422 ruckelt - IchSelbst - 12.11.2009 15:59

' schrieb:bei 700Hz läuft der Graph anfangs schön durch, dann bleibt er dann für ne halbe Sek stehen und dies wiederholt sich ständig.
Bezüglich des Graphen gilt noch immer, was ich oben gesagt habe.

Zitat:Ich denke nich, dass das nur an dem Graphen liegt
Richtig. Es liegt nicht nur am Graphen.

Zitat:denn in einem anderen Programm, welches nur die Daten mit Zeit speichert habe ich den selben Effekt.
Auch LV?


Du musst auch folgendes beachten: Die Daten müssen schnell genug aus der Schnittstelle ausgelesen werden!
Normalerweise hat die Schnittstelle einen internen Puffer (dessen Größe man angeben kann). Der Puffer ist notwendig, um Zeitungenauigkeiten zwischen VISA-Treiber und empfangendem Programm auszugleichen. Nichtsdestoweniger muss das empfangende Programm (also z.B. deine obige Schleife) in der Lage sein, den Puffer schneller auszulesen als er beschrieben wird. Ansonsten läuft er nämlich über und es gehen Daten verloren. Möglicherweise musst du dein Programm also umbauen.

Der Umbau läuft darauf hinaus, den Puffer nach LV (also in dein Programm) zu verlagern und somit beliebig zu vergrößern. Eine (parallele) While-Schleife könnte so schnell sie kann, den VISA-Rd-Puffer auslesen und die Daten in eine Queue (das ist dann der eigene, beliebig große Puffer) schreiben und damit zwischenpuffern.

Das bisherige Programm ließt nun diese Queue aus - und kann sich damit beliebig Zeit lassen.

Kannst du mir soweit folgen?