problem z odczytem danych z portu szeregowego

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
bikekowal
Posty: 21
Rejestracja: 05 lis 2010 10:07
Wersja środowiska: LabVIEW 2011

problem z odczytem danych z portu szeregowego

Post autor: bikekowal »

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.
Załączniki
!fantom_serial_6.6_debug.vi
(55.64 KiB) Pobrany 449 razy
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

problem z odczytem danych z portu szeregowego

Post autor: Jamal79 »

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...
bikekowal
Posty: 21
Rejestracja: 05 lis 2010 10:07
Wersja środowiska: LabVIEW 2011

problem z odczytem danych z portu szeregowego

Post autor: bikekowal »

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 :)
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

problem z odczytem danych z portu szeregowego

Post autor: MicMac89 »

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
bikekowal
Posty: 21
Rejestracja: 05 lis 2010 10:07
Wersja środowiska: LabVIEW 2011

problem z odczytem danych z portu szeregowego

Post autor: bikekowal »

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?
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

problem z odczytem danych z portu szeregowego

Post autor: Jamal79 »

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??
bikekowal
Posty: 21
Rejestracja: 05 lis 2010 10:07
Wersja środowiska: LabVIEW 2011

problem z odczytem danych z portu szeregowego

Post autor: bikekowal »

Tak, mówiąc ramka mam na myśli pakiet danych które otrzymuję.
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

problem z odczytem danych z portu szeregowego

Post autor: Jamal79 »

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...
Załączniki
rs.png
bikekowal
Posty: 21
Rejestracja: 05 lis 2010 10:07
Wersja środowiska: LabVIEW 2011

Re: problem z odczytem danych z portu szeregowego

Post autor: bikekowal »

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.
Załączniki
log.txt
(15 Bajtów) Pobrany 424 razy
ODPOWIEDZ