[发明专利]一种适用于多种总线的协议解析方法有效
| 申请号: | 202011103070.1 | 申请日: | 2020-10-15 |
| 公开(公告)号: | CN112235302B | 公开(公告)日: | 2023-03-24 |
| 发明(设计)人: | 王雨龙 | 申请(专利权)人: | 天津津航计算技术研究所 |
| 主分类号: | H04L69/22 | 分类号: | H04L69/22;H04L69/18;H04L69/06;H04L12/40;H04L1/00 |
| 代理公司: | 中国兵器工业集团公司专利中心 11011 | 代理人: | 刘二格 |
| 地址: | 300308 天津*** | 国省代码: | 天津;12 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 适用于 多种 总线 协议 解析 方法 | ||
1.一种适用于多种总线的协议解析方法,其特征在于,包括以下步骤:
STEP1:设计通用通信协议;
STEP2:将各类总线的驱动底层接收函数封装为接口一致的统一接收函数DataRecv函数,DataRecv函数返回接收到的数据长度RecvLen,并把数据存在指针pData所指的缓冲区中,将起始地址为pData、长度为RecvLen的数据拷贝到TackBuf中;
STEP3:寻找帧头;
STEP4:寻找到帧头后,确定这一完整帧的长度FrmLen;比较FrmLen和接收到数据的长度RecvLen的大小,当RecvLen≥FrmLen时,收到了一个完整帧,继续进行处理;否则,继续接收数据,直到接收到数据RecvLen≥FrmLen,则转到STEP5,继续进行处理;
STEP5:校验数据帧的完整性;
STEP6:取出帧类型,判断这一帧是数据帧还是命令帧,根据目的地址和该系统的ID,判断这一帧数据是否为本系统需要的数据。
STEP7:根据功能码判断数据的类型,将数据使用内存拷贝函数memcpy函数拷贝到同一类型的结构体中,使用这个结构体进行算法计算与数据显示;
所述步骤STEP1中,通用通信协议为变长协议,协议内容包括两个字节的协议帧头、两个字节的帧长度、一个字节的帧类型、一个字节的目的地址、一个字节的源地址、两个字节的功能码、字节数不定的负载内容、两个字节的CRC校验,和两个字节的帧结尾;
所述步骤STEP1中,协议帧头的两个字节为0x55和0xAA;帧长度为从帧头到帧尾所有字节的长度;帧类型中,命令帧用0x01表示,数据帧用0x02表示;帧结尾两个字节为0xAA和0x55;
所述步骤STEP3中,先判断接收到数据的长度RecvLen,设置最少长度为12个字节;当RecvLen大于12个字节时,首先判断前两个字节是不是0x55和0xAA,如果不是,则抛弃前两个字节,重新寻找字节头0x550xAA,直到寻找到为止;
所述步骤STEP3中,使用内存移动方法memmove()将第三个字节起始的数据移动到缓冲区开头,然后重新寻找字节头0x550xAA;
所述步骤STEP4中,寻找到帧头后,将处理指针TackPtr向后移动两位,此时TackPtr指向这一帧的长度信息,取第三、四两个字节数据组成的字,这个字表示这一完整帧的长度FrmLen;
所述步骤STEP5中,校验数据帧完整性的过程为:
收到一帧完整数据后,根据帧长度FrmLen先判断结尾是不是0xAA 0x55,如果不是,直接抛弃这一帧,转到STEP2;在帧头帧尾都找到的情况下,将处理指针TackPtr移到FrmLen-4的位置,取出这一帧协议中的CRC值crc_get,使用CRC计算方法计算这一帧的crc值,比较crc_get值和crc值,如果一致则转到STEP6,如果不一致则转到STEP2;
当设备间通讯功能由一种总线迁移到另一种总线时,修改设备底层的总线驱动函数完成通讯协议相关部分的移植。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天津津航计算技术研究所,未经天津津航计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011103070.1/1.html,转载请声明来源钻瓜专利网。





