Serijski port programiranje pitanje

A

Artem

Guest
Ja sam igranje sa serijski port pod Windows 2k pokušavaju implementirati Modbus majstor rade preko RS485 u halfduplex način.232-485 covnerters prenositi smjeru se kontrolira preko RTS-linija (slična je opisan u Serijski port kompletan).
Moj problem - ja ne mogu ispravno detektirati završetak prijenosa (kada je zadnji znak je prenose sa COM port).

Pisanje ispunjavanja kao (samo pokušao s 8 bajtova):

- Escape funkcija communiaction da dokaže RTS
- Zapisivanje podataka putem WriteFile (napišite timeouts ne utječu na prijenos trenutno postavljen na 0)
- Čeka na comm događajima tx prazan (comm maska je postavljen na tx prazni event ranije)
- Escape funtion comm na deassert RTS

Mjereno RTS linija za puls iznad postupka - 100 Microseconds.COM priključak brzine 19.200.Ali, 8 Byte transfer zaista potrebno 4,5 millseconds.Pretpostavljam - WriteFile vraća nakon slanja zadnji znak u softver TX buffer, ali ne i zadnji znak od hardvera tampon.

Zatim postavljanje RTS kontrolu žabica u DCB strukturi proteže RTS puls do 15 millseconds protiv 4,5 miliseconds stvarnog transfera kojih je prevelika - ja labava 10 milisekunda i po vremena prijenosa paketa, dok je stvarni Modbus obrta za navedene brzine ne bi trebalo biti više od 1,75 milisekundi (t3.5 timer).

Onda sam pokušao postaviti Sleep () za 1 milisekunda nakon prijenosa - ali opet RTS-a puls kasniti do 15 milisekundi, whch je oko prozora loše vrijeme za rezoluciju Sleep ().

Microsoft MSDN kaže - to otkriti kraj prijenosa za posljednje upravljački znak luka treba reći, ali kako ioctl kodovi nisu dostupni - nemoguće je provjeriti da li se može obaviti na taj način.
Do sada 2 workaournds može se obaviti:
- Primanje dok prenose utakmice i primio paket prema poslao otkriti kraj, kada je primljena posljednja prenosi karakter.
- Nakon slanja signala visoke rezolucije timer (timer MM) da imaju 1-3 milisekunda točnosti

Ima li neki drugi putevi do kraja otkriti stvarni transfer za com port?

 
Samo mala napomena - podizanje prioritet procesa (ne znam da li je konzola odnosi se na program) za realno vrijeme nije pomoć.

dodan kasnije.

Mutltimedia timers odlično funkcioniraju i pruža blizu 1 millsec kao što je obećao.Ali bolje držati primiti aktivnu za pola duplex 485 utakmica i primljenih i poslanih znakova prije nastavka za očekivati odgovor frm robovi.

Problem je riješen.Hvala svima na neprocjenjiva pomoć)).

 

Welcome to EDABoard.com

Sponsor

Back
Top