RS232, dane w read buffer

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.
rybucha
Posty: 6
Rejestracja: 01 paź 2009 20:27
Wersja środowiska: LabVIEW 8.5

RS232, dane w read buffer

Post autor: rybucha »

Witam szanownych kolegów i koleżanki.
Zrobiłem programik, który odczytuje dane z UART. Wszystko pięknie działa oprócz dość istotnej rzeczy. Myślałem, że dane w buforze będą "podtrzymane" aż do czasu pojawienia się nowych danych. Jest jednak tak, że dane znikają po ustawionym timeoucie w "VISA Configure Serial Port". Co należałoby zrobić...aby wynik był wyświetlany cały czas...a jego zmiana następowała w momencie kiedy przyjdą nowe dane z UART'a? Pozdrawiam
Obrazek
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: RS232, dane w read buffer

Post autor: jogurt_owocowy »

Co należałoby zrobić...aby wynik był wyświetlany cały czas...a jego zmiana następowała w momencie kiedy przyjdą nowe dane z UART'a?
Jeśli odczytasz za pomocą VISA Read pusty string, to po prostu go zignoruj, nie przetwarzaj go dalej i nie wyświetlaj wyników w kontrolce (co prawda tej nie widać na obrazku, ale obstawiam, że jakaś jest). Możesz też wykorzystać węzeł Bytes At Port zwracający ilość bajtów w buforze odbiorczym i nie próbować odczytać z portu czegoś, co jeszcze nie przyszło. Na obrazku sposób jego użycia przy nieco bardziej zaawansowanym odczycie.

Obrazek

Pozdrawiam
rybucha
Posty: 6
Rejestracja: 01 paź 2009 20:27
Wersja środowiska: LabVIEW 8.5

Re: RS232, dane w read buffer

Post autor: rybucha »

Bardzo dziękuję za pomoc. Problem polega na tym, że nie wiem w jaki sposób zignorować pustostan bufora...myślałem żeby wstawić case. Na wejściu "?" porównanie bufora z pustym stringiem...jeżeli wartość bufora więszka, to "prawda" i wtedy powinien wyświetlić w kontrolce wartość bufora...ale co w przypadku logicznego zera?...czyli właśnie w sytuacji, kiedy buffor jest pusty? Próbowałem również chwytów z tematu http://labview.pl/viewtopic.php?f=25&t= ... t=0#p10568- o ile wynik jest wyświetlany cały czas - to nie jest aktualizowany, kiedy przyjdzie coś nowego na UARTa. Napewno robie gdzieś głupi błąd ale nie wiem gdzie. W załączniku "czysta" wersja programu, gdzie wynik znika po timeoucie. Słowo jest w formie 17 bajtów...np.: 023,5000001011100 pierwsze 5 bajtów to stan zbiornika, a pozostałe 12 to temperatura. Pozdrawiam.
Załączniki
ble.vi
(59.36 KiB) Pobrany 313 razy
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: RS232, dane w read buffer

Post autor: jogurt_owocowy »

Próbowałem również chwytów z tematu (...) o ile wynik jest wyświetlany cały czas - to nie jest aktualizowany, kiedy przyjdzie coś nowego na UARTa
Ostatni z "chwytów" tj.
Obrazek
powinien wyświetlać wszystkie dane odczytywane z portu na bieżąco. Nie wiem, czy tego próbowałeś, ale jeśli tak i nie działało, to spróbuj usunąć doklejanie znaku nowej linii (End Of Line Constant Obrazek) przed stringiem odczytanym z VISA Read (nie wiem, jaką funkcję on miał tam pełnić), bo być może dane są odczytywane, ale ich nie widzisz, bo znikają z kontrolki za szybko (szczególnie, jeśli ta jest jednowierszowa).
ale co w przypadku logicznego zera?
Hmm... Nic:
reading all bytes from present at serial port visa read.gif
reading all bytes from present at serial port visa read.gif (8.07 KiB) Przejrzano 8864 razy
rybucha
Posty: 6
Rejestracja: 01 paź 2009 20:27
Wersja środowiska: LabVIEW 8.5

Re: RS232, dane w read buffer

Post autor: rybucha »

Dziękuję za rady. Więc tak...pozbyłem się End Of Line Constant . Sytuacja się nie zmieniła...wynik co prawda był wyświetlany na stałe...ale tylko pierwszy pomiar...kolejne nie (brak aktualizacji stanu kontrolki). W załączniku program wg. wytycznych nr 1.
shift register.vi
(60.71 KiB) Pobrany 319 razy
W drugiej zaproponowanej opcji - nic się nie działo:/ Bytes at port podlicza przychodzące bajty...jak więcej od zera, to pozwalamy na rzeczy dziejące się w Case. Wszystko niby ok...ale dopiero zaczeło wyświetlać wyniki i aktualizować je na kontrolce, jak umieściłem Visa Read poza Case. W Casie pozostawiłem tylko kontrolkę typu string...następnie odnośnikiem Value przekazuje stan tej kontrolki (nazwa: stan bufora) do Scan From String - tym samym ruszyło. Bardzo dziękuję za nakierowanie. ps: Chyba, że coś da się uprościć...zmienić...to dopiero moje początki z LabView. pozdrawiam
bleeeeee.vi
(62.3 KiB) Pobrany 336 razy
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: RS232, dane w read buffer

Post autor: jogurt_owocowy »

W załączniku program wg. wytycznych nr 1
To nie były żadne wytyczne, a tylko pomysł na podgląd danych przychodzących do portu - nijak się to nie miało mieć do Twojego programu.
Wszystko niby ok...ale dopiero zaczeło wyświetlać wyniki i aktualizować je na kontrolce, jak umieściłem Visa Read poza Case. Casie pozostawiłem tylko kontrolkę typu string...następnie odnośnikiem Value przekazuje stan tej kontrolki
Dziwna sprawa.
1. Napisz, co dokładnie umieściłeś wewnątrz Case'a.
2. Utwórz kontrolkę błędu na wyjściu error out bloczka VISA Read (bo w obecnej konfiguracji nie dowiesz się nic o, zaistniałych wewnątrz niej, błędach) i napisz co tam Ci w niej wypisuje.
rybucha
Posty: 6
Rejestracja: 01 paź 2009 20:27
Wersja środowiska: LabVIEW 8.5

Re: RS232, dane w read buffer

Post autor: rybucha »

jogurt_owocowy pisze:To nie były żadne wytyczne, a tylko pomysł na podgląd danych przychodzących do portu - nijak się to nie miało mieć do Twojego programu.
Wytyczne...pewne założenia...kierunki działania...pomysły, którymi postępowałem. Najpierw miałem gołą wersję jak na obrazku powyżej...również dane na kontrolce były widoczne za pierwszym razem...potem cisza.
jogurt_owocowy pisze:Dziwna sprawa.
1. Napisz, co dokładnie umieściłeś wewnątrz Case'a.
2. Utwórz kontrolkę błędu na wyjściu error out bloczka VISA Read (bo w obecnej konfiguracji nie dowiesz się nic o, zaistniałych wewnątrz niej, błędach) i napisz co tam Ci w niej wypisuje.
W Casie umieściłem tylko String Indicator (nazwany: Stan bufora). Następnie wybrałem create/property node/value i połączyłem z wejściem input string bloku Scan From String. Po podłączeniu kontrolki błędu otrzymuję kod 1073676294...który jak rozumiem jest raportem o prawdiłowym odczycie z Visa Read i, że bufor jest teraz pusty. Najpierw stworzyłem na kompie wirtualne połączenie null modem i dane wysyłałem z terminala. Dla pewności podłączyłem teraz mikrokontroler z portem COM komputera - program działa prawidłowo, wynik jest wyświetlany i aktualizowany na bieżąco.

pozdrawiam
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: RS232, dane w read buffer

Post autor: jogurt_owocowy »

W Casie umieściłem tylko String Indicator (nazwany: Stan bufora). Następnie wybrałem create/property node/value...
Chodziło mi o to, jak wyglądał Twój program wtedy, gdy nie działał. Opisywałeś go tak:
W drugiej zaproponowanej opcji - nic się nie działo:/ Bytes at port podlicza przychodzące bajty...jak więcej od zera, to pozwalamy na rzeczy dziejące się w Case.
Zamieść go.
ODPOWIEDZ