在Modbus通信网络中传输报文的方法、Modbus通信网络系统和设备转让专利

申请号 : CN201711483731.6

文献号 : CN107896234B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 徐珺

申请人 : 北京东土科技股份有限公司

摘要 :

本发明实施例公开了一种在Modbus通信网络中传输报文的方法、Modbus通信网络和设备。本发明实施例在Modbus通信网络中传输报文的方法,包括:主节点设备的初始化模块根据主节点设备的配置信息确定主节点设备中启用的协议组帧模块和传输模块,以及从节点设备的初始化模块根据从节点设备的配置信息确定从节点设备中启用的协议组帧模块;当获取待传输报文时,主节点设备启用的协议组帧模块将传输报文组帧,并通过主节点设备启用的传输模块向从节点设备发送组帧后的报文;从节点设备启用的传输模块接收到组帧后的报文后,从节点设备启用的协议组帧模块根据本模块定义的解析方式解析组帧后的报文。本发明实施例降低Modbus协议栈的实现复杂度和开发难度。

权利要求 :

1.一种在Modbus通信网络中传输报文的方法,其特征在于,包括:

主节点设备的初始化模块根据所述主节点设备的配置信息确定所述主节点设备中启用的协议组帧模块和传输模块,以及从节点设备的初始化模块根据所述从节点设备的配置信息确定所述从节点设备中启用的协议组帧模块,其中,各设备中包括多个协议组帧模块和多个传输模块,每个协议组帧模块定义一种Modbus协议类型的组帧方式且每个协议组帧模块定义的组帧方式各不相同,每个传输模块定义一种传输协议且每个传输模块定义的传输协议各不相同;

当所述主节点设备启用的所述协议组帧模块获取待传输报文时,所述主节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的从节点设备地址,并通过所述主节点设备启用的所述传输模块根据本模块定义的传输协议向所述从节点设备发送所述组帧后的报文;

所述从节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述从节点设备启用的所述协议组帧模块,所述从节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。

2.根据权利要求1所述的方法,其特征在于,在所述主节点设备的初始化模块对所述主节点设备进行初始化和所述从节点设备的初始化模块对所述从节点设备进行初始化之后,还包括:当所述从节点设备启用的所述协议组帧模块获取待传输报文时,所述从节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的主节点设备地址,并通过所述从节点设备启用的所述传输模块根据本模块定义的传输协议向所述主节点设备发送所述组帧后的报文;

所述主节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述主节点设备启用的所述协议组帧模块,所述主节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。

3.根据权利要求1或2所述的方法,其特征在于,在所述主节点设备的初始化模块对所述主节点设备进行初始化和所述从节点设备的初始化模块对所述从节点设备进行初始化之前,还包括:在各设备中根据所述Modbus通信网络支持的Modbus协议类型创建所述多个协议组帧模块,并根据所述Modbus通信网络支持的传输协议创建所述多个传输模块,所述各设备包括所述主节点设备和所述从节点设备。

4.根据权利要求2所述的方法,其特征在于,在所述从节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧之前,还包括:当所述从节点设备启用的所述传输模块监听到来自主节点设备的连接请求时,所述从节点设备启用的所述传输模块创建与所述主节点设备的连接和连接号handle_ID,并将所述handle_ID告知所述从节点设备启用的所述协议组帧模块;

所述从节点设备启用的所述协议组帧模块通过所述handle_ID区分接收到的报文来自的主节点设备,并且通过所述handle_ID向所述报文来自的主节点设备发送反馈报文。

5.根据权利要求4所述的方法,其特征在于,所述方法还包括:

当所述从节点设备启用的所述传输模块确定与主节点设备之间的连接失效时,所述从节点设备启用的所述传输模块释放所述连接的资源,将与所述连接对应的连接号handle_ID置为关闭,并告知所述从节点设备启用的所述协议组帧模块所述handle_ID被关闭。

6.根据权利要求1或2所述的方法,其特征在于,启用的传输模块根据本模块定义的传输协议发送所述组帧后的报文,包括:所述启用的传输模块根据本模块定义的传输协议调用相应硬件的硬件驱动,以驱动所述硬件发送所述组帧后的报文。

7.一种Modbus通信网络系统,其特征在于,包括:主节点设备和从节点设备,其中,各设备中包括多个协议组帧模块和多个传输模块,每个协议组帧模块定义一种Modbus协议类型的组帧方式且每个协议组帧模块定义的组帧方式各不相同,每个传输模块定义一种传输协议且每个传输模块定义的传输协议各不相同;

其中,所述主节点设备用于通过初始化模块根据配置信息确定启用的协议组帧模块和传输模块;

所述从节点设备用于通过初始化模块根据配置信息确定启用的协议组帧模块和传输模块;

所述主节点设备还用于当通过所述主节点设备启用的所述协议组帧模块获取待传输报文时,通过所述主节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的从节点设备地址,并通过所述主节点设备启用的所述传输模块根据本模块定义的传输协议向所述从节点设备发送组帧后的报文;

所述从节点设备还用于通过所述从节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述从节点设备启用的所述协议组帧模块,再通过所述从节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。

8.根据权利要求7所述的Modbus通信网络系统,其特征在于,所述从节点设备还用于当通过所述从节点设备启用的所述协议组帧模块获取待传输报文时,通过所述从节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的主节点设备地址,并通过所述从节点设备启用的所述传输模块根据本模块定义的传输协议向所述主节点设备发送所述组帧后的报文;

所述主节点设备还用于通过所述主节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述主节点设备启用的所述协议组帧模块,再通过所述主节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。

9.根据权利要求7或8所述的Modbus通信网络系统,其特征在于,各设备用于根据所述Modbus通信网络支持的Modbus协议类型创建所述多个协议组帧模块,并根据所述Modbus通信网络支持的传输协议创建所述多个传输模块,所述各设备包括所述主节点设备和所述从节点设备。

10.根据权利要求8所述的Modbus通信网络系统,其特征在于,所述从节点设备还用于当通过所述从节点设备启用的所述传输模块监听到来自主节点设备的连接请求时,通过所述从节点设备启用的所述传输模块创建与所述主节点设备的连接和连接号handle_ID,并将所述handle_ID告知所述从节点设备启用的所述协议组帧模块;通过所述从节点设备启用的所述协议组帧模块通过所述handle_ID区分接收到的报文来自的主节点设备,并且通过所述handle_ID向所述报文来自的主节点设备发送反馈报文。

11.根据权利要求10所述的Modbus通信网络系统,其特征在于,所述从节点设备还用于当通过所述从节点设备启用的所述传输模块确定与主节点设备之间的连接失效时,通过所述从节点设备启用的所述传输模块释放所述连接的资源,将与所述连接对应的连接号handle_ID置为关闭,并告知所述从节点设备启用的所述协议组帧模块所述handle_ID被关闭。

12.根据权利要求7或8所述的Modbus通信网络系统,其特征在于,各设备用于通过启用的传输模块根据本模块定义的传输协议调用相应硬件的硬件驱动,以驱动所述硬件发送所述组帧后的报文,所述各设备包括所述主节点设备和所述从节点设备。

13.一种在Modbus通信网络中传输报文的设备,其特征在于,所述设备包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的主节点设备或者从节点设备的在Modbus通信网络中传输报文的方法。

14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一所述的主节点设备或者从节点设备的在Modbus通信网络中传输报文的方法。

说明书 :

在Modbus通信网络中传输报文的方法、Modbus通信网络系统

和设备

技术领域

[0001] 本发明实施例涉及通信技术,尤其涉及一种在Modbus通信网络中传输报文的方法、Modbus通信网络系统和设备。

背景技术

[0002] Modbus协议是全球第一个真正用于工业现场的总线协议,在工控行业使用广泛,包括ModbusRTU,ModbusTCP和ModbusASCII。ModbusASCII报文可以通过串口,例如RS232/RS422/RS485来传输,也可以通过以太网传输,也可以通过GPRS传输,也可以通过ZigBee传输;ModbusRTU可以通过串口,例如RS232/RS422/RS485来传输,也可以通过以太网传输,也可以通过GPRS传输,也可以通过ZigBee传输;同样,ModbusTCP可以通过串口,例如RS232/RS422/RS485来传输,也可以通过以太网传输,也可以通过GPRS传输,也可以通过ZigBee传输。
[0003] 目前设计Modbus协议栈实现代码的方法是,针对通过串口传输ModbusASCII报文的模式设计实现代码,针对通过串口传输ModbusRTU报文的模式设计实现代码,针对通过GPRS传输ModbusRTU报文的模式设计实现代码,针对通过ZigBee传输ModbusRTU报文的模式设计实现代码,针对通过以太网传输ModbusTCP报文设计实现代码,以此类推,也就是针对一种模式设计一段代码。
[0004] 发明人在实现本发明的过程中发现:这样的设计方法,不仅代码设计重复率很高,而且,还需对设备的代码进行更新,例如,设备采用的是通过串口传输ModbusRTU报文,如果要更换为通过GPRS传输ModbusRTU报文,则设计人员需要重新设计通过GPRS传输ModbusRTU报文的设计代码,然后设备再加载通过GPRS传输ModbusRTU报文的设计代码。另外,随着硬件设备的多样化和传输方式的多样化,会出现新的传输方式,这样更换和需求越来越多,需要设计新代码。

发明内容

[0005] 本发明实施例提供一种在Modbus通信网络中传输报文的方法、Modbus通信网络系统和设备,以降低Modbus协议栈的实现复杂度和开发难度,减少代码的重复设计,提高设计效率。
[0006] 第一方面,本发明实施例提供了一种在Modbus通信网络中传输报文的方法,包括:
[0007] 主节点设备的初始化模块根据所述主节点设备的配置信息确定所述主节点设备中启用的协议组帧模块和传输模块,以及从节点设备的初始化模块根据所述从节点设备的配置信息确定所述从节点设备中启用的协议组帧模块,其中,各设备中包括多个协议组帧模块和多个传输模块,每个协议组帧模块定义一种Modbus协议类型的组帧方式且每个协议组帧模块定义的组帧方式各不相同,每个传输模块定义一种传输协议且每个传输模块定义的传输协议各不相同;
[0008] 当所述主节点设备启用的所述协议组帧模块获取待传输报文时,所述主节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的从节点设备地址,并通过所述主节点设备启用的所述传输模块根据本模块定义的传输协议向所述从节点设备发送所述组帧后的报文;
[0009] 所述从节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述从节点设备启用的所述协议组帧模块,所述从节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。
[0010] 可选的,在所述主节点设备的初始化模块对所述主节点设备进行初始化和所述从节点设备的初始化模块对所述从节点设备进行初始化之后,还包括:
[0011] 当所述从节点设备启用的所述协议组帧模块获取待传输报文时,所述从节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的主节点设备地址,并通过所述从节点设备启用的所述传输模块根据本模块定义的传输协议向所述主节点设备发送所述组帧后的报文;
[0012] 所述主节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述主节点设备启用的所述协议组帧模块,所述主节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。
[0013] 可选的,在所述主节点设备的初始化模块对所述主节点设备进行初始化和所述从节点设备的初始化模块对所述从节点设备进行初始化之前,还包括:
[0014] 在各设备中根据所述Modbus通信网络支持的Modbus协议类型创建所述多个协议组帧模块,并根据所述Modbus通信网络支持的传输协议创建所述多个传输模块,所述各设备包括所述主节点设备和所述从节点设备。
[0015] 可选的,在所述从节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧之前,还包括:
[0016] 当所述从节点设备启用的所述传输模块监听到来自主节点设备的连接请求时,所述从节点设备启用的所述传输模块创建与所述主节点设备的连接和连接号handle_ID,并将所述handle_ID告知所述从节点设备启用的所述协议组帧模块;
[0017] 所述从节点设备启用的所述协议组帧模块通过所述handle_ID区分接收到的报文来自的主节点设备,并且通过所述handle_ID向所述报文来自的主节点设备发送反馈报文。
[0018] 可选的,所述方法还包括:
[0019] 当所述从节点设备启用的所述传输模块确定与主节点设备之间的连接失效时,所述从节点设备启用的所述传输模块释放所述连接的资源,将与所述连接对应的连接号handle_ID置为关闭,并告知所述从节点设备启用的所述协议组帧模块所述handle_ID被关闭。
[0020] 可选的,启用的传输模块根据本模块定义的传输协议发送所述组帧后的报文,包括:
[0021] 所述启用的传输模块根据本模块定义的传输协议调用相应硬件的硬件驱动,以驱动所述硬件发送所述组帧后的报文。
[0022] 第二方面,本发明实施例提供了一种Modbus通信网络系统,包括:主节点设备和从节点设备,其中,各设备中包括多个协议组帧模块和多个传输模块,每个协议组帧模块定义一种Modbus协议类型的组帧方式且每个协议组帧模块定义的组帧方式各不相同,每个传输模块定义一种传输协议且每个传输模块定义的传输协议各不相同;
[0023] 其中,所述主节点设备用于通过初始化模块根据配置信息确定启用的协议组帧模块和传输模块;
[0024] 所述从节点设备用于通过初始化模块根据配置信息确定启用的协议组帧模块和传输模块;
[0025] 所述主节点设备还用于当通过所述主节点设备启用的所述协议组帧模块获取待传输报文时,通过所述主节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的从节点设备地址,并通过所述主节点设备启用的所述传输模块根据本模块定义的传输协议向所述从节点设备发送组帧后的报文;
[0026] 所述从节点设备还用于通过所述从节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述从节点设备启用的所述协议组帧模块,再通过所述从节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。
[0027] 可选的,所述从节点设备还用于当通过所述从节点设备启用的所述协议组帧模块获取待传输报文时,通过所述从节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的主节点设备地址,并通过所述从节点设备启用的所述传输模块根据本模块定义的传输协议向所述主节点设备发送所述组帧后的报文;
[0028] 所述主节点设备还用于通过所述主节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述主节点设备启用的所述协议组帧模块,再通过所述主节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。
[0029] 可选的,各设备用于根据所述Modbus通信网络支持的Modbus协议类型创建所述多个协议组帧模块,并根据所述Modbus通信网络支持的传输协议创建所述多个传输模块,所述各设备包括所述主节点设备和所述从节点设备。
[0030] 可选的,所述从节点设备还用于当通过所述从节点设备启用的所述传输模块监听到来自主节点设备的连接请求时,通过所述从节点设备启用的所述传输模块创建与所述主节点设备的连接和连接号handle_ID,并将所述handle_ID告知所述从节点设备启用的所述协议组帧模块;通过所述从节点设备启用的所述协议组帧模块通过所述handle_ID区分接收到的报文来自的主节点设备,并且通过所述handle_ID向所述报文来自的主节点设备发送反馈报文。
[0031] 可选的,所述从节点设备还用于当通过所述从节点设备启用的所述传输模块确定与主节点设备之间的连接失效时,通过所述从节点设备启用的所述传输模块释放所述连接的资源,将与所述连接对应的连接号handle_ID置为关闭,并告知所述从节点设备启用的所述协议组帧模块所述handle_ID被关闭。
[0032] 可选的,各设备用于通过启用的传输模块根据本模块定义的传输协议调用相应硬件的硬件驱动,以驱动所述硬件发送所述组帧后的报文,所述各设备包括所述主节点设备和所述从节点设备。
[0033] 第三方面,本发明实施例提供了一种设备,所述设备包括:
[0034] 一个或多个处理器;
[0035] 存储装置,用于存储一个或多个程序;
[0036] 当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述第一方面任一所述的主节点设备或者从节点设备的在Modbus通信网络中传输报文的方法。
[0037] 第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面任一所述的主节点设备或者从节点设备的在Modbus通信网络中传输报文的方法。
[0038] 本发明实施例将多个Modbus协议和多个传输协议分别由不同的代码模块定义,在实例化时根据配置信息确定启用的协议组帧模块和传输模块,实现Modbus协议栈的灵活组合,解决了现有技术中需要针对不同的协议和不同的传输方式开发不同的协议栈,导致代码重复率高的问题,降低Modbus协议栈的实现复杂度和开发难度。而且随着硬件设备的多样化和传输方式的多样化,当出现新的传输方式,只需要增加新的传输方式的代码模块即可,减少代码的重新设计量。

附图说明

[0039] 图1为本发明实施例一提供的在Modbus通信网络中传输报文的方法的流程图;
[0040] 图2为本发明实施例一提供的Modbus协议栈模块组成示意图;
[0041] 图3为本发明实施例二提供的Modbus通信网络系统的结构示意图;
[0042] 图4为本发明实施例三提供的设备的结构示意图。

具体实施方式

[0043] 下面结合附图和实施例对本发明实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明实施例,而非对本发明实施例的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明实施例相关的部分而非全部结构。
[0044] 图1为本发明实施例一提供的在Modbus通信网络中传输报文的方法的流程图,具体包括如下步骤:
[0045] 步骤101、主节点设备的初始化模块根据主节点设备的配置信息确定主节点设备中启用的协议组帧模块和传输模块,以及从节点设备的初始化模块根据从节点设备的配置信息确定从节点设备中启用的协议组帧模块,其中,各设备中包括多个协议组帧模块和多个传输模块,每个协议组帧模块定义一种Modbus协议类型的组帧方式且每个协议组帧模块定义的组帧方式各不相同,每个传输模块定义一种传输协议且每个传输模块定义的传输协议各不相同;
[0046] Modbus通信网络是一个工业通信系统,由控制器和计算机通过公用线路或局部专用线路连接而成,可应用于各种数据采集和过程监控。Modbus协议栈的代码除了定义数据组帧、打包和解析方式,还定义了报文收发的相关信息,例如,针对通过串口传输ModbusRTU报文的模式设计实现代码,针对通过以太网传输ModbusRTU报文的模式设计实现代码,针对通过串口传输ModbusTCP报文的模式设计实现代码,针对通过以太网传输ModbusTCP报文设计实现代码。
[0047] Modbus通信网络支持的Modbus协议类型包括ModbusRTU,ModbusTCP和ModbusASCII,支持的传输协议包括串口传输、以太网传输、GPRS传输和ZigBee传输,以太网传输分为TCP传输和UDP传输。本实施例中各设备(即Modbus通信网络中的主节点设备和从节点设备)中包括多个协议组帧模块和多个传输模块,每个协议组帧模块定义一种Modbus协议类型的组帧方式且每个协议组帧模块定义的组帧方式各不相同,其中,一个协议组帧模块定义了ModbusRTU协议的组帧方式,例如,其代码包括准备需要发送的数据:应用数据和CRC校验,打包、组帧以及解析收到的数据;另一个协议组帧模块定义了ModbusTCP协议的组帧方式,例如,其代码包括准备需要发送的数据:应用数据,打包、组帧(按照TCP格式组帧)以及解析收到的数据;还有一个协议组帧模块定义了ModbusASCII协议的组帧方式。每个传输模块定义一种传输协议且每个传输模块定义的传输协议各不相同,其中,一个传输模块定义了串口传输协议,例如,其代码包括打开串口,指定串口信息(波特率、校验方式、数据位、停止位),串口发送,串口收;另一个传输模块定义了以太网传输协议,例如,其代码包括建立连接(根据IP和端口建立连接),以太网发送,以太网收;再一个传输模块定义了GPRS传输协议,还有一个传输模块定义了ZigBee传输协议。
[0048] 配置信息产生于用户预先对主节点设备和从节点设备进行的配置,其中包括各设备启用的协议类型和传输协议,例如,用户选择采用ModbusRTU协议+串口传输的方式,则初始化时各设备中启用的就是ModbusRTU协议对应的协议组帧模块和串口传输对应的传输模块。
[0049] 步骤102、当主节点设备启用的协议组帧模块获取待传输报文时,主节点设备启用的协议组帧模块根据本模块定义的组帧方式将传输报文组帧,组帧后的报文包括目的从节点设备地址,并通过主节点设备启用的传输模块根据本模块定义的传输协议向从节点设备发送组帧后的报文;
[0050] 主节点设备向从节点设备发送报文,可以通过高层(例如,应用层)生成传输报文,当主节点设备启用的协议组帧模块获取到该传输报文时,由该模块根据本模块定义的组帧方式将传输报文组帧,例如,主节点设备启用ModbusRTU协议对应的协议组帧模块,该模块按照ModbusRTU协议的组帧方式将传输报文组帧,并且在组帧后的报文中携带目的从节点设备的地址,然后主节点设备启用的传输模块根据本模块定义的传输协议将该组帧后的报文发送给从节点设备,例如,主节点设备启用串口传输对应的传输模块,该模块根据串口传输协议发送报文。
[0051] 步骤103、从节点设备启用的传输模块接收到组帧后的报文后,传送给从节点设备启用的协议组帧模块,从节点设备启用的协议组帧模块根据本模块定义的解析方式解析组帧后的报文。
[0052] 从节点设备启用的传输模块周期性接收数据,当接收到组帧后的报文后,也是通过缓存做中转将其传送给从节点设备启用的协议组帧模块,从节点设备启用的传输模块将组帧后的报文放入缓存中,从节点设备启用的协议组帧模块调用上述读文件接口从缓存中提取组帧后的报文,然后根据本模块定义的解析方式进行解析。
[0053] 本实施例的技术方案,在一个设备的设计代码中,将多个Modbus协议和多个传输协议分别由不同的代码模块定义,在实例化时根据配置信息确定启用的协议组帧模块和传输模块,实现Modbus协议栈的灵活组合,解决了现有技术中需要针对不同的协议和不同的传输方式开发不同的协议栈,导致代码重复率高的问题,降低Modbus协议栈的实现复杂度和开发难度。而且随着硬件设备的多样化和传输方式的多样化,当出现新的传输方式,只需要增加新的传输方式的代码模块即可,减少代码的重复设计量。
[0054] 在上述技术方案的基础上,图2为本发明实施例一提供的Modbus协议栈模块组成示意图,在协议组帧模块和传输模块之间通过调用接口完成数据传递,主节点设备的该接口例如包括:
[0055] int(*write_file)(struct ClientTransmitInstance*transmit,uint8_t*buffer,int length);
[0056] int(*read_file)(struct ClientTransmitInstance*transmit,uint8_t*buffer,int length);
[0057] void(*close)(struct ClientTransmitInstance*transmit)。
[0058] 其中,Write为写文件函数名,ClientTransmitInstance*transmit为输入在初始化阶段创建的,uint8_t*buffer为需要写入的buffer指针,int length为写入长度length,返回实际写入长度,如果写失败,返回-1。
[0059] 其中,read为读文件函数名,ClientTransmitInstance*transmit为输入在初始化阶段创建的transmit实例,uint8_t*buffer为需要读出的buffer指针,int length为读出长度length,返回实际读出长度,如果读失败,返回-1。
[0060] 其中,close为释放资源函数。
[0061] 本实施例中,主节点设备启用的协议组帧模块在将传输报文组帧后,通过调用上述write接口,根据需要写入的buffer指针和写入长度把组帧后的报文放入缓存buffer中,然后主节点设备启用的传输模块调用上述read接口,根据需要读出的buffer指针和读出长度到缓存buffer中提取组帧后的报文,再根据本模块定义的传输协议调用相应硬件的硬件驱动,以驱动所述硬件发送所述组帧后的报文,例如,配置信息中传输方式的信息是com1,主节点设备启用串口传输对应的传输模块,根据串口传输协议调用com1端口的硬件驱动,以驱动com1端口实现串口法和串口收。相应的,主节点设备启用的传输模块根据传输协议调用com1端口的硬件驱动接收到报文后,通过调用上述write接口把接收的报文放入缓存中,然后主节点设备启用的协议组帧模块通过调用上述read接口到缓存中提取接收的报文,再根据本模块定义的解析方式解析接收的报文。
[0062] 在上述技术方案的基础上,在主节点设备的初始化模块对主节点设备进行初始化和从节点设备的初始化模块对从节点设备进行初始化之后,还包括:当从节点设备启用的协议组帧模块获取待传输报文时,从节点设备启用的协议组帧模块根据本模块定义的组帧方式将传输报文组帧,组帧后的报文包括目的主节点设备地址,并通过从节点设备启用的传输模块根据本模块定义的传输协议向主节点设备发送组帧后的报文;主节点设备启用的传输模块接收到组帧后的报文后,传送给主节点设备启用的协议组帧模块,主节点设备启用的协议组帧模块根据本模块定义的解析方式解析组帧后的报文。
[0063] 如图2所示,主节点设备启用的串口传输模块在调用read接口从缓存中读取组帧后的报文后,根据串口传输协议定义的传输方式并调用初始化时配置的串口所对应的硬件驱动,将报文发送给从节点设备。同样,主节点设备启用的串口传输模块根据串口传输协议定义的传输方式并调用初始化时配置的串口所对应的硬件驱动,接收从节点设备发送的报文,然后,调用write接口写入缓存。
[0064] 如图2所示,主节点设备启用的GPRS传输模块在调用read接口从缓存中读取组帧后的报文后,根据GPRS传输协议定义的传输方式并调用初始化时配置的GPRS模块所对应的硬件驱动,将报文发送给从节点设备。同样,主节点设备启用的GPRS传输模块根据串口传输协议定义的传输方式并调用初始化时配置的GPRS模块所对应的硬件驱动,接收从节点设备发送的报文,然后,调用write接口写入缓存。其它协议的传输模块工作方式类似,不再赘述。
[0065] 本实施例中,从节点设备向主节点设备发送报文的方法与上述实施例的方法类似,此处不再赘述。
[0066] 在上述技术方案的基础上,在从节点设备启用的协议组帧模块根据本模块定义的组帧方式将传输报文组帧之前,还包括:当从节点设备启用的传输模块监听到来自主节点设备的连接请求时,从节点设备启用的传输模块创建与主节点设备的连接和连接号handle_ID,并将handle_ID告知从节点设备启用的协议组帧模块;从节点设备启用的协议组帧模块通过handle_ID区分接收到的报文来自的主节点设备,并且通过handle_ID向报文来自的主节点设备发送反馈报文。当从节点设备启用的传输模块确定与主节点设备之间的连接失效时,从节点设备启用的传输模块释放连接的资源,将与连接对应的连接号handle_ID置为关闭,并告知从节点设备启用的协议组帧模块handle_ID被关闭。
[0067] 在从节点设备上协议组帧模块和传输模块之间的接口还可以包括:
[0068] int(*accpet_connection)(struct ServerTransmitInstance*transmit);
[0069] 给新的连接分配连接标识handle_ID,输入transmit实例,输出分配的handle_ID,如果没有新的连接,返回-1。
[0070] void(*close_handle)(struct ServerTransmitInstance*transmit,int handle_ID);
[0071] 连接标识handle_ID置为关闭,输入transmit实例,需要关闭的handle_ID。
[0072] 和主节点设备不同的是,从节点设备需要监听多个主节点设备发来的指令,当从节点设备启用的传输模块监听到来自主节点设备的连接请求时,需要创建与该主节点设备的连接,并通过调用上述accpet_connection接口创建连接号handle_ID;而当从节点设备启用的传输模块确定与主节点设备之间的连接失效时,从节点设备启用的传输模块释放该连接的资源,并通过调用上述close_handle接口将与该连接对应的handle_ID置为关闭。相应的,从节点设备启用的协议组帧模块在调用上述write接口或者read接口前通过调用上述accpet_connection接口和close_handle接口确定当前哪些handle_ID是新创建的、有哪些handle_ID可以使用以及哪些handle_ID被关闭了等,这样从节点设备启用的协议组帧模块就可以针对可以使用的handle_ID向缓存中写入报文或从其中提取报文,由于Modbus网络中,主节点设备有多个,从节点设备分别与各主节点设备建立连接,从节点设备需要通过连接标识handle_ID知道从哪个连接上接收主站的报文、并通过连接标识handle_ID知道在哪个连接上向主站发响应报文。本实施例中handle_ID可以复用,例如,如果handle_ID=5被关闭,那么下一次,如果有新的连接,则分配给该连接的handle_ID可能就是5。至于实际含义,比如在TCP中,应该是连接的socket,则很有可能不同。接口应该屏蔽此信息,协议组帧模块应该感受不到此信息。
[0073] 图3为本发明实施例二提供的Modbus通信网络系统的结构示意图,包括:主节点设备11和从节点设备12,其中,各设备中包括多个协议组帧模块和多个传输模块,每个协议组帧模块定义一种Modbus协议类型的组帧方式且每个协议组帧模块定义的组帧方式各不相同,每个传输模块定义一种传输协议且每个传输模块定义的传输协议各不相同;其中,所述主节点设备11用于通过初始化模块根据配置信息确定启用的协议组帧模块和传输模块;所述从节点设备12用于通过初始化模块根据配置信息确定启用的协议组帧模块和传输模块;所述主节点设备11还用于当通过所述主节点设备启用的所述协议组帧模块获取待传输报文时,通过所述主节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的从节点设备地址,并通过所述主节点设备启用的所述传输模块根据本模块定义的传输协议向所述从节点设备发送组帧后的报文;所述从节点设备12还用于通过所述从节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述从节点设备启用的所述协议组帧模块,再通过所述从节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。
[0074] 在上述技术方案的基础上,所述从节点设备12还用于当通过所述从节点设备启用的所述协议组帧模块获取待传输报文时,通过所述从节点设备启用的所述协议组帧模块根据本模块定义的组帧方式将所述传输报文组帧,组帧后的报文包括目的主节点设备地址,并通过所述从节点设备启用的所述传输模块根据本模块定义的传输协议向所述主节点设备发送所述组帧后的报文;所述主节点设备11还用于通过所述主节点设备启用的所述传输模块接收到所述组帧后的报文后,传送给所述主节点设备启用的所述协议组帧模块,再通过所述主节点设备启用的所述协议组帧模块根据本模块定义的解析方式解析所述组帧后的报文。
[0075] 在上述技术方案的基础上,各设备用于根据所述Modbus通信网络支持的Modbus协议类型创建所述多个协议组帧模块,并根据所述Modbus通信网络支持的传输协议创建所述多个传输模块,所述各设备包括所述主节点设备11和所述从节点设备12。
[0076] 在上述技术方案的基础上,所述从节点设备12还用于当通过所述从节点设备启用的所述传输模块监听到来自主节点设备的连接请求时,通过所述从节点设备启用的所述传输模块创建与所述主节点设备的连接和连接号handle_ID,并将所述handle_ID告知所述从节点设备启用的所述协议组帧模块;通过所述从节点设备启用的所述协议组帧模块通过所述handle_ID区分接收到的报文来自的主节点设备,并且通过所述handle_ID向所述报文来自的主节点设备发送反馈报文。
[0077] 在上述技术方案的基础上,所述从节点设备12还用于当通过所述从节点设备启用的所述传输模块确定与主节点设备之间的连接失效时,通过所述从节点设备启用的所述传输模块释放所述连接的资源,将与所述连接对应的连接号handle_ID置为关闭,并告知所述从节点设备启用的所述协议组帧模块所述handle_ID被关闭。
[0078] 在上述技术方案的基础上,各设备用于通过启用的传输模块根据本模块定义的传输协议调用相应硬件的硬件驱动,以驱动所述硬件发送所述组帧后的报文,所述各设备包括所述主节点设备11和所述从节点设备12。
[0079] 本发明实施例所提供的Modbus通信网络系统可执行本发明任意实施例所提供的在Modbus通信网络中传输报文的方法,具备执行方法相应的功能模块和有益效果。
[0080] 图4为本发明实施例三提供的设备的结构示意图,如图4所示,该设备可以是上述的主节点设备或者从节点设备,该设备包括处理器20、存储器21、输入装置22和输出装置23;设备中处理器20的数量可以是一个或多个,图4中以一个处理器20为例;设备中的处理器20、存储器21、输入装置22和输出装置23可以通过总线或其他方式连接,图4中以通过总线连接为例。
[0081] 存储器21作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的在Modbus通信网络中传输报文的方法对应的程序指令/模块。处理器20通过运行存储在存储器21中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的在Modbus通信网络中传输报文的方法。
[0082] 存储器21可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器21可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器21可进一步包括相对于处理器20远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0083] 输入装置22可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置23可包括显示屏等显示设备。
[0084] 本发明实施例四还提供一种计算机可读存储介质,该存储介质可设置于上述主节点设备或者从节点设备中,其上存储有计算机程序,该程序被处理器执行时用于执行一种在Modbus通信网络中传输报文的方法,该方法如上述方法实施例所述,此处不再赘述。
[0085] 当然,本发明实施例所提供的一种计算机可读存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的在Modbus通信网络中传输报文的方法中的相关操作。
[0086] 通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明实施例可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明实施例各个实施例所述的方法。
[0087] 值得注意的是,上述Modbus通信网络的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明实施例的保护范围。
[0088] 注意,上述仅为本发明实施例的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明实施例不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明实施例的保护范围。因此,虽然通过以上实施例对本发明实施例进行了较为详细的说明,但是本发明实施例不仅仅限于以上实施例,在不脱离本发明实施例构思的情况下,还可以包括更多其他等效实施例,而本发明实施例的范围由所附的权利要求范围决定。