CN105681134B - 一种通用型多种串口通信协议检测识别方法 - Google Patents
一种通用型多种串口通信协议检测识别方法 Download PDFInfo
- Publication number
- CN105681134B CN105681134B CN201610206349.XA CN201610206349A CN105681134B CN 105681134 B CN105681134 B CN 105681134B CN 201610206349 A CN201610206349 A CN 201610206349A CN 105681134 B CN105681134 B CN 105681134B
- Authority
- CN
- China
- Prior art keywords
- communication protocol
- frame
- data frame
- variable
- data
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/18—Protocol analysers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Environmental & Geological Engineering (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种通用型多种串口通信协议检测识别方法,涉及数字通信领域,包括如下步骤:将n种串口通信协议写入ins配置文件;将串口接收缓冲区中的字节读入到环形缓冲区;从环形缓冲区中检测得到最靠前的数据帧首地址;判断所检测到符合通信协议的数据帧个数是否不为0,若是将检测到的数据帧内容复制到目标数组、进行解析并在环形缓冲区的有效数据中删除检测到的数据帧;判断环形缓冲区中有效数据长度是否大于等于帧长度最长的通信协议的帧长度maxprolen,若是保留环形缓冲区有效数据中最新写入的maxprolen‑1个字节,其它字节均删除;否则读取退出标识,若退出标识为真时,则退出本方法。本方法在出现各种异常情况下均能检测、识别及解析出全部符合通信协议的数据帧。
Description
技术领域
本发明涉及数字通信领域,具体涉及一种各类导弹武器系统、工控系统中对各个电气部件多种串口通信协议检测识别方法。
背景技术
串口通信,如RS-232、RS-422、RS-485,作为一种稳定性高、构建方便的数字通信方式在导弹武器系统、工控系统中应用最为广泛,各个部件通过检测与识别各种不同通信协议的数据帧来完成特定的功能或对其它部件进行状态监测。
导弹武器系统中各电气部件之间信息交互错综复杂,通信协议往往也存在较大差异。目前对于不同通信协议的检测与识别常用的方法是在软件代码中写入特定的通信协议,比如帧头、帧标识、帧长度、帧尾、校验方式、各变量数据类型、所占字节数及分辨率等,虽然这种方式可以达到目的,但若通信协议稍有变化则需重新修改代码,重新调试,软件可靠性低且工作量大,不适于用来对多个电气部件不同通信协议的检测与识别。另外,目前大多数串口通信协议检测识别及解析算法如下:
首先不断搜索帧头,找到帧头后再依据帧标识检查特定字节数后的帧校验和帧尾是否正确,若正确则根据各变量数据类型、所占字节数及分辨率进行帧解析,随后执行相应功能,若帧校验或帧尾不正确,则删除该帧长度字节数;接着从下一个字节开始重新搜索帧头,如此循环。这种方法虽然简单易行,但是存在一个较大漏洞:如果出现以下情况则不能检测识别出符合通信协议的数据帧(引起丢帧):
(1)、通信中出现了与帧头相同的误码(串口通信传输距离及通信接口芯片上电不稳定状态均可能引起误码);
(2)、帧中出现了与帧头相同的字节。
上述两种情况下,通常的检测与识别算法都会误认为这些字节为真实的帧头而随后删掉有用的数个字节而导致丢帧,不能执行被要求的动作或未能监测关键状态,可能引起系统故障。
发明内容
有鉴于此,本发明提供了一种通用型多种串口通信协议检测识别方法,在出现各种异常情况下均能检测、识别及解析出全部符合通信协议的数据帧,提高电气部件可靠性、安全性、容错性。
为了达到上述目的,本发明的技术方案为:一种通用型多种串口通信协议检测识别方法,包括如下步骤:
第一步、针对n种串口通信协议,将串口通信协议写入ins配置文件,并在所述ins配置文件中为每种串口通信协议配置顺序1~n。
第二步、将串口接收缓冲区中的字节读入到环形缓冲区。
第三步、从环形缓冲区的有效数据中检测第1种通信协议数据帧,以该第1种通信协议数据帧的首地址作为最靠前首地址;设定检测次序i的初始值为2。
第四步、从环形缓冲区的有效数据中检测第i种通信协议数据帧,若检测到则进入第五步,否则判断i是否等于n,若是则进入第六步,否则将i自增1,返回第四步。
第五步、判断检测到的第i种通信协议数据帧首地址是否小于已检测到的最靠前的数据帧首地址,若是则将第i种数据帧首地址作为最靠前首地址,否则判断i是否等于n,若是则进入第六步,否则i自增1,返回第四步。
第六步、判断所检测到符合通信协议的数据帧个数是否不为0,若是则将检测到的最靠前首地址对应的数据帧内容复制到目标数组、进行解析并在环形缓冲区的有效数据中删除检测到的数据帧,进入第七步,否则直接进入第七步。
第七步、判断环形缓冲区中有效数据长度是否大于或者等于帧长度最长的通信协议的帧长度maxprolen,若是保留环形缓冲区有效数据中最新写入的maxprolen-1个字节,其它字节均删除,然后读取退出标识;否则直接读取退出标识。
当退出标识为真时,则退出本方法,否则返回第二步。
进一步地,第四步中从环形缓冲区的有效数据初始位置处开始检测第i种通信协议数据帧的具体方法为:
S401、判断在有效数据中能够搜索到第i种通信协议数据帧帧头,若搜索到则进入步骤S402,否则判为不能检测到第i种通信协议数据帧。
S402、标记搜索到的第i种通信协议数据帧帧头的起始位置。
S403、判断帧头起始位置之后有效字节长度是否大于或者等于第i种通信协议数据帧长度;若大于或者等于则进入步骤S404,否则判为不能检测到第i种通信协议数据帧。
S404、依据第i种通信协议检查帧标识、帧校验及帧尾是否均正确,若正确则判为检测到第i种通信协议数据帧,否则判断此时有效数据位置是否已经处于环形缓冲区的有效数据最末位置,若是,则判为不能检测到第i种通信协议数据帧,否则将有效数据的起始位置自增1后进入步骤S401。
进一步地,第六步中的解析并在环形缓冲区的有效数据中删除检测到的数据帧的具体过程如下:
S501、读取数据帧中第k个变量的首字节在数据帧中的位置,k为变量序号,k初始值为1。
S502、读取第k个变量所占字节数。
S503、读取第k个变量数据类型和比例尺,计算变量实际值。
S504、判断k是否小于该通信协议变量个数,若小于则进入步骤S505,否则在环形缓冲区的有效数据中删除检测到的数据帧。
S505、k自增1,将第k个变量首字节位置加第k个变量所占字节数作为第k+1个变量的首字节位置,返回步骤S502,直至k为数据帧中的变量总数,该过程结束。
进一步地,在ins配置文件中,初始化ini文件中的节,将串口通信协议中的帧属性和变量属性分别写入到ini文件中的节中。
其中帧属性包括帧名称、帧头、帧标识、帧长度、校验方式和变量个数,分别写入到相应帧属性节中的项目中。
变量属性划分为变量名、变量单位、数据类型、数值上限、数值下限、比例尺和字节数,分别写入到相应变量属性节中的项目中。
进一步地,环形缓冲区为先入先出的存储方式。
有益效果:
1、支持多种串口通信协议,通信协议可配置;若通信协议需要修改则只需修改配置文件即可,软件代码不需改动,可大幅提高软件可靠性、安全性、提高工作效率。
2、对于通信中出现的各种异常情况,如出现与帧头相同的误码、某帧中存在与帧头相同的字节等,本发明提供的方法依然能够正确地检测识别出全部符合通信协议的数据帧,不漏检,不误检,提高电气部件可靠性、安全性、容错性。
附图说明
图1为本发明方法流程图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
实施例1、一种通用型多种串口通信协议检测识别方法,其特征在于,包括如下步骤:
第一步、针对n种串口通信协议,将串口通信协议写入ins配置文件,并在所述ins配置文件中为每种串口通信协议配置顺序1~n。
第二步、将串口接收缓冲区中的字节读入到环形缓冲区。
第三步、从环形缓冲区的有效数据中检测第1种通信协议数据帧,以该第1种通信协议数据帧的首地址作为最靠前首地址。设定检测次序i的初始值为2。
第四步、从环形缓冲区的有效数据中检测第i种通信协议数据帧,若检测到则进入第五步,否则判断i是否等于n,若是则进入第六步,否则将i自增1,返回第四步。
第四步中从环形缓冲区的有效数据的初始位置开始检测第i种通信协议数据帧的具体方法为:
S401、判断在有效数据中能够搜索到第i种通信协议数据帧帧头,若搜索到则进入步骤S402,否则判为不能检测到第i种通信协议数据帧;
S402、标记搜索到的第i种通信协议数据帧帧头的起始位置;
S403、判断帧头起始位置之后有效字节长度是否大于或者等于第i种通信协议数据帧长度;若大于或者等于则进入步骤S404,否则判为不能检测到第i种通信协议数据帧;
S404、依据第i种通信协议检查帧标识、帧校验及帧尾是否均正确,若正确则判为检测到第i种通信协议数据帧,否则判断此时有效数据位置是否已经处于环形缓冲区的有效数据最末位置,若是,则判为不能检测到第i种通信协议数据帧,否则将有效数据的起始位置自增1后进入步骤S401。
第五步、判断检测到的第i种数据帧首地址是否小于已检测到的最靠前的数据帧首地址,若成立则将第i种数据帧首地址作为最靠前首地址,否则,i自增1,返回第四步,直至i=n之后进入第六步;
第六步、判断所检测到符合通信协议的数据帧个数是否不为0,若是则将检测到的最靠前首地址对应的数据帧内容复制到目标数组、进行解析并在环形缓冲区的有效数据中删除检测到的数据帧。
第六步能够保证最先进入环形缓冲区的数据帧能最先被解析和执行。
第六步中的解析并在环形缓冲区的有效数据中删除检测到的数据帧的具体过程如下:
S501、读取数据帧中第k个变量的首字节在数据帧中的位置,k为变量序号,k的初始值为1;
S502、读取第k个变量所占字节数构成一个整数;
S503、读取第k个变量数据类型和比例尺,计算变量实际值;
S504、判断k是否小于该通信协议变量个数,若小于则进入步骤S505,在环形缓冲区的有效数据中删除检测到的数据帧;
S505、k自增1,将第k个变量首字节位置加第k个变量所占字节数作为第k+1个变量的首字节位置,返回步骤S502,直至k为数据帧中的变量总数,该过程结束。
第七步、判断环形缓冲区中有效数据长度是否大于等于帧长度最长的通信协议的帧长度maxprolen,若是,表明环形缓冲区中还存在符合通信协议的数据帧,需要再次进行检测,则保留环形缓冲区有效数据中最新写入的maxprolen-1个字节,其它字节均删除,然后读取退出标识;否则进入读取退出标识,若退出标识为真时,则退出本方法,否则返回第二步。
本实施例中,在所述ins配置文件中,初始化ini文件中的节,将串口通信协议中的帧属性和变量属性分别写入到ini文件中的节中。
其中帧属性划分为帧名称、帧头、帧标识、帧长度、校验方式和变量个数,分别占用相应帧属性节中的项目。
变量属性划分为变量名、变量单位、数据类型、数值上限、数值下限、比例尺和字节数,分别占用相应变量属性节中的项目。
本实施例中,环形缓冲区为先入先出的存储方式。
综上,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种通用型多种串口通信协议检测识别方法,其特征在于,包括如下步骤:
第一步、针对n种串口通信协议,将串口通信协议写入ins配置文件,并在所述ins配置文件中为每种串口通信协议配置顺序1~n;n为大于或者等于2的正整数;
第二步、将串口接收缓冲区中的字节读入到环形缓冲区;
第三步、从环形缓冲区的有效数据中检测第1种通信协议数据帧,以该第1种通信协议数据帧的首地址作为最靠前首地址;设定检测次序i的初始值为2;
第四步、从环形缓冲区的有效数据中检测第i种通信协议数据帧,若检测到则进入第五步,否则判断i是否等于n,若是则进入第六步,否则将i自增1,返回第四步;
第五步、判断检测到的第i种通信协议数据帧首地址是否小于已检测到的最靠前的数据帧首地址,若是则将第i种数据帧首地址作为最靠前首地址,否则判断i是否等于n,若是则进入第六步,否则i自增1,返回第四步;
第六步、判断所检测到符合通信协议的数据帧个数是否不为0,若是则将检测到的最靠前首地址对应的数据帧内容复制到目标数组、进行解析并在环形缓冲区的有效数据中删除检测到的数据帧,进入第七步,否则直接进入第七步;
第七步、判断环形缓冲区中有效数据长度是否大于或者等于帧长度最长的通信协议的帧长度maxprolen,若是保留环形缓冲区有效数据中最新写入的maxprolen-1个字节,其它字节均删除,然后读取退出标识;否则直接读取退出标识;
当退出标识为真时,则退出本方法,否则返回第二步。
2.如权利要求1所述的一种通用型多种串口通信协议检测识别方法,其特征在于,所述第四步中从环形缓冲区的有效数据初始位置处开始检测第i种通信协议数据帧的具体方法为:
S401、判断在有效数据中能够搜索到第i种通信协议数据帧帧头,若搜索到则进入步骤S402,否则判为不能检测到第i种通信协议数据帧;
S402、标记搜索到的第i种通信协议数据帧帧头的起始位置;
S403、判断帧头起始位置之后有效字节长度是否大于或者等于第i种通信协议数据帧长度;若大于或者等于则进入步骤S404,否则判为不能检测到第i种通信协议数据帧;
S404、依据第i种通信协议检查帧标识、帧校验及帧尾是否均正确,若正确则判为检测到第i种通信协议数据帧,否则判断此时有效数据位置是否已经处于环形缓冲区的有效数据最末位置,若是,则判为不能检测到第i种通信协议数据帧,否则将有效数据的起始位置自增1后进入步骤S401。
3.如权利要求1所述的一种通用型多种串口通信协议检测识别方法,其特征在于,所述第六步中的解析并在环形缓冲区的有效数据中删除检测到的数据帧的具体过程如下:
S501、读取数据帧中第k个变量的首字节在数据帧中的位置,k为变量序号,k初始值为1;
S502、读取第k个变量所占字节数;
S503、读取第k个变量数据类型和比例尺,计算变量实际值;
S504、判断k是否小于该通信协议变量个数,若小于则进入步骤S505,否则在环形缓冲区的有效数据中删除检测到的数据帧;
S505、k自增1,将第k个变量首字节位置加第k个变量所占字节数作为第k+1个变量的首字节位置,返回步骤S502,直至k为数据帧中的变量总数,该过程结束。
4.如权利要求1所述的一种通用型多种串口通信协议检测识别方法,其特征在于,在所述ins配置文件中,初始化ini文件中的节,将串口通信协议中的帧属性和变量属性分别写入到ini文件中的节中;
其中帧属性包括帧名称、帧头、帧标识、帧长度、校验方式和变量个数,分别写入到相应帧属性节中的项目中;
变量属性划分为变量名、变量单位、数据类型、数值上限、数值下限、比例尺和字节数,分别写入到相应变量属性节中的项目中。
5.如权利要求1所述的一种通用型多种串口通信协议检测识别方法,其特征在于,所述环形缓冲区为先入先出的存储方式。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2016101252649 | 2016-03-04 | ||
CN201610125264 | 2016-03-04 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105681134A CN105681134A (zh) | 2016-06-15 |
CN105681134B true CN105681134B (zh) | 2018-08-10 |
Family
ID=56308414
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610206349.XA Active CN105681134B (zh) | 2016-03-04 | 2016-04-05 | 一种通用型多种串口通信协议检测识别方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105681134B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649182A (zh) * | 2016-10-10 | 2017-05-10 | 广州视源电子科技股份有限公司 | 一种串口数据的处理方法、装置及智能影音设备 |
CN107395565B (zh) * | 2017-06-15 | 2020-03-17 | 北京机械设备研究所 | 一种定长单字节格式报文协议下串口接收预处理方法 |
CN107766265B (zh) * | 2017-09-06 | 2020-06-30 | 中国航空工业集团公司西安飞行自动控制研究所 | 一种支持定长包、变长包、混合包的串口数据提取方法 |
CN108415857B (zh) * | 2018-03-01 | 2021-03-23 | 合肥威艾尔智能技术有限公司 | 一种串口数据的通用处理方法 |
CN109739747A (zh) * | 2018-12-13 | 2019-05-10 | 西安现代控制技术研究所 | 一种串行通信信息协议通用解析方法 |
CN110032535B (zh) * | 2018-12-28 | 2021-06-29 | 北京润科通用技术有限公司 | 一种串口数据解析方法及装置 |
CN110619012B (zh) * | 2019-08-20 | 2022-09-27 | 西安航天动力技术研究所 | 一种导弹火控系统在线数据处理方法 |
CN110515881A (zh) * | 2019-08-23 | 2019-11-29 | 西安爱生技术集团公司 | 一种串口通信帧的同步系统及同步高性能方法 |
CN111130690A (zh) * | 2019-11-12 | 2020-05-08 | 广西电网有限责任公司 | 一种ir46智能电表的多通讯协议的处理方法及装置 |
CN111181819B (zh) * | 2019-12-25 | 2022-03-08 | 交控科技股份有限公司 | 一种基于链表结构的接收多字节数据帧的串口通讯方法 |
CN111314304B (zh) * | 2020-01-17 | 2022-07-19 | 西安微电子技术研究所 | 面向多类型数据流的帧识别方法、设备及可读存储介质 |
CN111311912B (zh) * | 2020-02-25 | 2021-08-24 | 北京天融信网络安全技术有限公司 | 车联网检测数据确定方法、装置及电子设备 |
CN111770055A (zh) * | 2020-05-29 | 2020-10-13 | 宁波三星医疗电气股份有限公司 | 一种应用于电能表的多协议通讯帧快速判别方法 |
CN113157626A (zh) * | 2021-04-28 | 2021-07-23 | 雄狮汽车科技(南京)有限公司 | 数据缓存区、基于数据缓存区的串口通信数据帧解析方法及汽车 |
CN117579709B (zh) * | 2024-01-16 | 2024-03-29 | 成都数维通信技术有限公司 | 一种工控网络通信协议体系构建方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101022463A (zh) * | 2007-03-20 | 2007-08-22 | 西南科技大学 | 多协议接口数字基带信道模拟器 |
CN101996148A (zh) * | 2010-09-29 | 2011-03-30 | 清华大学 | 用于多种通信协议的仪器测试板卡配置方法 |
CN102510323A (zh) * | 2011-09-22 | 2012-06-20 | 航天科工惯性技术有限公司 | 一种串口数据的帧识别方法 |
CN104539591A (zh) * | 2014-12-12 | 2015-04-22 | 中国电子科技集团公司第二十二研究所 | 一种多协议总线控制装置 |
CN104765573A (zh) * | 2015-04-10 | 2015-07-08 | 中国船舶重工集团公司第七一0研究所 | 一种串口通讯数据处理分析方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8321639B2 (en) * | 2009-12-30 | 2012-11-27 | Lsi Corporation | Command tracking for direct access block storage devices |
-
2016
- 2016-04-05 CN CN201610206349.XA patent/CN105681134B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101022463A (zh) * | 2007-03-20 | 2007-08-22 | 西南科技大学 | 多协议接口数字基带信道模拟器 |
CN101996148A (zh) * | 2010-09-29 | 2011-03-30 | 清华大学 | 用于多种通信协议的仪器测试板卡配置方法 |
CN102510323A (zh) * | 2011-09-22 | 2012-06-20 | 航天科工惯性技术有限公司 | 一种串口数据的帧识别方法 |
CN104539591A (zh) * | 2014-12-12 | 2015-04-22 | 中国电子科技集团公司第二十二研究所 | 一种多协议总线控制装置 |
CN104765573A (zh) * | 2015-04-10 | 2015-07-08 | 中国船舶重工集团公司第七一0研究所 | 一种串口通讯数据处理分析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105681134A (zh) | 2016-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105681134B (zh) | 一种通用型多种串口通信协议检测识别方法 | |
CN102647504B (zh) | 一种对手机中应用程序进行控制的方法 | |
KR101337874B1 (ko) | 파일 유전자 지도를 이용하여 파일의 악성코드 포함 여부를 판단하는 방법 및 시스템 | |
AU2014201595A1 (en) | Computer-implemented systems and methods for comparing and associating objects | |
CN104168288A (zh) | 一种基于协议逆向解析的自动化漏洞挖掘系统及方法 | |
US11341124B2 (en) | Missing data compensation method, missing data compensation system, and non-transitory computer-readable medium | |
CN103198260B (zh) | 一种二进制程序漏洞自动化定位方法 | |
CN107423171A (zh) | 基于pcie标准的插槽式功能扩展卡的检测方法及装置 | |
CN110213243A (zh) | 一种基于动态污点分析的工业通信协议逆向分析方法 | |
CN102053900A (zh) | 测试电子装置的usb设备的方法和系统 | |
CN113377580A (zh) | 一种地基遥测数据帧计数溢出修复和误码检测修复方法 | |
CN102902801A (zh) | 一种电能表地址检索方法、相关设备及系统 | |
JP4559974B2 (ja) | 管理装置及び管理方法及びプログラム | |
CN111309584A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN116244699A (zh) | 基于交互式应用安全检测的漏洞危险度评估系统 | |
CN113868137A (zh) | 埋点数据的处理方法、装置、系统和服务器 | |
KR102275635B1 (ko) | 함수 호출 패턴 분석을 통한 이상 검출 장치 및 방법 | |
CN102902832B (zh) | 一种检测pcb板丝印序号误删的方法及装置 | |
CN103745003A (zh) | Html片段的检测方法 | |
CN107957883A (zh) | 数据处理方法、51单片机、设备及可读存储介质 | |
CN109560964B (zh) | 一种设备合规检查方法及装置 | |
CN112184493A (zh) | 基于大数据和装配式建筑平台的数据处理方法、系统及存储介质 | |
CN102866902B (zh) | 复杂环境下的开发对象版本自动检查方法及系统 | |
CN201966918U (zh) | 一种用于光纤通道链路状态的统计电路 | |
Mahdin et al. | An approach to filtering RFID data streams |
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 |