www.mikrocontroller.net

Forum: PC-Programmierung RS232 WriteFile() Timeouts


Autor: Jack (Gast)
Datum:

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

Autor: Εrnst B✶ (ernst)
Datum:

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

Autor: Jack (Gast)
Datum:

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

Autor: Εrnst B✶ (ernst)
Datum:

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

Autor: Christian Koopson (koopson)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

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.