Serieport programmering spørsmål

A

Artem

Guest
Jeg spiller med seriell port under Windows 2k prøver å implementere Modbus master arbeider over RS485 i halfduplex modus.232-485 covnerters overføre retning kontrolleres via RTS linje (tilsvarende beskrevet i Seriellport fullført).
Mitt problem er - jeg kan ikke gjenkjenne slutten av overføring (når siste tegnet er overført fra COM-port).

Skrive gjort som (bare prøvd med 8 bytes):

- Escape communiaction funksjon for å hevde RTS
- Skrive data via WriteFile (skriv tidsavbrudd ikke påvirker overføringen øyeblikket satt til 0)
- Venter på comm hendelser tx tomt (comm masken har blitt satt på tx tom hendelse tidligere)
- Escape comm funtion til deassert RTS

Målt RTS linje puls for prosedyren ovenfor - 100 mikrosekunder.COM-port speed 19200.Men 8 byte overføringen tar faktisk 4,5 millseconds.Jeg antar - WriteFile avkastning ved å sende siste tegnet i programvare tx buffer, men ikke siste tegnet fra hardware buffer.

Da innstillingen RTS-kontroll for å veksle i DCB-strukturen strekker RTS puls opp til 15 millseconds mot 4,5 miliseconds av faktiske overføringen som er for stor - i løse 10 millisekund av transfer tid per pakke, mens selve Modbus behandlingstid for nevnt hastighet bør ikke være mer enn 1,75 millisekunder (t3.5 timer).

Så jeg har forsøkt å sette en Sleep () på 1 millisekund etter overføring - men igjen RTS puls forsinket opptil 15 millisekunder, er whch over dårlige vinduer timing oppløsning for Sleep ().

Microsoft MSDN sier - for å oppdage slutten av overføring til siste tegnet portdriveren burde bli fortalt, men som ioctl koder ikke er tilgjengelig - det er umulig å sjekke om det kan gjøres på den måten.
Till nå 2 workaournds kan gjøres:
- Motta mens overføre og match mottatt pakken mot sendt for å oppdage slutt når siste overført tegn er mottatt.
- Etter å sende signaler med høy oppløsning timer (MM timer) for å ha en 1-3 millisekund nøyaktighet

Er det noen andre måter å oppdage slutten av faktiske overføringen for com-porten?

 
Bare lite notat - heve prosessen prioritet (dont vite om det er aktuelt å trøste program) til sanntid hjalp ikke.

lagt til senere.

Mutltimedia tidtakere fungerer fint og gir nær 1 millsec som lovet.Men bedre å holde motta aktiv for halv dupleks 485 og kampen sendes og mottas tegn før du fortsetter å forvente respons frm slaver.

Problemet er løst.Takk til alle for uvurderlig hjelp)).

 

Welcome to EDABoard.com

Sponsor

Back
Top