RS232, dane w read buffer
RS232, dane w read buffer
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
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
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: RS232, dane w read buffer
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.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
Re: RS232, dane w read buffer
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
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: RS232, dane w read buffer
Ostatni z "chwytów" tj.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
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 ) 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).
Hmm... Nic:ale co w przypadku logicznego zera?
Re: RS232, dane w read buffer
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.
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
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: RS232, dane w read buffer
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.W załączniku program wg. wytycznych nr 1
Dziwna sprawa.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
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.
Re: RS232, dane w read buffer
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: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.
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.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.
pozdrawiam
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: RS232, dane w read buffer
Chodziło mi o to, jak wyglądał Twój program wtedy, gdy nie działał. Opisywałeś go tak:W Casie umieściłem tylko String Indicator (nazwany: Stan bufora). Następnie wybrałem create/property node/value...
Zamieść go.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.