PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SICK Laserscanner



arnoa
12.05.2013, 17:25
Da mir die Einbindung meines alten PLS100-112 einiges an Zeit gekostet hat, möchte ich hier meine Erfahrungen teilen.
Der PLS100-112 hat schon einige Jahre auf dem Buckel und es gibt so gut wie keine Informationen mehr im Netz. In diesem Sinne möchte ich mich bei einem SICK Technik-Mitarbeiter bedanken der mir diesbezüglich alle noch vorhandenen Dokumentationen zukommen hat lassen. Ohne diese Informationen und einem guten Serial-Port Sniffer wäre ich nicht ans Ziel gekommen!

Das Ergebnis sieht derzeit so aus:
http://www.aurob.com/wp-content/uploads/2013/03/aurob_software_sick_laserscanner.jpg
Die Einbindung war nicht ganz einfach da keine Beschreibung des Datenstromes bzw. zum Aufbau eines Datensatzes mehr zu finden war und die Befehlssätze vom PLS200 nicht gleich sind wie die des PLS100. Der Datensatzaufbau (wenn dann mal die Daten kommen http://www.aurob.com/wp-includes/images/smilies/icon_wink.gif ) sieht wie folgt aus:http://www.aurob.com/wp-content/uploads/2013/03/sick_data_format1.jpg (http://www.aurob.com/wp-content/uploads/2013/03/sick_data_format1.jpg)
Ich lasse den Lasercanner auf die vollen 180° arbeiten. Abtastschritt ist ein halbes Grad. Somit bekommen ich 720 Bytes an Daten (je ein Low und ein High Byte pro Grad). Diese werden dann zusammengesetzt und ergeben die Länge zum Hindernis. WICHTIG, und dieser Fehler hat mir viel Zeit gekostet, ist das vom High Byte die letzten drei Bits abgeschnitten werden müssen. Somit stehen für den Abstandswert 12 Bits zu Verfügung mit denen ein Bereich von 0 bis 8191 abgedeckt wird. Das sieht dann wie folgt aus:
http://www.aurob.com/wp-content/uploads/2013/03/sick_data_bitmask.jpg (http://www.aurob.com/wp-content/uploads/2013/03/sick_data_bitmask.jpg)
Ich habe das derzeit in dieser Form gelöst (unschön – muss optimiert werden!)
// Einlesen des Low und High Bytes
int dec_low = buffData[i + 0]; // LOW BYTE
int dec_high = buffData[i + 1]; // HIGH BYTE
// Die letzten drei Bits vom High Byte entfernen
int dec_high_cut = (byte)(dec_high << 3);
dec_high_cut = (byte)(dec_high_cut >> 3);
// Low und High Byte miteinander verbinden
int decvalue = dec_high_cut << 8 | dec_low;
// x und y Koordinaten für die Ausgabe berechnen
x = (decvalue * Math.Cos(deg * (Math.PI / 180)));
y = (decvalue * Math.Sin(deg * (Math.PI / 180)));
Bei Interesse und/oder Bedarf kann ich natürlich detailliertere Informationen zur Einbindung liefern.

021aet04
12.05.2013, 18:20
Das Programm sieht gut aus. Mit welchem Programm hast du das geschrieben? Mit einem Visual Studio Programm?

Welchen Port Sniffer hast du verwendet? Ich bräuchte aktuell auch einen guten Portsniffer.

MfG Hannes

arnoa
12.05.2013, 18:34
Hallo Hannes!
Meine Bot-Steuerung ist in C# (akt. Visual Studio Express 2012) geschrieben - die Darstellung der Laserscannerdaten ist nur ein kleiner Teil der gesamten Software.
Als Portsniffer hab ich "Serial Port Monitor" von Eltima Software verwendet.

LG, Arno

021aet04
12.05.2013, 19:42
Hast du die Vollversion vom Portsniffer? Ich habe gerade eine Freeware von heise.de heruntergeladen, muss es aber erst testen.

MfG Hannes

arnoa
12.05.2013, 20:50
Ich hab mit (ich glaube) 30 Tage Testversion begonnen und mir dann die Pro Vollversion geleistet. Die Testversion hat den gleichen Umfang wie die gekaufte - läuft halt nach 30 Tagen nicht mehr.

021aet04
12.05.2013, 21:37
Ich arbeite gerade mit dem Free Serial Port Monitor von HDD Software. Bis ich drauf gekommen bin das man den Com Port mit einem anderen Porgramm öffnen muss hat es etwas gedauert. Gerade bin ich am Analysieren. Wie lange hast du gebraucht bist du das Protokoll hattest?

PS: Die Version die ich heruntergeladen hatte war auch eine Demo mit 14Tage Laufzeit.

MfG Hannes

arnoa
13.05.2013, 07:28
Ja, waren wahrscheinlich 14 Tage Testzeit beim Serial Port Monitor - hat gereicht ;)

Ich hatte ziemliche Probleme bzw. hat es einfach ein Weilchen gedauert bis ich verstanden habe was abgeht. Der Laserscanner kann in verschiedenen Modi betrieben werden, je nachdem sieht der Header anders aus und natürlich auch die Daten welche folgen. Im weiteren treten (warum auch immer) Fehler auf. Z.B. kann es sein dass die Menge an Daten welche im Header angegeben wurde, einfach nicht die kommt. usw. ;)

In Summe bin ich sicher an die drei Tage gesessen bis ich alles soweit hatte.

LG, Arno