mikrocontroller.net

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


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 = .Input
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

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Timo,
bitte prüfe mittels Gerätemanager folgendes nach:

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

Bye
Klaus

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: SlashN /n (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und jedes Mal machst du das port auf, und nacher wieder zu ?

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: veit (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: vbscripta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Do While Len(sBuffer) < 3
   sBuffer = sBuffer & .Input
Loop

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.