VB6: Kommunikation über Seriellport dauert zu lange

Gast #1064290
Lesenswert?

Hallo,

ich kommuniziere mit einen µC über die serielle Schnittstelle. Dabei 
werden mehrere Datenpakte gesendet. Der relevante Codeaussschnitt sieht 
so aus:
1
With myMSCom    
2
  If .PortOpen = False Then .PortOpen = True    
3
     dummy = .Input ' Lesebuffer leeren
4
    .Output = Chr(bytData1) & Chr(bytData2) & Chr(13)
5
    Do
6
    Loop Until .InBufferCount > 2 'drei Byte werden erwartet
7
    strResponse = .Input
8
End With
Die 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ß

Timo
Gast #1068791
Lesenswert?

Hallo Klaus,

danke, das bringt einiges. Ich nutzt für die ÜBertragung einen 
USB-Baustein (FT232) und hatte ursprünglich keine Nachteile dabei 
erwartet. Mit den Standardmäßigen Einstellungen ist aber eine echte 
serielle Schnittstelle deutlich schneller, sprich es hat was damit zu 
tun.
Dein Tip hat aber auch bei USB-Device funktioniert. Dort habe ich den 
Latency Timer ganz runtergedreht und siehe da - ich bekomme 
Geschwindigkeiten wie bei der echten seriellen Schnittstelle.

Besten Dank!!

Timo
Gast #1069223
Lesenswert?

Hi Timo,
kein Problem.

In Deinem Beispiel fehlt die Abbruchbedingung für den Fall, das
weniger als 2 Zeichen ankommen.
Dieses kann z.B. im Fall einer Unterbrechung der Übertragungsleitung 
auftreten.

Dann wartes Du und wenn Du nicht gestorben bis dann .... .

Bye
Klaus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren