发布时间:2019-08-24 来源:众智博远
功能代码的读写访问
在 Modbus 通讯中,主站和从站之间的数据交换采用的是预定义的功能码。
控制单元使用以下 Modbus 功能代码:
FC 03:Holding Register,用于从变频器读取数据
FC 06:Write Single Register,用于单个寄存器的写入
FC 16:Write Multiple Registers,用于多个寄存器的写入
每个的寄存器地址都可以作为起始地址。
控制器通过 FC 03 发出读任务时,可能不止一个寄存器响应。响应的寄存器的数量包含在读任务的字节 4 和 5 中。
列表: 读任务的结构,从站号 17,示例
值 | 字节 | 描述 |
---|---|---|
11 h | 0 | 从站地址 |
03 h00 h6D h00 h02 h | 12345 | 功能代码寄存器起始地址“高”(寄存器 40110)寄存器起始地址“低”寄存器“高”的数量(2 个寄存器:40110;40111)寄存器“低”的数量 |
xx hxx h | 67 | CRC “低”CRC “高” |
应答返回了对应的数据组:
列表: 从站对读任务的应答,示例
值 | 字节 | 描述 |
---|---|---|
11 h | 0 | 从站地址 |
03 h04 h11 h22 h33 h44 h | 123456 | 功能码字节数量(返回 4 个字节)一个寄存器“高”的数据一个寄存器“低”的数据二个寄存器“高”的数据二个寄存器“低”的数据 |
xx hxx h | 78 | CRC “低”CRC “高” |
列表: 无效读任务
读任务 | 变频器的响应 |
---|---|
寄存器地址无效 | 异常码 02(数据地址无效) |
读取一个“只写寄存器” | 所有值都置 0 的报文。 |
读取一个预留的寄存器 | |
不止 125 个寄存器被控制器寻址 | 异常码 03(数据值无效) |
起始地址加上寄存器数量的总和超出定义的寄存器范围 | 异常码 02(数据地址无效) |
起始地址是保持寄存器的地址。
通过 FC 06 发出写任务时,始终只有一个寄存器响应。在写任务的字节 4 和 5 中包含了需要被写入该寄存器的数值。
列表: 写任务的结构,从站号 17,示例
值 | 字节 | 描述 |
---|---|---|
11 h | 0 | 从站地址 |
06 h 00 h 63 h 55 h 66 h | 12345 | 功能码寄存器起始地址“高”(写寄存器 40100)寄存器起始地址“低”寄存器数据“高”寄存器数据“低” |
xx hxx h | 67 | CRC “低”CRC “高” |
应答返回了寄存器地址(字节 2 和 3)和上级控制器写入该寄存器的数值(字节 4 和 5)。
列表: 从站对写任务的应答
值 | 字节 | 描述 |
---|---|---|
11 h | 0 | 从站地址 |
06 h 00 h 63 h 55 h 66 h | 12345 | 功能码寄存器起始地址“高”寄存器起始地址“低”寄存器数据“高”寄存器数据“低” |
xx hxx h | 67 | CRC “低”CRC “高” |
列表: 无效写任务
写任务 | 变频器的响应 |
---|---|
地址错误(无保持寄存器地址) | 异常码 02 - 数据地址无效 |
向一个“只读”寄存器写数据 | 异常码 04 - 设备故障 |
向一个预留的寄存器写数据 |
出现异常码 4 时,您可以通过保持寄存器 40499 读出驱动内部的故障代码,其在上次参数访问时通过保持寄存器显示。