python读取串口数据不能一次读完如何解决

huangxx0815 2019-06-18 10:34:39
最近在做python serial模块对串口的数据进行接收和写入,遇到一个问题.python在接收和读取串口数据时,有时候数据并不会一次性读完,这样我在做解析的时候就会出现数据不全而导致的丢包现象,完整的的数据有固定帧头,也有校验码,但是因为数据的长度不固定,所以在解析的时候还是出现问题,串口传给python的是byte型,我以b'固定帧头'切割后的数据再加上b'固定帧头',这样没有接收完的数据也会加上b'固定帧头',但是解析的时候数据是错误的数据,无法解析就会丢弃,我该如何操作,求大神指导
...全文
2600 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
handouergege 2021-04-13
  • 打赏
  • 举报
回复
可以看下你的源码吗
huangxx0815 2019-12-20
  • 打赏
  • 举报
回复
先对数据做出判断,从协议头开始,协议头正确的话然后看数据长度是否一致,如果数据没有接受完数据长度是对不上的,这时候把不全的数据放到列表里先存起来,第二次遇到的数据协议头都对不上,直接和第一次没有接收完的数据拼接起来,继续解析,这样就是ok的,本人亲自测试这种方法是可行的
qq_33896815 2019-11-25
  • 打赏
  • 举报
回复
引用 2 楼 huangxx0815 的回复:
我是接手别人的代码,串口协议是他们制定的,只有固定开头和校验码,没有结尾,而且数据长度是不固定的,我不能判断数据到底有没有读完, 因为牵扯到之前版本的产品,所以协议还不能修改 现在这个问题已经解决了,但还是要谢谢兄弟的建议
请问怎么解决的啊?我也遇到了一样的问题!
makefool 2019-11-13
  • 打赏
  • 举报
回复
最近也在写串口通信的代码,串口看起来界面太简单,比起socket,少了很多协议处理的包装,误码的处理,意外事件的处理都得自己上。
实际上一个健壮完善的串口通信接口从头撸代码,比起socket而言,要难得多。也难怪CDT规约最普遍,而101花了很长时间才普及。

现在看来,即便是101规约,已经实现工业化了那么久,还是因为帧结构太复杂,厂商之间所能兼容的部分也是有限,不可能轻易所有的实现都能兼容。

总结一下想法,真正健壮、鲁棒的串口通信接口,还是最好要把数据ATM、或者TCP/IP的方式进行分组处理,不要图简单,直接把应用层加载到物理层上,而是自己先实现一个数据链路层,再加载应用层,会让工作变得简单很多。
hj7728777 2019-06-19
  • 打赏
  • 举报
回复
给每个数据加 头 加尾 和 校验。 接收到数据后组包,组包完成后处理逻辑。 再复杂一点可以设计错误重传
huangxx0815 2019-06-19
  • 打赏
  • 举报
回复
我是接手别人的代码,串口协议是他们制定的,只有固定开头和校验码,没有结尾,而且数据长度是不固定的,我不能判断数据到底有没有读完, 因为牵扯到之前版本的产品,所以协议还不能修改 现在这个问题已经解决了,但还是要谢谢兄弟的建议

1,616

社区成员

发帖
与我相关
我的任务
社区描述
智能硬件,智能手表,可穿戴设备,智能电视,谷歌眼镜,Google Glass 相关讨论。
社区管理员
  • 智能硬件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧