Forum: PC-Programmierung VB6: Kommunikation über Seriellport dauert zu lange


von Tim (Gast)


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

von klaus (Gast)


Lesenswert?

Hi Timo,
bitte prüfe mittels Gerätemanager folgendes nach:

Welchen Wert hat der Parameter Fifo-Empfangspuffer ?
Setze diesen auf 1.

Bye
Klaus

von Tim (Gast)


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

von Klaus (Gast)


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

von SlashN /n (Gast)


Lesenswert?

Und jedes Mal machst du das port auf, und nacher wieder zu ?

von Anfänger (Gast)


Lesenswert?

Wollte ich gerade sagen, mach den Port vor der Schleife auf, und 
schliesse ihn nach der Schleife wieder zu... In der Schleife reicht die 
reine Übertragung...

von veit (Gast)


Lesenswert?

kann das nur bestätigen, das port öffnen und schließen dauert bei den 
usb-dingern wesentlich länger als beim normalem com-port

von vbscripta (Gast)


Lesenswert?

Do While Len(sBuffer) < 3
   sBuffer = sBuffer & .Input
Loop

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.