CN104503942A - 串口指令解码方法 - Google Patents
串口指令解码方法 Download PDFInfo
- Publication number
- CN104503942A CN104503942A CN201410842438.4A CN201410842438A CN104503942A CN 104503942 A CN104503942 A CN 104503942A CN 201410842438 A CN201410842438 A CN 201410842438A CN 104503942 A CN104503942 A CN 104503942A
- 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.)
- Granted
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 true CN104503942A (zh) | 2015-04-08 |
CN104503942B 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 |
---|---|---|---|---|
CN112181889A (zh) * | 2020-09-08 | 2021-01-05 | 河南翔宇医疗设备股份有限公司 | 串口数据的解析方法、解析装置、解析设备及存储介质 |
Families Citing this family (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 |
Citations (5)
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 |
US20020116580A1 (en) * | 2001-02-20 | 2002-08-22 | Carpenter Paul Matthew | Data Processing using a coprocessor |
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时间解码系统 |
-
2014
- 2014-12-30 CN CN201410842438.4A patent/CN104503942B/zh active Active
Patent Citations (5)
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++元模型在内的通用应用程序元模型 |
US20020116580A1 (en) * | 2001-02-20 | 2002-08-22 | Carpenter Paul Matthew | Data Processing using a coprocessor |
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》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112181889A (zh) * | 2020-09-08 | 2021-01-05 | 河南翔宇医疗设备股份有限公司 | 串口数据的解析方法、解析装置、解析设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104503942B (zh) | 2017-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102143148B (zh) | 用于通用协议解析的参数获取和通用协议解析方法及装置 | |
WO2017200820A3 (en) | Apparatuses and methods for performing intra-module databus inversion operations | |
WO2009101058A4 (en) | Processing a variable length device command word at a control unit in an i/o processing system | |
GB2590803A8 (en) | Data pipeline for process control system analytics | |
CN101882165B (zh) | 基于etl的多线程数据处理方法 | |
WO2016036819A8 (en) | Compilation of graph-based program specifications with automated clustering of graph components based on the identification of particular data port connections | |
WO2016036820A4 (en) | Managing invocation of tasks | |
MX2021002247A (es) | Metodo y aparato de transmision de datos y terminal. | |
WO2018065825A3 (en) | Data processing using defined data definitions | |
CN105354020A (zh) | 一种Json格式数据解析方法及数据接收端 | |
CN104503942A (zh) | 串口指令解码方法 | |
CN105005549A (zh) | 一种自定义链式日志解析装置及方法 | |
BR112015007036A2 (pt) | método de aquisição de informação, dispositivo e sistema do mesmo | |
EA201600675A1 (ru) | Способ преобразования структурированного массива данных | |
CN109814482A (zh) | 机器人的控制器及其控制方法和工业机器人 | |
EP3370162A3 (en) | Computing method, information processing apparatus, computing program, and information processing system | |
CN113242244B (zh) | 数据传输方法、装置和系统 | |
CN104392104A (zh) | 一种航天器低频电缆导线长度及数量的确定方法 | |
CN109800286B (zh) | 对话生成方法和装置 | |
WO2019126797A3 (en) | System and method for executing instructions | |
WO2017165029A3 (en) | Process control system performance analysis using scenario data | |
CN113642319A (zh) | 文本处理方法、装置、电子设备及存储介质 | |
RU2015124059A (ru) | Интерактивная автоматизированная система обучения | |
US20140281446A1 (en) | Method for initializing expended modules in programmable logic controller system | |
CN105262745B (zh) | 一种基于tcpip通信协议的自定义帧格式驱动方法及程序 |
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. |