串口指令解码方法

文档序号:6640658阅读:3050来源:国知局
串口指令解码方法
【专利摘要】本发明涉及通讯【技术领域】,特别涉及一种串口指令解码方法,包括如下步骤:根据命令的个数m以及单个命令的最大长度n建立二维字节型数组arrCmdValue[m][n],同时建立一维整数型数组arrCmdSize[m]用于保存每条指令的长度,建立一维布尔型数组arrCmdFlag[m];将数组arrCmdFlag[m]初始化为“真值”;读取串口数据并进行比较,同时根据比较结果相应地修改数组arrCmdFlag[m]的值;对满足要求的命令进行解析并执行。本方法运算次数少,增加识别速度、准确性,该解码步骤仅在接收方进行,无需事先约定格式协议,对于任意串口数据,都能可靠解码。
【专利说明】串口指令解码方法

【技术领域】
[0001] 本发明设及通讯【技术领域】,特别设及一种串口指令解码方法。

【背景技术】
[0002] 串行通讯是工控场合比较常用的经济、有效的数据传输方法,比如RS232, RS422 或RS485。由于该些硬件协议是面向字节型的,一次收发的基本单元都是8位数据.为了 能够一次性传输一条8位的命令W及超过8位长度的数据,常采用的方法是通信双方事先 约定一套通信协议。系统采用数据打包方式进行传输,将数据编辑成帖格式;定长的或变长 的,发送和接收方按照约定的格式协议进行编帖和解帖。帖中包含了多个组成部分。简单 的帖格式包括帖头域、数据域W及校验和,包括该个帖的帖首、帖结束、帖类型、地址、数据、 错误冗余等,该些部分并不全是必需的。不同设备的通信格式与数据各不相同,如何提取有 效的数据帖并进行校验和解码是获取数据的重点之一;同时,现有技术中需要发送方和接 收方事先约定格式协议,该样就缺乏通用性。


【发明内容】

[0003] 本发明的目的在于提供一种串口指令解码方法,直接进行可靠正确的解码,无需 约定格式协议。
[0004] 为实现W上目的,本发明采用的技术方案为:一种串口指令解码方法,包括 如下步骤;(A)根据命令的个数mW及单个命令的最大长度n建立二维字节型数组 arrCmdValue虹][n],同时建立一维整数型数组arrCmdSize虹]用于保存每条指令的 长度,建立一维布尔型数组arrCmdFlag虹];炬)将数组arrCmdFlag虹]初始化为"真 值";(C)读取串口数据并与数组arrCmdValue虹][n]的第一列进行逐行比较,若串口数 据与数组arrCmdValue虹][n]的第一列数据完全不同,返回步骤C,若串口数据与数组 arrCmdValue虹][n]的第一列数据部分相同或完全相同,进入步骤D ;值)数据不同的行X, 对应的arrCmdFlag[x]置为"假值";数据相同的行y,若arrCmdSize[y]的值为1,则命令 解析完毕执行相应命令,否则进入步骤E ;巧)读取串口数据并与数组arrCmdValue虹][n] 的后续列中arrCmdFlag虹]为"真值"的行进行逐行比较,若后续列为第(n+1)列,返回步 骤B,否则,若串口数据与数组arrCmdValue虹][n]的该列数据完全不同,返回步骤B,若串 口数据与数组arrCmdValue虹][n]的该列数据部分相同或完全相同,进入步骤F;(巧数 据不同的行X,对应的arrCmdFlag[x]置为"假值";数据相同的行y,若arrCmdSize[y]的 值等于对应列数,则命令解析完毕执行相应命令,否则重复步骤E ;其中,arrCmdValue[i] [0]、a;rrCmdValue[i][l]、--?、a;rrCmdValue[i][n-l]构成数组 arrCmdValue虹][n]的第 (i+1)行,arrCmdValue[0] [j]、arrCmdValue[1] [j]、…、arrCmdValue虹-1] [j]构成数组 arrCmdValue 虹][n]的第(j+1)列。
[0005] 与现有技术相比,本发明存在W下技术效果;通过设置数组arrCmdFlag虹]来排 除不符合要求的指令,减少运算次数,增加识别速度;同时,设置数组arrCmdSize虹]判定 是否解析指令,避免某些执行的误执行,增加识别的准确性,该解码步骤仅在接收方进行, 无需事先约定格式协议,对于任意串口数据,都能可靠解码。

【具体实施方式】
[0006] 下面对本发明做进一步详细叙述。
[0007] 一种串口指令解码方法,包括如下步骤;(A)根据命令的个数m W及单个命 令的最大长度n建立二维字节型数组arrCmdValue虹][n],同时建立一维整数型数组 arrCmdSize虹]用于保存每条指令的长度,建立一维布尔型数组arrCmdFlag虹]。为了清楚 地描述该步骤,假设现在有500条指令,单个指令的最大长度为100,命令表如下:
[0008] (表 1)
[0009]

【权利要求】
1. 一种串口指令解码方法,包括如下步骤: (A) 根据命令的个数m以及单个命令的最大长度n建立二维字节型数组 arrCmdValue[m] [n],同时建立一维整数型数组arrCmdSize [m]用于保存每条指令的长度, 建立一维布尔型数组arrCmdFlag[m]; (B) 将数组arrCmdFlag[m]初始化为"真值"; (C) 读取串口数据并与数组arrCmdValue[m][n]的第一列进行逐行比较, 若串口数据与数组arrCmdValue[m] [n]的第一列数据完全不同,返回步骤C, 若串口数据与数组arrCmdValueDn] [n]的第一列数据部分相同或完全相同,进入步骤 D ; (D) 数据不同的行X,对应的arrCmdFlag[x]置为"假值";数据相同的行y,若 arrCmdSize [y]的值为1,则命令解析完毕执行相应命令,否则进入步骤E; (E) 读取串口数据并与数组arrCmdValue[m] [n]的后续列中arrCmdFlag[m]为"真值" 的行进行逐行比较,若后续列为第(n+1)列,返回步骤B,否则, 若串口数据与数组arrCmdValue[m] [n]的该列数据完全不同,返回步骤B, 若串口数据与数组arrCmdValueDn] [n]的该列数据部分相同或完全相同,进入步骤F ; (F) 数据不同的行X,对应的arrCmdFlag[x]置为"假值";数据相同的行y,若 arrCmdSize [y]的值等于对应列数,则命令解析完毕执行相应命令,否则重复步骤E ; 其中,arrCmdValue[i] [0]、arrCmdValue[i] [1]、…、arrCmdValue[i] [n_l]构成数 组 arrCmdValue[m] [n]的第(i+1)行,arrCmdValue[0] [j]、arrCmdValue[1] [j]、…、 arrCmdValue[m-l][j]构成数组 arrCmdValue[m][n]的第(j+1)列。
【文档编号】G06F13/42GK104503942SQ201410842438
【公开日】2015年4月8日 申请日期:2014年12月30日 优先权日:2014年12月30日
【发明者】曹明润, 徐勇, 汪升 申请人:合肥金星机电科技发展有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1