problem z odczytem danych z portu szeregowego
problem z odczytem danych z portu szeregowego
Witam,
Mam następujący problem. Komunikuję się z urządzeniem, które na wysłane zapytanie powinno odpowiadać mi określonym ciągiem danych przesyłanym po porcie szeregowym. Według producenta urządzenia dane nie mogą być odczytywane częściej niż 1 raz w ciągu sekundy. Tak więc przygotowałem program w którym ustawiłem opóźnienia zapytania oraz odczytu co 1000ms. Niestety dane, które odczytuję są niepoprawne. ramka odbierana z urządzenia zawsze powinna zaczynać się od FF00 09 natomiast czasem zawiera różne dodatki np 0001 FF00 09....
Próbowałem już dodać odczyt danych tylko wtedy gdy dane zaczynają się na FF00 09 ale wtedy zdarza się, że na poprawną ramkę muszę oczekiwać bardzo długo.
Dla porównania użyłem programu dostarczonego przez producenta w którym możliwe jest podejrzenie komunikacji i wszystko jest poprawnie.
Jak poradzić sobie z tym przypadkiem? W załączniku mój .vi.
Mam następujący problem. Komunikuję się z urządzeniem, które na wysłane zapytanie powinno odpowiadać mi określonym ciągiem danych przesyłanym po porcie szeregowym. Według producenta urządzenia dane nie mogą być odczytywane częściej niż 1 raz w ciągu sekundy. Tak więc przygotowałem program w którym ustawiłem opóźnienia zapytania oraz odczytu co 1000ms. Niestety dane, które odczytuję są niepoprawne. ramka odbierana z urządzenia zawsze powinna zaczynać się od FF00 09 natomiast czasem zawiera różne dodatki np 0001 FF00 09....
Próbowałem już dodać odczyt danych tylko wtedy gdy dane zaczynają się na FF00 09 ale wtedy zdarza się, że na poprawną ramkę muszę oczekiwać bardzo długo.
Dla porównania użyłem programu dostarczonego przez producenta w którym możliwe jest podejrzenie komunikacji i wszystko jest poprawnie.
Jak poradzić sobie z tym przypadkiem? W załączniku mój .vi.
- Załączniki
-
- !fantom_serial_6.6_debug.vi
- (55.64 KiB) Pobrany 539 razy
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
problem z odczytem danych z portu szeregowego
http://digital.ni.com/public.nsf/allkb/ ... 0B005E9A63
Pisze to juz kolejny raz z rzedu... (cos sie wysypywalo)
Mysle ze te opoznienia moga wprowadzic zamieszanie. Przetestuj bez nich i zapisz wszystkie dane np: do pliku i sprawdz czy otrzymujesz te dane.
WG mnie zawsze jest miec wiecej danych, ktore mozna np. usrednic, przesiac idt...
Pisze to juz kolejny raz z rzedu... (cos sie wysypywalo)
Mysle ze te opoznienia moga wprowadzic zamieszanie. Przetestuj bez nich i zapisz wszystkie dane np: do pliku i sprawdz czy otrzymujesz te dane.
WG mnie zawsze jest miec wiecej danych, ktore mozna np. usrednic, przesiac idt...
problem z odczytem danych z portu szeregowego
Dzięki za odpowiedź. Nie bardzo jednak rozumiem w jaki sposób mogę przetestować mój program bez opóźnień, skoro nie mam nie wpływu. Chyba, że mówimy o różnych opóźnieniach. Dlatego proszę trochę jaśniej 

problem z odczytem danych z portu szeregowego
Próbowałeś modyfikować czas opóźnienia? Jakie były tego efekty? Czy ten początkowy dodatek wpływa na resztę odbieranych informacji? Czy porównywałeś prawidłowe dane, które otrzymałeś przez użycie programu producenta z tym co wyrzuca Ci Twój program?
Certified LabVIEW Associate Developer
problem z odczytem danych z portu szeregowego
Tak, próbowałem zmieniać delaye zarówno po stronie zapytania jak i odbioru danych. Niestety w obu przypadkach problem jest ten sam - dostaje przesunięty ciąg znaków (oczywiście co jakiś losowy okres czasu string jest poprawny).
Zauważyłem, że zawartość stringa jest poprawna, tylko przesunięta w czasie, czyli jeśli początek poprawnie odebranej ramki powinien mieć postać
FF00 09 to w moim przypadku każda ramka zawiera wymieniony prefix, ale może on znajdować się w różnych miejscach całej ramki, np:
xx xx FF00 09 xx xx xx
xx FF00 09 xx xx xx itp itd
Rozwiązaniem mogłoby być przeszukiwanie ramki w poszukiwaniu początku ramki, chyba że istnieje jakaś lepsza metoda?
Zauważyłem, że zawartość stringa jest poprawna, tylko przesunięta w czasie, czyli jeśli początek poprawnie odebranej ramki powinien mieć postać
FF00 09 to w moim przypadku każda ramka zawiera wymieniony prefix, ale może on znajdować się w różnych miejscach całej ramki, np:
xx xx FF00 09 xx xx xx
xx FF00 09 xx xx xx itp itd
Rozwiązaniem mogłoby być przeszukiwanie ramki w poszukiwaniu początku ramki, chyba że istnieje jakaś lepsza metoda?
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
problem z odczytem danych z portu szeregowego
mialem na mysli zapisanie "suchych" danych jakie otrzymujesz z portu, przesuniecie moze wynikac np. z rodzaju uzytego separatora itd.
Mowiac "ramka" masz na mysli pakiet otrzymanych danych??
Mowiac "ramka" masz na mysli pakiet otrzymanych danych??
problem z odczytem danych z portu szeregowego
Tak, mówiąc ramka mam na myśli pakiet danych które otrzymuję.
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
problem z odczytem danych z portu szeregowego
Mozesz to tak przetestowac i sprawdzic co dostaniesz w odpowiedzi??
(niewiem czy to ci pomoze, nietestowalem poprawnosci VI'a)
Zamiast stringa mozesz zapisac do pliku aby przetestowac poprawnosc danych.
W praktyce mozesz uzyc "Match pattern" aby odczytac tylko te dane ktore cie interesuja...
(niewiem czy to ci pomoze, nietestowalem poprawnosci VI'a)
Zamiast stringa mozesz zapisac do pliku aby przetestowac poprawnosc danych.
W praktyce mozesz uzyc "Match pattern" aby odczytac tylko te dane ktore cie interesuja...
Re: problem z odczytem danych z portu szeregowego
Jakoś dziwnie loguje mi te dane do pliku, dostaje sieczkę jak w załączniku.
Kombinowałem z ustawieniami, delayami i zero konkretnych efektów. Chyba spróbuje ten match pattern.
Kombinowałem z ustawieniami, delayami i zero konkretnych efektów. Chyba spróbuje ten match pattern.
- Załączniki
-
- log.txt
- (15 Bajtów) Pobrany 496 razy