基于modbusRTU协议通信的高效点位采集方法及装置与流程

未命名 07-28 阅读:96 评论:0

基于modbusrtu协议通信的高效点位采集方法及装置
技术领域
1.本发明属于智能机柜数据采集监控技术领域,具体涉及一种基于modbusrtu协议通信的高效点位采集方法及装置。


背景技术:

2.目前,智能机柜数据采集监控领域中,很多场景需要同时采集多种modbusrtu协议的外设数据并进行监控,一般modbusrtu协议类型外设点位数量都比较多,有些点位数量甚至成千上万,而往往用户的需求不需要采集如此多的点位,而是只采集满足自己需求的某些点位即可,这就涉及了智能采集技术。
3.现有的技术大多数为:配置用户所需的点位数据,设置采集周期、发送帧间隔时间、失败重发次数等指令收发参数,设置单帧请求寄存器最大数量,然后将用户所需点位数据寄存器根据单帧请求寄存器最大数量进行相应拆分,如果超过单帧请求寄存器最大数量即进行拆分,将拆分出来的寄存器进行封包处理,最后包装成请求指令,按照设置的指令收发参数进行数据采集。
4.传统技术中,由于没有判断所需点位寄存器的连续性,而直接根据单帧请求最大寄存器数量进行拆分,这就导致每一帧指令所请求的寄存器中或多或少都存在用户不需要的点位数据,进而造成了资源与空间的浪费。如果用户需求数据量比较大,会导致采集效率与性能低下,严重时甚至可能导致数据丢失、数据异常。


技术实现要素:

5.为此,本发明提供一种基于modbusrtu协议通信的高效点位采集方法及装置,避免大量不必要的数据采集,解决整体采集的性能与效率低,可控性差,造成资源浪费的问题。
6.为了实现上述目的,本发明提供如下技术方案:基于modbusrtu协议通信的高效点位采集方法,包括:
7.通过采集主机对下发的配置数据进行遍历,对所述配置数据创建sqlite数据库表,并将所述配置数据保存到所述sqlite数据库表中;
8.通过采集主机将所有保存的数据点位利用modbusrtu协议中的寄存器位置与设置的拆包寄存器地址间隔数进行第一次拆解,所述第一次拆解为不连续性拆解,将所述第一次拆解完成的每部分寄存器分别储存于对应的第一map容器中等待第二次拆解;
9.通过采集主机将所述第一次拆解之后的寄存器,根据设置的单帧最大请求寄存器个数进行所述第二次拆解,所述第二次拆解为等分式拆解,将所述第二次拆解完成的每部分寄存器起始地址和寄存器个数储存于对应的第二map容器中;
10.把所述第二map容器中储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令,并将所述标准的modbus请求指令储存于缓存中;
11.根据所述sqlite数据库表中的所述配置数据,进行所述标准的modbus请求指令的收发及点位数据的采集。
12.作为基于modbusrtu协议通信的高效点位采集方法优选方案,所述配置数据的配置步骤为:
13.配置用户所需求的所有数据点位,并通过tcp通信下发给采集主机;
14.配置采集周期、发送帧间隔、失败重发次数、通信异常判断次数、故障重连间隔、超时判断指令收发参数,并通过tcp通信下发给采集主机;
15.配置单帧最大请求寄存器个数与拆包寄存器地址间隔数,并通过tcp通信下发给采集主机。
16.作为基于modbusrtu协议通信的高效点位采集方法优选方案,当后续存在新增的所述配置数据,对所述sqlite数据库表进行更新。
17.作为基于modbusrtu协议通信的高效点位采集方法优选方案,所述第一次拆解的方式为:
18.遍历所有数据点位对应的寄存器地址以及寄存器个数,如果存在两个数据点位对应的寄存器地址之间间隔小于设置的拆包寄存器地址间隔,且没有遍历到最后一个数据点位,则不进行数据点位拆解,寄存器个数进行累加;若已经遍历到了最后一个数据点位,再进行数据点位拆解;
19.如果两个数据点位对应的寄存器地址之间间隔大于设置的拆包寄存器地址间隔,则直接进行数据点位拆解。
20.作为基于modbusrtu协议通信的高效点位采集方法优选方案,所述第二次拆解的方式为:
21.遍历所述第一次拆解之后的每部分寄存器,将每部分寄存器个数与设置的单帧最大请求寄存器个数进行比较;
22.如果指定部分寄存器个数没有超过单帧最大请求寄存器个数,则将该部分寄存器起始地址与寄存器个数储存于对应的所述第二map容器中;
23.如果指定部分寄存器个数超过单帧最大请求寄存器个数,则根据该部分寄存器个数超过单帧最大请求寄存器个数的倍数进行等分式拆解。
24.作为基于modbusrtu协议通信的高效点位采集方法优选方案,如果指定部分寄存器个数超过单帧最大请求寄存器个数的一倍,但指定部分寄存器个数未超过单帧最大请求寄存器个数的两倍,则将该部分寄存器拆分成相同数量的两部分;
25.如果指定部分寄存器个数超过单帧最大请求寄存器个数的两倍,但指定部分寄存器个数未超过单帧最大请求寄存器个数的三倍,则将该部分寄存器拆分成相同数量的三部分。
26.作为基于modbusrtu协议通信的高效点位采集方法优选方案,把所述第二map容器中储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令过程中:
27.将每一个寄存器起始地址与寄存器个数的组合补足modbus外设地址、功能码以及crc16校验码。
28.作为基于modbusrtu协议通信的高效点位采集方法优选方案,根据配置的发送帧间隔、失败重发次数、通信异常判断次数、故障重连间隔、超时判断参数,进行所述标准的modbus请求指令的收发及点位数据的采集。
29.作为基于modbusrtu协议通信的高效点位采集方法优选方案,发送帧间隔为:每一
帧之间发送的时间间隔;
30.失败重发次数为:如果发送所述标准的modbus请求指令失败,需要重新发送所述标准的modbus请求指令的次数;
31.通信异常判断次数为:超时次数判断为设备之间通信异常的次数;
32.故障重连间隔为:如果发生了通信异常,到下一次尝试重新连接的时间间隔;
33.超时判断为:发送一帧指令,等待回复的时间。
34.本发明还提供一种基于modbusrtu协议通信的高效点位采集装置,采用上述的基于modbusrtu协议通信的高效点位采集方法,包括:
35.配置数据处理模块,用于通过采集主机对下发的配置数据进行遍历,对所述配置数据创建sqlite数据库表,并将所述配置数据保存到所述sqlite数据库表中;
36.第一次拆解处理模块,用于通过采集主机将所有保存的数据点位利用modbusrtu协议中的寄存器位置与设置的拆包寄存器地址间隔数进行第一次拆解,所述第一次拆解为不连续性拆解,将所述第一次拆解完成的每部分寄存器分别储存于对应的第一map容器中等待第二次拆解;
37.第二次拆解处理模块,用于通过采集主机将所述第一次拆解之后的寄存器,根据设置的单帧最大请求寄存器个数进行所述第二次拆解,所述第二次拆解为等分式拆解,将所述第二次拆解完成的每部分寄存器起始地址和寄存器个数储存于对应的第二map容器中;
38.指令组合包装模块,用于把所述第二map容器中储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令,并将所述标准的modbus请求指令储存于缓存中;
39.数据采集模块,用于根据所述sqlite数据库表中的所述配置数据,进行所述标准的modbus请求指令的收发及点位数据的采集。
40.本发明的有益效果如下:通过采集主机对下发的配置数据进行遍历,对所述配置数据创建sqlite数据库表,并将所述配置数据保存到所述sqlite数据库表中;通过采集主机将所有保存的数据点位利用modbusrtu协议中的寄存器位置与设置的拆包寄存器地址间隔数进行第一次拆解,所述第一次拆解为不连续性拆解,将所述第一次拆解完成的每部分寄存器分别储存于对应的第一map容器中等待第二次拆解;通过采集主机将所述第一次拆解之后的寄存器,根据设置的单帧最大请求寄存器个数进行所述第二次拆解,所述第二次拆解为等分式拆解,将所述第二次拆解完成的每部分寄存器起始地址和寄存器个数储存于对应的第二map容器中;把所述第二map容器中储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令,并将所述标准的modbus请求指令储存于缓存中;根据所述sqlite数据库表中的所述配置数据,进行所述标准的modbus请求指令的收发及点位数据的采集。本发明由于加入了不连续性拆解与等分式拆解两层智能拆解方式,使得最终组装而成的指令可利用性最大化,避免了大量不必要的数据采集,大大提升了整体采集的性能与效率,并且具有很高的可控性,可以根据用户不同的需求进行智能控制,最大化避免资源浪费。
附图说明
41.为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引申获得其他的实施附图。
42.图1为本发明实施例提供的基于modbusrtu协议通信的高效点位采集方法流程示意图;
43.图2为本发明实施例提供的基于modbusrtu协议通信的高效点位采集装置示意图。
具体实施方式
44.以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
45.实施例1
46.参见图1,本发明实施例1提供一种基于modbusrtu协议通信的高效点位采集方法,包括以下步骤:
47.步骤s1:配置用户所需求的所有数据点位,并通过tcp通信下发给采集主机。
48.步骤s2:配置采集周期、发送帧间隔、失败重发次数、通信异常判断次数、故障重连间隔、超时判断指令收发参数,并通过tcp通信下发给采集主机。
49.步骤s3:配置单帧最大请求寄存器个数与拆包寄存器地址间隔数,并通过tcp通信下发给采集主机。
50.步骤s4:采集主机对步骤s1、步骤s2、步骤s3所下发的配置数据进行遍历,针对配置数据创建sqlite数据库表,并将所有配置信息保存到该sqlite数据库表中,方便后续使用;当后续存在新增的所述配置数据,对所述sqlite数据库表进行更新,不需要重新创建。
51.步骤s5:通过采集主机将所有保存的数据点位利用modbusrtu协议中的寄存器位置与设置的拆包寄存器地址间隔数进行第一次拆解,所述第一次拆解为不连续性拆解,将所述第一次拆解完成的每部分寄存器分别储存于对应的第一map容器中等待第二次拆解。
52.其中,第一次拆解的方式为:遍历所有数据点位对应的寄存器地址以及寄存器个数,如果存在两个数据点位对应的寄存器地址之间间隔小于设置的拆包寄存器地址间隔,且没有遍历到最后一个数据点位,则不进行数据点位拆解,寄存器个数进行累加;若已经遍历到了最后一个数据点位,再进行数据点位拆解;如果两个数据点位对应的寄存器地址之间间隔大于设置的拆包寄存器地址间隔,则直接进行数据点位拆解。
53.步骤s6:通过采集主机将所述第一次拆解之后的寄存器,根据设置的单帧最大请求寄存器个数进行所述第二次拆解,所述第二次拆解为等分式拆解,将所述第二次拆解完成的每部分寄存器起始地址和寄存器个数储存于对应的第二map容器中;
54.其中,第二次拆解的方式为:遍历所述第一次拆解之后的每部分寄存器,将每部分寄存器个数与设置的单帧最大请求寄存器个数进行比较;如果指定部分寄存器个数没有超过单帧最大请求寄存器个数,则将该部分寄存器起始地址与寄存器个数储存于对应的所述
第二map容器中;如果指定部分寄存器个数超过单帧最大请求寄存器个数,则根据该部分寄存器个数超过单帧最大请求寄存器个数的倍数进行等分式拆解;如果指定部分寄存器个数超过单帧最大请求寄存器个数的一倍,但指定部分寄存器个数未超过单帧最大请求寄存器个数的两倍,则将该部分寄存器拆分成相同数量的两部分;如果指定部分寄存器个数超过单帧最大请求寄存器个数的两倍,但指定部分寄存器个数未超过单帧最大请求寄存器个数的三倍,则将该部分寄存器拆分成相同数量的三部分。依此类推,拆分完成将该部分寄存器起始地址与寄存器个数储存于对应的第二map容器中。
55.步骤s7:完成步骤s6之后,已经储存了大部分的寄存器起始地址与寄存器个数的组合,接着将这些组合包装成标准的modbus请求指令并储存,具体操作为:将每一个组合补足modbus外设地址、功能码以及crc16校验,然后储存于缓存中,等待下一步操作。
56.步骤s8:根据配置的发送帧间隔、失败重发次数、通信异常判断次数、故障重连间隔、超时判断等参数进行指令的收发、数据的采集。
57.其中,发送帧间隔为:每一帧之间发送的时间间隔;失败重发次数为:如果发送所述标准的modbus请求指令失败,需要重新发送所述标准的modbus请求指令的次数;通信异常判断次数为:超时次数判断为设备之间通信异常的次数;故障重连间隔为:如果发生了通信异常,到下一次尝试重新连接的时间间隔;超时判断为:发送一帧指令,等待回复的时间。
58.综上所述,本发明配置用户所需求的所有数据点位,并通过tcp通信下发给采集主机;配置采集周期、发送帧间隔、失败重发次数、通信异常判断次数、故障重连间隔、超时判断指令收发参数,并通过tcp通信下发给采集主机;配置单帧最大请求寄存器个数与拆包寄存器地址间隔数,并通过tcp通信下发给采集主机;通过采集主机对下发的配置数据进行遍历,对所述配置数据创建sqlite数据库表,并将所述配置数据保存到所述sqlite数据库表中;通过采集主机将所有保存的数据点位利用modbusrtu协议中的寄存器位置与设置的拆包寄存器地址间隔数进行第一次拆解,所述第一次拆解为不连续性拆解,第一次拆解的方式为:遍历所有数据点位对应的寄存器地址以及寄存器个数,如果存在两个数据点位对应的寄存器地址之间间隔小于设置的拆包寄存器地址间隔,且没有遍历到最后一个数据点位,则不进行数据点位拆解,寄存器个数进行累加;若已经遍历到了最后一个数据点位,再进行数据点位拆解;如果两个数据点位对应的寄存器地址之间间隔大于设置的拆包寄存器地址间隔,则直接进行数据点位拆解。将所述第一次拆解完成的每部分寄存器分别储存于对应的第一map容器中等待第二次拆解;通过采集主机将所述第一次拆解之后的寄存器,根据设置的单帧最大请求寄存器个数进行所述第二次拆解,所述第二次拆解为等分式拆解,第二次拆解的方式为:遍历所述第一次拆解之后的每部分寄存器,将每部分寄存器个数与设置的单帧最大请求寄存器个数进行比较;如果指定部分寄存器个数没有超过单帧最大请求寄存器个数,则将该部分寄存器起始地址与寄存器个数储存于对应的所述第二map容器中;如果指定部分寄存器个数超过单帧最大请求寄存器个数,则根据该部分寄存器个数超过单帧最大请求寄存器个数的倍数进行等分式拆解;如果指定部分寄存器个数超过单帧最大请求寄存器个数的一倍,但指定部分寄存器个数未超过单帧最大请求寄存器个数的两倍,则将该部分寄存器拆分成相同数量的两部分;如果指定部分寄存器个数超过单帧最大请求寄存器个数的两倍,但指定部分寄存器个数未超过单帧最大请求寄存器个数的三倍,则将该部分寄存器拆分成相同数量的三部分。依此类推,拆分完成将该部分寄存器起始地
址与寄存器个数储存于对应的第二map容器中;把所述第二map容器中储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令,并将所述标准的modbus请求指令储存于缓存中;根据所述sqlite数据库表中的所述配置数据,进行所述标准的modbus请求指令的收发及点位数据的采集。本发明由于加入了不连续性拆解与等分式拆解两层智能拆解方式,使得最终组装而成的指令可利用性最大化,避免了大量不必要的数据采集,大大提升了整体采集的性能与效率,并且具有很高的可控性,可以根据用户不同的需求进行智能控制,最大化避免资源浪费。
59.需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本公开实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
60.需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
61.实施例2
62.参见图2,本发明实施例2提供一种基于modbusrtu协议通信的高效点位采集装置,采用上述实施例1的基于modbusrtu协议通信的高效点位采集方法,包括:
63.配置数据处理模块1,用于通过采集主机对下发的配置数据进行遍历,对所述配置数据创建sqlite数据库表,并将所述配置数据保存到所述sqlite数据库表中;
64.第一次拆解处理模块2,用于通过采集主机将所有保存的数据点位利用modbusrtu协议中的寄存器位置与设置的拆包寄存器地址间隔数进行第一次拆解,所述第一次拆解为不连续性拆解,将所述第一次拆解完成的每部分寄存器分别储存于对应的第一map容器中等待第二次拆解;
65.第二次拆解处理模块3,用于通过采集主机将所述第一次拆解之后的寄存器,根据设置的单帧最大请求寄存器个数进行所述第二次拆解,所述第二次拆解为等分式拆解,将所述第二次拆解完成的每部分寄存器起始地址和寄存器个数储存于对应的第二map容器中;
66.指令组合包装模块4,用于把所述第二map容器中储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令,并将所述标准的modbus请求指令储存于缓存中;
67.数据采集模块5,用于根据所述sqlite数据库表中的所述配置数据,进行所述标准的modbus请求指令的收发及点位数据的采集。
68.需要说明的是,上述装置各模块之间的信息交互、执行过程等内容,由于与本技术实施例1中的方法实施例基于同一构思,其带来的技术效果与本技术方法实施例相同,具体内容可参见本技术前述所示的方法实施例中的叙述,此处不再赘述。
69.实施例3
70.本发明实施例3提供一种非暂态计算机可读存储介质,所述计算机可读存储介质
中存储有基于modbusrtu协议通信的高效点位采集方法的程序代码,所述程序代码包括用于执行实施例1或其任意可能实现方式的基于modbusrtu协议通信的高效点位采集方法的指令。
71.计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd),或者半导体介质(例如固态硬盘(solidstatedisk、ssd))等。
72.实施例4
73.本发明实施例4提供一种电子设备,包括:存储器和处理器;
74.所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行实施例1或其任意可能实现方式的基于modbusrtu协议通信的高效点位采集方法。
75.具体的,处理器可以通过硬件来实现也可以通过软件来实现,当通过硬件实现时,该处理器可以是逻辑电路、集成电路等;当通过软件来实现时,该处理器可以是一个通用处理器,通过读取存储器中存储的软件代码来实现,该存储器可以集成在处理器中,可以位于所述处理器之外,独立存在。
76.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络,或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。
77.显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
78.虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。

技术特征:
1.基于modbusrtu协议通信的高效点位采集方法,其特征在于,包括:通过采集主机对下发的配置数据进行遍历,对所述配置数据创建sqlite数据库表,并将所述配置数据保存到所述sqlite数据库表中;通过采集主机将所有保存的数据点位利用modbusrtu协议中的寄存器位置与设置的拆包寄存器地址间隔数进行第一次拆解,所述第一次拆解为不连续性拆解,将所述第一次拆解完成的每部分寄存器分别储存于对应的第一map容器中等待第二次拆解;通过采集主机将所述第一次拆解之后的寄存器,根据设置的单帧最大请求寄存器个数进行所述第二次拆解,所述第二次拆解为等分式拆解,将所述第二次拆解完成的每部分寄存器起始地址和寄存器个数储存于对应的第二map容器中;把所述第二map容器中储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令,并将所述标准的modbus请求指令储存于缓存中;根据所述sqlite数据库表中的所述配置数据,进行所述标准的modbus请求指令的收发及点位数据的采集。2.根据权利要求1所述的基于modbusrtu协议通信的高效点位采集方法,其特征在于,所述配置数据的配置步骤为:配置用户所需求的所有数据点位,并通过tcp通信下发给采集主机;配置采集周期、发送帧间隔、失败重发次数、通信异常判断次数、故障重连间隔、超时判断指令收发参数,并通过tcp通信下发给采集主机;配置单帧最大请求寄存器个数与拆包寄存器地址间隔数,并通过tcp通信下发给采集主机。3.根据权利要求2所述的基于modbusrtu协议通信的高效点位采集方法,其特征在于,当后续存在新增的所述配置数据,对所述sqlite数据库表进行更新。4.根据权利要求2所述的基于modbusrtu协议通信的高效点位采集方法,其特征在于,所述第一次拆解的方式为:遍历所有数据点位对应的寄存器地址以及寄存器个数,如果存在两个数据点位对应的寄存器地址之间间隔小于设置的拆包寄存器地址间隔,且没有遍历到最后一个数据点位,则不进行数据点位拆解,寄存器个数进行累加;若已经遍历到了最后一个数据点位,再进行数据点位拆解;如果两个数据点位对应的寄存器地址之间间隔大于设置的拆包寄存器地址间隔,则直接进行数据点位拆解。5.根据权利要求4所述的基于modbusrtu协议通信的高效点位采集方法,其特征在于,所述第二次拆解的方式为:遍历所述第一次拆解之后的每部分寄存器,将每部分寄存器个数与设置的单帧最大请求寄存器个数进行比较;如果指定部分寄存器个数没有超过单帧最大请求寄存器个数,则将该部分寄存器起始地址与寄存器个数储存于对应的所述第二map容器中;如果指定部分寄存器个数超过单帧最大请求寄存器个数,则根据该部分寄存器个数超过单帧最大请求寄存器个数的倍数进行等分式拆解。6.根据权利要求5所述的基于modbusrtu协议通信的高效点位采集方法,其特征在于,
如果指定部分寄存器个数超过单帧最大请求寄存器个数的一倍,但指定部分寄存器个数未超过单帧最大请求寄存器个数的两倍,则将该部分寄存器拆分成相同数量的两部分;如果指定部分寄存器个数超过单帧最大请求寄存器个数的两倍,但指定部分寄存器个数未超过单帧最大请求寄存器个数的三倍,则将该部分寄存器拆分成相同数量的三部分。7.根据权利要求6所述的基于modbusrtu协议通信的高效点位采集方法,其特征在于,把所述第二map容器中储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令过程中:将每一个寄存器起始地址与寄存器个数的组合补足modbus外设地址、功能码以及crc16校验码。8.根据权利要求7所述的基于modbusrtu协议通信的高效点位采集方法,其特征在于,根据配置的发送帧间隔、失败重发次数、通信异常判断次数、故障重连间隔、超时判断参数,进行所述标准的modbus请求指令的收发及点位数据的采集。9.根据权利要求8所述的基于modbusrtu协议通信的高效点位采集方法,其特征在于,发送帧间隔为:每一帧之间发送的时间间隔;失败重发次数为:如果发送所述标准的modbus请求指令失败,需要重新发送所述标准的modbus请求指令的次数;通信异常判断次数为:超时次数判断为设备之间通信异常的次数;故障重连间隔为:如果发生了通信异常,到下一次尝试重新连接的时间间隔;超时判断为:发送一帧指令,等待回复的时间。10.基于modbusrtu协议通信的高效点位采集装置,采用权利要求1至9任一项所述的基于modbusrtu协议通信的高效点位采集方法,其特征在于,包括:配置数据处理模块,用于通过采集主机对下发的配置数据进行遍历,对所述配置数据创建sqlite数据库表,并将所述配置数据保存到所述sqlite数据库表中;第一次拆解处理模块,用于通过采集主机将所有保存的数据点位利用modbusrtu协议中的寄存器位置与设置的拆包寄存器地址间隔数进行第一次拆解,所述第一次拆解为不连续性拆解,将所述第一次拆解完成的每部分寄存器分别储存于对应的第一map容器中等待第二次拆解;第二次拆解处理模块,用于通过采集主机将所述第一次拆解之后的寄存器,根据设置的单帧最大请求寄存器个数进行所述第二次拆解,所述第二次拆解为等分式拆解,将所述第二次拆解完成的每部分寄存器起始地址和寄存器个数储存于对应的第二map容器中;指令组合包装模块,用于把所述第二map容器中储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令,并将所述标准的modbus请求指令储存于缓存中;数据采集模块,用于根据所述sqlite数据库表中的所述配置数据,进行所述标准的modbus请求指令的收发及点位数据的采集。

技术总结
基于modbusRTU协议通信的高效点位采集方法及装置,通过采集主机将所有保存的数据点位利用modbusRTU协议中的寄存器位置与设置的拆包寄存器地址间隔数进行第一次不连续性拆解,将第一次拆解完成的每部分寄存器分别储存于对应的第一Map容器中等待第二次拆解;通过采集主机将第一次拆解之后的寄存器,根据设置的单帧最大请求寄存器个数进行第二次等分式拆解,将第二次拆解完成的每部分寄存器起始地址和寄存器个数储存于对应的第二Map容器中;把储存的寄存器起始地址与寄存器个数的组合包装成标准的modbus请求指令;根据SQLite数据库表中的配置数据,进行指令的收发及点位数据的采集。本发明避免大量不必要的数据采集,大大提升整体采集的性能与效率,最大化避免资源浪费。费。费。


技术研发人员:姜宇 朱玉仓
受保护的技术使用者:北京众谊越泰科技有限公司
技术研发日:2023.05.06
技术公布日:2023/7/27
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐