RS 232 z termination char - raz jeszcze
-
- Posty: 110
- Rejestracja: 18 sty 2006 00:00
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
RS 232 z termination char - raz jeszcze
Witam,
wiem, że podobny temat już był.
Ale mam za zadanie odczytać dwie ramki danych (które kończą się LF (0xA)) z urządzenia podłączonego do portu szeregowego, Obie ramki przychodzą jednocześnie co 50 ms. Mam więc program na odczyt tych danych ale nie jestem z niego zadowolony - zdarza się że odczyty są stabilne, ale nieraz jak zacznie się sypać transmisja to nic sensownego nie można z niej wyciągnąć. W windowsowym hyper terminalu wygląda to ładniej - nie widać żeby pojawiały się krzaczki. Gdzie leży przyczyna?
Wszystko stoi na biurku i strach pomyśleć jak je opuści i zacznie pracować wśród zakłóceń.
pozdrawiam
wiem, że podobny temat już był.
Ale mam za zadanie odczytać dwie ramki danych (które kończą się LF (0xA)) z urządzenia podłączonego do portu szeregowego, Obie ramki przychodzą jednocześnie co 50 ms. Mam więc program na odczyt tych danych ale nie jestem z niego zadowolony - zdarza się że odczyty są stabilne, ale nieraz jak zacznie się sypać transmisja to nic sensownego nie można z niej wyciągnąć. W windowsowym hyper terminalu wygląda to ładniej - nie widać żeby pojawiały się krzaczki. Gdzie leży przyczyna?
Wszystko stoi na biurku i strach pomyśleć jak je opuści i zacznie pracować wśród zakłóceń.
pozdrawiam
smiglo
RS 232 z termination char - raz jeszcze
Czy długość ramki jest stała ? Możesz podać jakąś przykładową ?
Zo bacz jak działa ten program.
Zo bacz jak działa ten program.
Ostatnio zmieniony 26 sie 2008 13:18 przez sambo, łącznie zmieniany 1 raz.
-
- Posty: 110
- Rejestracja: 18 sty 2006 00:00
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
Re: RS 232 z termination char - raz jeszcze
Długość ramki (docelowo) nie jest stała. W tej chwili odbieram ramki stałej długości, które wyglądają mniej więcej tak:
Naglowek1, pole liczbowe, pole liczbowe, pole liczbowe CR LF
Naglowek2, pole liczbowe, pole liczbowe, pole liczbowe, pole liczbowe CR LF
Pola liczbowe mają różną wielkość stąd różne długości łańcuchów - ich długośc nie przekracza jednak 100 znaków.
W tej chwili przesyłane są same przecinki z nagłówkiem, więc długości są stałe.
Naglowek1, pole liczbowe, pole liczbowe, pole liczbowe CR LF
Naglowek2, pole liczbowe, pole liczbowe, pole liczbowe, pole liczbowe CR LF
Pola liczbowe mają różną wielkość stąd różne długości łańcuchów - ich długośc nie przekracza jednak 100 znaków.
W tej chwili przesyłane są same przecinki z nagłówkiem, więc długości są stałe.
smiglo
Re: RS 232 z termination char - raz jeszcze
Zobacz i daj znacz czy działa ten program...
-
- Posty: 110
- Rejestracja: 18 sty 2006 00:00
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
Re: RS 232 z termination char - raz jeszcze
Zachowanie jest podobne - poza tym program pochałania sporą ilość czasu na odczytanie tych danych - i może nie być czasu na inne rzeczy...
smiglo
- ky3orr
- Posty: 149
- Rejestracja: 10 gru 2006 00:00
- Wersja środowiska: LabVIEW 8.6
- Lokalizacja: Siechnice
- Kontakt:
RS 232 z termination char - raz jeszcze
wystarczy w pętli odczytującej dodać małe opóźnienie - np 2-10ms i wykorzystać bloczek bytes at port (ponieważ w tym czasie może przyjść do bufora wejściowego więcej niż 1 znak).
powinno to doskonale odciążyć procesor, a inne elementy jak na przykład obsługa interfejsu może odbywać się w innej pętli while.
powinno to doskonale odciążyć procesor, a inne elementy jak na przykład obsługa interfejsu może odbywać się w innej pętli while.
RS 232 z termination char - raz jeszcze
Zmniejsz prędkość transmisji, zacznij od jakies małej np. 19200 i stopniowo ją zwiększaj.
-
- Posty: 110
- Rejestracja: 18 sty 2006 00:00
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
Re: RS 232 z termination char - raz jeszcze
No właśnie:
jak wstawię choćby 1 ms opóźnienia to przy ilości bajtów rzędu 200 mam już opóźnienie, które jest nie do przyjęcia (dane przychodzą co 50 ms).
jak wstawię choćby 1 ms opóźnienia to przy ilości bajtów rzędu 200 mam już opóźnienie, które jest nie do przyjęcia (dane przychodzą co 50 ms).
smiglo
RS 232 z termination char - raz jeszcze
Mam takie uwagi 1. Wykorzystaj węzeł Bytes At Serial Port 2. Windows nie da ci powtarzalności lepszej niż 10-20 ms, system ma swoje wymagania, wiec rozmawianie o 1ms, czy nawet 5 ms jest trochę.... nieścisłe.
Opóżnienie od strony kodu gwarantuje, że środowisko nie bedzie walczyło z systemem o dostęp do zasobów. 3. UART na płycie czy każdy RS ma jakiś bufor pamięci, nie musisz natychmiast czytać bitu kiedy wchodzi drutem do komputera. ;)
Opóżnienie od strony kodu gwarantuje, że środowisko nie bedzie walczyło z systemem o dostęp do zasobów. 3. UART na płycie czy każdy RS ma jakiś bufor pamięci, nie musisz natychmiast czytać bitu kiedy wchodzi drutem do komputera. ;)
RS 232 z termination char - raz jeszcze
Ja tak z ciekawości się zapytam co to za urządzenie jest i na jaką odległość jest przewidziana transmisja ?
Ostatnio zmieniony 02 wrz 2008 12:31 przez sambo, łącznie zmieniany 1 raz.
-
- Posty: 110
- Rejestracja: 18 sty 2006 00:00
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
Re: RS 232 z termination char - raz jeszcze
Bytes at serial port zastosowałem w programie, którego kod załączyłem na początku. W zasadzie więc przeróbki pierwotnego programu sprowadzają się do "programowego" wyszukiwania CR LF. Pytanie czy jest to lepszy sposób niż korzystanie z Termination char z LV???
smiglo
-
- Posty: 110
- Rejestracja: 18 sty 2006 00:00
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
Re: RS 232 z termination char - raz jeszcze
Zastanawiam się czy:
a) lepiej odczytywać jak leci wszystko co jest w buforze przy wyłączonej opcji Termination char i następnie rozdzielać odebraną informację na dwa interesujące mnie stringi
b) korzystać z włączonej opcji Termination char i dwukrotne odczytywać bufor odbiorczy (tak jak zrobiłem to w pierwszym programie).
c) ????
a) lepiej odczytywać jak leci wszystko co jest w buforze przy wyłączonej opcji Termination char i następnie rozdzielać odebraną informację na dwa interesujące mnie stringi
b) korzystać z włączonej opcji Termination char i dwukrotne odczytywać bufor odbiorczy (tak jak zrobiłem to w pierwszym programie).
c) ????
Ostatnio zmieniony 02 wrz 2008 14:04 przez smiglo, łącznie zmieniany 1 raz.
smiglo
Re: RS 232 z termination char - raz jeszcze
Zobacz to...