Laden...

Kommunikationsabbruch nach 40 Sekunden

4 Antworten
1,054 Aufrufe
Letzter Beitrag: vor einem Jahr
Kommunikationsabbruch nach 40 Sekunden

Hallo,

ich habe eine dll geschrieben, in der ich eine Serielle Kommunikation betreibe. Aus einer Gui lassen sich die Befehle über die dll auch ansteuern und ich bekomme auch meine Daten zurück. Jedoch bricht die Kommunikation konstant nach 40 Sekunden ein. Es bringt auch nichts kontienuirlich Nachrichten zu schicken und eine Antwort zu erhalten.

Kann das mit dem Garbage Collector zusammenhängen, das der meine Funktion oder wichtige Teile davon nach 40s abräumt? Oder muss ich dem DataReceivedHandler immer wieder einen Anstoß geben?

Hier mein Code:

SerialPort serialPort1 = new SerialPort();
        public bool SerialPortOpen(string ComPort, string Baudrate, out string DeviceInfo)
       {
           try
           {
               serialPort1.PortName = ComPort;
               serialPort1.BaudRate = Convert.ToInt32(Baudrate);
               serialPort1.Parity = Parity.None;
               serialPort1.DataBits = 8;
               serialPort1.StopBits = StopBits.One;
               serialPort1.Handshake = Handshake.None;
               serialPort1.WriteTimeout = 200;
               serialPort1.ReadTimeout = 200;
               serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
               serialPort1.Open();
               serialPort1.DiscardInBuffer();
               serialPort1.DiscardOutBuffer();
               
               if (serialPort1.IsOpen)
               {
                   isOpen = true;
}}}
        private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
       {
           try
           {
               int intBuffer;
               intBuffer = serialPort1.BytesToRead;
               byte[] byteBuffer = new byte[intBuffer];
               serialPort1.Read(byteBuffer, 0, intBuffer);
               recievedBytes.Add(byteBuffer);               
           }
           catch
           {
           }
       }
Hinweis von Abt vor einem Jahr

Im eigenen Interesse - vermutlich wird kein potentieller Helfer lust haben - formatier doch in Zukunft den Code selbst, sodass man den Code auch lesen kann. Danke.

Zitat von Stefan7907

Kann das mit dem Garbage Collector zusammenhängen, das der meine Funktion oder wichtige Teile davon nach 40s abräumt? Oder muss ich dem DataReceivedHandler immer wieder einen Anstoß geben?

Natürlich nicht, denn so funktioniert der GC gar nicht. Der räumt nicht einfach was nach einer fixen Zeit ab.

Jedoch bricht die Kommunikation konstant nach 40 Sekunden ein.

Was heisst "bricht ein" - bekommst Du eine Exception, wenn ja welche? Wir können leider nicht hellsehen.


Ein Timeout kann auch an falschen Konfigurationen oder am Client selbst liegen. zB haben Geräte wie ein Ardurino gerne Defaults von 40 Sekunden. Der SerialPort hat keinen Default, der dieser Zeitspanne entspricht.

Ansonsten probier funktionierende Templates und such den Unterschied: https://mycsharp.de/forum/threads/43748/template-serialport

PS: hab Dein Beitrag editiert, in Zukunft selbst drauf achten. Du willst Hilfe - also machs potentiellen Helfern auch einfach.
Danke.

Der Timeout kommt definitiv nicht vom Client - das ist vom "Host" abhängig. Abt hat an der Stelle vollkommen recht - da gibt´s gerne einen Timeout nach 40 - 45 Sekunden.

Ein ähnliches Thema gab´s vor ~2 Jahren bei Stackoverflow (ist zwar Python aber das Problem ist das Gleiche): python - Arduino stops working after 40 sec of serial communication with the computer - Stack Overflow

Hallo,

Danke für die schnellen Antworten. Es lag am Gerät selbst, vielen Dank für die Hilfe.