Modbus协议介绍及解析

Modbus协议介绍及解析

1.Modbus简介

Modbus是一种广泛应用于工业控制领域串行通信协议,以其开放性、高可靠性、高效简单性、免费等优点,成为了工业领域通信协议的业界标准,是工业现场电子设备之间常用的连接方式。Modbus按其格式可分为Modbus-RTU,Modbus-ASCII,Modbus-TCP,其中前两者适用于串行通信控制网络中,例如RS485,RS232等,而Modbus-TCP主要应用于基于以太网TCP/IP通信的控制网络中。通过此协议,控制器相互之间、或控制器和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。Modbus通讯物理接口可以选用串口(包括RS232和RS485),也可以选择以太网口。

2.报文类型及格式

2.1协议描述

Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的 Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域,启动Modbus事务处理的客户机创建Modbus 应用数据单元。如图1所示。Modbus-RTU方式的通讯数据帧格式如图2所示。
在这里插入图片描述

2.2通讯信息传输过程

当命令由主机发送至从机时,符合相应地址码的从机处理命令,根据功能码作相应任务。如果CRC校验无误,则执行相应的任务,然后把数据返送给主机。如果CRC校验出错就不返回任何信息,主机应当有相应的超时处理。如果接收正确,但不能处理,返回异常报文。对字型数据发送顺序为先高字节后低字节;对浮点数按照正常的顺序发送;信文总长度(包括地址码和CRC校验码)不超过256字节。

2.3 应用数据单元

应用数据单元(ADU)由地址码、功能码、数据区、错误校验码构成。

地址码:

地址码是通讯信息帧的第一字节,从0到255。每个从机有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。0xFF为广播地址。

功能码:

功能码向服务器指示将执行哪种操作。Modbus协议建立了客户机启动的请求格式,用一个字节编码 Modbus数据单元的功能码域,当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作。

数据区:

数据区可以是数据(如:开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。均为二进制数。各种数据参考地址在综合控制装置中均从1开始,在通讯过程中则从0开始,所以读写地址N时使用的地址数据为N-1。

错误校验码(CRC校验):

由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,CRC校验可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。
Modbus通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。在进行CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。

3.主要功能码说明

(1)读取内部线圈(接点)

功能码:0x01
描述:读从机多个内部线圈数据。不支持广播命令。(地址0XXXX)
查询
查询信息指定要读取的线圈开始地址和线圈数量。线圈地址从0开始。
以读取地址为17的从机中第7~15号内部线圈的值为例:

在这里插入图片描述

响应
响应报文格式:
在这里插入图片描述

计算机发送命令:[设备地址] [功能码01] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
设备响应:[设备地址] [功能码01] [返回的字节个数][数据1][数据2]…[数据n][CRC校验的低8位] [CRC校验的高8位]

(2)读取开关量输入

功能码:0x02
描述:读从机多个开入。不支持广播命令。(地址1XXXX,只读)
查询和响应同0x01功能码

(3)写数字量(线圈状态)

功能码:0x05
例:[11][05][00][AC][FF][00][CRC低][CRC高]
1.功能码:写数字量的命令号固定为05。
2.需下置的寄存器地址高8位,低8位:表明了需要下置的开关的地址。
3.下置的数据高8位,低8位:表明需要下置的开关量的状态。例子中为把该开关闭合。注意,此处只可以是[FF][00]表示闭合[00][00]表示断开,其他数值非法。
4.此命令一条只能下置一个开关量的状态。
计算机发送命令:[设备地址] [功能码05] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
设备响应:如果成功把计算机发送的命令原样返回,否则不响应。

(4)取多个保持寄存器(数据寄存器)

功能码:0x03
描述:读从机多个保持寄存器二进制数据。不支持广播命令。(地址4XXXX)
查询
查询信息指定要读取的寄存器开始地址和寄存器数量。寄存器地址从0开始。
以读取地址为17的从机中第108~第110号寄存器为例:
查询报文格式
在这里插入图片描述
响应
响应报文格式:
在这里插入图片描述
计算机发送命令:[设备地址] [功能码03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
设备响应:[设备地址] [功能码03] [返回的字节个数][数据1][数据2]…[数据n][CRC校验的低8位] [CRC校验的高8位]

(5)读取多个输入寄存器(模拟输入寄存器)

功能码:0x04
描述:读从机多个模拟输入寄存器二进制数据。不支持广播命令。(地址3XXXX,只读)
同0x03功能码

(6)写单个寄存器

功能码:0x06
描述:写从机单个寄存器。(地址4XXXX)
命令: 命令指定要写的寄存器地址和写入的值。地址从900开始。
以将数据1写入地址为1的从机中第900号寄存器为例:
命令报文格式:
在这里插入图片描述
响应
响应报文格式:与命令格式相同。
计算机发送命令:[设备地址] [功能码06] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]

(7)写多个保持寄存器

功能码:0x10
描述:写从机多个保持寄存器。(地址4XXXX)
命令: 命令指定要写的寄存器地址和写入的值。地址从900开始。
以将数据1写入地址为1的从机中第900、901号寄存器为例:
命令报文格式:
在这里插入图片描述
响应
响应报文格式:
在这里插入图片描述
计算机发送命令:[设备地址] [功能码10] [需下置的寄存器起始地址高8位] [低8位] [要写的寄存器数量的高字节] [低字节] [要写的字节数(等于寄存器数目*2)] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
设备响应:如果成功则响应:设备地址,功能码[0x10],寄存器起始地址高字节,低字节,要写的寄存器数量的高字节,低字节,CRC校验低字节,高字节

组态王与Modbus协议的地址对应规则

  • 13
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥子@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值