我使用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毫秒的时间阅读框架。
为什么会这样?