LabVIEWForum.de - Seriell Daten empfangen und auswerten

LabVIEWForum.de

Normale Version: Seriell Daten empfangen und auswerten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Zusammen,

ich hab ein problem, das keine Lösung findet und ich sitz da schon seit Monaten dran und weiß echt nicht weiter. Will bald schon wieder auf C-Programmierung umsteigen um vielleicht das "Problem" besser in den Griff zu bekommen.

Ich hab einen Lasersensor, der über die Serielle Schnittstelle an mein Rechner den Messwert in 2 Bytes sendet. Laut Hersteller ist der Datenstrom kontinuierlich, d.h. ich kann es ständig abfragen. Die Auswertung des Messwertes ist ja kein Problem, aber irgendwie liegen nicht immer 2 Bytes am Eingang der seriellen Schnittstelle an oder zumindest hab ich den Eindruck, dass es so ist. Im gewissen Messbereich des Sensors wird richtig gemessen und sobald ich den Sensor bewege, also den Abstand zum Messobjekt ändere, oder versuche einen Wert an einer Stelle zu lesen, dann bricht die Auswertung zusammen und/oder LabVIEW zeigt irgendeinen komischen Wert an.

Also ich hab den Eindruck, dass es teilweise ein Byte falsch läuft bzw unvollständig und dieser verfälscht dann das ganze.


Tut mir leid für die komische Erklärung - ich wüßte sonst nicht wie ich es beschreiben soll

Komischerweise kann die Herstellersoftware aber alles Problemlos auswerten.

Einige Ingenieure haben mir schon gesagt, dass es sich nach einem Synchronisationsproblem anhört, aber mit "Synchronisation bei VISA" kann ich nix anfangen.

Habt Ihr eine Idee oder hatte jemand schon ein ähnliches Problem?


Danke für eure Mühe

Gruß
thomas
Hallo Thomas,

ist das ein Laser-Sensor von Leuze oder baugleich von IPF ?

Der Abstandswert wird als High-Byte und Low-Byte gesendet, und Du mußt mit Shiftoperationen den Wert wieder zusammenbasteln ?
Da hab ich mal was dazu programmiert.
Schaus Dir einfach mal an.

Gruß
Andreas
Danke und ich ich muss schmunzeln, weil der Sensor wirklich von Leuze ist!

Ich schau gerade mal!


Danke vielmals!!!!
hi Andreas,


leider zickt der hier auch rum, beim ersten ausführen wurde der richtige Wert ausgegeben, aber bei weiteren ausführungen änderte sich der Wert zum 5Stelligen Wert oder springt zwischen vielen verschiedenen.

Läuft es bei dir problemlos? Ich hab einen ODSL8 Leuze - sensor.

Gruß
thomas
Hi Andreas,

Ich poste mal mein VI, vielleicht siehst du eine Verbesserung.

Also mein VI kann besser Werte erfassen als deins, aber ich hab auch gut rumgetrickst.

Gruß
Ich schau's mir morgen mal an!

Gruß
Andreas
Hallo Thomas,

ich habe den ODS 96 im Einsatz gehabt. Bei dem hat des Programm jedoch tadellos funktioniert.
Anfangs hatte ich auch das Problem, daß von Zeit zu Zeit ein Byte nicht gelesen wurde. Die Abfolge Low-Byte, High-Byte, Low-Byte etc. war dann durcheinander.
Da das niederwertigste Bit anzeigt ob es sich um das High- (1) oder Low-Byte (0) handelt, habe ich da einfach nach diesem Bit verglichen und damit die Zuordnung der gelesenen Werte zu den Schiebeoperation durchgeführt.

Ich hab eben das Datenblatt durchgesehen, die Protokolle sind identisch.

Was mir bei Deinem Programm unklar ist, was der Vergleich kleiner 2847 und größer 8827 bedeutet.

Du parametrierst die serielle Schnittstelle mit 2 Stopbits. Das Protokoll beinhaltet nur 1 Stopbit.

Ich hab leider keinen Sensor mehr hier, sonst hätte ich Dein Programm mal damit laufen lassen.
Aber ganz ehrlich, wie die Hex-Operationen zum Ergebnis führen sollen, ist mir nicht klar. Du hast das c-Beispiel in der Doku bestimmt auch gelesen. Das kannst Du genau so mit LV nach vollziehen.

Gruß
Andreas
Hi Andreas,

das VI ist das erste VI was ich je in LabVIEW geschrieben hab. Das waren die ersten Versuche und damit hab ich es auch hinbekommen den Sensor auszulesen, nur mit einem Problem - dem unseren. sonst war mein Vorgehen, dass ich die 2 bytes splitte, das Low-byte logisch schiebe, die 2bytes wieder richtig zusammensetze und wieder logisch schiebe. So hab ich die "Erkennungs-Bits" für High- & Lowbyte entfernt und das Ergebnis ist der Abstand (ohne Komma). Die nachfolgende Subtraktion von 2500 (25,00mm), sowie die Abfrage auf auf größer 0 und kleiner 2000 (20,00mm) ist nur für das endgültige Anzeigen des Wertes für meine Anwendung gedacht.

Die Abfrage auf kleiner 2847 und größer 8827 ist der MEssbereich des Lasersensors genau 25,00mm bis 45,00mm in Hex-kodiert.

Bin noch ein Newbie und bei der Konfiguration der VISA-serielle Schnittstelle hab ich mir gedacht, dass man 2 Stopbits einstellen muss, weil im Protokoll stand, dass ein Start- & Stopbit verwendet werden.

Wie gesagt - es klappt eigentlich ganz gut außer dass in manchmal richtig komische werte entstehen. Ich hab mich jetzt nochmal gefragt, ob es vielleicht sein könnte ,dass die Fremdlichteinwirkung doch zu groß ist. Man das wäre echt dumm.

Gruß
thomas
Referenz-URLs