一种解决Modbus总线通信粘包的方法及终端与流程

文档序号:20677022发布日期:2020-05-08 17:58阅读:1238来源:国知局
一种解决Modbus总线通信粘包的方法及终端与流程

本发明涉及数据处理领域,尤其涉及一种解决modbus总线通信粘包的方法及终端。



背景技术:

modbus是一种串行通信协议,是工业电子设备之间常用的连接方式,其允许多个(大约240个)设备连接在同一个网络上进行通信。由于其具有成本低,通用性强,可实现简单快速的配置,易于部署和维护的优势,因此,被广泛地应用于工业电子设备的连接中。特别是在物联网实现中,比如智能电表领域等,其被认为是首选技术。

但是,当多个总线通信设备通过modbus串行总线连接在一起,多个客户端设备通过modbus串行总线向对应的总线通信设备请求数据时,由于客户端发送的数据包的字节数较少并且速度较快,可能会存在在同一个时刻总线通信设备收到好多个数据包,造成通信粘包的情况,从而造成通信应答错误,影响通信的可靠性。



技术实现要素:

本发明所要解决的技术问题是:提供一种解决modbus总线通信粘包的方法及终端,有效解决modbus串行总线通信过程中通信粘包的情况,提高modbus通信的可靠性。

为了解决上述技术问题,本发明采用的一种技术方案为:

一种解决modbus总线通信粘包的方法,包括步骤:

s1、接收多个客户端发送的查询报文,所述查询报文包括数据通信协议和对应的modbus总线通信设备标识;

s2、将接收到的查询报文逐个地发送至设备连接池,由设备连接池根据所述数据通信协议和对应的modbus总线通信设备标识接入对应的modbus总线通信设备。

为了解决上述技术问题,本发明采用的另一种技术方案为:

一种解决modbus总线通信粘包的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

s1、接收多个客户端发送的查询报文,所述查询报文包括数据通信协议和对应的modbus总线通信设备标识;

s2、将接收到的查询报文逐个地发送至设备连接池,由设备连接池根据所述数据通信协议和对应的modbus总线通信设备标识接入对应的modbus总线通信设备。

本发明的有益效果在于:接收多个客户端发送的查询报文,将接收到的查询报文逐个地发送至设备连接池,由设备连接池根据查询报文中包含的数据通信协议和对应的modbus总线通信设备标识接入对应的modbus总线通信设备,各个客户端要与modbus总线通信设备进行通信,必须通过设备连接池接入,并且查询报文是逐个地发送至设备连接池,并由设备连接池转发至对应的modbus总线通信设备,能够保证modbus总线通信设备同一时刻只存在一条通讯包进行数据交互,有效地解决基于modbus总线的通信系统中查询报文和回应报文阻塞粘包的问题,提高了modbus通信的可靠性。

附图说明

图1为本发明实施例的一种解决modbus总线通信粘包的方法的步骤流程图;

图2为本发明实施例的一种解决modbus总线通信粘包的终端的结构示意图;

图3为本发明实施例的在智能电表应用场景中解决modbus总线通信粘包的系统结构示意图;

标号说明:

1、一种解决modbus总线通信粘包的终端;2、存储器;3、处理器。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。

请参照图1,一种解决modbus总线通信粘包的方法,包括步骤:

s1、接收多个客户端发送的查询报文,所述查询报文包括数据通信协议和对应的modbus总线通信设备标识;

s2、将接收到的查询报文逐个地发送至设备连接池,由设备连接池根据所述数据通信协议和对应的modbus总线通信设备标识接入对应的modbus总线通信设备。

从上述描述可知,本发明的有益效果在于:接收多个客户端发送的查询报文,将接收到的查询报文逐个地发送至设备连接池,由设备连接池根据查询报文中包含的数据通信协议和对应的modbus总线通信设备标识接入对应的modbus总线通信设备,各个客户端要与modbus总线通信设备进行通信,必须通过设备连接池接入,并且查询报文是逐个地发送至设备连接池,并由设备连接池转发至对应的modbus总线通信设备,能够保证modbus总线通信设备同一时刻只存在一条通讯包进行数据交互,有效地解决基于modbus总线的通信系统中查询报文和回应报文阻塞粘包的问题,提高了modbus通信的可靠性。

进一步的,所述接收多个客户端发送的查询报文包括:

接收多个客户端发送的查询报文,根据接收顺序将接收到的查询报文存至任务队列;

所述将接收到的查询报文逐个地发送至设备连接池包括:

从所述任务队列中依次取出查询报文,将所述查询报文发送至设备连接池。

由上述描述可知,通过任务队列约束查询报文逐个逐个地发送至设备连接池中,根据任务队列先入先出的方式逐个地将查询报文发送至设备连接池,能够有效地防止通讯发包过快造成的粘包问题。

进一步的,所述将接收到的查询报文逐个地发送至设备连接池包括:

将接收到的查询报文单个地发送至设备连接池,待设备连接池返回回应报文后,再发送下一个查询报文至设备连接池。

由上述描述可知,待针对一个查询报文的回应报文通过设备连接池返回来后,再发送下一个查询报文至设备连接池,在前一个查询报文的查询响应通信完成后,再执行下一个查询报文的相关通信,能够进一步避免数据的冲突,提高通信的可靠性。

进一步的,待设备连接池返回回应报文后,再发送下一个查询报文至设备连接池包括:

接收设备连接池返回的回应报文,将所述回应报文返回至对应的客户端,并等待预设时间段后,再发送下一个查询报文至设备连接池。

由上述描述可知,在将回应报文返回至对应的客户端后,等待预设时间段后,再发送下一个查询报文至设备连接池,能够防止通讯频率超过设备固有通讯频率,造成设备系统内部粘包无应答的情况,能够进一步提高通信的可靠性和稳定性。

进一步的,所述查询报文还包括优先级标识;

若接收到的查询报文包含优先级标识,则优先发送所述查询报文至设备连接池。

由上述描述可知,在查询报文中增设优先级标识,对于有优先级标识的查询报文,优先发送至设备连接池,能够优先处理对于紧急情况下的数据查询,能够适应不同的应用场景的需求,灵活性高。

请参照图2,一种解决modbus总线通信粘包的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

s1、接收多个客户端发送的查询报文,所述查询报文包括数据通信协议和对应的modbus总线通信设备标识;

s2、将接收到的查询报文逐个地发送至设备连接池,由设备连接池根据所述数据通信协议和对应的modbus总线通信设备标识接入对应的modbus总线通信设备。

从上述描述可知,本发明的有益效果在于:接收多个客户端发送的查询报文,将接收到的查询报文逐个地发送至设备连接池,由设备连接池根据查询报文中包含的数据通信协议和对应的modbus总线通信设备标识接入对应的modbus总线通信设备,各个客户端要与modbus总线通信设备进行通信,必须通过设备连接池接入,并且查询报文是逐个地发送至设备连接池,并由设备连接池转发至对应的modbus总线通信设备,能够保证modbus总线通信设备同一时刻只存在一条通讯包进行数据交互,有效地解决基于modbus总线的通信系统中查询报文和回应报文阻塞粘包的问题,提高了modbus通信的可靠性。

进一步的,所述接收多个客户端发送的查询报文包括:

接收多个客户端发送的查询报文,根据接收顺序将接收到的查询报文存至任务队列;

所述将接收到的查询报文逐个地发送至设备连接池包括:

从所述任务队列中依次取出查询报文,将所述查询报文发送至设备连接池。

由上述描述可知,通过任务队列约束查询报文逐个逐个地发送至设备连接池中,根据任务队列先入先出的方式逐个地将查询报文发送至设备连接池,能够有效地防止通讯发包过快造成的粘包问题。

进一步的,所述将接收到的查询报文逐个地发送至设备连接池包括:

将接收到的查询报文单个地发送至设备连接池,待设备连接池返回回应报文后,再发送下一个查询报文至设备连接池。

由上述描述可知,待针对一个查询报文的回应报文通过设备连接池返回来后,再发送下一个查询报文至设备连接池,在前一个查询报文的查询响应通信完成后,再执行下一个查询报文的相关通信,能够进一步避免数据的冲突,提高通信的可靠性。

进一步的,待设备连接池返回回应报文后,再发送下一个查询报文至设备连接池包括:

接收设备连接池返回的回应报文,将所述回应报文返回至对应的客户端,并等待预设时间段后,再发送下一个查询报文至设备连接池。

由上述描述可知,在将回应报文返回至对应的客户端后,等待预设时间段后,再发送下一个查询报文至设备连接池,能够防止通讯频率超过设备固有通讯频率,造成设备系统内部粘包无应答的情况,能够进一步提高通信的可靠性和稳定性。

进一步的,所述查询报文还包括优先级标识;

若接收到的查询报文包含优先级标识,则优先发送所述查询报文至设备连接池。

由上述描述可知,在查询报文中增设优先级标识,对于有优先级标识的查询报文,优先发送至设备连接池,能够优先处理对于紧急情况下的数据查询,能够适应不同的应用场景的需求,灵活性高。

实施例一

请参照图1,一种解决modbus总线通信粘包的方法,包括步骤:

s1、接收多个客户端发送的查询报文,所述查询报文包括数据通信协议和对应的modbus总线通信设备标识;

s2、将接收到的查询报文逐个地发送至设备连接池,由设备连接池根据所述数据通信协议和对应的modbus总线通信设备标识接入对应的modbus总线通信设备;

其中,所述接收多个客户端发送的查询报文包括:

接收多个客户端发送的查询报文,根据接收顺序将接收到的查询报文存至任务队列;

所述将接收到的查询报文逐个地发送至设备连接池包括:

从所述任务队列中依次取出查询报文,将所述查询报文发送至设备连接池;

具体的,所述将接收到的查询报文逐个地发送至设备连接池包括:

将接收到的查询报文单个地发送至设备连接池,待设备连接池返回回应报文后,再发送下一个查询报文至设备连接池;

待设备连接池返回回应报文后,再发送下一个查询报文至设备连接池包括:

接收设备连接池返回的回应报文,根据回应报文中包含的客户端标识将所述回应报文返回至对应的客户端,并等待预设时间段后,再发送下一个查询报文至设备连接池;

作为另一个可选的实施例,所述查询报文还包括优先级标识;

若接收到的查询报文包含优先级标识,则优先发送所述查询报文至设备连接池;

具体的,如图3所示,以智能电表领域为例进行说明,图3中,多个电表通过modbus串行总线进行连接,多个不同的客户端会向不同的电表请求电表数据,在实现时,客户端根据网络通讯协议以及要进行通信的电表标识构建查询报文并发送;

在接收各个客户端发送的查询报文后,根据其发送的时间先后顺序,生成任务队列元素,并依次写入任务队列;

从任务队列中按照先入先出的顺序取出一个查询报文,将所述查询报文发送至设备连接池;

设备连接池根据查询报文中包含的网络通讯协议以及电表标识与对应的电表建立通信连接,并将所述查询报文发送至对应的电表;

对应的电表接收到查询报文后,返回对应的回应报文至设备连接池,在这一过程中,其他电表设备均未响应;

设备连接池根据对应的网络通讯协议接收电表返回的回应报文,并将其发送至任务队列;

任务队列根据返回的回应报文,按照顺序将其发送至对应的客户端;

在将回应报文返回至对应的客户端后,等待预设时间段,优选的,预设时间段大于或者等于设备可通讯最小时间,即设备执行任务的最小时间,在等待预设时间段后,结束当前任务,执行下一环节的任务,即从任务队列中取出下一个查询报文,发送至设备连接池;

优选的,为了保证紧急情况下的查询报文能够得到及时的反馈,查询报文中还包括优先级标识,凡是接收到有优先级标识的查询报文,都将其进行置顶,将它调整到任务队列中的顶部,使得其在下一次任务环节中,即能够被发送至设备连接池;

进一步的,可以设置不同的优先级,对于都是设有优先级标识的查询报文,可以进一步比较他们的优先级,优先级高的放置于靠前的位置,能够得到更快的响应。

实施例二

请参照图2,一种解决modbus总线通信粘包的终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一中的各个步骤。

综上所述,本发明提供的一种解决modbus总线通信粘包的方法及终端,接收多个客户端发送的查询报文,将接收到的查询报文逐个地发送至设备连接池,由设备连接池根据查询报文中包含的数据通信协议和对应的modbus总线通信设备标识接入对应的modbus总线通信设备,各个客户端要与modbus总线通信设备进行通信,必须通过设备连接池接入,并且查询报文是逐个地发送至设备连接池,并由设备连接池转发至对应的modbus总线通信设备,在接收到设备连接池返回的回应报文,并将其返回给对应的客户端后,会等待设备最小通信时间后,再启动下一个查询报文的发送,使设备系统内部结束通讯后,结束当前任务元素后,再开始执行下环节任务元素,约束了接入modbus串行总线的客户端个数,能够保证modbus总线通信设备同一时刻只存在一条通讯包进行数据交互,有效地解决基于modbus总线的通信系统中查询报文和回应报文阻塞粘包的问题,并且能够防止通讯频率超过设备固有通讯频率,造成设备系统内部粘包无应答的情况,提高了modbus通信的可靠性。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

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