RS 232 - jak sprawdzać parzystość???

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Awatar użytkownika
e_gregor
Posty: 21
Rejestracja: 05 sty 2006 00:00

RS 232 - jak sprawdzać parzystość???

Post autor: e_gregor »

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
piotrp
Posty: 12
Rejestracja: 11 gru 2005 00:00
Lokalizacja: Kraków
Kontakt:

Re: RS 232 - jak sprawdzać parzystość???

Post autor: piotrp »

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 ;)
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: RS 232 - jak sprawdzać parzystość???

Post autor: jogurt_owocowy »

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ść... ?
Awatar użytkownika
e_gregor
Posty: 21
Rejestracja: 05 sty 2006 00:00

Re: RS 232 - jak sprawdzać parzystość???

Post autor: e_gregor »

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
e_gregor
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: RS 232 - jak sprawdzać parzystość???

Post autor: jogurt_owocowy »

Hm.
Jak ktoś używa bitu parzystości niezgodnie z przeznaczeniem to niech ma za swoje :P 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
Awatar użytkownika
e_gregor
Posty: 21
Rejestracja: 05 sty 2006 00:00

Re: RS 232 - jak sprawdzać parzystość???

Post autor: e_gregor »

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
e_gregor
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: RS 232 - jak sprawdzać parzystość???

Post autor: jogurt_owocowy »

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 (:
Awatar użytkownika
e_gregor
Posty: 21
Rejestracja: 05 sty 2006 00:00

Re: RS 232 - jak sprawdzać parzystość???

Post autor: e_gregor »

No rozumiem. Sprawdzę jutro to rozwiązanie - może to być wystarczające.
Dzięki
e_gregor
Awatar użytkownika
e_gregor
Posty: 21
Rejestracja: 05 sty 2006 00:00

Re: RS 232 - jak sprawdzać parzystość???

Post autor: e_gregor »

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
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: RS 232 - jak sprawdzać parzystość???

Post autor: jogurt_owocowy »

Oczywiście - jeśli tylko klocek Serial Read zwraca taki błąd to można. A zwraca?
Awatar użytkownika
Ender
Posty: 137
Rejestracja: 02 cze 2005 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Cieszyn

Re: RS 232 - jak sprawdzać parzystość???

Post autor: Ender »

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 :)
-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 ....
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: RS 232 - jak sprawdzać parzystość???

Post autor: jogurt_owocowy »

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ć.
Awatar użytkownika
e_gregor
Posty: 21
Rejestracja: 05 sty 2006 00:00

Re: RS 232 - jak sprawdzać parzystość???

Post autor: e_gregor »

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.
e_gregor
ODPOWIEDZ