Forum: PC-Programmierung C# Serial Port Timeout


von Sebastian____ (Gast)


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

von Sebastian____ (Gast)


Lesenswert?

hat sich erledigt...
es gib einen parameter *serialPort.WriteTimeout* damit geht es dann.
man sollte vielleicht auch mal in die msdn schauen ;).

Sebastian

von jolau (Gast)


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.

von Schwurbl (Gast)


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.

von juppi (Gast)


Lesenswert?

Schwurbl (Gast)
Datum: 29.07.2008 21:37

ganz so nicht.

es geht auch ohne  RTS/CTS-Handshake

von Schwurbl (Gast)


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.

von Sebastian____ (Gast)


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

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.