C# Serial Port Timeout

Gast #935662
Lesenswert?

Hallo,
ich habe ein kleines Problem mit der Seriellen Schnittstelle.
Ich versende Daten und nutze RTC/CTS Hardware Handshake.
Wenn aber die gegenstelle nicht anwortet bzw. die Daten annimmt hängt 
mein Programm. Es gibt zwar die Eigenschaft ReciveTimeout aber ich will 
das ja beim Senden.
Gibt es da ne möglichkeit einfach beim Senden der Daten eine Timeout 
Funktion zu basteln, und dann wenn es auftritt die Funktion zu termieren 
ohne den geöffneten Port neu zu starten usw..

konket geht es darum:
1
private System.IO.Ports.SerialPort serialPort = new System.IO.Ports.SerialPort();
2
serialPort.Write(data, 0, lenght);

und genau das Write hängt halt wenn die gegenstelle tot ist.

MfG
Sebastian
Gast #935721
Lesenswert?

> und genau das Write hängt halt wenn die gegenstelle tot ist.

Das ist unmöglich, wenn Du den Hardware Handshake richtig bedienst. Dann 
muß die Gegenstelle auf Dein Request To Send nämlich erstmal mit Clear 
To Send antworten, bevor Du die Write-Funktion aufrufst.

Also solltest Du Dich erstmal mit den Eigenschaften der seriellen 
Schnittstelle und speziell mit dem Hardware Handshake beschäftigen.
Gast #940704
Lesenswert?

@jolau

Was Du schreibst ist maximal graue Theorie. Der RTS/CTS-Handshake(!) 
funktioniert natürlich genau so, wie von Sebastian____ beschrieben :-) 
Nur so bekommt man schließlich eine bidirektionale(!) Kommunikation mit 
Schutz vor Pufferüberlauf in beiden Richtungen ans laufen.

Deine Darstellung bezieht sich auf die klassische Modemkommunikation, 
was seit 20 Jahren niemanden mehr interessiert.
Gast #942818
Lesenswert?

Ja sicher, aber wenn, dann wird RTS/CTS eben für den bidirektionalen 
Handshake eingesetzt und nicht für die Ankündigung einer Übertragung.

In jedem Fall bevorzuge ich selber auch eine Art der Datenübertragung, 
die per se auf Handshakesignale verzichten kann. Hängt ja nur vom 
benutzten Protokoll ab.
Gast #943214
Lesenswert?

Hallo,
ich melde mich nch mal zu Wort.
Die Kommunikation läuft und abbrüche werden zuverlässig erkannt.
Manche Maschinen wollen nur mit RTS/CTS kommunizieren. Da kann ich 
nichts dran ändern.
Man muss halt sehen das man da etwas möglichst zuverlässiges 
programmiert was im Alltag zuverlässig funktioniert.
Manchmal kann man halt nicht sein lieblingsprotokoll für die 
Kommunikation verweden und muss eine bestehende Infrastruktur einbinden.

Und PC Seitig hat man da bei RTS/CTS nur die Chance über das Timeout.

Sebastian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren