Präsentation herunterladen
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.