Programmierung der COM-Schnittstelle (VB.net)

  • Hallo zusammen,


    ich bastel gerade an einer GPS-Software für PC und benötige noch paar Tips bzgl. dem optimierten Auslesen der COM-Schnittstelle.


    - Schnittstelle öffnen
    - Daten in Puffer einlesen


    Soweit kein Problem und funktioniert auch (bei mir) schon ganz gut, nur: wie optimiere ich die Einstellungen, dass es auch bei möglichst allen Usern funktionieren wird? Ich habe derzeit einen Puffer von 256 Byte in den die Daten geschrieben werden, dann wird nach dem String "$GPRMC" gesucht und ab da bis zum vbCr (Zeilenende) alles separiert. Anschliessend werden die Daten weiterverarbeitet und als Karte geladen, etc... Oder gibt es bessere Verfahren?


    Meine Bedenken sind dahingehend, dass evtl. der ein oder andere GPS-Empfänger mehr Protokolle eingestellt hat bzw. unterstützt und dann alles nicht mehr so gut funktioniert.


    Hat jemand (hilfreiche!) Tips?


    Danke,


    Gruß DPStaude

  • Ich kann dir nur die PocketGPSLib empfehlen die ist zwar in C# geschrieben aber funktioniert wenigstens einigermaßen. Ich selber hab sie auch für mein Programm genommen(KooFind). Mußte sie aber, was die Datenauswertung und Verarbeitung angeht, ganz schön verändern.
    Zumindest sieht man aber mal was so benötigt wird. Den Code kannst du bei www.iter.dk runterladen oder guck mal hier bei GPS Anzeige und Umrechtool da habe ich mal meine Version davon gepostet. Dieses Tool hat aber Probleme mit der Verbindung zu Kabelmäusen oder ähnlichem nur Bluetooth funktioniert problemlos. Aber vielleicht hast du ja Ahnung von der ganzen System Geschichte, dann könntest du ja mal versuchen eine Lösung zu finden.

  • Hi geometer,


    danke für den Tip, hab mir das mal angesehen, aber ganz glücklich bin ich dennoch nicht, denn ich habe auch zwei verschiedene Testrechner, an einem Kabelmaus, am anderen BT-Maus. Mein Programm funktioniert auf beiden, nur mit unterschiedlichen Einstellungen was TimeOut (zw. 2000-5000 ms) und Puffergröße (256-500 bytes) betrifft. Denke das liegt an der Übertragungsgeschwindigkeit und v.a. an den Einstellungen der Mäuse, welche Protokolle gesendet werden und v.a. wie oft, das ist nach meinen Tests entscheidend für dir Puffergröße. Hab in meiner Apllikation mal ein großes Testfenster eingebunden damit man die Daten prüfen kann... das ist sehr hilfreich!


    Aber wie machen das die Profis? Da findet man selten Einstellmöglichkeiten für Timeout und Puffer, oder lassen die den unbrauchbaren Puffer dann unter den Tisch fallen und nehmen sich dem Nächsten an?


    In der von Dir genannten Klasse habe ich was von Timeout 5 Sek. gelesen (klappt bei mir meist gut) und auch von Buffer = 200 (bei meinen Tests an beiden PCs unbrauchbar). Könnte mir vorstellen, dass es mit einer Maus geht, die sekündlich nur das RMC ausspuckt. Evtl liegt auch dein Problem mit der Kabelmaus daran!?


    Noch jemand Tips?


    Danke,


    Gruß DPStaude

  • Hallo,
    ja das mit dem Buffer könnte stimmen kann ich aber nicht überprüfen, da ich keine Kabelmaus habe. Werde es mal testweise in eine dll einbauen.
    Aber ansonsten denke ich mal ist die PocketGPSLib ganz gut zu gebrauchen, nur die NMEA Auswertung ist ganz schön fehleranfällig. Deswegen habe ich auch meine eigenen Methoden dafür geschrieben, ich denke mal für deine Ansprüche sind die auch zu gebrauchen. Denn egal welches Protokoll jemand hat kommen immer die selben Daten raus(natürlich außer es wird nicht gesendet, aber ob jemand mit gga oder rmc arbeitet ist egal).
    Also danke erstmal für die Hinweise.

  • Hallo,


    na prinzipiell funktionierts bei mir ja schon, nur eben nicht optimiert. Aber wenn man die 'Setupfenster' in der Applikation drin hat kann das jeder selbst optimieren bis ich eine Lösung habe. Das Laden der Kartendaten geht jedenfalls auch schon. Wenn Du magst kann ich dir mal meine Testdemo zum ausprobieren zur Verfügung stellen...


    Gruß DPStaude

  • Hallo DPStaude
    Ja die Testdemo könnte ich schon gebrauchen. Ansonsten werde ich im Programm eine Möglichkeit zum einstellen der Werte mit einbauen, denn wie es aussieht liegt es mit aller größter Wahrscheinlichkeit an der Buffergröße. So kann wenigstens jeder je nach Hardware seine Einstellungen vornehmen.
    Danke nochmal für deine Hinweise, denn mein Hardwarekenntnisse sind doch zu bescheiden, da wäre ich nie auf eine Lösung gekommen.

  • Hallo,


    schau mal hier: TestDemo


    Für einen Kommentar bzw. Deine optimierten Settings und Erfahrungen wäre ich dir dankbar...


    Gruß DPStaude

  • @DPStaude
    Hab mal dein Tool runtergeladen, mal sehen was so möglich ist.
    Nochmal ne dumme Frage, wo siehst du das die PocketGPSLib mit einer Buffergröße von 200 arbeitet. Ich such mir nämlich gerade einen Wolf und finde nichts, das einzige was ich finde ist das ich eine Bytearray mit einer Größe von 10 initialisiere ansonsten stehe ich auf dem Schlauch(wie gesagt was Systemnahen Code betrifft bin ich nicht so firm)

  • Hallo,


    hab ja nur VB.net, aber in den Codes die ich mir im Editor angesehen habe war in der SerialPort.cs eine Konstante deklariert mit: private const int _receivedBytesThreshold = 200;


    Ich vermute mal das hat damit zu tun, 100% sicher bin ich aber nicht.


    Gruß DPStaude

  • @DPStaude
    Alles klar, du hast die 2.0 Lib runtergeladen ich nutze aber die 1.0 weil die 2.0 nur auf WM 5.0 läuft und das hat ja noch nicht jeder.
    Aber die 2.0 dürfte näher am normalen Windows angelehnt sein, die haben ja im neuen CompactFramework ein paar wesentliche Ergänzungen gemacht die im alten nur über unmanaged Code laufen.
    (übrigens hat Sharpdevelop eine Funktion um Code von C# nach VB oder umgekehrt zu konvertieren, habe ich auch schon öfters genutzt ist aber nicht ganz fehlerfrei)

    Einmal editiert, zuletzt von geometer ()

  • Hallo ihr Coder...


    ich habe mir auch ein paar Codeschnipsel besorgt, die sich mit GPS und der seriellen Schnittstelle beschäftigen. Vielleicht hilfts ja weiter.


    BTW: Die 200 Byte Puffergröße sind etwas knapp. In den Sources von gpsd kann man nachlesen, daß ein Empfänger manchmal längere "Zeilen" rausfeuert. Die Stelle finde ich aber gerade nicht.


    http://home.ict.nl/~ramklein/Projects/Serial.html
    http://gpsd.berlios.de/


    bfn hevo2