Forums Neueste Beiträge
 

Kommunikation über Seriellport dauert zu lange (VB6/MSCOMM)

01/12/2008 - 12:38 von Tim Reiner | Report spam
Hallo,

ich kommuniziere mit einen µC über die serielle Schnittstelle. Dabei werden
mehrere Datenpakte gesendet. Der relevante Codeaussschnitt sieht so aus:
With myMSCom If .PortOpen = False Then .PortOpen = True dummy = .Input
' Lesebuffer leeren .Output = Chr(bytData1) & Chr(bytData2) & Chr(13)
Do Loop Until .InBufferCount > 2 'drei Byte werden erwartet
strResponse = .InputEnd WithDie Funktion ist damit gewàhrleistet und dauert
ca. 15ms je Paket.
ABER: Da ich ca. 10 Datenpakete schicke, Summiert sich die
Kommunikationsdauer auf ca. 150ms. Mit dem Oszilloskop gemessen dauer aber
ein Paket (senden/empfangen) ca. 1,6ms, also müsste optimaler weise in 16ms
alles abgeschlossen sein. Flaschenhals ist die do-loop-Schleife. Würde ich
sofort mit Input lesen, ist nicht sicher, dass ich meine drei Datenbytes
lese.
Geht das nicht schneller? Kann mir jemand sagen, warum ich so lange brauche,
bis die Daten als empfangen gemeldet werden?
=> Zusammenfassend: 0.5ms Senden, 1ms empfangen, 14.5ms ??? (Win-intern
verarbeiten ??)

Gruß

Tim
 

Lesen sie die antworten

#1 Susann Markward
01/12/2008 - 15:17 | Warnen spam
Hallo,

*Tim Reiner* schrieb am 01.12.2008 12:38:
ich kommuniziere mit einen µC über die serielle Schnittstelle. Dabei werden
mehrere Datenpakte gesendet. Der relevante Codeaussschnitt sieht so aus:
With myMSCom If .PortOpen = False Then .PortOpen = True dummy = .Input
' Lesebuffer leeren .Output = Chr(bytData1) & Chr(bytData2) & Chr(13)
Do Loop Until .InBufferCount > 2 'drei Byte werden erwartet
strResponse = .InputEnd WithDie Funktion ist damit gewàhrleistet und dauert
ca. 15ms je Paket.
ABER: Da ich ca. 10 Datenpakete schicke, Summiert sich die
Kommunikationsdauer auf ca. 150ms. Mit dem Oszilloskop gemessen dauer aber
ein Paket (senden/empfangen) ca. 1,6ms, also müsste optimaler weise in 16ms
alles abgeschlossen sein. Flaschenhals ist die do-loop-Schleife. Würde ich
sofort mit Input lesen, ist nicht sicher, dass ich meine drei Datenbytes
lese.
Geht das nicht schneller? Kann mir jemand sagen, warum ich so lange brauche,
bis die Daten als empfangen gemeldet werden?
=> Zusammenfassend: 0.5ms Senden, 1ms empfangen, 14.5ms ??? (Win-intern
verarbeiten ??)



Du solltest die serielle Kommunikation unbedingt Ereignis-gesteuert
implementieren. Und vielleicht könntest Du Deinen Code mal so
formatieren, dass man Lust bekommt, ihn sich anzuschauen? ;-)

MfG
Susann

Ähnliche fragen