unity 读取串口数据粘包,不完整问题解决方法

最近有个需求做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节电关闭。

可能有错漏,欢迎指教!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值