测试工具:信捷 T-com 串口调试工具代替触摸屏;
测试设备:信捷 PLC ;
PLC 的内部软元件编号与 Modbus-RTU 地址编号请参考信捷 PLC Modbus 通讯功能章节。
Modbus 功能代码:
功能码(16 进制) | 功能 |
01 | 读多个位 |
03 | 读多个寄存器 |
05 | 写单个位 |
06 | 写单个寄存器 |
0F | 写多个位 |
10 | 写多个寄存器 |
通讯格式:波特率 19200,偶校验(EVEN), 数据位 8 位, 停止位 1 位。
注意: 以下测试地址都是十六进制地址, 实际操作需将十六进制地址转换成十 进制地址输入到触摸屏中。
1. 01 功能码: 读取多个线圈位操作
例如:读取线圈 0X4800~0X4815 的位状态。
0X4800~0X4807:PLC Y0~Y7 0X4808~0X4815:PLC Y10~Y17
发送命令: 01 01 48 00 00 10 2A 66
动作 | 设备号 (1 Byte) | 功能码 (1 Byte) | 起始地址 高位(1 Byte) | 起始地址 低位(1 Byte) | 总位数高位(1 Byte) | 总位数低位(1 Byte) | CRC(1 Byte) | (1 Byte) |
发送 | 01 | 01 | 48 | 00 | 00 | 10 | 2A | 66 |
返回命令: 01 01 02 00 00 B9 FC
动作 | 设备号 (1 Byte) | 功能码 (1 Byte) | 字节数 (2 Byte) | 位状态 (On/Off) | 位状态 (On/Off) | CRC(1 Byte) | (1 Byte) |
返回 ON | 01 | 01 | 02 | FF | 03 | B8 | 0D |
返回 Off | 01 | 01 | 02 | 00 | 00 | B9 | FC |
2. 03 功能码: 读取多个字操作(数据显示)
例如:读取 4X00~4X02 的数据。
4X000~4X003 :PLC D0~D2
4X00 = 4, 4X01= 5, 4X001= 1, 4X02= 2
发送命令: 01 03 00 00 00 04 44 09
动作 | 设备号 (1 Byte) | 功能码 (1 Byte) | 起始地址 高位(1 Byte) | 起始地址 低位(1 Byte) | 总位数高位(1 Byte) | 总位数低位 (1 Byte) | CRC(1 Byte) | (1 Byte) |
发送 | 01 | 03 | 00 | 00 | 00 | 04 | 44 | 09 |
发送命令: 01 03 08 00 04 00 05 00 01 00 02 CC 16
动 作 | 设备号(1 Byte) | 功能码(1 Byte) | 字节数 (1Byte) | 寄 存 器 值高位 4X00 | 寄 存 器 值低位 4X00 | 寄存器值 高位 4X01 | 寄存器值 低位 4X01 | 寄 存 器 值高位 4X02 | 寄 存 器 值低位 4X02 |
返 回 | 01 | 03 | 08 | 00 | 04 | 00 | 05 | 00 | 01 |
寄存器值 高位 4X023 | 寄存器值 低位 4X023 | CRC | |||||||
00 | 02 | CC | 16 |
3. 05 功能码: 写单个位操作(按钮)
例如: 置 ON 0X4800
0X4800 :PLC Y0
发送命令: 01 05 48 00 FF 00 9B 9A
动 作 | 设备号(1 Byte) | 功能码(1 Byte) | 起始地址高 位(1 Byte) | 起始地址低 位(1 Byte) | 总位数 高 位 (1 Byte) | 总位数 低 位 (1 Byte) | CRC(1Byte) | (1Byte) |
发 送 | 01 | 05 | 48 | 00 | FF | 00 | 9B | 9A |
返回命令: 01 05 48 00 FF 00 9B 9A
动作 | 设备号(1 Byte) | 功能码(1 Byte) | 起始地址高位(1 Byte) | 起始地址低位(1 Byte) | 总位数高位(1 Byte) | 总位数低位(1 Byte) | CRC(1 Byte) | (1 Byte) |
返回 | 01 | 05 | 48 | 00 | FF | 00 | 9B | 9A |
例如:置 OFF 0X4800
0X4800 :PLC Y0
发送命令: 01 05 48 00 00 00 DA 6A
动作 | 设备号 (1 Byte) | 功能码 (1 Byte) | 起始地址 高位(1 Byte) | 起始地址 低位(1 Byte) | 总位数高位 (1 Byte) | 总位数低位 (1 Byte) | CRC(1 Byte) | (1 Byte) |
发送 | 01 | 05 | 48 | 00 | 00 | 00 | DA | 6A |
返回命令: 01 05 48 00 00 00 DA 6A
动作 | 设备号 (1 Byte) | 功能码 (1 Byte) | 起始地址 高位(1 Byte) | 起始地址 低位(1 Byte) | 总位数高位 (1 Byte) | 总位数低位 (1 Byte) | CRC(1 Byte) | (1 Byte) |
返回 | 01 | 05 | 48 | 00 | 00 | 00 | DA | 6A |
4. 06 功能码: 写单个字操作
例如: 地址 4X00 写数据 8
4X00 :PLC D0
发送命令: 01 06 00 00 00 08 88 0C
动作 | 设备号 (1 Byte) | 功能码(1 Byte) | 起始地址 高位(1 Byte) | 起始地址 低位(1 Byte) | 寄存器值 高位(1 Byte) | 寄存器值 低位(1 Byte) | CRC (1 Byte) | (1 Byte) |
发送 | 01 | 06 | 00 | 00 | 00 | 08 | 88 | 0C |
返回命令: 01 06 00 00 00 08 88 0C
动作 | 设备号 (1 Byte) | 功能码(1 Byte) | 起始地址 高位(1 Byte) | 起始地址 低位(1 Byte) | 寄存器值 高位(1 Byte) | 寄存器值 低位(1 Byte) | CRC (1 Byte) | (1 Byte) |
返回 | 01 | 06 | 00 | 00 | 00 | 08 | 88 | 0C |
5. 10 功能码: 写多个字操作(数据输入写双字 Dword)
例如: 分别给地址 4X00 写数据 10, 4X01 写数据 11, 4X02 写数据 12
4X00~4X02 :PLC D0~D2
发送命令: 01 10 00 00 00 03 06 00 0A 00 0B 00 0C 0F 46
动 作 | 设 备 号(1 | 功 能 码(1 | 起始地址 高位(1 Byte) | 起始地址 低位(1 Byte) | 寄存器 总数高位 (1 Byte) | 寄存器 总数低位 (1 Byte) | 寄存器 总字节数 (1 Byte) | 寄存器 值高位 | 寄存器值 低位(1 Byte) |
Byte) | Byte) | (1Byte) | |||||||
发 送 | 01 | 10 | 00 | 00 | 00 | 03 | 06 | 00 | 0A |
寄存器值 高位(1 Byte) | 寄存器值 低位(1 Byte) | 寄存器值 高位(1 Byte) | 寄存器值 低位(1 Byte) | CRC | |||||
00 | 0B | 00 | 0C | 0F | 46 |
返回命令: 01 10 00 00 00 03 80 08
动作 | 设备号(1 Byte) | 功能码(1 Byte) | 起始地址高位(1 Byte) | 起始地址低位(1 Byte) | 寄存器总数高位(1 Byte) | 寄存器总数低位(1 Byte) | CRC(1 Byte) | (1 Byte) |
发送 | 01 | 10 | 00 | 00 | 00 | 03 | 80 | 08 |
6. 0F 功能码: 写多个位操作
例如: 置 ON 0X4800~0X4803
0X4800~0X4807:PLC Y0~Y7 0X4810 :PLC Y10
发送命令: 01 0F 48 00 00 09 02 FF 01 AD 48
动作 | 设备号 (1 Byte) | 功能码 (1 Byte) | 起始地址 高位(1 Byte) | 起始地址 低位(1 Byte) | 位总数 高位 (1 Byte) | 位总数 低位 (1 Byte) | 寄位总 字节数 (1 Byte) | 位的值 低位 (1Byte) | 位的值 高位 (1Byte) |
发送数据 | 01 | 0F | 48 | 00 | 00 | 09 | 02 | FF | 01 |
CRC | |||||||||
AD | 48 |
返回命令: 01 0F 48 00 00 09 82 6D
动作 | 设备号 (1 Byte) | 功能码 (1 Byte) | 起始地址高位 (1 Byte) | 起始地址低位 (1 Byte) | 位总数高位(1 Byte) | 位总数低位(1 Byte) | CRC | |
返回 | 01 | 0F | 48 | 00 | 00 | 09 | 82 | 6D |