一种主从串行通讯协议的制作方法

文档序号:10612752阅读:217来源:国知局
一种主从串行通讯协议的制作方法
【专利摘要】本发明涉及一种主从串行通讯协议,其包括一主设备和若干从设备,数据帧的传输格式为:协议帧的第1、2字节为包含子设备地址、命令、数据及CRC16校验的字节数;协议帧的第3、4字节为第1、2字节的取反;第5字节为从设备地址,第6字节为命令字节,最后两个字节为CRC16检验码,中间为数据字节。CRC16检验用于保证子设备地址、命令、数据等内容的传输正确性。该协议帧的格式定义首先通过数据长度及数据长度的取反实现了1帧数据传输开始的判断,数据长度信息的传输,数据长度自校验,可变数据长度的数据通讯,以及传输内容的校验验证,保证整个帧的传输正确性。分别给出了采用该格式数据帧的发送和接收程序实现方法。本发明能有效提高通讯速度、实时性及数据传输的正确性。
【专利说明】
一种主从串行通讯协议
技术领域
[0001] 本发明涉及一种通讯协议,特别是主从串行通讯协议。
【背景技术】
[0002] 目前,很多单片机系统或嵌入式系统需要与上位机系统进行实时通讯,完成参数 的设置、采集数据的实时上传、内部存储测量结果的批量传输等,单片机系统或嵌入式系统 作为从设备,上位机系统做为主设备,主设备与多个从设备之间多数采用RS232总线、RS485 总线、以太网等串行通讯方式。而现有的modbus等串行主从通信协议,要求传输的数据帧之 间满足一定延时条件,数据帧才可以连续发送,因此如何提高通讯速度、数据传输的实时性 及正确性成为目前亟待解决的技术问题。

【发明内容】

[0003] 针对上述问题,本发明的目的是提供一种主从串行通讯协议,该协议可以有效提 高通讯速度与数据传输的正确性,且传输时数据帧之间不用插入时间延时来防止两个数据 帧连接在一起无法区分。
[0004] 为实现上述目的,本发明采取以下技术方案:一种主从串行通讯协议,其特征在 于,它包括一主设备和若干从设备,步骤如下:1)设置协议内容:协议帧包含的字节串包括 数据长度2字节、数据长度取反2字节、从设备地址1字节、命令1字节、数据字节以及最后两 字节的crcl6校验,总共N个字节;2)主设备向各个从设备通过传输协议帧发送控制命令及 数据,其过程如下:2.1)设置缓冲区对应的从设备地址字节;2.2)设置缓冲区对应的命令字 节;2.3)计算地址+命令+数据的字节长度;2.4)根据步骤2.3)计算得到的字节长度计算地 址+命令+数据的CRC16校验码;2.5)追加2字节CRC16校验码至数据尾端;2.6)将步骤2.3)计 算得到的字节长度加2并设置发送缓冲区的1-2字节;2.7)根据1-2字节取反的值设置发送 缓冲区的3-4字节,将缓冲区内容发送至传输总线上,完成协议帧数据的发送;3)各从设备 接收协议帧,完成数据传输。
[0005] 优选地,所述步骤1)中,字节1 一2为地址+命令+数据+2字节CRC16检验码的字节长 度,数据长度占两个字节,最长能够表示65536个字节数。
[0006] 优选地,所述步骤1)中,字节3-4为地址+命令+数据+2字节CRC16检验码的字节长 度的取反,即字节1 一2的取反;字节1-2与字节3-4不仅表示了要传输的数据长度及数据长 度的自校验,还实现了一帧数据开始传输的判断。
[0007] 优选地,所述步骤1)中,字节5为从设备地址,地址表示范围1-254;当主设备与多 台从设备连接时,地址0作为广播地址,另外地址255用于参数设置地址,该情况只能应用于 主设备与从设备一对一通讯的情况。
[0008] 优选地,所述步骤1)中,字节6为命令字节,用cmd表示;命令的高半字节用于表示 第1级命令分类,高半字节取值在0-7时,表示主设备发送到从设备的控制命令,最多分为8 类主设备到从设备的一级指令;高半字节取值在8-15时,表示从设备发送到主设备的指令, 最多分为8类从设备到主设备的一级指令;命令的低半字节用于表示第2级指令,取值在0-15之间,共分为16个二级指令。
[0009] 优选地,所述步骤1)中,从字节6开始到字节N-2为止为数据字节,数据长度为0到 N-8个字节,数据字节数为0时为纯命令字节;当命令字节6所表示的命令分类不足以区分更 多命令时,进一步使用数据字节中的第1至第X个字节做更详细的命令划分。
[0010] 优选地,所述步骤3)中,各从设备接收协议帧的过程如下:3.1)定义静态变量a、b、 c、d、len、idx、flag,并将静态变量初始化为0,开始接收中断;3.2)令静态变量8 = 13、& = (3、〇 =d、d =新接收字节;3.3)判断开始1帧数据的接收标志flag是否为真,若为真则接收缓冲 区当前索引对应的内容等于d,并进入步骤3.4);反之则步骤3.6) ;3.4)将缓冲区索引加1, 并判断缓冲区索引是否等于len;若等于则进入步骤3.5);若不等于len,则留在步骤3.4) 中,继续接收后续字节,直到接收索引号等于len;3.5)设置一帧数据接收标志flag为假,即 令^ &8 = 0,设置数据长度为0,即1 - = 0,则一帧数据接收完毕;3.6)判断静态变量&是否等 于c取反,并且静态变量b是否等于d取反,若两者同时满足则数据长度len等于bX255+a,进 入下一步;反之,则提前结束接收中断;3.7)设置一帧数据的接收标志flag为真,即flag = 1,提前结束接收中断。
[0011] 本发明由于采取以上技术方案,其具有以下优点:1、本发明能有效提高通讯速度 与数据传输的正确性。2、本发明提供的串行通讯协议主要应用于1对多从的通讯方式,该通 讯协议不象modbus等串行协议,要求传输的数据帧之间满足一定延时条件,数据帧可以连 续发送,数据帧之间不用插入时间延时来防止两个数据帧连接在一起无法区分。
【附图说明】
[0012] 图1是本发明的协议帧发送流程示意图;
[0013] 图2是本发明的协议帧接收流程示意图。
【具体实施方式】
[0014] 下面结合附图和实施例对本发明进行详细的描述。
[0015] 本发明提供一种主从串行通讯协议,其包括一主设备和若干从设备,其步骤如下:
[0016] 1)设置协议内容:
[0017] 协议帧包含的字节串包括数据长度2字节、数据长度取反2字节、从设备地址1字 节、命令1字节、数据字节以及最后两字节的crcl6校验,总共N个字节。其具体结构形式如表 1所示。
[0018] 表1
[0019]
[0020] 其中,字节1 一2为地址+命令+数据+2字节CRC16检验码的字节长度,数据长度占两 个字节,最长能够表示65536个字节数。
[0021] 字节3-4为地址+命令+数据+2字节CRC16检验码的字节长度的取反,即字节1 一2 的取反。串行数据传输过程中,首先通过1-2字节与3-4字节的取反是否相同判断是否是一 帧数据的开始,如果3-4字节取反后与1-2字节相同,则说明是1帧新的数据,此时将1-2字节 合并为1个无符号16位整型数表示接下来要接收的字节数据长度,接下来连续接收该数据 长度表示的字节数。字节1-2与字节3-4不仅表示了要传输的数据长度及数据长度的自校 验,还实现了 一帧数据开始传输的判断。
[0022] 字节5为从设备地址,地址表示范围1-254。当主设备与多台从设备连接时,地址0 作为广播地址,即主设备向所有子设备发送控制命令,从设备接收到地址为〇的控制指令 时,执行该指令。另外地址255用于系统参数设置地址,对主、从设备进行初始参数设置时使 用该地址,该情况只能应用于主设备与从设备一对一通讯的情况,用来对初始设备即没有 地址的设备进行地址等参数进行设置。
[0023]字节6为命令字节,用cmd表示。命令的高半字节用于表示第1级命令分类,高半字 节取值在0-7(16进制0x0-0x7)时,表示主设备发送到从设备的控制命令,最多可分为8类主 设备到从设备的一级指令;高半字节取值在8-15(16进制〇 X8-〇xF时)时,表示从设备发送到 主设备的指令,最多可分为8类从设备到主设备的一级指令。命令的低半字节用于表示第2 级指令,取值在0-15之间,共可分为16个二级指令。
[0024] 从字节6开始到字节N-2为止为数据字节,数据长度为0到N-8个字节,数据字节数 可以为0,也就是纯命令字节。当命令字节6表示命令分类不足以区分更多命令时,可以进一 步使用数据字节中的第1至第X个字节做更详细的命令划分。
[0025] 2)如图1所示,主设备向各个从设备通过传输协议帧发送控制命令及数据,其过程 如下:
[0026] 2.1)设置缓冲区对应的从设备地址字节;
[0027] 2.2)设置缓冲区对应的命令字节;
[0028] 2.3)计算地址+命令+数据的字节长度;
[0029] 2.4)根据步骤2.3)计算得到的字节长度计算地址+命令+数据的CRC16校验码;
[0030] 2.5)追加2字节CRC16校验码至数据尾端;
[0031] 2.6)将步骤2.3)计算得到的字节长度加2并设置发送缓冲区的1-2字节;
[0032] 2.7)根据1-2字节取反的值设置发送缓冲区的3-4字节,将缓冲区内容发送至传输 总线上,完成协议帧数据的发送。
[0033] 3)如图2所示,各从设备接收协议帧,完成数据传输。其过程如下:
[0034] 3.1)定义静态变量a、b、c、d、1 en、idx、f lag,并将静态变量初始化为0,开始接收中 断;
[0035] 3.2)令静态变量8 = 13、匕=(3、〇 = (1、(1 =新接收字节;
[0036] 3.3)判断开始1帧数据的接收标志flag是否为真,若为真则接收缓冲区当前索引 对应的内容等于d,并进入步骤3.4);反之则步骤3.6);
[0037] 3.4)将缓冲区索引加1,并判断缓冲区索引是否等于len;若等于则进入步骤3.5); 若不等于len,则留在步骤3.4)中,继续接收后续字节,直到接收索引号等于len;
[0038] 3.5)设置一帧数据接收标志釘&8为假,即令釘&8 = 0,设置数据长度为0,即1的= 〇,则一帧数据接收完毕;
[0039] 3.6)判断静态变量a是否等于c取反,并且静态变量b是否等于d取反,若两者同时 满足则数据长度len等于b X 255+a,进入下一步;反之,则提前结束接收中断;
[0040] 3.7)设置一帧数据的接收标志flag为真,即flag = l,提前结束接收中断。
[0041]上述各实施例仅用于说明本发明,各个步骤都是可以有所变化的,在本发明技术 方案的基础上,凡根据本发明原理对个别步骤进行的改进和等同变换,均不应排除在本发 明的保护范围之外。
【主权项】
1. 一种主从串行通讯协议,其特征在于,它包括一主设备和若干从设备,步骤如下: 1) 设置协议内容:协议帧包含的字节串包括数据长度2字节、数据长度取反2字节、从设 备地址1字节、命令1字节、数据字节以及最后两字节的crcl6校验,总共N个字节; 2) 主设备向各个从设备通过传输协议帧发送控制命令及数据,其过程如下: 2.1) 设置缓冲区对应的从设备地址字节; 2.2) 设置缓冲区对应的命令字节; 2.3) 计算地址+命令+数据的字节长度; 2.4) 根据步骤2.3)计算得到的字节长度计算地址+命令+数据的CRC16校验码; 2.5) 追加2字节CRC16校验码至数据尾端; 2.6) 将步骤2.3)计算得到的字节长度加2并设置发送缓冲区的1-2字节; 2.7) 根据1-2字节取反的值设置发送缓冲区的3-4字节,将缓冲区内容发送至传输总线 上,完成协议帧数据的发送; 3) 各从设备接收协议帧,完成数据传输。2. 如权利要求1所述的一种主从串行通讯协议,其特征在于:所述步骤1)中,字节1 一2 为地址+命令+数据+2字节CRC16检验码的字节长度,数据长度占两个字节,最长能够表示 65536个字节数。3. 如权利要求1所述的一种主从串行通讯协议,其特征在于:所述步骤1)中,字节3-4 为地址+命令+数据+2字节CRC16检验码的字节长度的取反,即字节1 一2的取反;字节1-2与 字节3-4不仅表示了要传输的数据长度及数据长度的自校验,还实现了一帧数据开始传输 的判断。4. 如权利要求1所述的一种主从串行通讯协议,其特征在于:所述步骤1)中,字节5为从 设备地址,地址表示范围1-254;当主设备与多台从设备连接时,地址0作为广播地址,另外 地址255用于参数设置地址,该情况只能应用于主设备与从设备一对一通讯的情况。5. 如权利要求1所述的一种主从串行通讯协议,其特征在于:所述步骤1)中,字节6为命 令字节,用cmd表示;命令的高半字节用于表示第1级命令分类,高半字节取值在0-7时,表示 主设备发送到从设备的控制命令,最多分为8类主设备到从设备的一级指令;高半字节取值 在8-15时,表示从设备发送到主设备的指令,最多分为8类从设备到主设备的一级指令;命 令的低半字节用于表示第2级指令,取值在0-15之间,共分为16个二级指令。6. 如权利要求1所述的一种主从串行通讯协议,其特征在于:所述步骤1)中,从字节6开 始到字节N-2为止为数据字节,数据长度为0到N-8个字节,数据字节数为0时为纯命令字节; 当命令字节6所表示的命令分类不足以区分更多命令时,进一步使用数据字节中的第1至第 X个字节做更详细的命令划分。7. 如权利要求1所述的一种主从串行通讯协议,其特征在于:所述步骤3)中,各从设备 接收协议帧的过程如下: 3.1) 定义静态变量a、b、c、d、1 en、idx、f lag,并将静态变量初始化为0,开始接收中断; 3.2) 令静态变量8 = 13、& = (3、〇 = (1、(1 =新接收字节; 3.3) 判断开始1帧数据的接收标志flag是否为真,若为真则接收缓冲区当前索引对应 的内容等于d,并进入步骤3.4);反之则步骤3.6); 3.4) 将缓冲区索引加1,并判断缓冲区索引是否等于len;若等于则进入步骤3.5);若不 等于len,则留在步骤3.4)中,继续接收后续字节,直到接收索引号等于len; 3.5) 设置一帧数据接收标志^&8为假,即令€1&8 = 0,设置数据长度为0,即1611 = 0,则 一帧数据接收完毕; 3.6) 判断静态变量a是否等于c取反,并且静态变量b是否等于d取反,若两者同时满足 则数据长度len等于b X 255+a,进入下一步;反之,则提前结束接收中断; 3.7) 设置一帧数据的接收标志flag为真,即flag=l,提前结束接收中断。
【文档编号】G06F13/42GK105975424SQ201610274612
【公开日】2016年9月28日
【申请日】2016年4月28日
【发明人】谷玉海
【申请人】北京信息科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1