CN104503942B - 串口指令解码方法 - Google Patents
串口指令解码方法 Download PDFInfo
- Publication number
- CN104503942B CN104503942B CN201410842438.4A CN201410842438A CN104503942B CN 104503942 B CN104503942 B CN 104503942B CN 201410842438 A CN201410842438 A CN 201410842438A CN 104503942 B CN104503942 B CN 104503942B
- Authority
- CN
- China
- Prior art keywords
- arrcmdvalue
- array
- data
- row
- arrcmdflag
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Communication Control (AREA)
Abstract
本发明涉及通讯技术领域,特别涉及一种串口指令解码方法,包括如下步骤:根据命令的个数m以及单个命令的最大长度n建立二维字节型数组arrCmdValue[m][n],同时建立一维整数型数组arrCmdSize[m]用于保存每条指令的长度,建立一维布尔型数组arrCmdFlag[m];将数组arrCmdFlag[m]初始化为“真值”;读取串口数据并进行比较,同时根据比较结果相应地修改数组arrCmdFlag[m]的值;对满足要求的命令进行解析并执行。本方法运算次数少,增加识别速度、准确性,该解码步骤仅在接收方进行,无需事先约定格式协议,对于任意串口数据,都能可靠解码。
Description
技术领域
本发明涉及通讯技术领域,特别涉及一种串口指令解码方法。
背景技术
串行通讯是工控场合比较常用的经济、有效的数据传输方法,比如RS232,RS422或RS485。由于这些硬件协议是面向字节型的,一次收发的基本单元都是8位数据.为了能够一次性传输一条8位的命令以及超过8位长度的数据,常采用的方法是通信双方事先约定一套通信协议。系统采用数据打包方式进行传输,将数据编辑成帧格式:定长的或变长的,发送和接收方按照约定的格式协议进行编帧和解帧。帧中包含了多个组成部分。简单的帧格式包括帧头域、数据域以及校验和,包括这个帧的帧首、帧结束、帧类型、地址、数据、错误冗余等,这些部分并不全是必需的。不同设备的通信格式与数据各不相同,如何提取有效的数据帧并进行校验和解码是获取数据的重点之一;同时,现有技术中需要发送方和接收方事先约定格式协议,这样就缺乏通用性。
发明内容
本发明的目的在于提供一种串口指令解码方法,直接进行可靠正确的解码,无需约定格式协议。
为实现以上目的,本发明采用的技术方案为:一种串口指令解码方法,包括如下步骤:(A)根据命令的个数m以及单个命令的最大长度n建立二维字节型数组arrCmdValue[m][n],同时建立一维整数型数组arrCmdSize[m]用于保存每条指令的长度,建立一维布尔型数组arrCmdFlag[m];(B)将数组arrCmdFlag[m]初始化为“真值”;(C)读取串口数据并与数组arrCmdValue[m][n]的第一列进行逐行比较,若串口数据与数组arrCmdValue[m][n]的第一列数据完全不同,返回步骤C,若串口数据与数组arrCmdValue[m][n]的第一列数据部分相同或完全相同,进入步骤D;(D)数据不同的行x,对应的arrCmdFlag[x]置为“假值”;数据相同的行y,若arrCmdSize[y]的值为1,则命令解析完毕执行相应命令,否则进入步骤E;(E)读取串口数据并与数组arrCmdValue[m][n]的后续列中arrCmdFlag[m]为“真值”的行进行逐行比较,若后续列为第(n+1)列,返回步骤B,否则,若串口数据与数组arrCmdValue[m][n]的该列数据完全不同,返回步骤B,若串口数据与数组arrCmdValue[m][n]的该列数据部分相同或完全相同,进入步骤F;(F)数据不同的行x,对应的arrCmdFlag[x]置为“假值”;数据相同的行y,若arrCmdSize[y]的值等于对应列数,则命令解析完毕执行相应命令,否则重复步骤E;其中,arrCmdValue[i][0]、arrCmdValue[i][1]、…、arrCmdValue[i][n-1]构成数组arrCmdValue[m][n]的第(i+1)行,arrCmdValue[0][j]、arrCmdValue[1][j]、…、arrCmdValue[m-1][j]构成数组arrCmdValue[m][n]的第(j+1)列。
与现有技术相比,本发明存在以下技术效果:通过设置数组arrCmdFlag[m]来排除不符合要求的指令,减少运算次数,增加识别速度;同时,设置数组arrCmdSize[m]判定是否解析指令,避免某些执行的误执行,增加识别的准确性,该解码步骤仅在接收方进行,无需事先约定格式协议,对于任意串口数据,都能可靠解码。
具体实施方式
下面对本发明做进一步详细叙述。
一种串口指令解码方法,包括如下步骤:(A)根据命令的个数m以及单个命令的最大长度n建立二维字节型数组arrCmdValue[m][n],同时建立一维整数型数组arrCmdSize[m]用于保存每条指令的长度,建立一维布尔型数组arrCmdFlag[m]。为了清楚地描述该步骤,假设现在有500条指令,单个指令的最大长度为100,命令表如下:
(表1)
此时,步骤A中的m=500,n=100,就需要建立二维字节型数组arrCmdValue[500][100]将指令存储在数组中,如下:
(表2)
将500条命令的每条指令长度存储在数组arrCmdSize[500]中,如表3所示:
(表3)
(B)将数组arrCmdFlag[m]初始化为“真值”,如表4所示:
(表4)
(C)读取串口数据并与数组arrCmdValue[m][n]的第一列进行逐行比较,这里说的第一列即表1中的第2列,若串口数据与数组arrCmdValue[m][n]的第一列数据完全不同,返回步骤C,继续读取串口数据并比较,若串口数据与数组arrCmdValue[m][n]的第一列数据部分相同或完全相同,进入步骤D。
为了便于表述,这里采用了列、行的表述方式,下面对列、行作出明确的定义:arrCmdValue[i][0]、arrCmdValue[i][1]、…、arrCmdValue[i][n-1]构成数组arrCmdValue[m][n]的第(i+1)行,arrCmdValue[0][j]、arrCmdValue[1][j]、…、arrCmdValue[m-1][j]构成数组arrCmdValue[m][n]的第(j+1)列。在这个定义下,数组arrCmdValue[m][n]的第一列包括{arrCmdValue[0][0]、arrCmdValue[1][0]、arrCmdValue[2][0]、…、arrCmdValue[499][0]}这些数据。
以表2为例,假设现在读取到的串口数据为DF,而第一列未出现这个数据,则应当返回步骤B;假设现在读取的串口数据为EE,表2中有EE,也有FF,故这里应该属于部分相同,进入步骤D。
(D)数据不同的行x,对应的arrCmdFlag[x]置为“假值”,这里的x只是一个指代,如果是第2、5、8、45、72行数据不同,那么就将arrCmdFlag[2]、arrCmdFlag[5]、arrCmdFlag[8]、arrCmdFlag[45]、arrCmdFlag[72]置为“假值”,x并不代表具体的数字,下面的y同理;数据相同的行y,若arrCmdSize[y]的值为1,则命令解析完毕执行相应命令,否则进入步骤E。
在串口数据为EE的情况下,首先表4中的部分值置为“假值”,如下表所示:
(表5)
其次,由于arrCmdSize[3]、arrCmdSize[4]均不等于1,故进入步骤E。
(E)读取串口数据并与数组arrCmdValue[m][n]的后续列中arrCmdFlag[m]为“真值”的行进行逐行比较,若后续列为第(n+1)列,,表示已经没有后续列了,此时无需进行比较,直接返回步骤B,否则,若串口数据与数组arrCmdValue[m][n]的该列数据完全不同,返回步骤B,若串口数据与数组arrCmdValue[m][n]的该列数据部分相同或完全相同,进入步骤F。这里的处理方法与步骤C的类似,但这个是针对后续列的处理。比如在串口数据为EE的情况下,第一次进入该步骤时,这里的后续列就是数组arrCmdValue[m][n]的第二列,也即表2的第3列。假设此次读取到的为C2,此次无需对数组arrCmdValue[m][n]的第二列的所有数据都进行比较,只需比较第4行、第5行的数据。由于第4行是C2,第5行不是,故进入步骤F。
(F)数据不同的行x,对应的arrCmdFlag[x]置为“假值”;数据相同的行y,若arrCmdSize[y]的值等于对应列数,则命令解析完毕执行相应命令,否则重复步骤E;
在串口数据为C2的情况下,首先表5中的部分值置为“假值”,如下表所示:
(表6)
其次,由于arrCmdSize[3]不等于2,故再次进入步骤E。
如果重复三次读取到的串口数据分别是02、06、AC,那么读取到AC执行步骤F时,由于arrCmdSize[3]等于5,故命令解析完毕执行指令4。
通过以上实例,我们可以知道,这里不再需要发送方、接收方约定协议格式,发送方只管将其数据发送至接收方,接收方智能识别传来的是指令还是其他数据。
Claims (1)
1.一种串口指令解码方法,包括如下步骤:
(A)根据命令的个数m以及单个命令的最大长度n建立二维字节型数组arrCmdValue[m][n],同时建立一维整数型数组arrCmdSize[m]用于保存每条指令的长度,建立一维布尔型数组arrCmdFlag[m];
(B)将数组arrCmdFlag[m]初始化为“真值”;
(C)读取串口数据并与数组arrCmdValue[m][n]的第一列进行逐行比较,
若串口数据与数组arrCmdValue[m][n]的第一列数据完全不同,返回步骤C,
若串口数据与数组arrCmdValue[m][n]的第一列数据部分相同或完全相同,进入步骤D;
(D)数据不同的行x,对应的arrCmdFlag[x]置为“假值”;数据相同的行y,若arrCmdSize[y]的值为1,则命令解析完毕执行相应命令,否则进入步骤E;
(E)读取串口数据并与数组arrCmdValue[m][n]的后续列中arrCmdFlag[m]为“真值”的行进行逐行比较,若后续列为第(n+1)列,返回步骤B,否则,
若串口数据与数组arrCmdValue[m][n]的该列数据完全不同,返回步骤B,
若串口数据与数组arrCmdValue[m][n]的该列数据部分相同或完全相同,进入步骤F;
(F)数据不同的行x,对应的arrCmdFlag[x]置为“假值”;数据相同的行y,若arrCmdSize[y]的值等于对应列数,则命令解析完毕执行相应命令,否则重复步骤E;
其中,arrCmdValue[i][0]、arrCmdValue[i][1]、…、arrCmdValue[i][n-1]构成数组arrCmdValue[m][n]的第(i+1)行,arrCmdValue[0][j]、arrCmdValue[1][j]、…、arrCmdValue[m-1][j]构成数组arrCmdValue[m][n]的第(j+1)列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410842438.4A CN104503942B (zh) | 2014-12-30 | 2014-12-30 | 串口指令解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410842438.4A CN104503942B (zh) | 2014-12-30 | 2014-12-30 | 串口指令解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104503942A CN104503942A (zh) | 2015-04-08 |
CN104503942B true CN104503942B (zh) | 2017-10-31 |
Family
ID=52945340
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410842438.4A Active CN104503942B (zh) | 2014-12-30 | 2014-12-30 | 串口指令解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104503942B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230153263A1 (en) * | 2021-11-16 | 2023-05-18 | Infineon Technologies Austria Ag | Flexible high speed interface implementation in a power supply |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112181889A (zh) * | 2020-09-08 | 2021-01-05 | 河南翔宇医疗设备股份有限公司 | 串口数据的解析方法、解析装置、解析设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000016589A1 (en) * | 1998-09-17 | 2000-03-23 | Sonic Innovations, Inc. | Two line variable word length serial interface |
CN1468398A (zh) * | 2000-08-08 | 2004-01-14 | 国际商业机器公司 | 包括c/c++元模型在内的通用应用程序元模型 |
CN101013384A (zh) * | 2007-02-08 | 2007-08-08 | 浙江大学 | 一种基于模型的实时系统的可调度性分析方法 |
CN103839563A (zh) * | 2014-03-21 | 2014-06-04 | 蒋佳成 | 一种ltc时间解码系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2372848B (en) * | 2001-02-20 | 2004-10-27 | Advanced Risc Mach Ltd | Data processing using a coprocessor |
-
2014
- 2014-12-30 CN CN201410842438.4A patent/CN104503942B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000016589A1 (en) * | 1998-09-17 | 2000-03-23 | Sonic Innovations, Inc. | Two line variable word length serial interface |
CN1468398A (zh) * | 2000-08-08 | 2004-01-14 | 国际商业机器公司 | 包括c/c++元模型在内的通用应用程序元模型 |
CN101013384A (zh) * | 2007-02-08 | 2007-08-08 | 浙江大学 | 一种基于模型的实时系统的可调度性分析方法 |
CN103839563A (zh) * | 2014-03-21 | 2014-06-04 | 蒋佳成 | 一种ltc时间解码系统 |
Non-Patent Citations (1)
Title |
---|
JS判断一个值是否在数组中;琼台;《www.qttc.net/201208191.html》;20120823;第1页第1-2段 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230153263A1 (en) * | 2021-11-16 | 2023-05-18 | Infineon Technologies Austria Ag | Flexible high speed interface implementation in a power supply |
Also Published As
Publication number | Publication date |
---|---|
CN104503942A (zh) | 2015-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
PH12019550057A1 (en) | Method and systems for the representation and processing of bioinformatics data using reference sequences | |
CN102143148B (zh) | 用于通用协议解析的参数获取和通用协议解析方法及装置 | |
CN104199927B (zh) | 数据处理方法及数据处理装置 | |
CN101882165B (zh) | 基于etl的多线程数据处理方法 | |
KR102002889B1 (ko) | 성문 검증 방법 및 장치, 저장 매체 및 기기 | |
MX2017008942A (es) | Dispositivo de procesamiento de datos y metodo de procesamiento de datos. | |
GB2515938A (en) | A multi-layer system for symbol-space based compression of patterns | |
CN104503942B (zh) | 串口指令解码方法 | |
CN104123364A (zh) | 一种移动终端发送和接收数据的方法及装置 | |
CN105354020A (zh) | 一种Json格式数据解析方法及数据接收端 | |
CN103838844A (zh) | 一种键值对数据存储、传输方法及装置 | |
CN106790347B (zh) | 一种基于netty的大规模并发数据转发方法 | |
CN113778408A (zh) | 一种积木代码序列化方法、装置、系统及介质 | |
CN104410575A (zh) | 多芯片堆叠模式下mac地址硬件学习装置及方法 | |
RU2015146020A (ru) | Устройство обработки данных и способ обработки данных | |
US9984065B2 (en) | Optimizing generation of a regular expression | |
EP3119003A3 (en) | Encoding computer program, encoding method, encoding apparatus, decoding computer program, decoding method, and decoding apparatus | |
WO2018041036A1 (zh) | 关键词的查找方法、装置及终端 | |
CN105550535A (zh) | 一种基因字符序列快速编码为二进制序列的编码方法 | |
GB2569067A (en) | System level testing of entropy encoding | |
JP2016006958A5 (zh) | ||
KR101244945B1 (ko) | 메타 패턴을 이용한 웹쉘 탐지 장치 | |
WO2017097026A1 (zh) | 数据报文的识别处理方法及装置、存储介质 | |
CN110995869A (zh) | 机器数据收集方法、装置、设备及介质 | |
CN101159641B (zh) | Can总线扩展方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 230000 No. 228, Wanshui Road, high tech Zone, Hefei, Anhui Patentee after: Hefei Jinxing Intelligent Control Technology Co.,Ltd. Address before: High tech Zone Hefei city Anhui province 230088 Tianzhi Road No. 23 Patentee before: HEFEI GOLD STAR MECHATRONICS TECHNICAL DEVELOPMENT Co.,Ltd. |