Modbus通信内存优化方法、通信方法及相关装置与流程

文档序号:31770365发布日期:2022-10-12 06:30阅读:168来源:国知局
Modbus通信内存优化方法、通信方法及相关装置与流程
modbus通信内存优化方法、通信方法及相关装置
技术领域
1.本发明涉及数据处理领域,特别是涉及一种modbus通信内存优化方法、通信方法及相关装置。


背景技术:

2.modbus通信设计中,一般会为每种modbus数据模型开辟相应的65536个数据项的内存存储空间,建立内存空间与通信寻址空间1比1的映射关系,方便modbus数据项的存取。但是,实际应用中往往不会使用全部数据项,甚至只使用很少的数据项,这会使得内存空间被浪费了。尤其地,当系统要支持多路modbus通信且每个链路上的通信数据项都不多时,若按最大值分配内存,则会造成内存资源耗费大而又大量被浪费的现象。为了节约内存资源,需要在modbus通信设计中进行内存优化。
3.然而,现有技术中的modbus通信内存的优化设计没有充分利用内存每一位的存储能力,而且没有正确建立优化后的内存地址与寻址地址之间的关系,从而容易影响到modbus通信的正确工作。


技术实现要素:

4.有鉴于此,本发明提供一种modbus通信内存的优化方法,通过该方法,可以充分利用内存的存储能力,并正确建立内存地址与寻址地址之间的关系。
5.本发明还提供了一种modbus通信内存的优化装置,用以保证上述方法在实际中的实现及应用。
6.一种modbus通信数据内存优化方法,包括:
7.将modbus主站中每个通信点的信息存储至该通信点对应的信息单元中,各个所述信息单元组成通信点表;其中,每个所述信息单元包括多个字段,各个所述字段包含功能码字段、内存地址字段和寻址地址字段;
8.遍历所述通信点表中的各个信息单元,根据每个所述通信点对应的信息单元中的各个字段的值,确定每个所述通信点对应的modbus数据模型,并为与所述modbus主站对应的各个对端装置通信所需的每个所述modbus数据模型分配内存空间;
9.根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定每个通信点在其对应的modbus数据模型中的内存位置;
10.将每个所述通信点在其对应的modbus数据模型中的内存位置填写到该通信点对应的信息单元的内存地址字段中,以根据每个所述通信点对应的信息单元中的内存地址字段的值和预设的寻址地址字段的值,建立每个所述通信点的内存地址与寻址地址之间的映射。
11.可选的,所述信息单元中的多个字段还包含对端装置序号字段、通信方向字段和数据类型字段,所述根据每个所述通信点对应的信息单元中的各个字段的值,为与所述modbus主站对应的各个对端装置通信所需的每个所述modbus数据模型分配内存空间,包
括:
12.根据每个所述通信点对应的信息单元中的对端装置序号字段的值,确定每个所述通信点所在的对端装置;
13.根据每个所述通信点对应的信息单元中的通信方向字段的值,确定每个所述通信点的通信点性质,所述通信点性质为发送通信点或接收通信点;
14.根据每个所述通信点对应的信息单元中的数据类型字段的值,确定每个所述通信点在对应的modbus数据模型中需要占用的存储空间值,并累加该通信点所在对端装置的相应modbus数据模型的存储空间计数值,由此统计每个所述对端装置的每种modbus数据模型所需的存储空间,将该存储空间值作为该modbus数据模型所需的通信内存空间值;
15.根据各个所述通信点对应的modbus数据模型、各个所述通信点所在的对端装置、各个所述通信点的通信点性质,以及每个所述modbus数据模型所需的通信内存空间值,确定与每个所述对端装置通信所需的每个modbus数据模型需要的通信内存空间值,并为该modbus数据模型分配内存空间为所述通信内存空间值。
16.可选的,所述根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定每个通信点在其对应的modbus数据模型中的内存位置,包括:
17.获取所述通信点对应的modbus数据模型的通信点个数计数器当前统计得到的计数值;
18.若所述计数值为0,则确定所述通信点为其对应的modbus数据模型中的第一个通信点,则该通信点在其对应的modbus数据模型中的内存位置为0;
19.若所述计数值不为0,则获取所述modbus数据模型的内存位置标记单元值,并确定所述通信点在其对应的modbus数据模型中的内存位置为所述内存位置标记单元值。
20.一种通信处理方法,包括:
21.获取预先构建的modbus包,并根据所述modbus包的基础信息以及所述modbus包的功能码对应的modbus通信协议格式,构建所述modbus包对应的通讯包,所述modbus包由多个通信点组成;
22.当所述modbus包对应的功能码为写功能码时,将所述modbus包的各个通信点在对应的modbus数据模型内存中的值取出,并按modbus协议对应格式转换,将转换后的值填写至所述通讯包的输出值字段位置,得到所述通讯包对应的待发送通讯包;
23.向所述modbus主站的对端装置发送所述待发送通讯包,以使所述对端装置返回所述待发送通讯包对应的应答包;
24.接收并解析所述应答包,得到通信处理结果,完成通信处理过程。
25.可选的,还包括:
26.当所述modbus包对应的功能码为读功能码时,根据所述modbus协议向所述对端发送所述通讯包,以使所述对端返回所述通讯包对应的应答包;
27.接收并解析所述应答包,将所述应答包中的数据值字段的值按照所述modbus协议对应格式转换,将转换后得到的值填写至所述modbus包的各个通信点对应的modbus数据模型内存中,完成通信处理过程。
28.可选的,所述将所述modbus包的各个通信点在对应的modbus数据模型内存中的值取出,并按modbus协议对应格式转换,将转换后得到的值填写至所述通讯包的输出值字段
位置,包括:
29.确定所述modbus包中的本包首个通信点的内存地址的字段的值为通信数据取址首地址;
30.将所述modbus包的本包输入离散量/线圈/输入寄存器/保持寄存器个数字段的值作为读取存储空间长度值,并从所述通信数据取址首地址指向的连续内存空间中取出长度满足所述读取存储空间长度值的数据作为通信值,并将所述通信值按照所述modbus协议对应格式转换,将转换后的值填写至所述通讯包的输出值字段位置。
31.可选的,所述将所述应答包中的数据值字段的值按照所述modbus协议对应格式转换,将转换后的值填写至所述modbus包的各个通信点对应的modbus数据模型内存中,包括:
32.确定所述modbus包中的本包首个通信点的内存地址字段的值为通信数据存放首地址;
33.确定所述应答包中的数据值字段的值作为应答数据,并将所述modbus包的本包输入离散量/线圈/输入寄存器/保持寄存器个数字段的值作为读入储存空间长度值,将长度满足所述读入储存空间长度值的所述应答数值按照所述modbus协议对应格式转换,将转换后得到的值写入所述通信数据存放首地址指向的连续的内存位置中。
34.可选的,所述modbus包的构建过程,包括:
35.将多个功能码相同的通信点组合形成modbus包,并确定所述功能码为所述modbus包的功能码;
36.将组成所述modbus包的第一个通信点对应的通信点表信息单元中的寻址地址字段的值确定为该modbus包的本包首个通信点的寻址地址字段的值,并将该通信点对应的通信点表信息单元中的内存地址字段的值确定为该modbus包的本包首个通信点的内存地址字段的值;
37.统计所述modbus包中每个通信点所需的modbus数据模型内存空间值,得到该modbus包在通信时所需的modbus数据模型内存空间值,该值即为所述modbus包的输入离散量/线圈/输入寄存器/保持寄存器个数字段的值。
38.一种modbus通信数据内存优化装置,包括:
39.第一执行单元,用于将modbus主站中每个通信点的信息存储至该通信点对应的信息单元中,各个所述信息单元组成通信点表;其中,每个所述信息单元包括多个字段,各个所述字段包含功能码字段、内存地址字段和寻址地址字段;
40.第一确定单元,用于遍历所述通信点表中的各个信息单元,根据每个所述通信点对应的信息单元中的各个字段的值,确定每个所述通信点对应的modbus数据模型,并为与所述modbus主站对应的各个对端装置通信所需的每个所述modbus数据模型分配内存空间;
41.第二确定单元,用于根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定每个通信点在其对应的modbus数据模型中的内存位置;
42.第二执行单元,用于将每个所述通信点在其对应的modbus数据模型中的内存位置填写到该通信点对应的信息单元的内存地址字段中,以根据每个所述通信点对应的信息单元中的内存地址字段的值和预设的寻址地址字段的值,建立每个所述通信点的内存地址与寻址地址之间的映射。
43.一种通信处理装置,包括:
44.获取单元,用于获取预先构建的modbus包,并根据所述modbus包的基础信息以及所述modbus包的功能码对应的modbus通信协议格式,构建所述modbus包对应的通讯包,所述modbus包由多个通信点组成;
45.操作单元,用于当所述modbus包对应的功能码为写功能码时,将所述modbus包的各个通信点在对应的modbus数据模型内存中的值取出,并按modbus协议对应格式转换,将转换后的值填写至所述通讯包的输出值字段位置,得到所述通讯包对应的待发送通讯包;
46.发送单元,用于向所述modbus主站的对端发送所述待发送通讯包,以使所述对端返回所述待发送通讯包对应的应答包;
47.解析单元,用于接收并解析所述应答包,得到通信处理结果,完成通信处理过程。
48.一种存储介质,所述存储介质包括存储的指令,其中,在所述指令运行时控制所述存储介质所在的设备执行上述的modbus通信数据内存优化方法。
49.一种电子设备,包括存储器,以及一个或者一个以上的指令,其中一个或者一个以上指令存储于存储器中,且经配置以由一个或者一个以上处理器执行上述的modbus通信数据内存优化方法。
50.与现有技术相比,本发明包括以下优点:
51.基于本发明提供的实施例,在进行modbus通信内存优化的过程中,将modbus主站中每个通信点的信息存储至该通信点对应的信息单元中,各个所述信息单元组成通信点表;其中,每个信息单元包括多个字段,各个字段包含功能码字段、内存地址字段和寻址地址字段;遍历通信点表中的各个信息单元,根据每个通信点对应的信息单元中的各个字段的值,确定每个通信点对应的modbus数据模型,并为与modbus主站对应的各个对端装置通信所需的每个modbus数据模型分配内存空间;根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定每个通信点在其对应的modbus数据模型中的内存位置;将每个通信点在其对应的modbus数据模型中的内存位置填写到该通信点对应的信息单元的内存地址字段中,以根据每个通信点对应的信息单元中的内存地址字段的值和预设的寻址地址字段的值,建立每个通信点的内存地址与寻址地址之间的映射。
52.应用本发明提供的modbus主站通信数据内存使用优化方法,能够按照每个modbus链路的每个通信点实际使用的modbus数据模型内存空间来分配通信内存,并建立每个通信点在其modbus数据模型中的内存地址与其modbus通信寻址地址之间的映射,在满足modbus通信要求基础上,可以实现modbus通信内存分配和使用优化,解决内存空位问题,避免内存浪费,充分利用内存空间。
附图说明
53.图1为本发明实施例提供的一种modbus通信数据内存优化方法的方法流程图;
54.图2为本发明实施例提供的一种modbus通信数据内存优化方法的又一方法流程图;
55.图3为本发明实施例提供的一种modbus通信数据内存优化方法的再一方法流程图;
56.图4为本发明实施例提供的一种modbus通信数据内存优化方法的另一方法流程图;
57.图5为本发明实施例提供的一种modbus通信数据内存优化装置的装置结构图;
58.图6为本发明实施例提供的一种电子设备结构示意图。
具体实施方式
59.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
60.在本技术中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
61.本发明可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。
62.本发明实施例提供了一种modbus通信数据内存优化方法,该方法可以应用在多种系统平台,其执行主体可以为计算机终端或各种移动设备的处理器,所述方法的方法流程图如图1所示,具体包括:
63.s101:将modbus主站中每个通信点的信息存储至该通信点对应的信息单元中,各个所述信息单元组成通信点表。
64.其中,每个所述信息单元包括多个字段,各个所述字段包含功能码字段、内存地址字段和寻址地址字段。
65.本发明提供的实施例中,将组态的modbus通信点的信息读取到modbus通信点表信息单元中。组态的modbus通信点的信息包括数据类型、通信方向(即是发送还是接收)、对端装置序号(即对端的rtu子设备号/tcp链路序号)、功能码、在modbus协议中的输入离散量/线圈/输入寄存器/保持寄存器通信寻址地址。
66.modbus通信点表具体的单个信息单元的结构如表1所示:
67.数据类型通信方向(发送/接收)功能码对端装置序号寻址地址内存地址
68.表1
69.将组态的通信点信息中的数据类型、通信方向、功能码、对端的rtu子设备号/tcp链路序号、在modbus协议中的输入离散量/线圈/输入寄存器/保持寄存器通信寻址地址等
rtu子设备/tcp链路上的通信也就可以有多种modbus数据模型的通信。一个通信点对应唯一的一种数据模型,因此,遍历所述通信点表,确定每个通信点所在对端装置,根据每个所述通信点的功能码确定每个通信点对应的modbus数据模型,根据每个所述通信点的数据类型确定每个所述通信点的数据长度,从而可以确定所述通信点在对应的对端装置的相应modbus数据模型中,需要多少存储空间才能存放进去,并累加该通信点所在对端装置的相应modbus数据模型的存储空间,由此统计出每个对端装置下的每种modbus数据模型所需的内存大小,并分配每个对端装置下的每种modbus数据模型的内存。
81.应用本发明提供的实施例,通过统计每个对端装置下每种modbus数据模型所占用的通信内存空间,为每个对端装置下每种modbus数据模型分配对应的内存空间,在满足modbus通信要求基础上,按需分配内存,能够大大减少modbus通信内存使用,并避免内存浪费。
82.s103:根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定每个通信点在其对应的modbus数据模型中的内存位置。
83.本发明提供的实施例中,根据modbus数据模型的当前已统计的通信点个数以及内存位置标记单元的值,可以在modbus数据模型存在的内存基础上,确定每个通信点在其对应的modbus数据模型中的内存位置。
84.具体的,如图3所示,所述根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定该通信点在其对应的modbus数据模型中的内存位置,包括:
85.s301:获取所述通信点对应的modbus数据模型的通信点个数计数器当前统计的计数值。
86.本发明提供的实施例中,为每个modbus主站的对端装置中的每种modbus数据模型分别配置通信点个数计数器,初始值为0,用于统计每个对端装置的每种modbus数据模型中包含的modbus通信点个数;并为每个对端装置的每种modbus数据模型分别生成内存位置标记单元,初始值为0,用于标记每个modbus通信点在其对应的modbus数据模型中的内存位置。
87.因此,确定一个通信点在其对应的modbus数据模型中的内存位置,需要先获取当前通信点对应的modbus数据模型的通信点个数计数器当前统计的计数值。
88.s302:判断所述计数值是否为0。
89.若所述计数值为0,则执行s303,否则执行s304。
90.s303:确定所述通信点在其对应的modbus数据模型中的内存位置为0。
91.如果计数值为0,则该通信点是其对应的modbus数据模型的第一个通信点,此时该通信点对应的modbus数据模型的内存位置标记单元的值即为初始值0,即该通信点在其对应的modbus数据模型中的内存位置为0。
92.s304:获取所述modbus数据模型的内存位置标记单元值,并确定所述通信点在其对应的modbus数据模型中的内存位置为所述内存位置标记单元值。
93.若所述计数值不为0,则获取该通信点对应的modbus数据模型的内存位置标记单元值,将该值作为所述通信点在其对应的modbus数据模型中的内存位置。
94.根据上述得到的通信点在其对应的modbus数据模型中的内存位置后,将该通信点对应的modbus数据模型的通信点个数计数器的值累加1,并将该通信点对应的modbus数据
模型的内存位置标记单元的值累加为该通信点在modbus数据模型中需要占用的存放空间大小。
95.应用本发明提供的实施例,通过获取modbus数据模型的当前已统计的通信点个数以及内存位置标记单元的值,为通信点确定其在对应的modbus数据模型中的内存位置,各个通信点在modbus数据模型内存中紧密排列,从而能够将modbus数据模型中的内存空间进行充分地利用。
96.s104:将每个所述通信点在其对应的modbus数据模型中的内存位置填写到该通信点对应的信息单元的内存地址字段中,以根据每个所述通信点对应的信息单元中的内存地址字段的值和预设的寻址地址字段的值,建立每个所述通信点的内存地址与寻址地址之间的映射。
97.本发明提供的实施例中,将该通信点对应的modbus数据模型的内存位置标记单元的值填写到该通信点对应的信息单元的内存地址字段中,并根据预设的寻址地址中的值,建立modbus通信点的内存地址与通信寻址地址之间的映射。
98.基于本发明提供的实施例,在进行modbus通信内存优化的过程中,将modbus主站中每个通信点的信息存储至该通信点对应的信息单元中,各个所述信息单元组成通信点表;其中,每个信息单元包括多个字段,各个字段包含功能码字段、内存地址字段和寻址地址字段;遍历通信点表中的各个信息单元,根据每个通信点对应的信息单元中的各个字段的值,确定每个通信点对应的modbus数据模型,并为与modbus主站对应的各个对端装置通信所需的每个modbus数据模型分配内存空间;根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定每个通信点在其对应的modbus数据模型中的内存位置;将每个通信点在其对应的modbus数据模型中的内存位置填写到该通信点对应的信息单元的内存地址字段中,以根据每个通信点对应的信息单元中的内存地址字段的值和预设的寻址地址字段的值,建立每个通信点的内存地址与寻址地址之间的映射。
99.应用本发明提供的modbus主站通信数据内存使用优化方法,按照每个modbus链路的每个通信点实际使用的modbus数据模型内存空间分配通信内存,并建立该通信点在其modbus数据模型中的内存地址与其modbus通信寻址地址之间的映射,在满足modbus通信要求基础上,可以实现modbus通信内存分配和使用优化,解决内存空位问题,避免内存浪费,充分利用内存空间。
100.本发明提供的实施例中,如图4所示,基于modbus通信数据内存优化的方法,执行modbus主站通信处理的过程,包括:
101.s401:获取预先构建的modbus包,并根据所述modbus包的基础信息以及所述modbus包的功能码对应的modbus通信协议格式,构建所述modbus包对应的通讯包。
102.需要说明的是,根据预先设定的modbus分包算法构建并统计modbus主站的每个对端装置下的modbus通讯包数量与信息,每个modbus包由多个通信点组成。通讯包是装置在通信时实际发送的数据包,每个modbus包对应一个通讯包,通讯包的内容需要根据这个包对应的modbus包的基础信息结构来组织。
103.其中,所述modbus包的构建过程,包括:
104.将多个功能码相同的通信点组合形成modbus包,并确定所述功能码为所述modbus包的功能码;
105.将组成所述modbus包的第一个通信点对应的通信点表信息单元中的寻址地址字段的值确定为该modbus包的首个通信点的寻址地址字段的值,并将该通信点对应的通信点表信息单元中的内存地址字段的值确定为该modbus包的首个通信点的内存地址字段的值;
106.统计所述modbus包中每个通信点所需的modbus数据模型内存空间值,得到该modbus包在通信时所需的modbus数据模型内存空间值,该值即为所述modbus包的输入离散量/线圈/输入寄存器/保持寄存器个数字段的值。
107.具体的,预先构建modbus包信息表,modbus包信息表中的各个modbus包单元里,单个modbus包基础信息的结构如表2所示,单个modbus包基础信息给出了组包与填充通讯包时所需要的必要信息。
108.表2
109.在modbus通信分包过程中,当产生新的modbus包时,除了需要记录新包的功能码、输入离散量/线圈/输入寄存器/保持寄存器个数外,还需要将modbus包第一个通信点对应的信息单元中的寻址地址填写到本包信息结构中的首个通信点的寻址地址字段中,将新包第一个通信点对应的信息单元中的内存地址填写到本包信息结构中的本包首个通信点的内存地址字段中。本包输入离散量/线圈/输入寄存器/保持寄存器个数根据modbus包中各个通信点所需的modbus数据模型内存空间的累加值计算得出。
110.其中,输入离散量、线圈、保持寄存器、输入寄存器是四种不同的modbus数据模型,modbus包中只有离散量/线圈/输入寄存器/保持寄存器其中任意一种对应的modbus数据模型。
111.应用本发明提供的实施例,在modbus通信时初始化modbus包,确定modbus包的功能码、本包输入离散量/线圈/输入寄存器/保持寄存器个数、起始内存地址和起始寻址地址,并且只在通信初始化期间执行一次,具有较高的处理效率,有效地节省了modbus周期通信的处理时间,提高了modbus周期通信的效率。
112.s402:当所述modbus包对应的功能码为写功能码时,将所述modbus包的各个通信点在对应的modbus数据模型内存中的值取出,并按modbus协议对应格式转换,将转换后得到的值填写至所述通讯包的输出值字段位置,得到所述通讯包对应的待发送通讯包。
113.本发明提供的实施例中,如果modbus包对应的功能码为写功能码,如5,6,15,16,则在根据modbus包构建modbus通讯包的基础上,还需要将modbus包的各个通信点对应的modbus数据模型内存中的值取出并按modbus协议要求转换,将转换后的值填写至所述通讯包的输出值字段,也即“输出值”/“寄存器值”字段位置上,从而得到待发送通讯包。
114.需要说明的是,根据modbus包构建modbus通讯包,可以包括以下步骤:
115.如果通讯包的协议格式涉及“地址”字段,则将modbus包的“本包第一个通信点的寻址地址”字段内容填写到通讯包的“地址”字段中;
116.将modbus包的“功能码”字段填写到通讯包的“功能码”字段中;
117.如果通讯包的协议格式涉及“数量”字段,则将modbus包的“本包输入离散量/线
圈/输入寄存器/保持寄存器个数”字段内容填写到通讯包的“数量”字段中;
118.如果通讯包的协议格式涉及“字节计数”字段,则将modbus包的“本包输入离散量/线圈/输入寄存器/保持寄存器个数”字段内容按照modbus协议要求计算后,填写到通讯包的“字节计数”字段中。
119.具体的,所述将所述modbus包的各个通信点在对应的modbus数据模型内存中的值取出,按modbus协议对应格式转换,将转换后的值填写至所述通讯包的输出值字段位置,得到所述通讯包对应的待发送通讯包,包括:
120.确定所述modbus包中的首个通信点的内存地址的字段的值为通信数据取址首地址;
121.将所述modbus包的本包输入离散量/线圈/输入寄存器/保持寄存器个数字段的值作为读取存储空间长度值,并从所述通信数据取址首地址指向的位置连续的内存中取出长度满足所述读取存储空间长度值的数据作为通信值,并将所述通信值按照所述modbus协议对应格式转换,将转换后得到的值填写至所述通讯包的输出值字段位置。
122.可以理解的是,基于所述通信数据取址首地址,将所述modbus包的“本包输入离散量/线圈/输入寄存器/保持寄存器个数”的值作为取出数值所占的空间值大小,一次性连续地从所述通信数据取址首地址指向的内存中取出位置连续的满足读取存储空间值大小的数值,作为通信数值,并将所述通信数值按照所述modbus协议要求转换,将转换后的值填写至所述通讯包的“输出值”/“寄存器值”位置上。s403:向所述modbus主站的对端装置发送所述待发送通讯包,以使所述对端装置返回所述待发送通讯包对应的应答包。
123.向modbus主站的对端装置发送所述待发送通讯包,所述对端装置根据该待发送通讯包执行相关操作,将待发送通讯包中的值写入该对端装置的相应位置,并根据执行结果生成所述待发送通讯包对应的应答包,最后所述向modbus主站返回所述应答包。
124.其中,根据通讯包对应的modbus包中的各个通信点对应的单元信息中的对端装置序号字段的值,可以确定由modbus主站发出的该通讯包的需要发送到的各个对端装置。
125.s404:接收并解析所述应答包,得到通信处理结果,完成通信处理过程。
126.modbus主站接收对端装置发送回来的应答包,解析该应答包,写功能码对应的解析,按照modbus协议进行处理即可,无需特殊操作。解析后得到modbus主站发送数据到对端上的操作的通信处理结果,从而完成该通信处理过程。
127.本发明提供的实施例中,基于modbus通信数据内存优化的方法,执行modbus主站通信处理的过程,还包括:
128.当所述modbus包对应的功能码为读功能码时,根据所述modbus协议向所述对端发送所述通讯包,以使所述对端返回所述通讯包对应的应答包;接收并解析所述应答包,将所述应答包中的数据值字段的值按modbus协议对应格式转换,将转换后得到的值填写至所述modbus包的各个通信点对应的modbus数据模型内存中,完成通信处理过程。
129.本发明提供的实施例中,若所述modbus包对应的功能码为读功能码,则根据modbus包的功能码,确定该通讯包的modbus通信协议格式,并根据modbus包的基础信息构建读功能码对应的modbus通讯包,具体的:
130.如果通讯包的协议格式涉及“地址”字段,则将modbus包的“本包第一个通信点的寻址地址”字段内容填写到通讯包的“地址”字段中;
131.将modbus包的“功能码”字段填写到通讯包的“功能码”字段中;
132.将modbus包的“本包输入离散量/线圈/输入寄存器/保持寄存器个数”字段填写到通讯包的“输入离散量/线圈/输入寄存器/保持寄存器数量”字段中。
133.向modbus主站的对端发送所述待发送该通讯包,所述对端根据通讯包执行相关操作,根据通讯包的信息,确定modbus主站需要读取的信息,并根据modbus主站需要读取的信息,生成相应的应答包。modbus主站接收对端装置发回的应答包,并解析该应答包,将应答包中的数据值字段内容按modbus协议要求转换,将转换后的值填写到所述通讯包对应的modbus包的各个通信点对应的modbus数据模型内存中,完成读取对端信息的通信处理过程。
134.本发明提供的实施例中,所述将所述应答包中的数据值字段的值按照所述modbus协议对应格式转换,将转换后的值填写至所述modbus包的各个通信点对应的modbus数据模型内存中,包括:
135.确定所述modbus包中的本包首个通信点的内存地址字段的值为通信数据存放首地址;
136.确定所述应答包中的数据值字段的值作为应答数值,并将所述modbus包的本包输入离散量/线圈/输入寄存器/保持寄存器个数字段的值作为要读入存储空间的长度值,将长度满足所述读入存储空间长度值的所述应答数值按照所述modbus协议对应格式转换,将转换后的值写入所述通信数据存放首地址指向的连续内存中。
137.具体的,先以通讯包对应的modbus包中的“本包首个通信点的内存地址”字段的值为通信数据存放首地址,并将modbus包对应的“本包输入离散量/线圈/输入寄存器/保持寄存器个数”的值作为读取数据的所占空间值大小,并基于通信数据存放首地址,将应答包中“线圈状态”、“输入状态”、“寄存器状态”、“输入寄存器”的数值作为应答数据,将数值长度满足读取数据的所占空间值大小的应答数据按照所述modbus协议要求转换,将得到的值一次性连续地填写到通信数据存放首地址指向的位置连续的内存中。
138.需要说明的是,modbus主站通信是一个周期处理的过程,这里的周期处理是指每隔一定时间,modbus主站就向其对端发送通讯包直至所有通讯包发送完成。
139.应用本发明提供的实施例,根据通讯过程中modbus主站向其他设备发送的modbus包的功能码不同,在modbus通讯内存优化的基础上,建立modbus包中起始modbus通信点的内存地址与通信寻址地址之间的映射,通过modbus包的起始内存地址和起始寻址地址执行“读”、“写”对应的操作,确保从modbus模型中取出正确的数据或将数据写入正确的位置,并且保障modbus通信正确的前提下不需要modbus从站进行任何改动,适用场景广泛。
140.上述各个实施例的具体实施过程及其衍生方式,均在本发明的保护范围之内。
141.与图1所述的方法相对应,本发明实施例还提供了一种modbus通信数据内存优化装置,用于对图1中方法的具体实现,本发明实施例提供的modbus通信数据内存优化装置可以应用计算机终端或各种移动设备中,其结构示意图如图5所示,具体包括:
142.第一执行单元501,用于将modbus主站中每个通信点的信息存储至该通信点对应的信息单元中,各个所述信息单元组成通信点表;其中,每个所述信息单元包括多个字段,各个所述字段包含功能码字段、内存地址字段和寻址地址字段;
143.第一确定单元502,用于遍历所述通信点表中的各个信息单元,根据每个所述通信
点对应的信息单元中的各个字段的值,确定每个所述通信点对应的modbus数据模型,并为与所述modbus主站对应的各个对端装置通信所需的每个所述modbus数据模型分配内存空间;
144.第二确定单元503,用于根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定每个通信点在其对应的modbus数据模型中的内存位置;
145.第二执行单元504,用于将每个所述通信点在其对应的modbus数据模型中的内存位置填写到该通信点对应的信息单元的内存地址字段中,以根据每个所述通信点对应的信息单元中的内存地址字段的值和预设的寻址地址字段的值,建立每个所述通信点的内存地址与寻址地址之间的映射。
146.基于本发明实施例提供的装置,在进行modbus通信内存优化的过程中,由第一执行单元将modbus主站中每个通信点的信息存储至该通信点对应的信息单元中,各个所述信息单元组成通信点表;其中,每个信息单元包括多个字段,各个字段包含功能码字段、内存地址字段和寻址地址字段;再由第一确定单元遍历通信点表中的各个信息单元,根据每个通信点对应的信息单元中的各个字段的值,确定每个通信点对应的modbus数据模型,并为与modbus主站对应的各个对端装置通信所需的每个modbus数据模型分配内存空间;第二确定单元根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定每个通信点在其对应的modbus数据模型中的内存位置;最后由第二执行单元将每个通信点在其对应的modbus数据模型中的内存位置填写到该通信点对应的信息单元的内存地址字段中,以根据每个通信点对应的信息单元中的内存地址字段的值和预设的寻址地址字段的值,建立每个通信点的内存地址与寻址地址之间的映射。
147.应用本发明实施例提供的modbus通信数据内存优化装置,能够按照每个modbus链路的每个通信点实际使用的modbus数据模型内存数量分配通信内存,并建立该通信点在其modbus数据模型中的内存地址与其modbus通信寻址地址之间的映射,在满足modbus通信要求基础上,可以实现modbus通信内存分配和使用优化,解决内存空位问题,避免内存浪费,充分利用内存空间。
148.以上本发明实施例公开的modbus通信数据内存优化装置中各个单元及子单元的具体工作过程,可参见本发明上述实施例公开的modbus通信数据内存优化方法中的对应内容,这里不再进行赘述。
149.本发明提供的实施例中,基于modbus通信数据内存优化的装置,还可以得到通信处理装置,包括:
150.获取单元,用于获取预先构建的modbus包,并根据所述modbus包的基础信息以及所述modbus包的功能码对应的modbus通信协议格式,构建所述modbus包对应的通讯包,所述modbus包由多个通信点组成;
151.操作单元,用于当所述modbus包对应的功能码为写功能码时,将所述modbus包的各个通信点在对应的modbus数据模型内存中的值按modbus协议对应格式转换后得到的值填写至所述通讯包的输出值字段位置,得到所述通讯包对应的待发送通讯包;
152.发送单元,用于向所述modbus主站的对端发送所述待发送通讯包,以使所述对端返回所述待发送通讯包对应的应答包;
153.解析单元,若接收的应答包对应的功能码为写功能码,则接收并解析所述应答包,
得到通信处理结果,完成通信处理过程。若接收的应答包对应的功能码为读功能码,则接收并解析所述应答包,将所述应答包中的数据值字段的值按照所述modbus协议对应格式转换,后将转换后得到的值填写至所述modbus包的各个通信点对应的modbus数据模型内存中,完成通信处理过程。
154.本发明实施例还提供了一种存储介质,所述存储介质包括存储的指令,其中,在所述指令运行时控制所述存储介质所在的设备执行上述modbus通信数据内存优化方法。
155.本发明实施例还提供了一种电子设备,其结构示意图如图6所示,具体包括存储器601,以及一个或者一个以上的指令602,其中一个或者一个以上指令602存储于存储器601中,且经配置以由一个或者一个以上处理器603执行所述一个或者一个以上指令602进行以下操作:
156.将modbus主站中每个通信点的信息存储至该通信点对应的信息单元中,各个所述信息单元组成通信点表;其中,每个所述信息单元包括多个字段,各个所述字段包含功能码字段、内存地址字段和寻址地址字段;
157.遍历所述通信点表中的各个信息单元,根据每个所述通信点对应的信息单元中的各个字段的值,确定每个所述通信点对应的modbus数据模型,并为与所述modbus主站对应的各个对端装置通信所需的每个所述modbus数据模型分配内存空间;
158.根据modbus数据模型的当前已统计的通信点个数和内存位置标记单元值,确定每个通信点在其对应的modbus数据模型中的内存位置;
159.将每个所述通信点在其对应的modbus数据模型中的内存位置填写到该通信点对应的信息单元的内存地址字段中,以根据每个所述通信点对应的信息单元中的内存地址字段的值和预设的寻址地址字段的值,建立每个所述通信点的内存地址与寻址地址之间的映射。
160.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
161.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现。
162.为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
163.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明
将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1