RS232 WriteFile() Timeouts

Gast #1238655
mahlzeit,

ich habe mal eine frage zum versenden von daten über die RS232 unter der 
WINAPI, speziel TIMEOUTS

comTimeOut.WriteTotalTimeoutMultiplier = 0;
comTimeOut.WriteTotalTimeoutConstant = 0;

Vorwort:

ich versende über die RS232 3 Daten in Paketform

outputData[0] = 0x02;
outputData[1] = 0x01;
outputData[2] = 0x05;

das versenden klappt ohne weitere probs. doch der uC der mit den daten 
arbeiten soll ist anscheined zulangsam. (empfängt daten nur teileweise 
und auch falsch). wenn ich die daten einzeln hintereinander sende, 
klapps 1a.

ich habe nun versucht über die Timeouts das senden zu handeln. aber egal 
wie ich die Timeouts setze, es passiert nichts. Wunsch: versetztes 
senden der daten -- IM PAKETFORM (mehrfaches senden ist nicht erwünscht)

1. Was sagen die Timeouts? die msdn doku macht mich nicht schlauer?

2.grundsätzlich sage ich mir, das ich die "Sendegeschwindigkeit" mit der 
baudrate festsetze. also wenn überhaupt, muss ich dies auf seite des uC 
abfangen, richtig? Hat denn einer eine idee?

Danke!
#1238669
Wenn du die Daten schneller schickst, als dein µC diese verarbeiten 
kann, helfen dir Timeouts nicht weiter.

Du musst die Sendegeschwindigkeit drosseln!

Entweder hardcodiert mit Wartezeiten zwischen den Bytes, oder als 
Handshake (z.B. RTS/CTS), damit der µC "STOP" schreien kann, wenn seine 
Buffer am überlaufen sind.
Gast #1239973
hey Ernst,

danke für die Antwort. Der Handshake wäre dann eine Möglichlkeit, wohl 
war.

Aber mich interressiert nun noch, was die Timeouts machen würden? Denn 
irgentwie zeigen diese keine Funktion.

comTimeOut.WriteTotalTimeoutMultiplier = 0;
comTimeOut.WriteTotalTimeoutConstant = 0;

Gruss
#1240030
Sorry, ich programmiere nicht für Windows, solange ich das irgendwie 
vermeiden kann. Der Rest ist also geraten.

Üblicherweise bestimmt man mit Timeouts, wie lange eine Operation 
versucht werden soll, bevor mit einem Fehler abgebrochen wird.

In deinem Fall: wie lange Windows auf ein Clear-To-Send auf der RS232 
wartet.
Wenn du garkein Flow-Control verwendest, wartet er nie auf CTS, und der 
Timeout beeinflusst folglich auch nichts.
#1245139
Hallo Ernst,

manchmal steht man doch echt auf dem Schlauch. Die CTS - Leitung (bzw. 
Flow_Control) habe ich total vergessen. Nutze ich nämlich nicht 
(Kommunikation zwischen PC und uC).

Und ja die Vorteile anderer Betriebssysteme kenne ich auch. ;-)

Gruss aus Berlin (alias Jack)
#1245278
Christian Koop wrote:

> Und ja die Vorteile anderer Betriebssysteme kenne ich auch. ;-)

Das hat nichts mit anderen Betriebssystemen zu tun.
Dort wärs genau das gleiche. Ein Timeout auf einer Sendeeinrichtung ist 
dann wirkungslos, wenn die Einrichtung von der Gegenstelle nicht 
angehalten werden kann.
Kein Handshake -> prinzipiell kein Timeout möglich.

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.