RS 232 - jak sprawdzać parzystość???
RS 232 - jak sprawdzać parzystość???
Robię VI który ma sie komunikowac z pewnym urzadzeniem po RS232. Problemem jest to że bit parzystości wykorzystywany jest do przesyłania dodatkowych informacji. Niestety nie wiem jak odczytywać stan bitu parzystości
e_gregor
Re: RS 232 - jak sprawdzać parzystość???
a probowales (LABVIEW 7.1)
INSTRUMENT IO >> VISA >> VISA ADVANCED >> PROPERTY NODE mozesz wybrac z niego serial settings >> serial parity
moze to rozwiaze Twoj problem ;)
INSTRUMENT IO >> VISA >> VISA ADVANCED >> PROPERTY NODE mozesz wybrac z niego serial settings >> serial parity
moze to rozwiaze Twoj problem ;)
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: RS 232 - jak sprawdzać parzystość???
Nie rozwiąże, bo ta własność zwraca ustawienia portu zadane przy jego otwieraniu.
A jak wyglądają pozostałe parametry transmisji, liczba bitów danych, stopu, prędkość... ?
A jak wyglądają pozostałe parametry transmisji, liczba bitów danych, stopu, prędkość... ?
Re: RS 232 - jak sprawdzać parzystość???
Tak, to prawie działa. Problerm jest taki że lecą sobie bajty, jeśli bit parzystość=1 to jest to bajt adresu, jeśli bit parzystości=0 jest to bajt danych. Najpier czekam na adres, gdy go poprawnie odbiorę muszę przestawić sie na parzystości=0. Kiedy zrobie to opisaną przez Ciebie metodą port szeregowy robi coś w rodzaju inicjalizacji. Efektem tego jest utrata conajmniej jedengo bajtu danych po bajcie adresowym.
Gdy ustawiłem bez kontroli bitu parzystości wszystko działa i nic nie tracę... do czasu gdy bajt danych nie zostanie odebrany jako adres (bo nie sprawdzam bitu parzystości który jest znacznikiem adresu)
Parametry transmisji: 9600, 2 bity stopu (chodzi tez na 1 tak samo), 8 bitów danych
Gdy ustawiłem bez kontroli bitu parzystości wszystko działa i nic nie tracę... do czasu gdy bajt danych nie zostanie odebrany jako adres (bo nie sprawdzam bitu parzystości który jest znacznikiem adresu)
Parametry transmisji: 9600, 2 bity stopu (chodzi tez na 1 tak samo), 8 bitów danych
e_gregor
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: RS 232 - jak sprawdzać parzystość???
Hm.
Jak ktoś używa bitu parzystości niezgodnie z przeznaczeniem to niech ma za swoje Sam to wymyśliłeś czy robisz "po kimś" ? Jak sam to lepiej chyba zmienić protokół na bardziej "ludzki".
Nie mam doświadczeń z takim czymś (ani jak ich nabyć na szybko), ale...
UART portu szeregowego ma rejestr LSR (Line Status Register), w którym przechowuje między innymi informację o występowaniu błędu parzystości, spróbuj to wykorzystać w połączeniu z klockiem In Port (adres najpewniej 3FDh - szczegóły w BIOSIE). Znacznik błędu parzystości to bit 2. - szczegóły tutaj
Jak ktoś używa bitu parzystości niezgodnie z przeznaczeniem to niech ma za swoje Sam to wymyśliłeś czy robisz "po kimś" ? Jak sam to lepiej chyba zmienić protokół na bardziej "ludzki".
Nie mam doświadczeń z takim czymś (ani jak ich nabyć na szybko), ale...
UART portu szeregowego ma rejestr LSR (Line Status Register), w którym przechowuje między innymi informację o występowaniu błędu parzystości, spróbuj to wykorzystać w połączeniu z klockiem In Port (adres najpewniej 3FDh - szczegóły w BIOSIE). Znacznik błędu parzystości to bit 2. - szczegóły tutaj
Re: RS 232 - jak sprawdzać parzystość???
Dzięki za poradę. Wiem o co Ci chodzi ale nie mam zielonego pojęcia jak z Labview się do tego odwołać (za mało doświadczenia w LV)
No niestety jest to wewnętrzny firmowy protokół transmisji między urządzeniami a ja w Labview robię system który będzie na PC-cie symulował jedno z takich urządzeń. Nie mam możliwści zmiany protokołu
No niestety jest to wewnętrzny firmowy protokół transmisji między urządzeniami a ja w Labview robię system który będzie na PC-cie symulował jedno z takich urządzeń. Nie mam możliwści zmiany protokołu
e_gregor
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: RS 232 - jak sprawdzać parzystość???
No tak w teorii to byłoby coś takiego jak na obrazku i powinno to to zwracać aktualny stan znacznika błędu parzystości z rejestru LSR w uarcie.
Ale...
1. trzeba czytać z portu przychodzące bajty na bieżąco(po jednym!) i w momencie odczytu sprawdzać od razu rejestr z czego wniosek, że najlepiej wybrać możliwie najwolniejszą transmisję.
2. nie wiem, czy w ogóle uart ustawia ten bit jeśli nie jest ustawiona kontrola parzystości (choć chyba powinien)
Nie wygląda to za dobrze, ale spróbować można. Upewnij się czy adres COMa w biosie to 3F8h. Dla odczytu LSR na wejście In Port trzeba podać adres COMa + 5
Pozdrawiam (:
Ale...
1. trzeba czytać z portu przychodzące bajty na bieżąco(po jednym!) i w momencie odczytu sprawdzać od razu rejestr z czego wniosek, że najlepiej wybrać możliwie najwolniejszą transmisję.
2. nie wiem, czy w ogóle uart ustawia ten bit jeśli nie jest ustawiona kontrola parzystości (choć chyba powinien)
Nie wygląda to za dobrze, ale spróbować można. Upewnij się czy adres COMa w biosie to 3F8h. Dla odczytu LSR na wejście In Port trzeba podać adres COMa + 5
Pozdrawiam (:
Re: RS 232 - jak sprawdzać parzystość???
No rozumiem. Sprawdzę jutro to rozwiązanie - może to być wystarczające.
Dzięki
Dzięki
e_gregor
Re: RS 232 - jak sprawdzać parzystość???
Mam pytanie: czy nie można tego zrobić tak że ustawię że bit parzystości na stałe ma być zerem i sprawdzać error code z Serial Port Read w celu wystapienia błedu parzystości?
e_gregor
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: RS 232 - jak sprawdzać parzystość???
Oczywiście - jeśli tylko klocek Serial Read zwraca taki błąd to można. A zwraca?
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Re: RS 232 - jak sprawdzać parzystość???
Ustawienie bitu parzystosci na stale jest chyba jedynym rozsadnym rozwiazaniem zapobiegajacym utracie danych w trakcie przekonfigurowania portu.
Ale ....
Serial read zwraca blad parzystoci (error code: Hex 0xBFFF006A). Niestety z tego co udalo mi sie wyczytac, w Labview 7.0 i wyzszych towarzyszy temu zapisanie danych samymi zerami - ma to w teorii zapobiegac odczytaniu przez uzytkownika blednego bajtu danych. Czyli jak otrzymasz blad parzystosci to automatycznie bedziesz mial 0x00 jako dane. Rozwiazania sa z tego co wyczytalem dwa:
Pierwsze, sugerowane przez NI, polegajace na dwukrotnym odczycie tego samego bajtu - raz z parity=space a drugi raz z =mark i na tej podstawie okreslenie wartosci bitu parzystosci nie wchodzi chyba w gre, bo za dlugo trwa. http://digital.ni.com/public.nsf/allkb/ ... 990057F919
Twoj problem byl poruszany na forum NI (widac taki protokol jest czesciej stosowany) i jedyne rozwiazanie na ktore sie natknalem jest tutaj http://forums.ni.com/ni/board/message?b ... ing&page=1
Najistotniejsze sa 2 ostatnie posty w ktorych podana jest wersja driver'ow oraz co i gdzie nalezy zamienic aby wylaczyc nadpisywanie bajtu danych.
Napisz jak uda Ci sie cos z tym rozsadnego zrobic
Ale ....
Serial read zwraca blad parzystoci (error code: Hex 0xBFFF006A). Niestety z tego co udalo mi sie wyczytac, w Labview 7.0 i wyzszych towarzyszy temu zapisanie danych samymi zerami - ma to w teorii zapobiegac odczytaniu przez uzytkownika blednego bajtu danych. Czyli jak otrzymasz blad parzystosci to automatycznie bedziesz mial 0x00 jako dane. Rozwiazania sa z tego co wyczytalem dwa:
Pierwsze, sugerowane przez NI, polegajace na dwukrotnym odczycie tego samego bajtu - raz z parity=space a drugi raz z =mark i na tej podstawie okreslenie wartosci bitu parzystosci nie wchodzi chyba w gre, bo za dlugo trwa. http://digital.ni.com/public.nsf/allkb/ ... 990057F919
Twoj problem byl poruszany na forum NI (widac taki protokol jest czesciej stosowany) i jedyne rozwiazanie na ktore sie natknalem jest tutaj http://forums.ni.com/ni/board/message?b ... ing&page=1
Najistotniejsze sa 2 ostatnie posty w ktorych podana jest wersja driver'ow oraz co i gdzie nalezy zamienic aby wylaczyc nadpisywanie bajtu danych.
Napisz jak uda Ci sie cos z tym rozsadnego zrobic
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: RS 232 - jak sprawdzać parzystość???
No tak czułem, że to gdzieś musi być, a nie mogłem znaleźć
To ostatnie rozwiązanie musi działać szkoda tylko, że trzeba configi zmieniać.
A swoją drogą jest we właściwościach Serial Settings:Error Replacement Character, gdzie sobie można ustawić co chcemy dostać zamiast błędnych bajtów i aż dziw, że nie można tego zastępowania programowo wyłączyć.
To ostatnie rozwiązanie musi działać szkoda tylko, że trzeba configi zmieniać.
A swoją drogą jest we właściwościach Serial Settings:Error Replacement Character, gdzie sobie można ustawić co chcemy dostać zamiast błędnych bajtów i aż dziw, że nie można tego zastępowania programowo wyłączyć.
Re: RS 232 - jak sprawdzać parzystość???
To działa!!! U mnie sa drivery Visa 3.4.0.49****
Trzeba dodać wpis DisableErrorReplacement=1
Gdzieś w sekcji [ASRL-RSRC-ALIAS]
W pliku visaconf.ini
Który można znaleść w C:VXIPNPWinNTNIvisa.
Trzeba dodać wpis DisableErrorReplacement=1
Gdzieś w sekcji [ASRL-RSRC-ALIAS]
W pliku visaconf.ini
Który można znaleść w C:VXIPNPWinNTNIvisa.
e_gregor