Læs data fra seriel port (GPS)

Tags:    c#

Hej

Eftersøger lidt råd og vildledning:)

Jeg har lavet en app der læser data fra en GPS der er mounted på en seriel port. Data kommer i en lind strøm (mange/flere hvert sekund) fra GPS'en i form af strenge af forskellige typer. Hver streng starter med "$". Ud fra f.eks. en $GPRMC-streng kan man udlede bla. en position.

Mit spørgsmål er: Hvordan kan jeg nemmest sikre mig at jeg får kigget alle strenge igennem? Bliver jeg nødt til at lave app'en "trådet" eller er der en smut vej?

Hvis den skal trådes modtages gode links om trådning i C# med kyshånd :)

/hygge



Hvilken kommunikations standard bruges der? RS-232 ? For så mener jeg at man selv bestemmer hvornår den næste "besked" skal sendes, altså det er min forståelse at man sender et signal ud som fortæller apparatet man er klar til mere? Kan godt være jeg er forkert på den dog.



Sørger operativsystemet ikke for at sørge for det hele kommer med? OS'er bruger jo allerede trådning, så går ud fra den gemmer alt kommunikation i en buffer og så læser det når programmet får tid?

Kan ikke forestille mig andet end at .Net frameworkets serial bibliotek ikke selv sørger for at ordne det meste?

Fandt lige nogle links der måske kunne være interessante (på engelsk):

http://www.codeproject.com/KB/cs/serialcommunication.aspx

http://www.c-sharpcorner.com/UploadFile/eclipsed4utoo/SerialPortCommunication12082008111137AM/SerialPortCommunication.aspx

Tjek eventuel MSDN



Indlæg senest redigeret d. 13.05.2009 20:23 af Bruger #14645
kan du kommunikere med dimsen?
Bruger du .Nets SerialPort klasse?

.Nets Serialport smider som udgangspunkt ikke dataen væk før du har hentet den, så du skal ikke bekymre dig om at miste noget.

Som jeg forstår det sender GPS'en konstant en masse strenge med $ som separator. Derfor ville jeg nok lave den trådet med en event "StringReceived" som du så blot kan hooke dig på.
Det som tråden skal gøre er så blot at samle data ind (fra serialport) når der er noget, eller suspende tråden lidt.

Husk at du også skal have en måde at stoppe tråden på igen.

Og vær opmærksom på at processeringen af indkomne strenge _skal_ være hurtigere end hastigheden som GPS'en producerer dem i, ellers kræver det en anden løsning.

Med den løsning jeg foreslår skal du ikke bekymre dig alt for meget om de typiske problemer med trådning, klassen burde i sig selv ikke have det store behov for locks og anden ondskab. Men dermed ikke sagt at resten af applikationen stadig vil fungere fint, men det finder du nok ud af ;).

Spørg endelig igen hvis det ikke var præcist nok.



t