"Ringbuffer overflow" bei Synchronisation von analog und digital Signal
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
12.01.2014, 12:44 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2014 12:51 von MNLF.)
"Ringbuffer overflow" bei Synchronisation von analog und digital Signal
Hallo LabVIEWForum,
seit kurzem beschäftige ich mich mit Labview (was anfänglich auch relativ gut funktioniert hat), doch nun bin ich an einem Punkt wo ich nicht wirklich weiter komme.
Kurz zu meinem Vorhaben:
Ich möchte mittels eines Laser-Sensors der Firma Micro-Epsilon, Typ optoNCDT 1402 die Veränderung eines Abstandes messen. Der Laser-Sensor ist über einen USB to RS-422 CONVERTER mit dem PC verbunden. Die Implementierung des Sensors in Labview erfolgt mittels eines von Micro-Epsilon zur Verfügung gestellten VI's.
Gleichzeitig möchte ich mit dem Thermoelement-Eingangsmodul NI 9213, welches ich in dem Chassis cDAQ-9171 betreibe eine Temperatur messen.
Bei der Messungen ist es für mich wichtig das Abstands- und Temperaturmessung synchron laufen. Realisiert habe ich dies mittels einer "Zeitgesteuerten Schleife". Einen Sceenshot vom VI habe ich angehängt (Bild: VI).
Bis jetzt genügte es den Abstand mit 50 S/s und die Temperatur mit 5 S/s zu messen. Jetzt würde ich aber gerne den Abstand mit 1000 S/s und die Temperatur mit 100 S/s messen, was auch direkt zu meinem Problem führt. Während der Messung bekomme ich die Fehlermeldung: "Ringbuffer overflow". Ich habe einen Sceenshot hierzu angehängt (Bild: Fehlermeldung).
Woran liegt dies?
Ist es nicht richtig dies mit einer "Zeitgesteuerten Schleife" zu realisieren?
Habe hier im Forum bei ähnlichen Problemen gelesen, dass so etwas mittels Occurences oder Rendezvous gelöst werden kann.
Mittels Occurences und Rendezvous habe ich es ausprobiert, jedoch ohne Erfolg.
Des Weiteren habe ich des häufigeren gelesen, dass es unpraktisch ist, bzw. das es zu Problemen führen kann, so etwas wie den von mir benutzten DAQ-Assistent zu verwenden. Kann dies bei mir ein Problem sein?
Weiß nicht wie ich weiter vorgehen soll...wäre super dankbar wenn Ihr mir weiterhelfen könnt.
RE: "Ringbuffer overflow" bei Synchronisation von analog und digital Signal
Der Fehler kommt ja aus der Kommunikation zu deinem Laser-Sensor. Ist es überhaupt möglich, über die RS485 hier 1000 Werte/s zu übertragen? Hast du das schon alleine getestet? Was sagt das Handbuch dazu?
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: "Ringbuffer overflow" bei Synchronisation von analog und digital Signal
Die Übertragung von 1000 S/s ist möglich, das funktioniert auch. Sobald ich versuche Abstands- und Temperaturmessung zu synchronisieren tritt dieser Fehler auf. Darum denke ich, das Problem steckt in der Synchronisation, da mache ich irgendetwas falsch.
Wenn ich den Laser-Sensor und die Temperaturmessung jeweils in einer While-Schleife laufen lasse (siehe Bild) funktioniert es einwandfrei.
Jetzt ist nur das Problem wie bekomme ich die beiden Messungen synchron?
An dieser Stelle war mein Ansatz eine "Zeitgesteuerte Schleife" zu verwenden, was aber zu dem Problem des Ringbuffer overflows führt.
RE: "Ringbuffer overflow" bei Synchronisation von analog und digital Signal
Die Screenshots vom Blockdiagramm helfen leider nicht sonderlich bei der Fehlersuche.
Untersuche mal:
1) Durchlaufzeiten der Schleifen, wenn du sie parallel programmierst. (s. http://www.labviewforum.de/Thread-Schlei...#pid161256 )
2) Wie viele Element enthält das "Micro-Epsilon"-Array?
3) Welche Einstellungen hast du im DAQ-Assi vorgenommen?
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: "Ringbuffer overflow" bei Synchronisation von analog und digital Signal
Erstmal danke für deine Mühe.
Habe das VI mal angehängt.
Hoffe das es geöffnet werden kann, da es auf eine Bibliothek zugreift.
Desweiteren habe ich einen Screenshot vom DAQ-Assistent angehängt.
Bei der Untersuchung der Durchlaufzeiten der Schleifen sehe ich, wenn ich es richtig gemacht habe, dass diese stark schwanken.
RE: "Ringbuffer overflow" bei Synchronisation von analog und digital Signal
(13.01.2014 11:06 )jg schrieb: 2) Wie viele Element enthält das "Micro-Epsilon"-Array?
Und??
(13.01.2014 14:36 )MNLF schrieb: Habe das VI mal angehängt.
Hoffe das es geöffnet werden kann, da es auf eine Bibliothek zugreift.
Ja, aber hilft nicht viel weiter, da wohl die allerwenigsten deine ME-SubVIs installiert haben. Wo kann man da Scanrate und Anzahl der Werte pro Abfragezyklus einstellen?
(13.01.2014 14:36 )MNLF schrieb: Bei der Untersuchung der Durchlaufzeiten der Schleifen sehe ich, wenn ich es richtig gemacht habe, dass diese stark schwanken.
Und, wie sind die Ergebnisse konkret, also in Zahlen bzw. Zeiten? Besteht ein Zusammenhang zur Anzahl der zurückgemeldeten Werte?
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: "Ringbuffer overflow" bei Synchronisation von analog und digital Signal
- das Micro-Epsilon Array enthält 50 Elemente
Durchlaufzeiten der Schleifen:
- Temperaturmessung: 1000ms +/- 4ms
- Abstandsmessung: es ist bei den Werten zu sehen, dass diese stark um 50ms schwanken --> 50ms +/- 40ms
Zu deiner Frage: Wo kann man da Scanrate und Anzahl der Werte pro Abfragezyklus einstellen?
Bis dato habe ich dies entweder über teach-in am Sensor oder über ein separates Programm von Micro-Epsilon gemacht.
So wie ich das in einem der Sub-VI's sehe, werden 50 Werte pro Abfragezyklus abgefragt.
Sehe ich das richtig das dies zu den Elementen des Arrays passt?
RE: "Ringbuffer overflow" bei Synchronisation von analog und digital Signal
Aha, jetzt wird einiges klar, fassen wir zusammen:
Das Mikro-Epsilon-Read VI gibt dir immer 50 Werte zurück.
Wenn du also per externer Software oder am Laser-Sensor selbst eine Erfassungsrate von 1 kHz einstellst, muss das VI im Schnitt 20x pro Sekunde laufen, um nachzukommen. Dass dabei die Durchlaufzeit pro Abfrage ziemlich stark schwankt, wundert mich zwecks RS-485 Anbindung nicht sonderlich.
In deinem ersten VI hast du bei der zeitgesteuerten Schleife aber eine Durchlaufzeit von 1s eingetragen, kein Wunder also, dass du irgendwann einen Buffer-Overflow vom Sensor erhälst, schließlich fragst du nur 50 anstatt 1000 Werte ab.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!