Strona 1 z 1

RS232, dane w read buffer

: 16 lut 2010 18:09
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

Re: RS232, dane w read buffer

: 16 lut 2010 19:20
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

Re: RS232, dane w read buffer

: 18 lut 2010 14:28
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.

Re: RS232, dane w read buffer

: 18 lut 2010 15:37
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 8863 razy

Re: RS232, dane w read buffer

: 18 lut 2010 20:39
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

Re: RS232, dane w read buffer

: 18 lut 2010 21:18
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.

Re: RS232, dane w read buffer

: 18 lut 2010 23:41
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

Re: RS232, dane w read buffer

: 19 lut 2010 00:43
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.