网络协议——Modbus-RTU
网络协议——Modbus-RTU,简介、消息格式、Modbus寄存器种类说明、功能码01H、功能码02H、功能码03H、功能码04H、功能码05H、功能码06H、功能码0FH、功能码10H。
·
目录
1、简介
- Modbus-RTU(Remote Terminal Unit)是一种串行通信协议,广泛用于工业自动化领域,特别是在监控和控制设备之间进行数据通信。
- Modbus-RTU是无状态协议,每次通信都是独立的,不维护通信状态信息。
- Modbus-RTU的通信结构是基于主从(Master-Slave)模式的。一个主设备(Master)可以控制多个从设备(Slave),只允许主设备发起请求,从机被动响应。
2、消息格式
- 高字节在前,低字节在后
3、Modbus寄存器种类说明
- 线圈寄存器(Coils)
- 功能:表示单个位的输出状态,常用于DO数字量输出,常用场景有控制继电器、晶体管或其他二进制输出设备。
- 地址范围:00001到09999
- 读/写方式:可读可写
- 数据类型:单个位(1位)按位操作
- 功能码:
- 读线圈状态:功能码 01H
- 写单个线圈:功能码 05H
- 写多个线圈:功能码 0FH
- 离散输入寄存器(Discrete Inputs)
- 功能:表示单个位的输入状态,常用于DI数字量输入,通过外部设置改变输入状态。常用场景有按钮开关、光电开关等。
- 地址范围:10001到19999
- 读/写方式:只读
- 数据类型:单个位(1位)按位操作
- 功能码:
- 读离散输入状态:功能码 02H
- 输入寄存器(Input Registers)
- 功能:存储连续的16位数据,常用于AI模拟量输入,控制器运行时从外部设备获取的参数。常用场景有传感器或测量设备的输入。
- 地址范围:30001到39999
- 读/写方式:只读
- 数据类型:16位(2字节)按字节操作
- 功能码:
- 读输入寄存器:功能码 04H
- 保持寄存器(Holding Registers)
- 功能:存储连续的16位数据,常用于AO模拟量输出,输出参数或保持参数。常用场景有存储设备的配置参数或输出数据。
- 地址范围:40001到49999
- 读/写方式:可读可写
- 数据类型:16位(2字节)按字节操作
- 功能码:
- 读保持寄存器:功能码 03H
- 写单个保持寄存器:功能码 06H
- 写多个保持寄存器:功能码 10H
4、功能码01H
- 01H:读线圈状态。读取一组线圈的状态,返回一个字节数组,其中每个位表示一个线圈的状态。
- 发送报文
- 含义:从机地址为01H,寄存器地址为0000H,读取寄存器数量0008H为8个,最后两位为校验位。
- 响应报文
- 含义:返回字节数量01H为1个字节,01功能码为按位读取,需要把返回的数据转换为二进制。
- 数据1为0FH,转换为二进制为:(线圈0007H-0000H)
5、功能码02H
- 02H:读离散输入状态。读取一组离散输入的状态,返回一个字节数组,其中每个位表示一个输入的状态。
- 发送报文
- 含义:从机地址为01H,寄存器地址为0000H,读取寄存器数量0008H为8个,最后两位为校验位。
- 【注】这里的寄存器地址为偏移地址,逻辑地址是从10001开始的。
- 响应报文
- 含义:返回字节数量01H为1个字节,02功能码为按位读取,需要把返回的数据转换为二进制。
- 数据1为0FH,转换为二进制为:(线圈0007H-0000H)
6、功能码03H
- 03H:读保持寄存器。读取一组保持寄存器的值,每个寄存器返回16位(2字节)数据。
- 发送报文
- 含义:0000H寄存器开始,读取2个寄存器。
- 响应报文
- 含义:返回字节数04H为4个字节(2个寄存器,一个寄存器返回2个字节),数据1为0001H(通道1),数据2为0000H(通道2)。
7、功能码04H
- 04H:读输入寄存器。读取一组输入寄存器的值,每个寄存器返回16位(2字节)数据。
- 发送报文
- 含义:0000H寄存器开始,读取2个寄存器。
- 响应报文
- 含义:返回4个字节,数据1为0001H,数据2为0000H。
8、功能码05H
- 05H:写单个线圈。设置一个线圈的状态,写入一个位(0或1)。
- 发送报文和响应报文一致
- 含义:寄存器地址为0000H,向寄存器写入FF00H控制线圈吸合(写入0000H控制线圈断开)。
9、功能码06H
- 06H:写单个保持寄存器。设置一个保持寄存器的值,写入16位(2字节)数据。
- 发送报文和响应报文一致
- 含义:寄存器地址为0000H,向寄存器写入值为0001H。
10、功能码0FH
- 0FH:写多个线圈。设置多个线圈的状态,写入一个字节数组,其中每个位表示一个线圈的状态。
- 发送报文
- 含义:寄存器起始地址为0000H,线圈寄存器数量为0004H,写入字节数为01H,写入数据为0FH(需要转换为二进制)
- 这意味着从起始地址开始的四个线圈都要设置为1(打开)。
- 含义:寄存器起始地址为0000H,线圈寄存器数量为0004H,写入字节数为01H,写入数据为0FH(需要转换为二进制)
- 响应报文
- 含义:寄存器起始地址为0000H,线圈寄存器数量为0004H。
11、功能码10H
- 10H:写多个保持寄存器。设置多个保持寄存器的值,写入多个16位(2字节)数据。
- 发送报文
-
- 含义:寄存器起始地址为0000H,寄存器数量为2个,写2个保持寄存器需要4个字节,数据1为0001H,数据2为0001H。
- 响应报文
- 含义:寄存器起始地址为0000H,保持寄存器数量为2个。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献5条内容
所有评论(0)