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?
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?