VB6: Kommunikation über Seriellport dauert zu lange

Gast #1064290
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
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
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
Gast
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.