基于Netty框架的modbus粘包处理方法、装置与流程

文档序号:14993438发布日期:2018-07-20 22:59阅读:2415来源:国知局

本发明涉及计算机领域,特别是涉及一种基于netty框架的modbus粘包处理方法、装置、设备以及一种计算机可读存储介质。



背景技术:

随着网络技术的发展,工业控制已经从单片机控制走向通过网络协议进行集中监控或集散监控,modbus就是一种可以应用于工业控制的网络协议。modbus定义了一种控制器可以识别的消息结构,描述了控制器与其他设备之间的交互过程,例如如何回应其他设备的请求,如何检测错误等。

但是当通过tcp协议传输modbus数据时,而tcp是基于字节流的,只维护发送出去多少,确认了多少,并没有维护消息与消息之间的边界,因而极有可能导致粘包问题,最终导致采集终端无法正常解析数据。

传统方法是通过netty粘包处理器解决modbus数据粘包问题,但是netty粘包处理器在一个数据通道中只能针对一种命令格式进行处理,而modbus协议中存在多个命令格式,例如读命令格式、写命令格式和异常命令格式等。可见,传统的netty粘包处理器已经不能满足实际使用需求。



技术实现要素:

本发明的目的是提供一种基于netty框架的modbus粘包处理方法、装置、设备以及一种计算机可读存储介质,用以解决传统netty粘包处理器在一个数据通道中只能处理一种命令格式的数据,无法满足实际使用需求的问题。

为解决上述技术问题,本发明提供一种基于netty框架的modbus粘包处理方法,包括:

获取粘包数据中当前数据包的标识信息;

根据所述标识信息确定对应的粘包处理方法,所述标识信息与所述粘包处理方法的对应关系为预先设置的;

调用所述粘包处理方法处理所述当前数据包。

其中,所述根据所述标识信息确定对应的粘包处理方法,所述标识信息与所述粘包处理方法的对应关系为预先设置的包括:

判断所述标识信息是否为读标识信息;

若所述标识信息为读标识信息,则根据所述读标识信息确定读命令粘包处理方法,所述读标识信息与所述读命令粘包处理方法的对应关系为预先设置的。

其中,所述若所述标识信息为读标识信息,则根据所述读标识信息确定读命令粘包处理方法,所述读标识信息与所述读命令粘包处理方法的对应关系为预先设置的包括:

若所述标识信息为读标识信息,则判断所述当前数据包的地址信息是否为预设地址信息;

若所述地址信息为预设地址信息,则根据所述标识信息与所述预设地址信息确定对应的粘包处理方法,所述读标识信息、所述预设地址信息与所述粘包处理方法的对应关系为预先设置的。

其中,在所述判断所述标识信息是否为读标识信息之后,还包括:

若所述标识信息不为读标识信息,则根据所述标识信息确定所述当前数据包的数据长度,所述标识信息与所述数据长度的对应关系为预先设置的;

根据所述数据长度确定对应的粘包处理方法,所述数据长度和所述粘包处理方法的对应关系为预先设置的。

其中,在所述判断所述标识信息是否为读标识信息之后,还包括:

若所述标识信息不为读标识信息,则判断所述标识信息是否为预设标识信息;

若所述标识信息为预设标识信息,则根据所述预设标识信息确定对应的粘包处理方法,所述预设标识信息与所述粘包处理方法的对应关系为预先设置的。

本发明还提供了一种基于netty框架的modbus粘包处理装置,包括:

获取模块:用于获取粘包数据中当前数据包的标识信息;

确定模块:用于根据所述标识信息确定对应的粘包处理方法,所述标识信息与所述粘包处理方法的对应关系为预先设置的;

调用模块:用于调用所述粘包处理方法处理所述当前数据包。

其中,所述确定模块包括:

读标识信息判断单元:用于判断所述标识信息是否为读标识信息;

第一确定单元:用于若所述标识信息为读标识信息,则根据所述读标识信息确定读命令粘包处理方法,所述读标识信息与所述读命令粘包处理方法的对应关系为预先设置的。

其中,所述确定模块还包括:

数据长度确定单元:用于若所述标识信息不为读标识信息,则根据所述标识信息确定所述当前数据包的数据长度,所述标识信息与所述数据长度的对应关系为预先设置的;

第二确定单元:用于根据所述数据长度确定对应的粘包处理方法,所述数据长度和所述粘包处理方法的对应关系为预先设置的。

除此之外,本发明还提供了一种基于netty框架的modbus粘包处理设备,包括:

存储器:用于存储计算机程序;

处理器:用于执行所述计算机程序以实现前述的基于netty框架的modbus粘包处理方法的步骤。

最后,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上保存有计算机程序,所述计算机程序在被处理器执行时实现前述的基于netty框架的modbus粘包处理方法的步骤。

本发明所提供的基于netty框架的modbus粘包处理方法,通过获取粘包数据中当前数据包的标识信息,然后根据所述标识信息确定对应的粘包处理方法,所述标识信息与所述粘包处理方法的对应关系为预先设置的,最后通过调用所述粘包处理方法处理所述当前数据包。

可见,本发明提供的基于netty框架的modbus粘包处理方法,预先设置了数据包中的标识信息与粘包处理方法的对应关系,在获取到粘包数据的标识信息后,通过粘包数据中的标识信息确定出对应的粘包处理方法,最后通过调用粘包处理方法处理数据包。显然,本发明提供的基于netty框架的modbus粘包处理方法能够根据数据包的标识信息确定对应的粘包处理方法,最终通过调用处理方法处理数据包,实现了处理具有多种命令格式的粘包数据的目的,更加满足实际应用需求。

本发明还提供了一种基于netty框架的modbus粘包处理装置、设备以及一种计算机可读存储介质,其作用与上述一种基于netty框架的modbus粘包处理方法的作用相对应,这里不再赘述。

附图说明

为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种基于netty框架的modbus粘包处理方法实施例一的实现流程图;

图2为本发明提供的一种基于netty框架的modbus粘包处理方法实施例二实现流程图;

图3为本发明提供的一种基于netty框架的modbus粘包处理装置的结构框图。

具体实施方式

本发明的核心是提供一种基于netty框架的modbus粘包处理方法、装置、设备以及一中计算机可读存储介质,实现了处理具有命令格式的粘包数据的目的,更加满足实际应用需求。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面开始详细介绍本发明提供的一种基于netty框架的modbus粘包处理方法实施例一,参见图1,实施例一具体包括:

步骤s101:获取粘包数据中当前数据包的标识信息。

具体的,在步骤s101前,可以预先判断所述粘包数据的数据长度是否超过预设长度,这个预设长度是用户可以通过自定义参数大小来实现调节的。

需要说明的是,本发明中涉及到的标识信息指的是用于识别当前数据包的命令格式的标识信息,具体的,可以为功能码。

步骤s102:根据所述标识信息确定对应的粘包处理方法,所述标识信息与所述粘包处理方法的对应关系为预先设置的。

具体的,可以先判断所述标识信息是否为读标识信息,若所述标识信息不为读标识信息,则可以根据所述标识信息获取所述当前数据包的数据长度,进而根据所述数据长度确定对应的粘包处理方法。

值得注意的是,我们知道modbus数据包结构包括地址信息、功能码、数据信息和校验信息,本发明涉及到的当前数据包可以为不完整的数据包,因此,在确定粘包处理方法之前,可以判断所述粘包数据的数据长度是否大于当前数据包的标识信息对应的数据长度。例如,假设当前数据包的标识信息为写功能码,那么当前数据包为写命令格式的数据包,而写命令格式的数据包为8字节,则在确定粘包处理方法之前,判断所述粘包数据是否大于等于8字节。

步骤s103:调用所述粘包处理方法处理所述当前数据包。

具体的,可以预先将指针temindex指向所述当前数据包的地址信息,假设当所述当前数据包的标识信息为写功能码时,则确定写命令格式的数据包为8字节,然后将8字节的数据取走,指针向后移动8字节即temindex+8,然后继续进行粘包处理。

可见,本实施例提供的基于netty框架的modbus粘包处理方法,预先设置了数据包中的标识信息与粘包处理方法的对应关系,在获取到粘包数据的标识信息后,通过粘包数据中的标识信息确定出对应的粘包处理方法,最后通过调用粘包处理方法处理数据包。显然,本实施例提供的基于netty框架的modbus粘包处理方法能够根据数据包的标识信息确定对应的粘包处理方法,最终通过调用处理方法处理数据包,实现了处理具有多种命令格式的粘包数据的目的,更加满足实际应用需求。

实施例一提供的一种基于netty框架的modbus粘包处理方法,通过根据当前数据包的标识信息确定对应的粘包处理方法,进而调用所述粘包处理方法处理当前数据包,最终实现了处理具有多种命令格式的粘包数据的目的。但是,实施例一只是解决了modbus定义的集中协议格式的数据包的粘包问题,考虑到实际应用中,往往需要自定义功能,例如用于检测通信状态的心跳包。实施例一并没有考虑类似心跳包等的自定义命令格式的数据包的粘包问题,基于此,本发明还提供了一种基于netty框架的modbus粘包问题处理方法实施例二。

下面开始详细介绍本发明提供的一种基于netty框架的modbus粘包处理方法实施例二,参见图2,实施例2具体包括:

步骤s201:获取粘包数据中当前数据包的功能码。

步骤s202:判断所述功能码是否为读功能码,若是,入步骤s203,否则进入步骤s206。

步骤s203:判断所述当前数据包的地址信息是否为预设地址信息,若是,进入步骤s204,否则进入步骤s205。

这里的预设地址信息指的是用户拓展的modbus协议格式之外的特殊设备地址,例如地址信息为0xfe功能码为0x68,用于斯菲尔电表。可见,本实施例不仅仅可以支持处理modbus协议格式数据的粘包问题,还可以处理用户自定义的协议格式数据的粘包问题,具有良好的逻辑拓展性。

步骤s204:根据所述读功能码确定对应的粘包处理方法。

在步骤s204之前,可以先判断所述粘包数据的数据长度是否大于等于读命令格式数据的数据长度,若是,则根据所述读功能码确定对应的粘包处理方法。

步骤s205:根据所述读功能码和所述预设地址信息确定对应的粘包处理方法。

步骤s206:判断所述功能码是否为写功能码,若是,进入步骤s207,否则进入步骤s208。

步骤s207:根据所述写功能码确定所述当前数据包的数据长度,进入步骤s214。

步骤s208:断所述功能码是否为异常功能码,若是,进入步骤s209,否则进入步骤s210。

步骤s209:根据所述异常功能码确定所述当前数据包的数据长度,进入步骤s214。

步骤s210:判断所述功能码是否为注册包功能码,若是,进入步骤s211,否则进入步骤s212。

所述注册包是指用于识别客户端或者用户身份的数据。

步骤s211:根据所述注册包功能码确定所述当前数据包的数据长度,进入步骤s214。

步骤s212:判断所述功能码是否为心跳包功能码,若是,则进入步骤s213。

所述心跳包是指用于检测通信状态的数据,例如客户端定时向服务器发送一个短消息,以表明客户端通信状态正常。

具体的,若所述功能码不为心跳包功能码,则可以认为当前数据包为错误数据,例如受电磁干扰产生的紊乱数据等。此时,可以将所述年报数据中的字节逐个丢掉,直到遇到下一个数据包为止。

步骤s213:根据所述心跳包功能包确定所述当前数据包的数据长度,进入步骤s214。

步骤s214;根据所述数据长度确定对应的粘包处理方法。

步骤s215:调用所述粘包处理方法处理所述当前数据包。

需要说明的是,本实施例不限定步骤s202、步骤s206、步骤s208、步骤s210和步骤s212的先后顺序,更改其先后顺序并不影响本实施例的实施效果。

本实施例提供的基于netty框架的modbus粘包处理方法,不仅仅可以处理modbus协议格式的数据粘包问题,还可以处理用户自定义的协议格式数据的粘包问题,例如心跳包的粘包问题、用户注册包的粘包问题等,具有良好的逻辑拓展性,更适用于实际应用场景。

下面对本发明实施例提供的基于netty框架的modbus粘包处理装置进行介绍,下文描述的基于netty框架的modbus粘包处理装置与上文描述的基于netty框架的modbus粘包处理方法可相互对应参照。

图3为本发明实施例提供的基于netty框架的modbus粘包处理装置的结构框图,参照图3,该装置包括:

获取模块301:用于获取粘包数据中当前数据包的标识信息;

确定模块302:用于根据所述标识信息确定对应的粘包处理方法,所述标识信息与所述粘包处理方法的对应关系为预先设置的;

调用模块303:用于调用所述粘包处理方法处理所述当前数据包。

其中,所述确定模块包括:

读标识信息判断单元:用于判断所述标识信息是否为读标识信息;

第一确定单元:用于若所述标识信息为读标识信息,则根据所述读标识信息确定读命令粘包处理方法,所述读标识信息与所述读命令粘包处理方法的对应关系为预先设置的。

其中,所述确定模块还包括:

数据长度确定单元:用于若所述标识信息不为读标识信息,则根据所述标识信息确定所述当前数据包的数据长度,所述标识信息与所述数据长度的对应关系为预先设置的;

第二确定单元:用于根据所述数据长度确定对应的粘包处理方法,所述数据长度和所述粘包处理方法的对应关系为预先设置的。

本实施例的基于netty框架的modbus粘包处理装置用于实现前述的基于netty框架的modbus粘包处理方法,因此基于netty框架的modbus粘包处理装置中的具体实施方式可见前文中的基于netty框架的modbus粘包处理方法的实施例部分,例如,获取模块301,确定模块302,调用模块303,分别用于实现上述基于netty框架的modbus粘包处理方法中步骤s101,s102,s103,所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再展开介绍。

由于本实施例提供的基于netty框架的modbus粘包处理装置用于实现前述基于netty框架的modbus粘包处理方法,因此,本实施例提供的基于netty框架的modbus粘包处理装置的作用与前述基于netty框架的modbus粘包处理方法实施例的作用相对应,这里不再赘述。

除此之外,本发明还提供了一种基于netty框架的modbus粘包处理设备,包括:

存储器:用于存储计算机程序;

处理器:用于执行所述计算机程序以实现前述的基于netty框架的modbus粘包处理方法的步骤。

最后,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上保存有计算机程序,所述计算机程序在被处理器执行时实现前述的基于netty框架的modbus粘包处理方法的步骤。

由于本发明提供的基于netty框架的modbus粘包处理设备以及一种计算机可读存储介质用于实现前述基于netty框架的modbus粘包处理方法,因此,本实施例提供的基于netty框架的modbus粘包处理设备以及一种计算机可读存储介质的作用与前述基于netty框架的modbus粘包处理方法实施例的作用相对应,这里不再赘述。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的基于netty框架的modbus粘包处理方法、装置、设备以及一种计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1