RS 232 z termination char - raz jeszcze

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
smiglo
Posty: 110
Rejestracja: 18 sty 2006 00:00
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

RS 232 z termination char - raz jeszcze

Post autor: smiglo »

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
smiglo
Awatar użytkownika
sambo
Posty: 34
Rejestracja: 04 sty 2006 00:00

RS 232 z termination char - raz jeszcze

Post autor: sambo »

Czy długość ramki jest stała ? Możesz podać jakąś przykładową ?
Zo bacz jak działa ten program.
Ostatnio zmieniony 26 sie 2008 13:18 przez sambo, łącznie zmieniany 1 raz.
smiglo
Posty: 110
Rejestracja: 18 sty 2006 00:00
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

Re: RS 232 z termination char - raz jeszcze

Post autor: smiglo »

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.
smiglo
Awatar użytkownika
sambo
Posty: 34
Rejestracja: 04 sty 2006 00:00

Re: RS 232 z termination char - raz jeszcze

Post autor: sambo »

Zobacz i daj znacz czy działa ten program...
smiglo
Posty: 110
Rejestracja: 18 sty 2006 00:00
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

Re: RS 232 z termination char - raz jeszcze

Post autor: smiglo »

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
Awatar użytkownika
ky3orr
Posty: 149
Rejestracja: 10 gru 2006 00:00
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Siechnice
Kontakt:

RS 232 z termination char - raz jeszcze

Post autor: ky3orr »

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.
KY3ORR

Okablowanie audio / RF -> www.CabLAB.eu
Awatar użytkownika
sambo
Posty: 34
Rejestracja: 04 sty 2006 00:00

RS 232 z termination char - raz jeszcze

Post autor: sambo »

Zmniejsz prędkość transmisji, zacznij od jakies małej np. 19200 i stopniowo ją zwiększaj.
smiglo
Posty: 110
Rejestracja: 18 sty 2006 00:00
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

Re: RS 232 z termination char - raz jeszcze

Post autor: smiglo »

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).
smiglo
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

RS 232 z termination char - raz jeszcze

Post autor: Mikrobi »

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. ;)
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
sambo
Posty: 34
Rejestracja: 04 sty 2006 00:00

RS 232 z termination char - raz jeszcze

Post autor: sambo »

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.
smiglo
Posty: 110
Rejestracja: 18 sty 2006 00:00
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

Re: RS 232 z termination char - raz jeszcze

Post autor: smiglo »

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
smiglo
Posty: 110
Rejestracja: 18 sty 2006 00:00
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

Re: RS 232 z termination char - raz jeszcze

Post autor: smiglo »

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) ????
Ostatnio zmieniony 02 wrz 2008 14:04 przez smiglo, łącznie zmieniany 1 raz.
smiglo
Awatar użytkownika
sambo
Posty: 34
Rejestracja: 04 sty 2006 00:00

Re: RS 232 z termination char - raz jeszcze

Post autor: sambo »

Zobacz to...
ODPOWIEDZ