www.mikrocontroller.net

Forum: PC-Programmierung C# Serial Port Timeout


Autor: Sebastian____ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
private System.IO.Ports.SerialPort serialPort = new System.IO.Ports.SerialPort();
serialPort.Write(data, 0, lenght);

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

MfG
Sebastian

Autor: Sebastian____ (Gast)
Datum:

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

Sebastian

Autor: jolau (Gast)
Datum:

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

Autor: Schwurbl (Gast)
Datum:

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

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schwurbl (Gast)
Datum: 29.07.2008 21:37

ganz so nicht.

es geht auch ohne  RTS/CTS-Handshake

Autor: Schwurbl (Gast)
Datum:

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

Autor: Sebastian____ (Gast)
Datum:

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

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.