CN104503942B - 串口指令解码方法 - Google Patents

串口指令解码方法 Download PDF

Info

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
Application number
CN201410842438.4A
Other languages
English (en)
Other versions
CN104503942A (zh
Inventor
曹明润
徐勇
汪升
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hefei Gstar Intelligent Control Technical Co Ltd
Original Assignee
Hefei Gold Star M & E Technical Development Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hefei Gold Star M & E Technical Development Co Ltd filed Critical Hefei Gold Star M & E Technical Development Co Ltd
Priority to CN201410842438.4A priority Critical patent/CN104503942B/zh
Publication of CN104503942A publication Critical patent/CN104503942A/zh
Application granted granted Critical
Publication of CN104503942B publication Critical patent/CN104503942B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus 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)列。
CN201410842438.4A 2014-12-30 2014-12-30 串口指令解码方法 Active CN104503942B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112181889A (zh) * 2020-09-08 2021-01-05 河南翔宇医疗设备股份有限公司 串口数据的解析方法、解析装置、解析设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
JS判断一个值是否在数组中;琼台;《www.qttc.net/201208191.html》;20120823;第1页第1-2段 *

Cited By (1)

* Cited by examiner, † Cited by third party
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) 用于通用协议解析的参数获取和通用协议解析方法及装置
CN101882165B (zh) 基于etl的多线程数据处理方法
JP6444426B2 (ja) 声紋登録方法、声紋ログオン方法、装置、記憶媒体及び設備
GB2515938A (en) A multi-layer system for symbol-space based compression of patterns
WO2009101058A4 (en) Processing a variable length device command word at a control unit in an i/o processing system
CN104503942B (zh) 串口指令解码方法
CN105354020A (zh) 一种Json格式数据解析方法及数据接收端
CN103838844A (zh) 一种键值对数据存储、传输方法及装置
CN106790347B (zh) 一种基于netty的大规模并发数据转发方法
CN113778408A (zh) 一种积木代码序列化方法、装置、系统及介质
CN104410575A (zh) 多芯片堆叠模式下mac地址硬件学习装置及方法
RU2015146020A (ru) Устройство обработки данных и способ обработки данных
CN104090865A (zh) 文本相似度计算方法及装置
US9984065B2 (en) Optimizing generation of a regular expression
WO2018041036A1 (zh) 关键词的查找方法、装置及终端
GB2569067A (en) System level testing of entropy encoding
JP2016006958A5 (zh)
WO2017097026A1 (zh) 数据报文的识别处理方法及装置、存储介质
CN101159641B (zh) Can总线扩展方法
Järvenpää et al. Micro-factories
GB2542373A8 (en) TCP/IP offload system
WO2019126797A3 (en) System and method for executing instructions
CN107885504A (zh) 一种异构的多平台系统控制逻辑一致性校验的方法
CN109062141A (zh) 一种基于编码的数控加工过程信息获取方法

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.