最近有个需求做Unity串口读取,发现了问题,读取不完整,粘包等。
1.针对读取不完整,分两次读取才能完整,可以做一个加法(把2次读取合并):
if (i == 1)
{
OneString = Reci_String;
}
else if (i == 2)
{
OtherString = OneString + "-" + Reci_String;
i = 0;
Debug.Log(OtherString);
}
2.对于粘包,上一次读取的数据和这次读取的粘在一起了,数据脏了:(一般是读了长数据,然后马上读短数据就很容易发生)。
可以尝试每读完一次清空一下缓冲(包括建立的缓冲区和串口发送和接收缓冲),用Array.cear(),或者new byte[]读取。
需要注意的是,发送的间隔,速度也得注意。
Array.Clear(buffer,0,buffer.Length);
3.另外注意设置好参数:
如果是传感器传入注意数据刷新率,做了10Hz和5Hz对比,10Hz的时候容易出脏数据,5Hz就正常。
[Header("串口处理:")]
public string portName = "COM8";//串口名
public int baudRate = 9600;//波特率
public Parity parity = Parity.None;//效验位
public int dataBits = 8;//数据位
public StopBits stopBits = StopBits.One;//停止位
补充内容:长时间待机,出现读取数据丢失。
4.windows系统的休眠导致数据丢失
(1)电池设置,关闭休眠。
(2)控制面板-设备和打印机,找到串口的属性,电池管理,把串口节电模式关闭。
(3)如果使用USB转串口的记得也要把USB节电关闭。
可能有错漏,欢迎指教!!