Forum: PC-Programmierung C++/CLI RS232 Schnittstellle


von Christian (Gast)


Lesenswert?

Hallo,
Ich habe ein Programm geschrieben, das per RS232 mit einem Gerät
kommuniziert.
Wenn aber jetzt die Versorgungsspannung des Geräts oder
die RS232 Verbindung unterbrochen wird, wird das Programm eingefroren.

Ich könnte mir denken, das das Programm ewig auf eine Antwort wartet und 
deshalb alles eingefriert.

Ich wollte fragen, ob es eine elegante Lösung gibt, das das Programm
darauf reagiert und eine Fehlermeldung anzeigt, ohne einzufrieren.

Ich benutze RS232/USB Converter und RS232/Ethernet Konverter mit 
virtuellen COM-Ports.
Mein Code schaut folgendermaßen aus:
1
SerialPort^ serialPort = gcnew SerialPort(comPort,9600,Parity::None,8,StopBits::One);
2
3
  serialPort->Open();
4
  serialPort->Write(Senden,0,5);
5
6
  array<unsigned char> ^Empfangen = gcnew array<unsigned char>(5);
7
  
8
  serialPort->Read(Empfangen,0,5);  
9
  
10
        serialPort->Close();

von Peter II (Gast)


Lesenswert?

einfach einen Timeout festlegen und dann die Fehlermeldung abfangen.

von Christian (Gast)


Lesenswert?

Das hab ich leider noch nie gemacht...

Muss man das dann wieder mir einem try.. catch abfragen?

von Peter II (Gast)


Lesenswert?

Christian schrieb:
> Muss man das dann wieder mir einem try.. catch abfragen?

ja

von Christian (Gast)


Lesenswert?

Hab jetzt mal folgendes probiert:
1
       try
2
    {
3
  serialPort1->Read(Empfangen,0,8);  
4
  }
5
    catch(TimeoutException ^e)
6
    { 
7
    System::Windows::Forms::MessageBox::Show("Zeit");
8
  }

Aber das Programm bleibt bei Read stehen und friert ein.

von Peter II (Gast)


Lesenswert?

Christian schrieb:
> Aber das Programm bleibt bei Read stehen und friert ein.

und wo hast du den Timeout festgelegt?

http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.readtimeout.aspx

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.