czyszczenei bufora RS232

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
Gość
Posty: 656
Rejestracja: 10 lis 2003 00:00

czyszczenei bufora RS232

Post autor: Gość »

Witam
Zrobilem urzadzenie oparte na uP. komunikacje z tym urzadzeniem oparłem na rs485, przyjolem ramke z modbusa w trybie ASCII. Prubuje teraz napisac aplikacje pod labView wspolpracujaca z moim urzadzeniem. Zapoznalem sie z plikami Basic_2_Port_Serial_Write_and_Read.vi oraz Basic_Serial_Write_and_Read.vi niestety za kazdy razem wypisuje mi error

Kod: Zaznacz cały

 Error -1073807343 occurred at Property Node (arg 1) in VISA Configure Serial Port (Instr).vi->Basic_Serial_Write_and_Read.vi 
nie wiem czemu :(
wiec przeszedlem na "zwykła" obsluge portu i to akurat dziala. Ale. poniewaz ramka ma pewnien standart gdzie znak poczatku ramki zaczyna sie od znaku ':' a konczy znakiem powrotu karetki oraz znak poczatkiem nowej lini. Niby wszystko jest OKI ale czasem podczas odbioru mam jakies smieci wraz ze swoimi danymi, i chcialbym sie tych smieci pozbyc, pytanie jak to zrobic? lub jak przerobic progtam zeby bylo OKI :) gdzies na froum widzialem jak ktos uzywal czyszczenia buforu rs232 mozna tego uzyc stosujac Visa, (stad pomysl ze moze to pomorze rozwiazc problem) nie wiem z jakich powodow niemoge jej zastosowac :(
za wszelkie sugestie bede wdzieczny aha mam mozliwosc pracy na labView 7.0 expres 7.1 oraz 8.2
pozdrawiam Śledziu
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: czyszczenei bufora RS232

Post autor: Mikrobi »

Witaj Śledziu.
Z całym szacunkiem dla wkładu pracy jaki jest widoczny na diagramie,
albo precyzyjniej: przez szacunek dla wkładu pracy: uporządkuj diagram. 0. Informacje przepływają tylko od lewej do prawej strony 1. Wejścia po lewej stronie, wyjścia po prawej. 2. Przesyłanie danych w poziomie nie w pionie
3. Proste druty (połaczenia) wszędzie gdzie tylko da się to poprawić.
Jeśli oczekujesz od nas pomocy pomóż nam jej udzielić.
Uporządkuj diagram.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Gość
Posty: 656
Rejestracja: 10 lis 2003 00:00

Re: czyszczenei bufora RS232

Post autor: Gość »

Witam

"trochę" to uporządkowałem, dlugosc tamki to 13 znakow:)
bede wdzieczny za pomoc
Gość
Posty: 656
Rejestracja: 10 lis 2003 00:00

Re: czyszczenei bufora RS232

Post autor: Gość »

Witam

moze na print scr z działajcego programu o co mi chodzi:
1. obrazek jest kiedy program chodzi oki i wszystko gra
2. na drugim, program co jakis czas "gubi" probke z pomiarami (nie wiem czemu) :( (zaznaczylem to w czerwona obwiednia)
3. zdjecia nie ma ale jest problem jeszcze jeden. mianowicie po odlaczeniu zasilania (od urzadzenia) i ponowym jego podlaczeniu program "jest ciemny" brak rekacji, nie wiem czemu;/

za uwagi podpowiedzi jak rozwiazac problem bede wdzieczny
pozdrawiam
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: czyszczenei bufora RS232

Post autor: Mikrobi »

W ramach sugestii:
posprzatać diagram.
pokazać cały (posprzatany) diagram

Zdaję sobie sprawę, że to nie jest taka odpowiedz jakiej oczekujesz, jednak na czytelnym diagramie łatwiej zrozumieć idee. Łatwiej samemu lub innym znaleźć przycznę.
Zakładając że piszesz w C lub innych językach tekstowych zapytam:
stosujesz wcięcia i formatowanie tekstu czy piszesz litym tekstem?
Wbrew pozorom podobnie jest w LabVIEW.
Czytelny i uporządkowany diagram nie wynika wyłacznie z estetyki, tak jak tworzenie rysunków technicznych urządzeń mechanicznych nie wynika ze zmysłu estetycznego konstruktorów mechaniki.

Moralizatorsko, owszem, ale pomóż nam pomóc.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

Re: czyszczenei bufora RS232

Post autor: vugie »

Ja bym proponawał sprawdzać czy wysłał tyle bajtów ile chciałeś i czy odebrał ile chciałeś, a następnie poprawność ramki (znaczniki początku i końca) i cały cykl odpytywania umieścić w pętli, która kończy się pod warunkiem poprawności ramki. Za pomocą właściwości "bytes at port" można sprawdzić czy coś nie zostało do odczytania i odczytać to na pusto.
Ja zamiast czekać określoną ilość czasu przed odczytem stosuję coś takiego: while(bytes at port<13) {rób nic} (+timeout oczywiście). Jest to trochę efektywniejsze czasowo i uniezaleznia od prędkości transmisji. Z tym, że w tym przypadku też trzeba sprawdzić czy nic nie zostało do odczytania, a najlepiej od razu odczytać całość: while((n=bytes at port)<13) {}->Read(n bytes) i potem obciąć stringa wokół znaczników.
Sledziu
Posty: 10
Rejestracja: 28 lis 2006 00:00

Re: czyszczenei bufora RS232

Post autor: Sledziu »

Witam
vugie pisze:Ja bym proponawał sprawdzać czy wysłał tyle bajtów ile chciałeś i czy odebrał ile chciałeś, a następnie poprawność ramki (znaczniki początku i końca) i cały cykl odpytywania umieścić w pętli, która kończy się pod warunkiem poprawności ramki. Za pomocą właściwości "bytes at port" można sprawdzić czy coś nie zostało do odczytania i odczytać to na pusto.
Ja zamiast czekać określoną ilość czasu przed odczytem stosuję coś takiego: while(bytes at port<13) {rób nic} (+timeout oczywiście). Jest to trochę efektywniejsze czasowo i uniezaleznia od prędkości transmisji. Z tym, że w tym przypadku też trzeba sprawdzić czy nic nie zostało do odczytania, a najlepiej od razu odczytać całość: while((n=bytes at port)<13) {}->Read(n bytes) i potem obciąć stringa wokół znaczników.
generalnie cos takiego chce zrobic, zreszta w moje ramce znajduje sie pole sumy kontrolnej, musze dodac odpowiedni kod. Moglbys strzelic print Scrina z tego o czym mowisz :) bylo by super :)

co do porzadku w kodzie to sie zgadzam, ale w tym przypadku chodzi o ten wydzielony fragment.

pozdrawiam
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

Re: czyszczenei bufora RS232

Post autor: vugie »

Poniżej vi realizujący jeden cykl odpytywania. Ja korzystam z biblioteki lvserial, ale bloczki są analogiczne. W moim przypadku konieczne było użycie semafora - w sumie nie wiem dlaczego, bo dbałem o to żeby odpytywania na siebie nie zachodziły, ale zaczęło działać bez błędu dopiero jak go dodałem :) (z tym, że błędy objawiały się wywałką, a nie gubieniem próbek)
Tutaj nie sprawdzam stanu portu, bo oczekiwanie na jeden znak od razu obsługuje mi timeout. No i nie sprawdzam po odpytaniu czy nie zostało coś do odczytania, bo nie miałem z tym żadnych problemów. Poprawność ramki (włącznie z jej długością) sprawdzam potem.
Sledziu
Posty: 10
Rejestracja: 28 lis 2006 00:00

Re: czyszczenei bufora RS232

Post autor: Sledziu »

Witam

W końcu uporządkowałem trochę schemat (rysunki poniżej). W sumie nie naniosłem żadnych zmian, ale może któryś z kolegów zauważy mój błąd. Mianowicie program raz działa raz nie działa, cholera mnie już strzela bo nie wiem co może być przyczyna. Co dziwniejsze na jednym komputerze działa (Czasem) na innym (laptop) nie ma opcji żeby ruszył. Co dziwniejsze informacja jest wysyłana do uP. Niestety nic przychodzi (ale na pewno nie jest to winą urządzenia).
Próbowałem sumę kontrolną CRC oraz ASCII (umieszczone w Formula Node) umieścić bezpośrednio w strukturze CASE – program nie chciała działać (nie wiem czemu ;/). Próbowałem również zrezygnować z pętli While obsługującej część nadawania oraz odbioru- tak żeby ten fragment kodu był umieszczony w głównej pętli WHILE, efekt taki sam jak wyżej (czemu ? nie wiem).
Jeszcze jedno pytanie. Chciałbym wielkoroetnie korzystać w programie z kodów zawartych w formula Node – na rys. oznaczone jako CRC oraz ASCII da się to jakoś uprościć ? tak żeby nie wykorzystywać za każdym razem tego bloku?

pozdrawiam
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: czyszczenei bufora RS232

Post autor: Mikrobi »

Sugestia nr 1:
VISA dla RS'a.
Sugestia 2:
CRC i ASCII przeanalizować pod kątem LabVIEW - czyli przerobić zawartość formula node na diagram - i zamknąć do subVI.
Sugestia 3 (po przejściu na VISA):
Zapiąć Probe na drutach i sprawdzić co przychodzi.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Sledziu
Posty: 10
Rejestracja: 28 lis 2006 00:00

Re: czyszczenei bufora RS232

Post autor: Sledziu »

Witam
próbowałem to zrobić na Visa, napiasłem o tym w pierwszym poscie, niestety
LB wywala mi bład. i nie wiem czemu. postaram sie dzis wkleić peogram z Visa może popłniam jakis błąd .
pozdrawiam
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

Re: czyszczenei bufora RS232

Post autor: vugie »

Pierwsze primo: inicjalizujesz port w każdej iteracji głównej pętli (zresztą bez gwarancji, że zrobi się to na początku), zamiast raz na początku i po bożemu zamknąć go na końcu.
Drugie primo: nie wiem, czy zdajesz sobie sprawę, że pętla z odpytywaniem wykonuje się niezależnie od tego, czy przycisk Detection jest wciśnięty - jeżeli Detection jest false to do ASCII i CRC idą wartości domyślne i wszystko dalej się wykonuje (a CRC nie ma szans się zgadzać).
Trzecie primo: warunek końca pętli odpytywania jest co najmniej dziwny. Kończy się wtedy kiedy Detection jest true. Czyli wykonuje się w kółko kiedy Detection jest false operując na przypadkowych danych o błędnym CRC (poprzedni punkt), a w momencie wciśnięcia przycisku kończy bieżącą iterację i w najlepszym wypadku wykonuje się tylko raz na prawdziwych danych (zależy od rodzaju przycisku). Dodatkowo, jako że nie ma gwarancji kolejności inicjalizacja portu->odczyt, to odczyt może się rozpocząć, zanim inicjalizacja się zakończy i tu dopatrywałbym się przyczyny dlaczego nie działa na VISA. Przede wszystkim nie przypinaj do odczytu portu z powietrza tylko z port-out bloku inicjalizującego (i przed pętlę go)
Nie wiem dokładnie co chcesz osiągnąć, ale ja do case'a wrzuciłbym całą zawartość pętli głównej (i raczej zanegowałbym warunek końca pętli wewnętrznej)

No i tapisz też co znaczy "nie działa" (jaki jest tego objaw)
Sledziu
Posty: 10
Rejestracja: 28 lis 2006 00:00

Re: czyszczenei bufora RS232

Post autor: Sledziu »

Witam

ponizej program z Visa (ja go nie tworzylem), testowany na laptopie, wyposazonym w przejsciowke USB->rs232, program nie dziala. czemu?
wszystko w moim miemaniu jest OKI.
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: czyszczenei bufora RS232

Post autor: Mikrobi »

Hm.... na moje oko to nic na tym porcie nie ma: czytasz 0 bajtów i tyle jak widać jest na porcie.
Proponuję: posprzątać czyli zaznaczyć kolejno bloczki i wykorzystać: Align Objects (Top Edges) i Distribute Objects (Horizontal Gap). 11 ruchów myszką a tyle radości :!: Potem przydała by się prosta maszyna stanów a do testów to nawet oczekiwanie aż na porcie coś się pojawi czyli while który będzie się kręcił aż węzeł Bytes at Port nie zwróci wartości różnej od zera.
Jeśli posprzatasz: pomogę.
8)
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Sledziu
Posty: 10
Rejestracja: 28 lis 2006 00:00

Re: czyszczenei bufora RS232

Post autor: Sledziu »

witam

poprawilem :)

no wlasnie w tym sęk dla czego port nic "nie widzi"?
ODPOWIEDZ