一种Modbus报文发送方法、转换装置及发送系统制造方法及图纸

技术编号:37468400 阅读:15 留言:0更新日期:2023-05-06 09:45
本发明专利技术提供一种Modbus报文发送方法、转换装置及发送系统,方法包括:接收Modbus TCP主站发送的Modbus TCP请求报文,当Modbus TCP主站向从站发送的TCP报文的总长度过长时,通过转换装置将TCP报文进行分组,然后逐条向从站发送TCP子报文,解决TCP发送报文总长度过长,Modbus从站会出现数据接收不完整,校验失败的情况。情况。情况。

【技术实现步骤摘要】
一种Modbus报文发送方法、转换装置及发送系统


[0001]本专利技术涉及数据通信领域,更具体地,涉及一种Modbus报文发送方法、转换装置及发送系统。

技术介绍

[0002]Modbus协议是一种应用十分广泛的工业现场总线通讯协议,此协议定义了一个控制器能使认识使用的消息结构,而不管它们是经过何种网络进行通信的,通过此协议,可以实现控制器之间、控制器与传感器之间的通信。
[0003]Modbus协议是一个主/从(Master/Slave)或者客户端/服务器(Client/Server)架构的协议。Modbus通信协议存在用于串行链路,TCP/IP以太网以及其他支持互联网的网络版本。对于Modbus串行通信存在RTU模式和ASCII模式。
[0004]在Modbus TCP主站与Modbus串行通讯实践中会发生一种常见的异常情况:Modbus TCP主站使用写多个寄存器指令(功能码16)向从站写多个寄存器,或者使用写多个线圈指令(功能码15)向从站写多个线圈,总的发送报文长度超过128字节,Modbus串行从站会出现数据接收不完整,校验失败的情况。
[0005]究其原因是部分Modbus从站自身的串行接收超时设置不够合理,主站下发的数据还没有完全结束,从站即认为数据传输超时时间已到,对不完整的数据进行相应的校验,必然校验失败。此现象在9600bps及以下较低波特率的通讯过程中尤为明显。

技术实现思路

[0006]本专利技术针对现有技术中存在的技术问题,提供一种Modbus报文发送方法、转换装置及发送系统。
[0007]根据本专利技术的第一方面,提供了一种Modbus报文发送方法,包括:
[0008]接收Modbus TCP主站发送的Modbus TCP请求报文;
[0009]判断所述Modbus TCP请求报文是否为写多个寄存器或多个线圈指令;
[0010]若是,则将所述Modbus TCP请求报文转换为Modbus RTU/ASCII协议报文,并对所述Modbus RTU/ASCII协议报文进行分组,得到多条Modbus RTU/ASCII协议子报文;
[0011]按照顺序逐条向所述Modbus RTU/ASCII从站发送Modbus RTU/ASCII协议子报文,并接收所述Modbus RTU/ASCII从站的响应信息;
[0012]待发送完所有的Modbus RTU/ASCII协议子报文后,根据所述Modbus RTU/ASCII从站返回的响应信息,组织一条Modbus TCP响应报文,发送给Modbus TCP主站。
[0013]在上述技术方案的基础上,本专利技术还可以作出如下改进。
[0014]可选的,所述若是,则将所述Modbus TCP请求报文转换为Modbus RTU/ASCII协议报文,并对所述Modbus RTU/ASCII协议报文进行分组,得到多条Modbus RTU/ASCII协议子报文,包括:
[0015]若是,则将所述Modbus TCP请求报文转换为Modbus RTU/ASCII协议报文,检查所
述Modbus RTU/ASCII协议报文中寄存器或线圈的数量;
[0016]如果寄存器或线圈的数量未超过预设分组参数,则对所述Modbus RTU/ASCII协议报文不进行分组,直接将所述Modbus RTU/ASCII协议报文通过串行总线传递到Modbus RTU/ASCII从站;
[0017]如果寄存器或线圈的数量未超过预设分组参数,则对所述Modbus RTU/ASCII协议报文按照预设分组参数进行分组。
[0018]可选的,所述预设分组参数为每组包括的寄存器或线圈数量,所述对所述Modbus RTU/ASCII协议报文按照预设分组参数进行分组,包括:
[0019]基于所述Modbus RTU/ASCII协议报文中寄存器或线圈的总数和预设分组参数,计算需要分组的个数;
[0020]按照预设分组参数和需要分组的个数,重新组织所述Modbus RTU/ASCII协议报文,获取多个Modbus RTU/ASCII协议子报文。
[0021]可选的,所述按照预设分组参数和需要分组的个数,重新组织所述Modbus RTU/ASCII协议报文,获取多条Modbus RTU/ASCII协议子报文,包括:
[0022]Modbus RTU/ASCII从站地址和功能码保持不变,每一条所述Modbus RTU/ASCII协议子报文的起始地址根据分组编号和预设分组参数做相应的偏移;寄存器数量或线圈个数根据预设分组参数确定;报文数据部分从原Modbus TCP报文对应的数据部分拷贝;
[0023]计算每一条所述Modbus RTU/ASCII协议子报文的CRC校验值。
[0024]可选的,所述按照顺序逐条向所述Modbus RTU/ASCII从站发送Modbus RTU/ASCII协议子报文,并接收所述Modbus RTU/ASCII从站的响应信息,包括:
[0025]转换装置按照顺序逐条向所述Modbus RTU/ASCII从站发送Modbus RTU/ASCII协议子报文,所述Modbus RTU/ASCII从站接收到每一条Modbus RTU/ASCII协议子报文后,对其数据根据CRC校验值进行校验,将校验成功或失败的响应信息反馈给所述转换装置。
[0026]可选的,接收所述Modbus RTU/ASCII从站的响应信息,之后还包括:
[0027]若接收到所述Modbus RTU/ASCII从站的响应成功信息,则下发下一条Modbus RTU/ASCII协议子报文;
[0028]若接收到所述Modbus RTU/ASCII从站的响应失败信息,则重发当前Modbus RTU/ASCII协议子报文。
[0029]可选的,所述待发送完所有的Modbus RTU/ASCII协议子报文后,根据所述Modbus RTU/ASCII从站返回的响应信息,组织一条Modbus TCP响应报文,发送给Modbus TCP主站,包括:
[0030]当转换装置发送完所有的Modbus RTU/ASCII协议子报文后,若所有的Modbus RTU/ASCII协议子报文对应的响应信息均为响应成功信息,则所述Modbus RTU/ASCII从站组织一条Modbus TCP响应成功报文,发送给Modbus TCP主站;
[0031]若所有的Modbus RTU/ASCII协议子报文对应的响应信息中有一条响应信息为响应失败信息,则所述Modbus RTU/ASCII从站组织一条Modbus TCP响应失败报文,发送给Modbus TCP主站。
[0032]根据本专利技术的第二方面,提供一种转换装置,包括:
[0033]接收模块,用于接收Modbus TCP主站发送的Modbus TCP请求报文;
[0034]判断模块,用本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种Modbus报文发送方法,其特征在于,包括:接收Modbus TCP主站发送的Modbus TCP请求报文;判断所述Modbus TCP请求报文是否为写多个寄存器或多个线圈指令;若是,则将所述Modbus TCP请求报文转换为Modbus RTU/ASCII协议报文,并对所述Modbus RTU/ASCII协议报文进行分组,得到多条Modbus RTU/ASCII协议子报文;按照顺序逐条向所述Modbus RTU/ASCII从站发送Modbus RTU/ASCII协议子报文,并接收所述Modbus RTU/ASCII从站的响应信息;待发送完所有的Modbus RTU/ASCII协议子报文后,根据所述Modbus RTU/ASCII从站返回的响应信息,组织一条Modbus TCP响应报文,发送给Modbus TCP主站。2.根据权利要求1所述的Modbus报文发送方法,其特征在于,所述若是,则将所述Modbus TCP请求报文转换为Modbus RTU/ASCII协议报文,并对所述Modbus RTU/ASCII协议报文进行分组,得到多条Modbus RTU/ASCII协议子报文,包括:若是,则将所述Modbus TCP请求报文转换为Modbus RTU/ASCII协议报文,检查所述Modbus RTU/ASCII协议报文中寄存器或线圈的数量;如果寄存器或线圈的数量未超过预设分组参数,则对所述Modbus RTU/ASCII协议报文不进行分组,直接将所述Modbus RTU/ASCII协议报文通过串行总线传递到Modbus RTU/ASCII从站;如果寄存器或线圈的数量未超过预设分组参数,则对所述Modbus RTU/ASCII协议报文按照预设分组参数进行分组。3.根据权利要求2所述的Modbus报文发送方法,其特征在于,所述预设分组参数为每组包括的寄存器或线圈数量,所述对所述Modbus RTU/ASCII协议报文按照预设分组参数进行分组,包括:基于所述Modbus RTU/ASCII协议报文中寄存器或线圈的总数和预设分组参数,计算需要分组的个数;按照预设分组参数和需要分组的个数,重新组织所述Modbus RTU/ASCII协议报文,获取多个Modbus RTU/ASCII协议子报文。4.根据权利要求3所述的Modbus报文发送方法,其特征在于,所述按照预设分组参数和需要分组的个数,重新组织所述Modbus RTU/ASCII协议报文,获取多条Modbus RTU/ASCII协议子报文,包括:Modbus RTU/ASCII从站地址和功能码保持不变,每一条所述Modbus RTU/ASCII协议子报文的起始地址根据分组编号和预设分组参数做相应的偏移;寄存器数量或线圈个数根据预设分组参数确定;报文数据部分从原Modbus TCP报文对应的数据部分拷贝;计算每一条所述Modbus RTU/ASCII协议子报文的CRC校验值。5.根据权利要求4所述的Modbus报文发送方法,其特征在于,所述按照顺序逐条向所述Modbus RTU/ASCII从站发送Modbus RTU/ASCII协议子报文,并接收所述Modbus RTU/ASCII从站的响应信息,包括:转换装置按照顺...

【专利技术属性】
技术研发人员:郑松峰周厚明张朋飞
申请(专利权)人:武汉迈威通信股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1