Modbus 协议定义了4 种基本数据类型:可读写位数据、只读位数据、只读16 位数据、可读写16 位数据。这些数据分别被称为线圈状态、输入状态、输入寄存器、保持寄存器。Modbus 协议中定义的这些数据都是一个从地址1 开始的数组,访问时需要指明从哪个地址开始访问,访问多少个数据。访问需要执行的操作由功能码确定,功能码的作用见表3-11。
表3-11 Modbus 功能码
续表
1. 常用操作码
Modbus 协议相当复杂,但是常用的命令也就简单的几个,01,02,03,04,05,06,15,16 号命令,其功能和操作数据类型如表3-12 所示。
表3-12 Modbus 常用功能码及数据类型
2. 读线圈操作示例
“读取线圈状态”功能码01 可以读取除输入元件之外的其他元件,如Y、M、SM、S 等。其请求格式、相应格式及应用示例分别如表3-13、3-14 和3-15所示。
表3-13 01 功能码请求格式
表3-14 01 功能码响应格式
表3-15 01 功能码应用示例
在该例子中,主站请求读取0013H(十进制19)单元开始的连续0013H(十进制19)个线圈状态。从站从地址20(起始地址19+1)开始将连续19 个单元(27~20、35~28 和38~36 共3 个字节)的状态数据(CD、6B 和05)返回给主站。在第一个字节 CD 中线圈从左到右对应线圈 27~20,其二进制值为11001101,表示线圈状态为ON-ON-OFF-OFF-ON-ON-OFF-ON,其他线圈状态以此类推。
3. 读输入状态操作示例
“读输入状态”功能码02 可以读取从机离散量输入信号的ON/OFF 状态。其请求格式、相应格式及应用示例分别如表3-16、3-17 和3-18 所示。
表3-16 02 功能码请求格式
表3-17 02 功能码响应格式
表3-18 02 功能码应用示例
在该例子中,主站请求读取00C4H(十进制196)单元开始的连续0016H(十进制22)个输入元件状态。从站从地址197(起始地址196+1)开始将连续22 个单元(204~197、212~205 和218~213 共3 个字节)的状态数据(AC、DB 和35)返回给主站。在第一个字节AC 中离散量从左到右对应204~197,其二进制值为10101100,表示线圈状态为ON-OFF-ON-OFF-ON-ON-OFF-OFF,其他线圈状态以此类推。
4. 读保持寄存器操作示例
“读保持寄存器”功能码03 可以读取从设备1 个或者多个保持寄存器状态当前值。其请求格式、相应格式及应用示例分别如表3-19、3-20 和3-21 所示。
表3-19 03 功能码请求格式
表3-20 03 功能码响应格式
表3-21 03 功能码应用示例
续表
在该例子中,主站请求读取006BH(十进制107)单元开始的连续0003H(十进制3)个元件保持寄存器的值。从站从地址108(起始地址107+1)开始将连续3 个单元(108~110 共3 个字)的状态数据(022B、0000、和0064)返回给主站。
5. 读输入寄存器操作示例
“读输入寄存器”功能码04 可以读取从设备1 个或者多个输入寄存器状态当前值。其请求格式、相应格式及应用示例分别如表3-22、3-23 和3-24 所示。
表3-22 04 功能码请求格式
(www.xing528.com)
表3-23 04 功能码响应格式
表3-24 04 功能码应用示例
在该例子中,主站请求读取起始地址为0008H(十进制8)单元开始的连续0001H(十进制1)个元件输入寄存器的值。从站从地址9(起始地址8+1)开始将单个09H 单元的状态数据000A 返回给主站。
6. 设置单个线圈操作示例
“设置单个线圈”功能码05 强置单个线圈状态为ON 或者OFF,支持广播操作。FF00H 值请求线圈处于ON 状态,0000H 值请求线圈处于OFF 状态,其他值对线圈无效,不起作用。其请求格式、相应格式及应用示例分别如表3-25、3-26 和3-27 所示。
表3-25 05 功能码请求格式
表3-26 05 功能码响应格式
表3-27 05 功能码应用示例(吸合6 号继电器)
在该例子中,主站请求吸合(FF00H 表示吸合)6(起始地址0005H+1)号继电器线圈。从站设置成功后,返回FF00H 给主站。
7. 设置单个保持寄存器操作示例
“设置单个寄存器”功能码06 设置各个单个保持寄存器的值。其请求格式、相应格式及应用示例分别如表3-28、3-29 和3-30 所示。
表3-28 06 功能码请求格式
表3-29 06 功能码响应格式
表3-30 06 功能码应用示例(设置9 号保持寄存器内容为25)
在该例子中,主站请求设置0009H(0008H+1)寄存器的值为00019H。从站设置成功后,设置结果给主站。
8. 设置多个继电器操作示例
“设置多个继电器”功能码15 设置多个继电器的状态。其请求格式、相应格式及应用示例分别如表3-31、3-32 和3-33 所示。
表3-31 15 功能码请求格式
表3-32 15 功能码响应格式
表3-33 15 功能码应用示例
9. 设置多个保持寄存器操作示例
“设置多个保持寄存器”功能码16 设置多个保持寄存器的值状态。其请求格式、相应格式及应用示例分别如表3-34、3-35 和3-36 所示。
表3-34 16 功能码请求格式
表3-35 16 功能码响应格式
表3-36 16 功能码应用示例
续表
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。