komunikacja przez port szeregowy

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
Aven
Posty: 6
Rejestracja: 29 lis 2006 00:00

komunikacja przez port szeregowy

Post autor: Aven »

Witam. Jestem poczatkujacym urzytkownikiem LB w wersji 6.0. Pierwszy i glowny problem, ktory mam to jak stworzyc i skonfigurowac polaczenie z miernikiem cyfrowym z komputerem poprzez port com.
Na probe chcialbym, aby pokazywal miernik jakies wartosci i beda one odczytywane w LB (w pozniejszym etapie rysowane wykresy XY).

Pozdrawiam Forumowiczow.
bogdani
Administrator
Posty: 1315
Rejestracja: 30 lip 2003 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Ruda Śląska
Kontakt:

Re: komunikacja przez port szeregowy

Post autor: bogdani »

Witaj

No to wiemy co chcesz robić. Tylko nie wiemy jak brzmi pytanie i w czym jest problem.

Jeśli chodzi o to jak zacząć to proponuję zapoznać się z przykładami z LV dotyczącymi komunikacji po porcie szeregowym (niedawno ktoś o to już pytał). Potem przejrzyj przykłady ktore związane są z wyświetlanie danych na wykresach itd. (się przyda).

bogdani
Ktoś ci pomógł na forum? Podziękuj dając pochwałę.

Obrazek Obrazek Obrazek
Aven
Posty: 6
Rejestracja: 29 lis 2006 00:00

Re: komunikacja przez port szeregowy

Post autor: Aven »

Witam, mam problem z komunikacja przez RS232, na VisaRead wyskakuje mi błąd i nie wiem dlaczego. Załączam same pętle z wczytywaniem danych z dwóch mierników cyfrowych Metex, dla przykładu dane z mierników po "obkrojeniu" zostały poddane prostym obliczeniom.

Dlaczego pętlę są takie a nie inne, muszę wykonywać pojedyncze obliczenia na danych pobranych z mierników Metex, po naciśnięciu przycisku "Wczytaj" program ma wczytać dane -> wykonać obliczenia -> dalej do tabeli i wykresu, a następnie ponowny "taki" odczyt danych z mierników po naciśnięciu.

Jeszcze jedna niewiadoma, jaką mam ustawić wartość "byte count" na VisaRead...

W miarę możliwości proszę o szybką pomoc z problemem.

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

Re: komunikacja przez port szeregowy

Post autor: Mikrobi »

1. Inicjalizację portu szeregowego i zamknięcie sesji VISA zrób poza pętlą
2. w węzle (property node) podłaczonym do referencji VISA znajdziesz własność "Bytes At Serial Port" - wyjście podaje ile bajtów czeka na porcie szeregowym - to wartość "byte count" na VisaRead
Podobnie jak korzystasz z 'RTS State', oczywiście odczyt.
3. Unikaj sekwencji stosowej do operacji na porcie - raczej flat sequence. Będzie widać co się dzieje na diagramie.

Napisz jaki błąd dostajesz.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Aven
Posty: 6
Rejestracja: 29 lis 2006 00:00

Re: komunikacja przez port szeregowy

Post autor: Aven »

Witam, dziękuję za pomoc, trochę pomogło, ale nadal mam problemy z odczytem z RS'a.
A mianowicie przy odczycie z dwóch multimetrów Metex różnych (1. 9600 bodów, 2. 600 bodów) na tym z 600 bodów traci sie sygnał i read buffer nic nie pokazuje, co za tym idzie, Metex z 9600 pokazuje ciągle odczyt, a Metex z 600 bodów nie.
Przez to, że brakuje jednej danej wykres mi się psuje...
tutaj znalazlem coś ciekawego:
bogdani pisze: Czy ta pętla nie wykonuje się za szybko ?
Wychodzi mi że jeśli pętla wykonuje się szybkciej niż 150 razy na sekundę (9600 bitów >> 1200 bajtów >> 150 ramek z danymi) to w pewnym momencie musi czekać na dane.
Nie wiem jak szybko musisz zbierać dane, ale wrzuć do tej pętli opóźnienie, to przy okazji nie będziesz zajmował całego czasu procesora. bogdani
więc w moim przypadku data bits musi byc 7...
Parametry techniczne miernika cyfrowego Metex ME-32: - szybkość transmisji 600 bodów, - kod znakowy: 7 bitowy ASCII, - kontrola parzystości brak, - bity stopu 2 [12].
Parametry techniczne miernika cyfrowego Metex M-4640/4660 A: - szybkość transmisji 9600 bodów, - kod znakowy: 7 bitowy ASCII, - kontrola parzystości brak, - bity stopu 2 [12].
Czy to nie jest problem, że w jednej pętli jeden miernik odczytuje większą ilość ramek niż drugi, nie znam się za bardzo na tym, ale ręce mi już opadają, dlaczego zanika ten odczyt...
obliczyłem dla moich mierników wg wzorca Bogadani
9600 >> 1200 >> ~171 ramek /s 600
>> 75 >> ~11 ramek /s
A dodam, że licznik bitów bits count dla 600 bodów to 14 (1 ramka), a dla 9600 bodów 14*4 (4 ramki)
Apropo
1. Inicjalizację portu szeregowego i zamknięcie sesji VISA zrób poza pętlą
A co z Visa Clear?
umieściłem ja w pętli ale poza sekwencją...
I jeszcze jedno na koniec :) jak uruchamiam program z podglądem to widzę na error out (Visa Read i Write) błąd ERR(-1073807298)
Ostatnio zmieniony 16 paź 2007 07:37 przez Aven, łącznie zmieniany 4 razy.
Aven
Posty: 6
Rejestracja: 29 lis 2006 00:00

Re: komunikacja przez port szeregowy

Post autor: Aven »

Gdzie mógłbym znaleźć znaczenie kodu błędu np. ERR(-1073807298)?
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: komunikacja przez port szeregowy

Post autor: jogurt_owocowy »

Prawym klawiszem myszy na kontrolce z błędem i Explain Error.
W ostateczności dowiesz się, że "Error code undefined" wtedy pozostają google i oczywiście forum ;)
Aven
Posty: 6
Rejestracja: 29 lis 2006 00:00

Re: komunikacja przez port szeregowy

Post autor: Aven »

Witam, to znów ja mam problem z buforem przy odczycie danych z Metexa :(
Jak pisałem wyżej znikają mi czasem dane, jak zauwazyłem buffo przy odczycie nic nie wskazywał w takich momentach, więc przyrzałem się dokładnie co odczytuje...
Zamocowałem Property Node ustawione na odczyt używanych bajtów na porcie z Visa Read, aby sam dobierał sobie wartość, wyszło następująco:
Przy pierwszym obiegu pętli
odczytuje z pierwszego miernika: bajtów (14) odczytuje z drugiego miernika:
bajtów (56) odczyt OK(1073676294)
ale już przy drugim i to jest później stałe: odczytuje z pierwszego miernika: bajtów (15) odczytuje z drugiego miernika:
bajtów (57) i wlaśnie wtedy pojawia się ERR(-1073807298) Possible reason: VISA:Could not perform operation because of I/O error
ta liczba przy pierwszym odczycie czasem się zmienia np dla I (29) dla II (57) ale później jest stała...
I odczyt: "DC
11.99
V"
II odczyt: " DC
11.99
V" jak widać przesunięte o jeden znak...
ODPOWIEDZ