CN112350912B - 一种基于Modbus协议的数据采集方法、***和装置 - Google Patents
一种基于Modbus协议的数据采集方法、***和装置 Download PDFInfo
- Publication number
- CN112350912B CN112350912B CN202011182357.8A CN202011182357A CN112350912B CN 112350912 B CN112350912 B CN 112350912B CN 202011182357 A CN202011182357 A CN 202011182357A CN 112350912 B CN112350912 B CN 112350912B
- Authority
- CN
- China
- Prior art keywords
- point
- point location
- merging
- original
- length
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/40—Bus networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/40—Bus networks
- H04L2012/40208—Bus networks characterized by the use of a particular bus standard
- H04L2012/40228—Modbus
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Signal Processing (AREA)
- Data Mining & Analysis (AREA)
- Computer Networks & Wireless Communication (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Modbus协议的数据采集方法、***和装置,该方法包括:梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1;将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2;对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果。从而合理的利用设备特性,通过合并相邻点位、构造不同长度数据段的方法,解决了使用简易DTU设备以TCP透传方式请求错序的问题,使得以较低成本完成对大量Modbus设备数据的采集成为可能,从而解决了现有技术中Modbus RTU over TCP数据读取错乱、DTU设备成本较高的技术问题。
Description
技术领域
本申请实施例涉及数据传输技术领域,具体涉及一种基于Modbus协议的数据采集方法、***和装置。
背景技术
Modbus是一种工业场景非常常用的数据采集协议,常用的有Modbus Rtu和ModbusTCP两个不同的子分支。前者使用RS485方式通过双绞线组网连接采集端与设备,后者通过以太网组网。随着对工业物联网的诉求越来越高,企业越来越多的希望将在用的设备的数据采集到信息***中来。但目前在实际运行中的大量设备只提供了Modbus RTU连接方式,如果想使用上位机(如管理电脑、服务器等)采集数据,则需要借助DCS***或DTU设备来将RS485中的数据传输到上位机。DCS,即分布式控制***,一般用于专业的对稳定性和可靠性要求极高的场景,一般造价较高;DTU,即数据传输单元,此处专指将Modbus RTU协议设备连接转换为TCP网络的设备。此类设备也可以分为能够独立读取Modbus设备数据的高级DTU,以及仅支持数据透传需要依赖上位机读取Modbus设备数据的简单DTU。后者一般用于对稳定性和可靠性要求不高的场景,造价较为低廉,用途比较广泛;
在实际使用中,仅支持数据透传需要依赖上位机读取Modbus设备数据的简单DTU,需要将RS485线上的数据1:1转换为在网线上传输的TCP网络协议。这种经过转换的协议有别于Modbus RTU和Modbus TCP,一般称之为Modbus RTU overTCP。
但是,由于Modbus RTU并未提供请求唯一标识,在ModbusRTU响应中也不存在能唯一匹配对应请求的字段,所以在TCP网络中传输ModbusRTU数据时,因为网络抖动的存在,会存在多个请求和与其响应发生错序的情况,导致数据读取错乱,极大的影响数据采集效果。一般当设备点位较少,读取频率不高的情况下较少出现响应交叉错位的情况。但当请求频率较高时,错序的情况出现的较为频繁,导致采集的数据错误较多,使整个采集***不可用。若使用带有Modbus服务器功能的DTU或数采仪等设备,虽然能够直接运行程序使用Modbus Rtu协议读取数据,但设备成本较高,尤其具有大量设备读取需求时,成本对比更为明显。
发明内容
为此,本申请实施例提供一种基于Modbus协议的数据采集方法、***和装置,以至少部分解决现有技术中Modbus RTU over TCP数据读取错乱、DTU设备成本较高的技术问题。
为了解决上述技术问题,本申请实施例提供如下技术方案:
一种基于Modbus协议的数据采集方法,所述方法包括:
梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1;
将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2;
对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果。
进一步地,所述梳理设备点位,并基于各设备点位的基本信息创建原始点位表,具体包括:
梳理设备点位,将各设备点位按设备号、功能码、寄存器或线圈地址顺序排列;
将所有需要采集的点位按照其设备号、功能码、寄存器或线圈地址从小到大顺序排列,以得到基于相应排序的原始点位表T1。
进一步地,所述将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,具体包括:
从原始点位表T1中顺序取出第1个点位,将该点位放到合并点位表T2中,同时在对应关系表R中记录为,点位1在合并点位表T2中的对应序号0,对应偏移为0;
从T1中取第i个点位;
判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并。
进一步地,所述将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,还包括:
判定该点位i与合并点位表T2中的最后一个合并点位j不具有相同的设备号和功能码、或点位i的开始地址大于合并点位j的下一个相邻地址,则将原始点位i追加到合并列表T2中,并在T2中的新序号记为j,同时在对应关系表R中记录为,原始点位i在合并点位表T2中的对应序号j,对应偏移为0。
进一步地,判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并,具体包括:
更新合并点位表T2中的合并点位j的长度=MAX(合并点位j的开始地址+合并点位j的长度,原始点位i的开始地址+原始点位i的长度)-合并点位j的开始地址;
在对应关系表R中记录原始点位i的对应合并点位为j,且偏移量为目标点位i的开始地址-合并点位j的开始地址;
依次处理所述原始点位表T1中的所有原始点位。
进一步地,所述对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果,具体包括:
对合并点位表T2中的所有合并点位,计算其预期的响应字节长度;
判定存在设备号、功能码和响应长度均相同的点位,则构造出不同数据长度的点。
进一步地,对合并点位表T2中的所有合并点位,计算其预期的响应字节长度,具体包括:
对于功能码1、2的点位,其响应字节长度=对(读取长度÷8)向上取整;
对于功能码3、4的点位,其响应字节长度=读取长度×2。
进一步地,判定存在设备号、功能码和响应长度均相同的点位,则构造出不同数据长度的点,具体包括:
通过补点法构造出不同数据长度的点,在查询设备手册确认不影响设备正常功能的情况下,增加某个合并点位的“读取数量”,使其响应长度与其他同设备同功能码的点位不同;或,
通过连通法构造出不同数据长度的点,在补点法的基础上,若两个点位相邻不远,则可以考虑增加一个虚拟的点位连通原来的两个点位,使其可以合并为1个点位,从而消除响应长度相同的点位;或,
通过拆分法构造出不同数据长度的点,若以上两种方法均不合适,则可以考虑将合并点位拆成两个长度不同的点位,分别读取,以消除响应长度相同的点位。
本发明还提供一种基于Modbus协议的数据采集***,所述***包括:
点位表生成单元,用于梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1;
点位合并单元,用于将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2;
长度去重单元,用于对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果。
本发明还提供一种基于Modbus协议的数据采集装置,所述装置包括:数据采集装置、处理器和存储器;
所述数据采集装置用于采集数据;所述存储器用于存储一个或多个程序指令;所述处理器,用于执行一个或多个程序指令,用以执行如上所述的方法。
本发明所提供的基于Modbus协议的数据采集方法、***和装置,通过梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1;将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2;对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果。从而合理的利用设备特性,通过合并相邻点位、构造不同长度数据段的方法,解决了请求错序的问题,使得以较低成本完成对大量Modbus设备数据的采集成为可能,从而解决了现有技术中Modbus RTU over TCP数据读取错乱、DTU设备成本较高的技术问题。
附图说明
为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。
本说明书所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容能涵盖的范围内。
图1为本发明所提供的基于Modbus协议的数据采集方法一种具体实施方式的流程图;
图2为本发明所提供的基于Modbus协议的数据采集***一种具体实施方式的结构框图。
具体实施方式
以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明所提供的数据采集方法基于Modbus协议,其解决了Modbus RTU overTCP容易出现数据错乱的问题,同时避免了直接使用Modbus TCP设备导致的设备成本较高的问题,具有较好的数据传输准确性和经济性。
从理论上来讲,Modbus提供了4个寄存器区域,分别为离散输入(DiscretesInput)、线圈(Coils)、输入寄存器(Input Registers)和保持寄存器(HoldingRegisters)。每个区域提供了65536个地址。其中离散输入(Discretes Input)、线圈(Coils)是bit类型的,每个地址只占1个bit位。而输入寄存器(Input Registers)和保持寄存器(Holding Registers)是16bit长的寄存器,每个地址保存两个字节的数据。每个Modbus请求都包含设备号、功能码。设备号为RS485总线上的设备唯一ID,而功能码表明了要执行的Modbus操作,其中功能码1、2、3、4分别对应读取以上4种寄存器地址。这4种读取类型的Modbus请求都包含“开始地址”和“读取数量(或称为长度)”。寄存器可以单个读取,此时请求中的“读取数量”字段为1。但对于地址连续的寄存器,一般也可以批量读取(取决于设备,一般都支持批量读),此时请求中的“读取数量”设为相应长度即可,以下步骤便基于这个特性。
在一种具体实施方式中,本发明所提供的基于Modbus协议的数据采集方法,基于上述原理,如图1所示,包括以下步骤:
S1:梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1。具体地,步骤S1包括:梳理设备点位,将各设备点位按设备号、功能码、寄存器或线圈地址顺序排列;将所有需要采集的点位按照其设备号、功能码、寄存器或线圈地址从小到大顺序排列,以得到基于相应排序的原始点位表T1。
也就是说,首先要梳理设备点位,将点位按设备号、功能码、寄存器/线圈地址顺序排列,将所有需要采集的点位按照其设备号、功能码、寄存器/线圈地址从小到大顺序排列,得到一个排序的原始点位表T1。此处只需要关注“读取”系列的功能码(即1、2、3、4号功能码),其他功能码的点位能放到原始点位表T1中即可。
S2:将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2。具体步骤为,从原始点位表T1中顺序取出第1个点位,将该点位放到合并点位表T2中,同时在对应关系表R中记录为,点位1在合并点位表T2中的对应序号0,对应偏移为0;从T1中取第i个点位;判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并。
进一步地,所述将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,还包括:
判定该点位i与合并点位表T2中的最后一个合并点位j不具有相同的设备号和功能码、或点位i的开始地址大于合并点位j的下一个相邻地址,则将原始点位i追加到合并列表T2中,并在T2中的新序号记为j,同时在对应关系表R中记录为,原始点位i在合并点位表T2中的对应序号j,对应偏移为0。
进一步地,判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并,具体包括:
更新合并点位表T2中的合并点位j的长度=MAX(合并点位j的开始地址+合并点位j的长度,原始点位i的开始地址+原始点位i的长度)-合并点位j的开始地址;
在对应关系表R中记录原始点位i的对应合并点位为j,且偏移量为目标点位i的开始地址-合并点位j的开始地址;
依次处理所述原始点位表T1中的所有原始点位。
也就是说,合并相邻的点位,具体步骤为:
2.1从T1中顺序取出第1个点位,将该点位放到合并列表T2中,同时在对应关系表R中记录:点位1在合并点位表T2中的对应序号0,对应偏移为0;
2.2从T1中取下1个点位(序号记为i),判断该点位与T2中的最后一个点位(记为合并点位j)是否具有相同的设备号和功能码,且点位i的开始地址小于或等于合并点位j的下一个相邻地址(即合并点位j的开始地址+合并点位j的读取数量)。
2.2.1如果上述判断不符合,则将原始点位i追加到合并列表T2中(其在T2中的新序号记为j),同时在对应关系表R中记录:原始点位i在合并点位表T2中的对应序号j,对应偏移为0;
2.3如果2.2判断符合,执行以下步骤以合并点位:
2.3.1更新T2中的合并点位j的长度=MAX(合并点位j的开始地址+合并点位j的长度,原始点位i的开始地址+原始点位i的长度)-合并点位j的开始地址;
2.3.2在对应关系表R中记录原始点位i的对应合并点位为j,且偏移量为目标点位i的开始地址-合并点位j的开始地址;
2.4重复从步骤2.2执行,直到所有原始点位处理完毕。
S3:对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果。Modbus RTU读请求(功能码1、2、3、4)的响应体中包含请求的设备号、功能码、和响应字节长度。如果两个请求的功能码和响应长度都相同,则在网络乱序发生后将无法区分乱序的请求,造成采集错误。使用合适的方法消除功能码相同且响应字节数也相同的请求是避免Modbus RTU overTCP采集错误的一种有效手段。
上述长度去重具体包括以下步骤:
对合并点位表T2中的所有合并点位,计算其预期的响应字节长度。例如,对于功能码1、2的点位,其响应字节长度=对(读取长度÷8)向上取整;对于功能码3、4的点位,其响应字节长度=读取长度×2。
判定存在设备号、功能码和响应长度均相同的点位,则构造出不同数据长度的点。具体地,可以通过下述任一手段进行数据长度的构造:
通过补点法构造出不同数据长度的点,在查询设备手册确认不影响设备正常功能的情况下,增加某个合并点位的“读取数量”,使其响应长度与其他同设备同功能码的点位不同;或,
通过连通法构造出不同数据长度的点,在补点法的基础上,若两个点位相邻不远,则可以考虑增加一个虚拟的点位连通原来的两个点位,使其可以合并为1个点位,从而消除响应长度相同的点位;或,
通过拆分法构造出不同数据长度的点,若以上两种方法均不合适,则可以考虑将合并点位拆成两个长度不同的点位,分别读取,以消除响应长度相同的点位。
在经过长度调整后,重新执行步骤S2得到一个最终的合并结果,包含原始点位列表T1,合并点位列表T2和对应关系表R。数据采集时,应以合并点位列表T2为准构造Modbus请求。对每个合并点位,其处理步骤如下:
从T2中获取一个合并点位,构造相应的Modbus RTU over TCP请求并发送;
等待DTU响应返回,如果等待超时可以选择重试,若超过重试次数则回到步骤1读取下一个请求;
DTU响应返回后,判断响应中的设备号、功能码以及响应长度是否匹配。若不匹配则丢弃。并返回步骤1处理下一个合并点位;
查询对应关系表R中与当前合并点位相关联的原始点位列表,对列表中的每一个原始点位:
根据R中记录的偏移,从返回数据相应偏移位置读取原始点位所需“读取数量”的数据,并进行相应解析,作为原始点位的采集值记录下来。
在上述具体实施方式中,本发明所提供的基于Modbus协议的数据采集方法,通过梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1;将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2;对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果。从而合理的利用设备特性,通过合并相邻点位、构造不同长度数据段的方法,解决了请求错序的问题,使得以较低成本完成对大量Modbus设备数据的采集成为可能,从而解决了现有技术中Modbus RTU over TCP数据读取错乱、DTU设备成本较高的技术问题。
除了上述方法,本发明还提供一种基于Modbus协议的数据采集***,在一种具体实施方式中,如图2所示,所述***包括:
点位表生成单元100,用于梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1;具体地,点位表生成单元100用于:梳理设备点位,将各设备点位按设备号、功能码、寄存器或线圈地址顺序排列;将所有需要采集的点位按照其设备号、功能码、寄存器或线圈地址从小到大顺序排列,以得到基于相应排序的原始点位表T1。
也就是说,首先要梳理设备点位,将点位按设备号、功能码、寄存器/线圈地址顺序排列,将所有需要采集的点位按照其设备号、功能码、寄存器/线圈地址从小到大顺序排列,得到一个排序的原始点位表T1。此处只需要关注“读取”系列的功能码(即1、2、3、4号功能码),其他功能码的点位能放到原始点位表T1中即可。
点位合并单元200,用于将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2。该点位合并单元200的算法过程为,从原始点位表T1中顺序取出第1个点位,将该点位放到合并点位表T2中,同时在对应关系表R中记录为,点位1在合并点位表T2中的对应序号0,对应偏移为0;从T1中取第i个点位;判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并。
进一步地,所述将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,还包括:
判定该点位i与合并点位表T2中的最后一个合并点位j不具有相同的设备号和功能码、或点位i的开始地址大于合并点位j的下一个相邻地址,则将原始点位i追加到合并列表T2中,并在T2中的新序号记为j,同时在对应关系表R中记录为,原始点位i在合并点位表T2中的对应序号j,对应偏移为0。
进一步地,判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并,具体包括:
更新合并点位表T2中的合并点位j的长度=MAX(合并点位j的开始地址+合并点位j的长度,原始点位i的开始地址+原始点位i的长度)-合并点位j的开始地址;
在对应关系表R中记录原始点位i的对应合并点位为j,且偏移量为目标点位i的开始地址-合并点位j的开始地址;
依次处理所述原始点位表T1中的所有原始点位。
长度去重单元300,用于对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果。Modbus RTU读请求(功能码1、2、3、4)的响应体中包含请求的设备号、功能码、和响应字节长度。如果两个请求的功能码和响应长度都相同,则在网络乱序发生后将无法区分乱序的请求,造成采集错误。使用合适的方法消除功能码相同且响应字节数也相同的请求是避免Modbus RTU overTCP采集错误的一种有效手段。
该长度去重单元的算法过程为:
对合并点位表T2中的所有合并点位,计算其预期的响应字节长度。例如,对于功能码1、2的点位,其响应字节长度=对(读取长度÷8)向上取整;对于功能码3、4的点位,其响应字节长度=读取长度×2。
判定存在设备号、功能码和响应长度均相同的点位,则构造出不同数据长度的点。具体地,可以通过下述任一手段进行数据长度的构造:
通过补点法构造出不同数据长度的点,在查询设备手册确认不影响设备正常功能的情况下,增加某个合并点位的“读取数量”,使其响应长度与其他同设备同功能码的点位不同;或,
通过连通法构造出不同数据长度的点,在补点法的基础上,若两个点位相邻不远,则可以考虑增加一个虚拟的点位连通原来的两个点位,使其可以合并为1个点位,从而消除响应长度相同的点位;或,
通过拆分法构造出不同数据长度的点,若以上两种方法均不合适,则可以考虑将合并点位拆成两个长度不同的点位,分别读取,以消除响应长度相同的点位。
在上述具体实施方式中,本发明所提供的基于Modbus协议的数据采集***,通过梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1;将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2;对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果。从而合理的利用设备特性,通过合并相邻点位、构造不同长度数据段的方法,解决了请求错序的问题,使得以较低成本完成对大量Modbus设备数据的采集成为可能,从而解决了现有技术中Modbus RTU over TCP数据读取错乱、DTU设备成本较高的技术问题。
基于相同的技术构思,本申请实施例还提供了一种基于Modbus协议的数据采集装置,所述装置包括:数据采集装置、处理器和存储器;所述数据采集装置用于采集数据;所述存储器用于存储一个或多个程序指令;所述处理器,用于执行一个或多个程序指令,用以执行如上所述的方法。
基于相同的技术构思,本申请实施例还提供了一种计算机可读存储介质,所述计算机存储介质中包含一个或多个程序指令,所述一个或多个程序指令用于执行如上所述的方法。
本说明书中上述方法的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。相关之处参见方法实施例的部分说明即可。
需要说明的是,尽管在附图中以特定顺序描述了本发明方法的操作,但这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然本申请提供了如实施例或流程图的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。
上述实施例阐明的单元、装置或模块等,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、类等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,移动终端,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。本申请可用于众多通用或专用的计算机***环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器***、基于微处理器的***、置顶盒、可编程的电子设备、网络PC、小型计算机、大型计算机、包括以上任何***或设备的分布式计算环境等等。
以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (5)
1.一种基于Modbus协议的数据采集方法,其特征在于,所述方法包括:
梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1;将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2;
对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果;
其中,所述梳理设备点位,并基于各设备点位的基本信息创建原始点位表,具体包括:
梳理设备点位,将各设备点位按设备号、功能码、寄存器或线圈地址顺序排列;
将所有需要采集的点位按照其设备号、功能码、寄存器或线圈地址从小到大顺序排列,以得到基于相应排序的原始点位表T1;
其中,所述将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,具体包括:
从原始点位表T1中顺序取出第1个点位,将该点位放到合并点位表T2中,同时在对应关系表R中记录为,点位1在合并点位表T2中的对应序号0,对应偏移为0;
从T1中取第i个点位;
判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并;
其中,所述将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,还包括:
判定该点位i与合并点位表T2中的最后一个合并点位j不具有相同的设备号和功能码、或点位i的开始地址大于合并点位j的下一个相邻地址,则将原始点位i追加到合并列表T2中,并在T2中的新序号记为j,同时在对应关系表R中记录为,原始点位i在合并点位表T2中的对应序号j,对应偏移为0;
其中,所述对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果,具体包括:
对合并点位表T2中的所有合并点位,计算其预期的响应字节长度;
判定存在设备号、功能码和响应长度均相同的点位,则构造出不同数据长度的点;其中,判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并,具体包括:
更新合并点位表T2中的合并点位j的长度 = MAX(合并点位j的开始地址+合并点位j的长度,原始点位i的开始地址+原始点位i的长度)- 合并点位j的开始地址;
在对应关系表R中记录原始点位i的对应合并点位为j,且偏移量为目标点位i的开始地址-合并点位j的开始地址;
依次处理所述原始点位表T1中的所有原始点位。
2.如权利要求1所述的基于Modbus协议的数据采集方法,其特征在于,对合并点位表T2中的所有合并点位,计算其预期的响应字节长度,具体包括:
对于功能码1、2的点位,其响应字节长度=对 (读取长度÷8) 向上取整;
对于功能码3、4的点位,其响应字节长度=读取长度×2。
3.如权利要求2所述的基于Modbus协议的数据采集方法,其特征在于,判定存在设备号、功能码和响应长度均相同的点位,则构造出不同数据长度的点,具体包括:
通过补点法构造出不同数据长度的点,在查询设备手册确认不影响设备正常功能的情况下,增加某个合并点位的“读取数量”,使其响应长度与其他同设备同功能码的点位不同;或,
通过连通法构造出不同数据长度的点,在补点法的基础上,若两个点位相邻不远,则可以考虑增加一个虚拟的点位连通原来的两个点位,使其可以合并为1个点位,从而消除响应长度相同的点位;或,
若以上两种方法均不合适,通过拆分法构造出不同数据长度的点,将合并点位拆成两个长度不同的点位,分别读取,以消除响应长度相同的点位。
4.一种基于Modbus协议的数据采集***,其特征在于,所述***包括:
点位表生成单元,用于梳理设备点位,并基于各设备点位的基本信息创建原始点位表,所述原始点位表记为T1;
点位合并单元,用于将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,合并完成后形成合并点位表,所述合并点位表记为T2;
长度去重单元,用于对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果;
其中,所述梳理设备点位,并基于各设备点位的基本信息创建原始点位表,具体包括:
梳理设备点位,将各设备点位按设备号、功能码、寄存器或线圈地址顺序排列;
将所有需要采集的点位按照其设备号、功能码、寄存器或线圈地址从小到大顺序排列,以得到基于相应排序的原始点位表T1;
其中,所述将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,具体包括:
从原始点位表T1中顺序取出第1个点位,将该点位放到合并点位表T2中,同时在对应关系表R中记录为,点位1在合并点位表T2中的对应序号0,对应偏移为0;
从T1中取第i个点位;
判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并;
其中,所述将所述原始点位表T1中相邻的点位按预设的对应关系表R进行合并,还包括:
判定该点位i与合并点位表T2中的最后一个合并点位j不具有相同的设备号和功能码、或点位i的开始地址大于合并点位j的下一个相邻地址,则将原始点位i追加到合并列表T2中,并在T2中的新序号记为j,同时在对应关系表R中记录为,原始点位i在合并点位表T2中的对应序号j,对应偏移为0;
其中,所述对所述合并点位表T2中的数据段进行长度去重,并基于长度去重结果得到最终合并结果,具体包括:
对合并点位表T2中的所有合并点位,计算其预期的响应字节长度;
判定存在设备号、功能码和响应长度均相同的点位,则构造出不同数据长度的点;
其中,判定该点位i与合并点位表T2中的最后一个合并点位j具有相同的设备号和功能码、且点位i的开始地址小于或等于合并点位j的下一个相邻地址,则进行点位合并,具体包括:
更新合并点位表T2中的合并点位j的长度 = MAX(合并点位j的开始地址+合并点位j的长度,原始点位i的开始地址+原始点位i的长度)- 合并点位j的开始地址;
在对应关系表R中记录原始点位i的对应合并点位为j,且偏移量为目标点位i的开始地址-合并点位j的开始地址;
依次处理所述原始点位表T1中的所有原始点位。
5.一种基于Modbus协议的数据采集装置,其特征在于,所述装置包括:数据采集装置、处理器和存储器;
所述数据采集装置用于采集数据;所述存储器用于存储一个或多个程序指令;所述处理器,用于执行一个或多个程序指令,用以执行如权利要求1-3任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011182357.8A CN112350912B (zh) | 2020-10-29 | 2020-10-29 | 一种基于Modbus协议的数据采集方法、***和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011182357.8A CN112350912B (zh) | 2020-10-29 | 2020-10-29 | 一种基于Modbus协议的数据采集方法、***和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112350912A CN112350912A (zh) | 2021-02-09 |
CN112350912B true CN112350912B (zh) | 2021-07-27 |
Family
ID=74355328
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011182357.8A Active CN112350912B (zh) | 2020-10-29 | 2020-10-29 | 一种基于Modbus协议的数据采集方法、***和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112350912B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112968906B (zh) * | 2021-03-25 | 2022-02-18 | 湖南大学 | 一种基于多元组的Modbus TCP异常通讯检测方法和*** |
CN113064888B (zh) * | 2021-03-25 | 2021-12-07 | 珠海格力电器股份有限公司 | 数据校对方法、装置和***、服务器、设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7752280B2 (en) * | 2007-03-22 | 2010-07-06 | Moxa Inc. | Method of detecting response time-out based on master-slave protocol |
CN102820959B (zh) * | 2011-06-10 | 2015-08-26 | 哈尔滨工业大学 | 在Modbus主站与从站之间进行大数据量通信的方法 |
CN103401930B (zh) * | 2013-08-05 | 2016-08-10 | 北京邮电大学 | 一种基于Web Service的工业监控方法及装置 |
CN103546467B (zh) * | 2013-10-23 | 2016-08-17 | 上海爱控自动化设备有限公司 | 在TCP/IP网络上应用Modbus RTU协议的方法 |
CN103792928B (zh) * | 2014-02-24 | 2016-08-03 | 东南大学 | 一种基于Modbus的工业现场数据采集分析*** |
DE102018125894B4 (de) * | 2018-10-18 | 2021-01-28 | Bender Gmbh & Co. Kg | Verfahren zum Auflösen eines Adresskonflikts bei dem Modbus RTU-Standardprotokoll |
CN109600258B (zh) * | 2018-12-10 | 2022-02-22 | 英赛克科技(北京)有限公司 | 工业协议报文记录装置及方法 |
-
2020
- 2020-10-29 CN CN202011182357.8A patent/CN112350912B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112350912A (zh) | 2021-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112350912B (zh) | 一种基于Modbus协议的数据采集方法、***和装置 | |
CN110351115A (zh) | 降低网络访问时延的方法、装置、计算机设备及存储介质 | |
CN105760395A (zh) | 一种数据处理的方法、装置及*** | |
CN109150854B (zh) | 基于xml文件的动态可配置通信规约转换*** | |
CN110309065B (zh) | 测试任务的并发执行方法、装置、设备及存储介质 | |
CN113328899B (zh) | 一种集群节点的故障处理方法及*** | |
CN112732982A (zh) | 一种故障码存储方法、装置、终端设备及可读存储介质 | |
CN114025032B (zh) | Ems与bms的传输协议方法、***、设备及存储介质 | |
CN113986985B (zh) | 能源管理的io读取方法、***、设备及存储介质 | |
CN116723206A (zh) | 车辆故障信息处理方法、装置、电子设备及存储介质 | |
CN111585815A (zh) | 一种端口数据采集方法及装置 | |
CN104753626A (zh) | 一种数据压缩方法、设备及*** | |
CN108509440A (zh) | 一种数据处理方法及装置 | |
CN106598747A (zh) | 网络数据包的并行处理方法及装置 | |
JP2016024486A (ja) | データ活用システム及びその制御方法 | |
CN117240943A (zh) | 接口数据解析方法和装置 | |
CN110209702B (zh) | 开关磁阻电机功率拓扑推荐方法、***、终端及存储介质 | |
CN108241639A (zh) | 一种数据去重方法 | |
CN111046077A (zh) | 数据的获取方法及装置、存储介质、终端 | |
CN111200608B (zh) | 链路信息处理方法和装置 | |
CN113709012A (zh) | 一种基于Modbus通信协议的扩展通信方法 | |
CN108805741B (zh) | 一种电能质量数据的融合方法、装置及*** | |
CN110674214A (zh) | 大数据同步方法、装置、计算机设备及存储介质 | |
CN117932121A (zh) | 字符串排序方法、装置、计算机存储介质及加速卡 | |
CN118277348A (zh) | Lzo压缩文件的加载方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: Room 1102-1, 11th floor, South District, building 9, Shuntai Plaza, 2000 Shunhua Road, high tech Zone, Jinan City, Shandong Province Patentee after: Zhiyuan Digital Technology (Shandong) Co.,Ltd. Address before: Room 1102-1, 11th floor, South District, building 9, Shuntai Plaza, 2000 Shunhua Road, high tech Zone, Jinan City, Shandong Province Patentee before: Shandong Eighth Five-Year Information Technology Co.,Ltd. |