请问这种串口数据包如何处理

hitripley 2005-04-09 10:22:06
在BCB中利用串口控件接收数据,
请问下面这种情况怎么处理比较合适呢?
通过串口连续的向pc发送长90字节的数据包, 之间没有时间间隔,其中前九个字节固定(这个不能改,是我用的无线通信模块规定的帧格式),后面的是数据,如果要提取这种不间断数据包中的数据(用于实时作图)应该怎么做呢?
...全文
306 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hitripley 2005-04-12
  • 打赏
  • 举报
回复
谢谢各位!
JedyWoody 2005-04-11
  • 打赏
  • 举报
回复
简单点说,就是要采用校验算法。
如果产生了数据报丢失(通过校验),pc机发送重发请求,你的无线设备在接收到后重发上一个包;如果接收正常,pc机发送接收ok,无线设备在接收后发送下一个包。
以上只是简单原理,你还可以进行超时设置与处理。
土著巫师 2005-04-11
  • 打赏
  • 举报
回复
1、从本质上说串口发送和接收端要处理的是连续的二进制字节流。
2、对于连续的二进制字节流,接收端是无法断定什么时候开始,什么时候是结束,不能简单的用长度来确定,因为中间丢掉一个字节数据就玩完了,所以必须自己定义帧结构。:(
3、比如我要发送某个90个字节的数据(里面的格式不管)可以采用以下的帧定义方法:(1)定义数据同步字符比如用0x7E;
(2)对90个字节计算CRC16校验码,生成92个字节的数据(考虑重要程度如何可以不做这个处理),对92个字节检查,发现哪个字节为0x7E,就把这个字节改为两个字节(0xff 0x01),不是的话再检查这个字符是否为0xff,如果是就把这个字节变成0xff 0x02两个字节,如果还不是就保留原来的值(不需置换);生成的新的数据长度可能超过92个,在最后发送前加上0x7E后发送(0x7E是非常有意义的自同步控制器,即是前一个包的结束,也是后一个包的开妈!)。
(3),接收端接收数据后,从第一个字节开始,一直找到第一个0x7E,这就是发送端出来的第一个数据包,反过来置换所有出现的0xff 0x01,0xff 0x02,然后计算置换后数据的CRC16和最后两个字节的比较,如果OK,就是有效的数据,如果无效可能是误码或是丢包了(可以简单的丢掉)。

提供一个很成功和很高效的思路,C++代码自己写吧,祝你好运!
hitripley 2005-04-09
  • 打赏
  • 举报
回复
能说的详细点吗?还是不太明白。
这种不间断数据流在什么事件中作处理,在接受缓冲区中如何区分数据包呢?
wuxq7311 2005-04-09
  • 打赏
  • 举报
回复
建立三个缓冲区,循环使用存储和读取数据!

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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