找回密码
 立即注册

串口通信数据解析

发表于 2017-9-8 16:11:57 | 显示全部楼层 |阅读模式
5Qter豆
串口用com->readall()读缓冲区的数据,得到QByteArray buffer[]数组,现在想解析这个数组中的值,比如检测到帧头A5,然后第二个数据是05表示有效数据个数,后面是各个数据。但是我不知道buffer[i]中存放的是什么形式的值,怎么解析成我刚才说的这些数据。

回复

使用道具 举报

发表于 2017-9-9 16:05:25 | 显示全部楼层
每次ReadAll,追加到buffer中,找帧头,解析(buffer中可能有多个帧)。把已经解析的部分,从buffer中移除,继续读com。buffer中就是存放的二进制,或ASCII串,如果解析取决与你自己定义的格式协议。
回复

使用道具 举报

发表于 2017-9-11 10:05:46 | 显示全部楼层
buffer的数据就是你发送端的数据(字符、数字等),根据你发送端的格式解析就好。比如0xA5 + 数据 +0x05+数据+0x06+校验等,你发什么收到的就是什么。
回复

使用道具 举报

发表于 2017-9-11 23:12:33 | 显示全部楼层
首先,buffer[i]是二进制数据,根据楼主的描述,需要将其转换为16进制数,然后与0xa5,0x05进行比较,得到每一帧数据的开头。
总结:遍历buffer数组--找到数据帧标志位--处理每一帧数据--continue;
回复

使用道具 举报

发表于 2017-9-12 17:43:53 | 显示全部楼层
本帖最后由 angelus 于 2017-9-12 17:58 编辑

首先定义一个 私有 的QByteArray 存储每次读到的数据。
然后定义一个 私有 的QByteArray 存储你的头部内容,有些头部是两个 16 进制数据,比如 0A 05这样的。

第一步先把读到的数据缓存,然后根据头部大小,left几位,比较下头部,如果相等,就进行下一步,如果不相等就抛弃所有数据,不用担心头几次的数据错误,等几次交互后,就会正常,基本不会再出现错位丢包。

第二步是计算每一帧的大小,根据协议去计算,然后存储,一般都在第二位存储帧的大小
如果缓存的数据大于2位,就取出第二位的帧大小进行存储。

第三步是判断 缓存是否满足帧大小,如果不满足,就继续缓冲等待,满足就从缓存中取出帧,然后处理校验和
如果校验和OK,就继续处理,如果不OK,就丢弃帧。

note: 这个过程建议写成一个函数,因为可以会进行递归调用,缓存中可能会一次 存好几个帧,递归调用会进行依次处理!QByteArray存储的值意义很明显,Byte 形式的数组,一个byte是8位,换句话说就是8位的二进制,
一个byte转化为16进制最大为0xFF ,10进制最大值是255 , 计算机中都是数字的,你看到的文字,只是数字根据规则翻译过去的。
一串的byte其实就是 一串的 数字,根据ascii码,就可以翻译成 文字了。


需要注意的是,在传输中 经常会有两位 byte 组成一个数值,很明显 一个8位 不足以表达超过 255的值 ,这时候就需要注意看协议中的大小端了! 也就是高位8个二进制 和 低位8个二进制怎么组合。
比如 0x01 和 0x02  谁在前谁在后,数值是截然不同的, 一般组合都是 0x01是高位 0x02是低位!
回复

使用道具 举报

 楼主| 发表于 2017-9-13 14:11:54 | 显示全部楼层
angelus 发表于 2017-9-12 17:43
首先定义一个 私有 的QByteArray 存储每次读到的数据。
然后定义一个 私有 的QByteArray 存储你的头部内容 ...

能找个串口解析的源码给我吗,最好带实时图像的,我邮箱1147136151@qq.com,OK的话最佳答案就决定是你了!
回复

使用道具 举报

发表于 2017-9-13 17:24:48 | 显示全部楼层
newbe 发表于 2017-9-13 14:11
能找个串口解析的源码给我吗,最好带实时图像的,我邮箱,OK的话最佳答案就决定是你了! ...

有些坑你还是要自己踩比较好!
回复

使用道具 举报

 楼主| 发表于 2017-9-14 09:11:55 | 显示全部楼层
angelus 发表于 2017-9-13 17:24
有些坑你还是要自己踩比较好!

服服服服服服服服服服服服服服
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

newbe

    主题

    帖子

    26

    积分

    Qter1级会员

    Rank: 1

    积分
    26

Qter1级会员

发私信

Qt开源社区——开源 共享 自由

微信扫一扫
查看精品教程!