Serialport, strumień danych z GPS
Strona [ 1 ] z 1
| adam22_22 |
09-03-2010 21:02 |
|
|
Witam, zacznę od tego, że chciałem napisać małą aplikację która pobierze tylko współrzędne z odbiornika GPS. Jestem posiadaczem nawigacji Manta GPS 420, dziś ją odblokowałem i na windowsa CE zainstalowałem CF 3.5 . Przystąpiłem do pracy, lecz niewiele później spotkał mnie pierwszy poważny problem - mianowicie program nie czyta danych z odbiornika GPS. Program nie odczytuje jakichkolwiek danych (i to mnie martwi) , zazwyczaj MapaMap pokazuje dostęp do 3 satelit, sekrety życia w bloku (nawet przy oknie ). Mapamap również nie pokazuje aktualnej pozycji, ale logicznie rzecz biorąc - skoro mamy już 3 satelity, to jakieś dane muszą do nas docierać, a program (mapamap) pewnie sam wyciąga średnią z kilku nadajników. Spore kłopoty miałem również z ustaleniem portu i do dziś go nie znam Sprawa jest dość "dziwna" bo AutoMapa wskazuje COM7. W rejestrze systemowym nic nie ma zapisane, jedynie to, że GPS jest na porcie COM i jakaś wartość Index = 7 tam też występuje.Postanowiłem zrobić bardzo krótki program czyli : for(int i=1;i<9;i++) { try { port.PortName = ("COM" + i); port.Open(); listBox1.Items.Add("Port :" + i + ": został pomyślnie otwarty"); port.Close(); } catch (Exception) { listBox1.Items.Add("Port :" + i + "nie może zostać otwart !"); port.Close(); } } Wyniki są następujące : COM1, COM2, COM6 są cały czas otwarte. Gdy system złapie sygnał z jakiegoś nadajnika, automatycznie otwierany zostaje port COM5. Tutaj przedstawię kod, którym próbuję pobrać informacje od odbiornika : int dostepne = port.BytesToRead; byte[] buffer = new byte[dostepne]; port.Read(buffer, 0, dostepne); string data = Encoding.UTF8.GetString(buffer, 0, dostepne); listBox1.Items.Add(data); Thread.Sleep(500); próbowałem także z różnymi ustawieniami port np. port.BaudRate = 4800; port.DataBits = 8; Jako, że program do "testowania" portów jest napisany w stylu otwarty <> zamknięty, próbowałem także pobrać dane z COMa, który może być otwarty (kończyło się crashem aplikacji). |
|
|
| dam1en |
10-03-2010 07:21 |
|
Użytkownik Status: Offline Dołączył: 27-02-2008 |
To, na którym porcie działa odbiornik zależy od odbiornika, więc port wyczytasz z manuala odbiornika (jeżeli Mapmap widzi go na 7, to myślę, że działa na 7). Odbiornik zaczyna generować dane dopiero po kilku sekundach od otwarcia portu. Dane z odbiornika wczytuj sobie do stałej tablicy, żeby nie tworzyć co chwilę nowej (i tak aktualne dane to kilka ostatnich linijek). Czytaj z portu nie częściej niż co sekundę bo co sekundę generowane są dane. Chętnie Ci pomogę bo właśnie pisałem taką aplikację na win mobile. |
|
|
| adam22_22 |
10-03-2010 17:02 |
|
|
Dzięki za odp. Choć niestety puki co niewiele ona zmieniła Ogólnie dane pobieram za pomocą przycisku więc i ode mnie zależy czas ( Thread.sleep to pozostałość po timerze). Błąd dalej jest, port COM7 jest cały czas zamknięty, więc nie mogę go otworzyć, a gdy chce popbrać dane robi się crash aplikacji. Gdy dodaję dane z otwartych pól, po prostu dodaje mi do listboxa puste dane i nic więcej. Kod nie jest skomplikowany i nie wiem gdzie może leżeć błąd -- na pewno gdzieś leży Główną przeszkodą jest czas którego każdy ma bardzo niewiele
|
|
|
| dam1en |
10-03-2010 18:03 |
|
Użytkownik Status: Offline Dołączył: 27-02-2008 |
Spróbuj tak: |
|
|
| adams85 |
11-03-2010 10:20 |
|
Użytkownik Status: Offline Dołączył: 21-12-2009 |
Spróbuj przeanalizować kod tego programu, może wpadniesz na jakieś rozwiązanie http://www.codeproject.com/KB/mobile/Termie.aspx |
|
|
|
|
|
Strona [ 1 ] z 1
| 1 użytkownik(ów) przegląda ten temat (1 gości) |
|---|
| (żadnych zarejestrowanych użytkowników) |





). Mapamap również nie pokazuje aktualnej pozycji, ale logicznie rzecz biorąc - skoro mamy już 3 satelity, to jakieś dane muszą do nas docierać, a program (mapamap) pewnie sam wyciąga średnią z kilku nadajników. 




Ogólnie dane pobieram za pomocą przycisku więc i ode mnie zależy czas ( Thread.sleep to pozostałość po timerze). Błąd dalej jest, port COM7 jest cały czas zamknięty, więc nie mogę go otworzyć, a gdy chce popbrać dane robi się crash aplikacji. Gdy dodaję dane z otwartych pól, po prostu dodaje mi do listboxa puste dane i nic więcej. Kod nie jest skomplikowany i nie wiem gdzie może leżeć błąd -- na pewno gdzieś leży