Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Geschwindigkeitsmessung

Ähnliche Präsentationen


Präsentation zum Thema: "Geschwindigkeitsmessung"—  Präsentation transkript:

1 Geschwindigkeitsmessung
PDV Vertiefung Projekt Geschwindigkeitsmessung VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

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

3 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. VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

4 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

5 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

6 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

7 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. VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

8 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. VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

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

10 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. VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

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

12 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. VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

13 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. VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

14 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. VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

15 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 { …………………… VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

16 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

17 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

18 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. VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

19 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 } VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

20 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

21 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 ?? VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

22 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) VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

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

24 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

25 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

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

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

28 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

29 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

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

31 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

32 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(...) ) VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

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

34 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; VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

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

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

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

38 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 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper

39 VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper
Quellen VPDV – Geschwindigkeitsmessung @ by D. Pötz / D. Pröpper


Herunterladen ppt "Geschwindigkeitsmessung"

Ähnliche Präsentationen


Google-Anzeigen