Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

15.05.2003 VPDV – by D. Pötz / D. Pröpper PDV Vertiefung ProjektGeschwindigkeitsmessung.

Ähnliche Präsentationen


Präsentation zum Thema: "15.05.2003 VPDV – by D. Pötz / D. Pröpper PDV Vertiefung ProjektGeschwindigkeitsmessung."—  Präsentation transkript:

1 VPDV – by D. Pötz / D. Pröpper PDV Vertiefung ProjektGeschwindigkeitsmessung

2 VPDV – by D. Pötz / D. Pröpper Positionsbestimmung einer Modelleisenbahn durch Geschwindigkeitsmessung. MIT : – Messvorrichtung – Programm zur Geschwindigkeitsermittlung – Weiterverarbeitung durch Javaprogramm Aufgabenstellung

3 VPDV – 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.

4 VPDV – 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

5 VPDV – 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 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

6 VPDV – 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

7 VPDV – 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.

8 VPDV – 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.

9 VPDV – by D. Pötz / D. Pröpper Win32 USB Treiber Stack

10 VPDV – 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.

11 VPDV – by D. Pötz / D. Pröpper Einbindung des generischen USB Treiber

12 VPDV – 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.

13 VPDV – 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 #include #include #include #include #include #include #include #include #include #include #include "usbio_i.h #include "usbspec.h Die Includedatei usbio_i.h stellt USBIO Treiber Interface da.

14 VPDV – 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 VPDV – 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(Overlappe d)); 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 { ……………………

16 VPDV – 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

17 VPDV – 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

18 VPDV – 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.

19 VPDV – 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(); start = clock(); deltasum = sum - tmpsum; deltasum = sum - tmpsum; tmpsum = sum; tmpsum = sum; strecke = (double)((double)(deltasum*EICHUNG)/MOUSE_AUFLOESUNG); strecke = (double)((double)(deltasum*EICHUNG)/MOUSE_AUFLOESUNG); gesamtstrecke = (double)((double)(sum*EICHUNG)/MOUSE_AUFLOESUNG); gesamtstrecke = (double)((double)(sum*EICHUNG)/MOUSE_AUFLOESUNG); geschwindigkeit = (strecke/VerstricheneTime); geschwindigkeit = (strecke/VerstricheneTime);…….//Ausgabe}

20 VPDV – 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

21 VPDV – by D. Pötz / D. Pröpper Aufbau einer Maus II Signale werden von Chip codiert Codierung in 5 Byte breite Wörter FA0000 Knöpfe Links- Rechts Vor/Zu rück Scroll- Rad ??

22 VPDV – 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)

23 VPDV – by D. Pötz / D. Pröpper Der Umbau I Fragestellung: Maus auf die Schiene oder Maus auf die Schiene oder Maus auf den Wagen ? Maus auf den Wagen ?

24 VPDV – 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

25 VPDV – 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

26 VPDV – by D. Pötz / D. Pröpper Der Umbau IV Hauptplatine festkleben Keilriemen aufziehen (von Handschuh) Batterien anschließen

27 VPDV – by D. Pötz / D. Pröpper Der Umbau V => Fertig !!

28 VPDV – by D. Pötz / D. Pröpper Aufgetretene Probleme und Erkenntnisse Bei höheren Geschw. Wegverlust (Datenverlust) Resultierend aus der Trägheit der Diode Resultierend aus der Trägheit der Diode => Übersetzung durch einen Keilriemen, anstatt Direktmontierung auf der Achse Verlust aufgrund von Schlupf sollte vernachlässigbar sein

29 VPDV – 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

30 VPDV – by D. Pötz / D. Pröpper Kommunikation mit dem JAVA-Programm Shared Memory Segment(-) TCP(+) UDP(++)

31 VPDV – 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 => UDP Verbindung

32 VPDV – 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(...) )

33 VPDV – by D. Pötz / D. Pröpper PAP für Kommunikation und Auswertung

34 VPDV – 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;}}

35 VPDV – by D. Pötz / D. Pröpper Messdatenauswertung I eine Runde

36 VPDV – by D. Pötz / D. Pröpper Messdatenauswertung II Mittel von 10 Runden

37 VPDV – by D. Pötz / D. Pröpper Messdatenauswertung III Gleis

38 VPDV – by D. Pötz / D. Pröpper Erkenntnisse und Zukunftsperspektiven Erkenntnisse: 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

39 VPDV – by D. Pötz / D. Pröpper Quellen paderborn.de/arbeitsgebiete/messtech/ele ktro_grundlagen/usb/index.html paderborn.de/arbeitsgebiete/messtech/ele ktro_grundlagen/usb/index.html


Herunterladen ppt "15.05.2003 VPDV – by D. Pötz / D. Pröpper PDV Vertiefung ProjektGeschwindigkeitsmessung."

Ähnliche Präsentationen


Google-Anzeigen