一种优化modbus协议读取数据的方法技术

技术编号:34010900 阅读:37 留言:0更新日期:2022-07-02 14:33
本发明专利技术公开了一种优化modbus协议读取数据的方法,该方法包括以下步骤:基于需要读取数据的X个寄存器地址确定网格大小G;申请大小为Y的连续空间,建立内存地址与寄存器地址之间对应的映射关系;判断地址A+G的内存是否超出连续空间Y的范围;判断A~(A+G

【技术实现步骤摘要】
一种优化modbus协议读取数据的方法


[0001]本专利技术涉及数据读取
,具体来说,涉及一种优化modbus协议读取数据的方法。

技术介绍

[0002]Modbus协议是工业自动化领域广泛应用的平衡型应答通信协议,已经成为通用工业标准。Modbus协议支持传统的串口(RS

232、RS

422、RS

485)和以太网设备。Modbus通信使用主(Master,也称主站)—从(Slave,也称从站)技术,即在同一时刻,仅一个主站设备能初始化传输(查询,也叫请求,依次查询称为轮询),从站设备根据主站设备查询提供的数据作出相应反应。主站设备可单独和从站设备通信,也能以广播方式和所有从站设备通信。如果单独通信,从站设备返回一消息作为回应,如果主站设备是以广播方式查询的,则从站设备不作任何回应。
[0003]Modbus协议已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。目前,Modbus协议在提供读取数据时主要包括以下两种方法:1)通过指定地址,一次读取单个点位的数值;2)通过指定首地址和数量,一次读取多个地址连续点位的数值。然而,传统的Modbus协议中并没有提供一次性批量读取多个地址不连续的点位(离散点位)数值的方法,从而导致在读取大量离散点位时,只能一个个单点读取,获取数据的效率极低,且时间开销很大;且仅通过Modbus中自带的数据校验码有时候难以校验出数据是否异常,尤其是存在高速数据中丢包现象时,或者存在异常数据攻击时。
[0004]针对相关技术中的问题,目前尚未提出有效的解决方案。

技术实现思路

[0005]针对相关技术中的问题,本专利技术提出一种优化modbus协议读取数据的方法,以克服现有相关技术所存在的上述技术问题。
[0006]为此,本专利技术采用的具体技术方案如下:
[0007]根据本专利技术的一个方面,提供了一种优化modbus协议读取数据的方法,该方法包括以下步骤:
[0008]S1、基于需要读取数据的X个寄存器地址确定网格大小G;
[0009]S2、在计算机的内存中申请大小为Y的连续空间,并建立内存地址与寄存器地址之间一一对应的映射关系;
[0010]S3、设定0为首地址项A,网格大小G为每次读取数量;
[0011]S4、判断地址A+G的内存是否超出连续空间Y的范围,若是,则执行S8,若否,则执行S5;
[0012]S5、判断A~(A+G

1)的地址内是否存在需要读取的点位,若是,则执行S6,若否,则将首地址A更新为A+G,并返回S4;
[0013]S6、批量读取A~(A+G

1)地址内的数据,并判断批量读取的数据是否成功,若是,
则执行S7,若否,则逐个读取A~(A+G

1)地址内的有效数据,并执行S7;
[0014]S7、将读取到的数据存入寄存器地址对应的内存空间,并将首地址A更新为A+G,同时返回S4;
[0015]S8、数据读取结束,并从对应的内存空间地址中取出与需要读取数据的X个寄存器地址相对应的数值。
[0016]进一步的,所述S1中基于需要读取数据的X个寄存器地址确定网格大小G包括以下步骤:
[0017]S11、导入需要读取数据的X个寄存器地址,并确定X个寄存器地址中寄存器地址的最大值M;
[0018]S12、基于数值X和M确定网格大小G,其中,网格大小的计算公式如下:
[0019]G=(M/X)*10,若G≥100,则G=100。
[0020]进一步的,所述导入需要读取数据的X个寄存器地址,并确定X个寄存器地址中寄存器地址的最大值M之前还包括以下步骤:
[0021]扫描modbus设备获得每个寄存器的地址,并根据获得的寄存器地址在数据采集系统中建立包含有所有寄存器地址信息的寄存器表。
[0022]进一步的,所述寄存器地址包括线圈地址、触点地址、输入寄存器地址及输出寄存器地址。
[0023]进一步的,所述连续空间的计算公式如下:
[0024]Y=[(X/G)+1]*G;
[0025]其中,X表示需要读取数据的寄存器地址数量,G表示网格大小。
[0026]其中,所述将读取到的数据存入寄存器地址对应的内存空间还包括以下步骤:依据通讯双方共同定义的数据校验码对读取到的数据进行校验;
[0027]所述依据通讯双方共同定义的数据校验码对读取到的数据进行校验包括以下步骤:
[0028]判断所述数据校验码是否符合校验规则,
[0029]若是,则判定读取到的数据有效,并通过对数据与预设的序列特征库进行匹配度分析,判断上述数据是否为异常流量,只有当校验正确且匹配度simM
(X)
满足要求时,则认定为数据有效,其中,假设数据的序列长度为l,X为最新的数据的序列,其为X=(x0,x1,

x
l
‑1),M为预设的序列特征库,该特征库是由预设的一些异常数据序列的组合而成的标准库,Y为预设的序列特征库的序列之一,其为Y=(y0,y1,

y
l
‑1),通过如下算法计算X和预设的序列特征库的匹配度:
[0030]匹配度
[0031]其中,累计和计数函数
[0032]其中,关联计数函数
[0033]若否,则判定读取到的数据无效,无需进行匹配度分析,直接并进行故障处理。
[0034]根据本专利技术的另一个方面,提供了一种优化modbus协议读取数据的系统,该系统包括网格确定模块、映射关系建立模块、定义模块、内存判断模块、点位判断模块、数据读取
判断模块、首地址更新模块及数值读取模块;
[0035]其中,所述网格确定模块用于基于需要读取数据的X个寄存器地址确定网格大小G;
[0036]所述映射关系建立模块用于在计算机的内存中申请大小为Y的连续空间,并建立内存地址与寄存器地址之间一一对应的映射关系;
[0037]所述定义模块用于设定0为首地址项A,网格大小G为每次读取数量;
[0038]所述内存判断模块用于判断地址A+G的内存是否超出连续空间Y的范围;
[0039]所述点位判断模块用于判断A~(A+G

1)的地址内是否存在需要读取的点位;
[0040]所述数据读取判断模块用于批量读取A~(A+G

1)地址内的数据,并判断批量读取的数据是否成功;
[0041]所述首地址更新模块用于将读取到的数据存入寄存器地址对应的内存空间,并将首地址A更新为A+G;
[0042]所述数值读取模块用于从对应的内存空间地址中取出与需要读取数据的X个寄存器地址相对应的数值。
[0043]根据本专利技术的又一个方面,提供了一种计算机可读存储介质,所述计本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种优化modbus协议读取数据的方法,其特征在于,该方法包括以下步骤:S1、基于需要读取数据的X个寄存器地址确定网格大小G;S2、在计算机的内存中申请大小为Y的连续空间,并建立内存地址与寄存器地址之间一一对应的映射关系;S3、设定0为首地址项A,网格大小G为每次读取数量;S4、判断地址A+G的内存是否超出连续空间Y的范围,若是,则执行S8,若否,则执行S5;S5、判断A~(A+G

1)的地址内是否存在需要读取的点位,若是,则执行S6,若否,则将首地址A更新为A+G,并返回S4;S6、批量读取A~(A+G

1)地址内的数据,并判断批量读取的数据是否成功,若是,则执行S7,若否,则逐个读取A~(A+G

1)地址内的有效数据,并执行S7;S7、将读取到的数据存入寄存器地址对应的内存空间,并将首地址A更新为A+G,同时返回S4;S8、数据读取结束,并从对应的内存空间地址中取出与需要读取数据的X个寄存器地址相对应的数值;其中,所述S1中基于需要读取数据的X个寄存器地址确定网格大小G包括以下步骤:S11、导入需要读取数据的X个寄存器地址,并确定X个寄存器地址中寄存器地址的最大值M;S12、基于数值X和M确定网格大小G,其中,网格大小的计算公式如下:G=(M/X)*10,若G≥100,则G=100其中,所述将读取到的数据存入寄存器地址对应的内存空间还包括以下步骤:依据通讯双方共同定义的数据校验码对读取到的数据进行校验;所述依据通讯双方共同定义的数据校验码对读取到的数据进行校验包括以下步骤:判断所述数据校验码是否符合校验规则,若是,则判定读取到的数据有效,并通过对数据与预设的序列特征库进行匹配度分析,判断上述数据是否为异常流量,只有当校验正确且匹配度simM
(X)
满足要求时,则认定为数据有效,其中,假设数据的序列长度为l,X为最新的数据的序列,其为X=(x0,x1,

x
l
‑1),此处的M为预设的序列特征库,该特征库是由预设的一些异常数据序列的组合而成的标准库,Y为预设的序列特征库的序列之一,其为Y=(y0,y1,

y
l
‑1),通过如下算法计算X和预设的序列特征库的匹配度:匹配度其中,累计和计...

【专利技术属性】
技术研发人员:王峰李行洲
申请(专利权)人:无锡雪浪数制科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1