Forum: PC-Programmierung RS232 WriteFile() Timeouts


von Jack (Gast)


Lesenswert?

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!

von Εrnst B. (ernst)


Lesenswert?

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.

von Jack (Gast)


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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.

von Christian K. (koopson)


Lesenswert?

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)

von Karl H. (kbuchegg)


Lesenswert?

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.

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.