Geschwindigkeitsmessung PDV Vertiefung Projekt Geschwindigkeitsmessung 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Aufgabenstellung Positionsbestimmung einer Modelleisenbahn durch Geschwindigkeitsmessung. MIT : Messvorrichtung Programm zur Geschwindigkeitsermittlung Weiterverarbeitung durch Javaprogramm 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Projektplanung Umsetzung der Messung durch Funkmaus. Entwicklungsumgebung (C++, VB, Java, C#,….). Laufzeitumgebung des fertigen Programms (Windows, Linux, Dos). Schnittstelle für Java Programm. 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Projektplanung Was für ein Maustyp ? USB Funkmaus USB Funkmaus mit seriellem Adapter PS2 Funkmaus Serielle Funkmaus Problem Serielle Funkmaus nur schwer bzw. gar nicht zu beschaffen Serieller Adapter ist nicht immer mit jeder USB Maus kompatibel Deshalb USB Maus 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Weitere Probleme Messmaus darf nicht als „normale Maus“ vom BS erkannt werden. (Messverfälschung) Keinen direkten Zugriff auf Hardware unter Win2000/XP/NT Einsatz eines generischen Treibers mit Win32 API Schnittstelle Vorteile Plug & Play durch USB Treiber Läuft unter fast allen gängigen BS (Win95/98/2000/NT/XP) HW wird nicht als Maus erkannt vom Betriebssystem 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Aufbau des Universal Serial Bus Alle Aktivitäten gehen vom Master (PC) aus. Datenpakete werden wahlweise von 8 – 256 Bytes versendet/empfangen. Jedes USB Gerät hat : - 1 Device-Deskriptor - 1 od. mehrer Configuration-Deskriptor - 1 od. mehrer Interface-Deskriptor - 1 od. mehrer Endpoint-Deskriptor 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
USB Descriptor Hierarchie Das System fragt neben dem Konfiguration-, Interface- auch die Endpoint-Deskriptoren ab. Jedes Gerät wird anhand der beiden 16-Bit-Zahlen (Vendor-ID/Produkt-ID) genau Identifiziert. 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Einbindung des generischen USB Treiber Benutzt wurde das USBIO Development Kit V2.0(LT) der Firma Thesycon. Durch Benutzung der Programmierschnittstellen wurde ein direktes Auslesen der Daten von der USB Maus möglich. Programm ist als Freeware zu bekommen. Entwicklung eines eigenen Treibers entfällt. 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Win32 USB Treiber Stack 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Einbindung des generischen USB Treiber Einfache Installation durch Setuproutine. Nach der Installation erfolgt die Konfiguration (Umleiten des gewünschten USB Gerätes). Die Funkmaus wird hier als HID (Human Interface Device) bezeichnet. 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Einbindung des generischen USB Treiber 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Das Programm ReadPipe Die Hauptaufgaben : Stellt die Verbindung zum USB Gerät her. Ließt die Daten kontinuierlich aus der USB Maus aus. Errechnet aus diesen die Aktuelle Geschwindigkeit. Speichert Messdaten in eine Textdatei für spätere Auswertung. 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Das Programm ReadPipe Das Programm wird momentan noch mit 2 Parametern aufgerufen. Para1 = Datei zum Speichern der Messdaten Para2 = Endpoint Adresse des USB Gerätes z.B. 0x81 Folgende Include Dateien werden benötigt : #include <windows.h> #include <stdio.h> #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <sys/timeb.h> #include <sys/types.h> #include <string.h> #include <time.h> #include <winioctl.h> #include <setupapi.h> #include "usbio_i.h„ #include "usbspec.h“ Die Includedatei usbio_i.h stellt USBIO Treiber Interface da. 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Das Programm ReadPipe Die externe Funktion IoctlSync( ) Die IoctlSync ist eine generische Unterstützungsfunktion, um die IOCTL Request´s zum USBIO Gerätetreiber weiterzuleiten. Diese Funktion wird intern verwendet, um die asynchrone USBIO API zu handeln. Sie ruft unter anderem den Gerätetreiber auf. 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Das Programm ReadPipe Funktion IoctlSync() DWORD IoctlSync( HANDLE FileHandle, DWORD IoctlCode, const void *InBuffer, DWORD InBufferSize, void *OutBuffer, DWORD OutBufferSize, DWORD *BytesReturned ) { DWORD Status; DWORD BytesRet = 0; BOOL succ; OVERLAPPED Overlapped; ZeroMemory(&Overlapped,sizeof(Overlapped)); Overlapped.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL); if ( Overlapped.hEvent==NULL ) { return USBIO_ERR_NO_MEMORY; } /* Ruft den Gerätetreiber */ succ = DeviceIoControl( FileHandle, // driver handle IoctlCode, // IOCTL code (void*)InBuffer, // input buffer InBufferSize, // input buffer size OutBuffer, // output buffer OutBufferSize, // output buffer groesse &BytesRet, // anzahl der zurückgegebenen bytes &Overlapped // OVERLAPPED structure ); if ( succ ) { Status = USBIO_ERR_SUCCESS; } Else { …………………… 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Das Programm ReadPipe Main() Auflisten aller angeschlossener USBIO Geräte mit der Funktion SetupDiGetClassDevs( ); Aufzählen der Geräte-Interfaces Auslesen der Interfaces Detail Daten 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Das Programm ReadPipe Main() Öffnen des Gerätes mit der Funktion CreateFile( ); // Gerätehandle erstellen Danach Konfiguration des USB Gerätes durch Aufruf der Funktion IoctlSync( ) Nun muss noch der Gerätehandle an eine Pipe gebunden werden, wieder durch IoctlSync( ) // nur eine Pipe pro Handle 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Das Programm ReadPipe Main() Herzstück des Programms: Endlos For Schleife wird nur bei _kbhit() unterbrochen. Mit der Funktion ReadFile() lesen wir nun die Daten in unseren Buffer. Abfrage ob das Auslesen korrekt gelaufen ist Buffer auslesen und Geschwindigkeit ausrechnen. 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Das Programm ReadPipe Main() BufferPosition=2; result=(char)(Buffer[BufferPosition]); sum = sum+result; BufferPosition=BufferPosition+4; stop = clock(); VerstricheneTime = (double)(stop - start) / CLOCKS_PER_SEC; GesamtTime = (double)(stop - gtime) / CLOCKS_PER_SEC; if (VerstricheneTime >= MSEC) { start = clock(); deltasum = sum - tmpsum; tmpsum = sum; strecke = (double)((double)(deltasum*EICHUNG)/MOUSE_AUFLOESUNG); gesamtstrecke = (double)((double)(sum*EICHUNG)/MOUSE_AUFLOESUNG); geschwindigkeit = (strecke/VerstricheneTime); …….//Ausgabe } 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Aufbau einer Maus I Logitech Funkmaus(Logi CL Maus €32) Reichweite ca. 2m Ball an der Unterseite eingelassen Übertragung der Bewegung über eine Walze zu der Codierscheibe Abnahme der Bewegung mit Leucht- und Fotodiode 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Aufbau einer Maus II Signale werden von Chip codiert Codierung in 5 Byte breite Wörter 1 2 3 4 5 00 FA Knöpfe Links-Rechts Vor/Zurück Scroll-Rad ?? 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Anforderungen an die Maus USB (wegen Hilfstool) Ball zur Bewegungsaufnahme (wegen Übertragung Achse-Codierscheibe) Funkübertragung Mind. 2m Reichweite => Logitech Funkmaus(Logi CL Maus €32) 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Der Umbau I Fragestellung: Maus auf die Schiene oder Maus auf den Wagen ? 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Der Umbau II Entfernen aller Komponenten vom Mausgehäuse Aussägen der Halterung für die Codierscheibe und eine nicht Verwendete Markieren der Position der Halterungen auf dem Wagen Position ist abhängig von der Achse 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Der Umbau III Durchbohren des Wagens zur Achse Halterungen mit Heißkleber befestigen Auslöten der LED´s aus der Hauptplatine und auf Trägerplatine (1cm x 1cm) löten Verbinden der Träger- platine mit der Hauptplatine und in Halterung stecken 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Der Umbau IV Hauptplatine festkleben Keilriemen aufziehen (von Handschuh) Batterien anschließen 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Der Umbau V => Fertig !! 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Aufgetretene Probleme und Erkenntnisse Bei höheren Geschw. Wegverlust (Datenverlust) Resultierend aus der Trägheit der Diode => Übersetzung durch einen Keilriemen, anstatt Direktmontierung auf der Achse Verlust aufgrund von Schlupf sollte vernachlässigbar sein 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Weitere Erkenntnisse Optische Maus nicht geeignet Durch Beschaffenheit der Gleise Abstand Gleise – Mausoptik Aufbau der Messeinrichtung auf der Lokomotive nicht geeignet Wegen Platzmangel 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Kommunikation mit dem JAVA-Programm Shared Memory Segment (-) TCP (+) UDP (++) 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper UDP Anforderungen die wir stellen: Kurze Nachrichten versenden (+) Schnell und unkompliziert einzurichten (+) Schneller Transport Wiederholen der Anfrage bei keiner Antwort => UDP Verbindung 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
UDP Programm Aufbau (Client/Server) Erzeugen eines Sockets ( Socket (...) ) Binden des Sockets an den gewünschten Port ( bind(...) ) Abrufen des nächsten Pakets Mit recv(...) (Thread blockiert) Inhalt interpretieren Ggf. antworten ( send(...) ) 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
PAP für Kommunikation und Auswertung 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Quellcodebeispiele zur Kommunikation Client/Server: while( rc != SOCKET_ERROR ) { rc = recv(connectedSocket,buf,256,0); //Empfangen der Daten(Anforderung) ........ empfang[rc]='\0'; //Zur Vorsorge Terminieren if( 0 == strcmp(empfang,"99999") ) anfrage = true; //Setzen das es eine Anfrage gibt while( ready != true ) //Wartet bis das Ergebnis berechnet ist } rc = send(connectedSocket,ergebnis,strlen(ergebnis),0); ready = false; anfrage = false; if( 0 == strcmp(empfang,"0815") ) //Beendet den Server break; 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Messdatenauswertung I eine Runde 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Messdatenauswertung II Mittel von 10 Runden 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Messdatenauswertung III Gleis 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Erkenntnisse und Zukunftsperspektiven Hinreichend genaue Messergebnisse Trägheit der Dioden setzen Grenzen Abweichungen pro Runde im Bereich von 9-20 Pixel entspricht 3-7mm Perspektiven Stromversorgung über Gleisanlage Umbau der Messeinrichtung auf die Lok 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper Quellen http://www.c-programming.de/ http://www.thesycon.de http://ac16.uni-paderborn.de/arbeitsgebiete/messtech/elektro_grundlagen/usb/index.html http://www.microsoft.com 15.05.2003 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper