如何保护程序免受与读取框架(串行端口)有关的错误

时间:2019-12-19 12:32:03

标签: c# wpf serial-port

我使用SerialPort与我的设备交换信息。

       if (cmd.BytesReceived == 0)
            {
                System.Diagnostics.Debug.WriteLine("Received=0");
                cmd.BuforRecv = new byte[2];
                cmd.BuforRecv[0] = (byte)cmd.Port.ReadByte();
                cmd.BuforRecv[1] = 1; //header o długości 2
                cmd.BytesReceived++;
            }
            if (cmd.BytesReceived == 1)
            {
                if (cmd.Port.BytesToRead > 0)
                {
                    byte h1 = cmd.BuforRecv[0];
                    byte h2 = (byte)cmd.Port.ReadByte();                        
                    cmd.BytesReceived++;
                    if (h2 >= 5)    //exception
                    {
                        cmd.BuforRecv = new byte[h2 + 1];
                        cmd.BuforRecv[0] = h1;
                        cmd.BuforRecv[1] = h2;
                    }
                }
            }

我使用了Salese Logic和检查框架。它表明我总是得到整个框架。但是程序有时看不到它,而cmd.Port.BytesToRead则等于6/9。

我经常读10次/秒。 我试图增加睡眠。 或检查循环,但不获取所有字节,但有时我会浪费时间阅读,并再次抛出异常“端口已关闭”。我大约有100毫秒的时间阅读框架。

为什么会这样?

0 个答案:

没有答案