关键是需要解决这句话 byte[] data = new byte[serialPort1.BytesToRead];
问题在于串口返回数据时,由于程序执行的速度是非常快的,而串口通信返回的速度可能不会太快。
也就是说,当执行到Read语句时,串口根本没来得及返回那么多的数据,只返回了几个字节,即便你指定bytesToRead大小也没有用。
解决办法:只能通过控制代码来实现你想要的功能:
一、设置一个大小为serialPort1.BytesToRead的缓存,写一个while循环,只有从串口读满serialPort1.BytesToRead个字节的数据时才退出while循环,否则继续读取……
byte[] data = new byte[serialPort1.BytesToRead];
do
{
data = new byte[serialPort1.BytesToRead];
} while (data.Length != 5);//5是已知设置好的通信数据的长度
serialPort1.Read(data, 0, data.Length);
串口通信中,解决serialport.DataReceived接收到的数据不完整的问题
最新推荐文章于 2024-05-03 21:59:56 发布