FAQ | Points | Add... | Recent posts | Search | Register | Log in


Komunikacja z portem COM - opóźnienia


Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Komunikacja z portem COM - opóźnienia
Author
Message
Ciupaska
Poziom 2
Poziom 2


Joined: 16 Jul 2009
Posts: 3
Location: Bielsko-Biała

Post#1 Post from the author of the topic 08 Mar 2010 09:19   

Komunikacja z portem COM - opóźnienia


Witam!

Nie wiem czy to pytanie nie jest do działu Automatyka, ale niech tam...

Napisałem aplikację, która ma - między innymi - być jednym ze slave'ów w protokole Modbus.
Połączenie z linią RS485 odbywa się poprzez przejściówkę USB-RS485.
Aplikacja napisana jest w Delphi, z użyciem komponentu TComPort.
Ustawienia portu COM: overlapped, BaudRate - 19200, SyncMethod - smNone;

Komunikacja jest oprogramowana w osobnym wątku z priorytetem tpTimeCritical (najwyższy dostępny). Wątek zajmuje się tylko komunikacją - czeka na ramki i najszybciej jak się da odpowiada na nie.
Komunikuje się z wątkiem głównym programu za pomocą messages (PostMessage).

Urządzenie będące masterem oczekuje na odpowiedzi Modbus czasie 100ms.
Master 10 razy na sekundę odpytuje wszystkie slave'y i otrzymanie odpowiedzi oznacza, że to urządzenie działa. Przy okazji jest tam też status i jakieś żądanie.


Czasy odpowiedzi z komputera/aplikacji mierzone w masterze są dość nieregularne - przeważnie od 10ms do 80ms. Niestety czasem jest to ponad 100ms i wtedy urządzenie slave jest uznawane jako wyłączone, co powoduje problemy merytoryczne - przerwanie rozpoczętych operacji itp.

Komputer zachowuje się tak, jakby zawieszał się na pewne okresy czasu (rzędu kilkaset ms) i potem nagle gdy się odwiesi - wysyła naraz odpowiedzi na wszystkie zapytania, które nadeszły w czasie gdy był zawieszony.
To powoduje problemy w komunikacji na całej linii.

W czym może tkwić problem?
1) w ustawieniach portu COM?
2) w przejściówce USB-RS485?
3) w czymś jeszcze innym?

Problem powtarza się na różnych komputerach, w różnych konfiguracjach urządzeń Modbus, ale w części zestawów (nawet w większości) opóźnienia mieszczą się w wymaganym czasie i nie ma problemów...

Czy mogę prosić mądre głowy o zdanie? :)
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 08 Mar 2010 09:19   





Back to top
   
oloam
Poziom 17
Poziom 17


Joined: 08 May 2005
Posts: 386
Location: poza granicami Polski

Post#2 08 Mar 2010 18:53   

Re: Komunikacja z portem COM - opóźnienia


Probowales zmienic sposob odbierania danych ? http://www.elektroda.pl/rtvforum/topic1424319.html <--tu masz waitforevent i tam mozesz ustawic milisekundy , wiec wydaje mi sie ,ze cos masz skopane odbieraniem danych
Back to top
   
ostrytomasz
Poziom 15
Poziom 15


Joined: 11 Mar 2004
Posts: 256

Post#3 08 Mar 2010 23:20helpful post - solution   

Re: Komunikacja z portem COM - opóźnienia


Przejściówki wnoszą opóźnienie, w pewnych warunkach absurdalnie duże. Dane na UART przychodzą bajt po bajcie, ale nie można ich bajt po bajcie wysyłać przez USB - maksymalna przepustowość USB wyniosłaby wtedy 1000 B/s. Przejściówka ma bufor danych od kilkudziesięciu B do kilku kB i czeka z przesłaniem danych na jego wypełnienie lub inne kryterium, np. odstępu między odbieranymi z UART bajtami.
Jeżeli przypadkiem masz przejściówkę z układem CP210x, to przeczytaj
http://www.silabs.com/Support%20Documents/TechnicalDocs/an205.pdf
Opisane jest tam też narzędzie do zmiany wartości timeoutu odbioru.
FTDI też pisze, że ten parametr pozwala programować:
http://www.ftdichip.com/Documents/DataSheets/DS_FT232BM.pdf
Back to top
   
Google

Google Adsense


Post# 08 Mar 2010 23:20helpful post - solution   





Back to top
   
Ciupaska
Poziom 2
Poziom 2


Joined: 16 Jul 2009
Posts: 3
Location: Bielsko-Biała

Post#4 Post from the author of the topic 09 Mar 2010 01:07   

Re: Komunikacja z portem COM - opóźnienia


oloam, nie ukrywam że używając komponentu TComPort nie zagłębiałem się w tajniki odbioru danych - we wszystkich dotychczasowych sytuacjach jego domyślne ustawienia sprawowały się zadowalająco.
Dopiero teraz - przy reżimie czasowym na odpowiedź - pojawiły się problemy.

Idąc Twoim tropem sprawdziłem ustawienie SetCommMask - w komponencie widoczne jako Events: domyślnie maska jest pełna - wszystkie zdarzenia są ustawione. Czy to może być źródło problemów?
Bo w sumie interesuje mnie chyba tylko EV_RXCHAR. Z tym że niedokładnie wiem po co są te maski i czy ustawienie ich wszystkich może przeszkadzać... A nie mam jak sprawdzić organoleptycznie, bo u mnie na maszynie developerskiej nie mam opóźnień. :(

ostrytomasz, dzięki za info, dowiem się z czego ta moja przejściówka jest zrobiona. :)
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 09 Mar 2010 01:07   





Back to top
   
oloam
Poziom 17
Poziom 17


Joined: 08 May 2005
Posts: 386
Location: poza granicami Polski

Post#5 09 Mar 2010 18:36   

Re: Komunikacja z portem COM - opóźnienia


Ten urywek kodu ktory widziales w poscie z tematu z linka,pochodzi z mojego programu gdzie komunikowalem sie z urzadzeniem zewnetrznym (nie robionym przeze mnie), w komunikacji musialy nastepowac natychmiastowe odpowiedzi dla urzadzenia ,w przeciwnym wypadku urzadzenie zrywalo komunikacje. o dziwo poprzez standardowa procedure on rxchar udalo sie nawiazywac komunikacje plus odebrac od jednego do kilku pakietow, przy sprawdzaniu flagi komunikacja jest prawidlowa
Back to top
   
Ciupaska
Poziom 2
Poziom 2


Joined: 16 Jul 2009
Posts: 3
Location: Bielsko-Biała

Post#6 Post from the author of the topic 11 Mar 2010 20:53   

Re: Komunikacja z portem COM - opóźnienia


ostrytomasz, moja przejściówka oparta jest o układ FTDI - w opcjach zaawansowanych portu COM można zmieniać opóźnienie i zmniejszenie go spowodowało znaczne ustabilizowanie komunikacji oraz skrócenie czasów odpowiedzi do ok. 8ms. Choć i tak zdarzają się wyskoki do kilkudziesięciu ms. Ale to już - jak rozumiem - uroki Windows? :)

oloam, ja mam podobną sytuację - też muszę szybko odpowiedzieć. Używam komponentu TComPort, ale myślałem że jest jakiś problem z ustawianiem maski zdarzeń. Tymczasem - jw. - problem był w czym innym.
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Komunikacja z portem COM - opóźnienia
Page 1 of 1
Similar topics
Visual Studio 2005 Problem z portem COM w C# na PPC2003 (2)
Sterowanie portem COM pod DOSem (7)
[Visual Basic] Sterowanie portem COM. (2)
[Visual Basic] Sterowanie portem COM. (5)
Sterowanie portem COM. RS232 (62)
[C++] Sterowanie portem COM. (4)
[C++] Sterowanie portem COM. (2)
[C++] Sterowanie portem COM. (8)
[Visual C++] Komunikacja przez port COM. (12)
[ATmega8] Komunikacja z Pc bez portu COM (11)

Page generation time: 0.082 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed