DAM-16DO 通信协议
本产品为16路达林顿数字输出模块,支持标准Modbus RTU指令。有关详细的指令生成与解析方式,可根据本文中的寄存器表结合Modbus协议规范。
Modbus寄存器说明
设备地址介绍
本产品默认从机设备地址为0x01可设置地址范围0x01~0xF7。支持如下地址。
| 地址范围 | 状态 | 说明 |
|---|---|---|
| 0x00 | ❌ 禁用 | 无响应广播地址仅用于主站发送命令给所有从机从机不能使用从机不回复任何报文。 |
| 0x01~0xF7 | ✅ 可用 | 标准从机地址可分配给任意设备 |
| 0xFE | ❌ 禁用 | 有响应广播地址仅用于主站发送命令给所有从机从机不能使用。 |
使用0xFE广播地址时应只接一个设备接多个设备时所有设备都响应会出现总线冲突。
功能码介绍
本产品以线圈寄存器为主,支持以下功能码指令。
| 功能码 | 功能说明 | 说明 |
|---|---|---|
| 01 | 读线圈状态 | 读数字输出状态 |
| 03 | 读保持寄存器 | 读取设备参数 |
| 05 | 写单线圈 | 写单个数字输出 |
| 06 | 写单寄存器 | 写设备参数 |
| 0F | 写多个线圈 | 写多个数字输出 |
| 10 | 写多个寄存器 | 写多个设备参数 |
寄存器地址介绍
| 地址(HEX) | 地址存储内容 | 说明 | 类型 | Modbus 功能码 |
|---|---|---|---|---|
| 0x0000~0x000F | 1路~16路数字输出 | 0xFF00:输出导通; 0x0000:输出关断; | 读/写 | 0x01,0x05,0x0F |
| 0x00FF | 全部数字输出 | 0xFF00:输出全部导通;0x0000:输出全部关断; | 写 | 0x05 |
| 0x1000~0x100F | 1路~16路数字输出翻转 | 0xFF00:输出翻转; 0x0000:输出不变; | 写 | 0x05,0x0F |
| 0x10FF | 全部数字输出翻转 | 0xFF00:输出全部翻转; 0x0000:输出全部不变; | 写 | 0x05 |
| 0xA000~0xA00F | 1路~16路数字开机输出 | 0xFF00:输出导通; 0x0000:输出关断;开机输出状态。 | 读/写/存 | 0x01,0x05,0x0F |
| 4x2000~4x200F | 1路~16路数字输出模式 | 两种控制模式:0x0000 指令模式,0x0001 循环模式 | 读/写 | 0x03,0x06,0x10 |
| 4x3000~4x300F | 1路~16路数字输出闪开 | 延时=数值*100ms例如数值:0x0007延时:7*100MS = 700MS | 写 | 0x06,0x10 |
| 4x4000~4x400F | 1路~16路数字输出闪闭 | 延时=数值*100ms例如数值:0x0007延时:7*100MS = 700MS | 写 | 0x06,0x10 |
| 4x5000~4x500F | 1路~16路数字输出延时 | 延时=数值*100ms例如数值:0x0007延时:7*100MS = 700MS | 写/存 | 0x03,0x06,0x10 |
| 4x8000 | SUK | 产品型号 | 读/存 | 0x03 |
| 4x8001 | 软件版本 | 十进制小数点左移两位即表示软件版本例0x0064 = 100 = V1.00 | 读/写/存 | 0x03,0x06 |
| 4x8002 | 设备地址 | 直接存储 Modbus 地址默认地址:0x0001 | 读/写/存 | 0x03,0x06 |
| 4x8003 | 串口参数 | 高八位为停止位和校验方式,低八位为波特率 | 读/写/存 | 0x03,0x06 |
| 4x8004 | 看门狗 | 时间间隔内没通讯关闭输出 | 读/写/存 | 0x03,0x06 |
| 4x9000~4x900F | 用户自定义区域 | 字符串格式 | 读/写/存 | 0x03,0x06,0x10 |
带'存'标记的寄存器参数掉电保存,修改后掉电重启后仍然生效。
Modbus RTU 指令解析
控制单个数字输出
发送码:01 05 00 00 FF 00 8C 3A
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 05 | 05指令 | 控制数字输出指令 |
| 00 00 | 地址 | 要控制数字输出的寄存器地址 |
| FF 00 | 指令 | 0xFF00:输出导通; 0x0000:输出关断; |
| 8C 3A | CRC16 | 前面字节数据的CRC16校验 |
返回码: 01 05 00 00 FF 00 8C 3A
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 05 | 05指令 | 控制数字输出指令 |
| 00 00 | 地址 | 要控制数字输出寄存器地址 |
| FF 00 | 指令 | 0xFF00:输出导通; 0x0000:输出关断; |
| 8C 3A | CRC16 | 前面字节数据的CRC16校验 |
示例: [1号地址设备]:
1号输出导通 : 01 05 00 00 FF 00 8C 3A
1号输出关断 : 01 05 00 00 00 00 CD CA
2号输出导通 : 01 05 00 01 FF 00 DD FA
2号输出关断 : 01 05 00 01 00 00 9C 0A
3号输出导通 : 01 05 00 02 FF 00 2D FA
3号输出关断 : 01 05 00 02 00 00 6C 0A
4号输出导通 : 01 05 00 03 FF 00 7C 3A
4号输出关断 : 01 05 00 03 00 00 3D CA
1号输出翻转 : 01 05 10 00 FF 00 88 FA
2号输出翻转 : 01 05 10 01 FF 00 D9 3A
3号输出翻转 : 01 05 10 02 FF 00 29 3A
4号输出翻转 : 01 05 10 03 FF 00 78 FA
控制全部数字输出
发送码:01 05 00 FF FF 00 BC 0A
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 05 | 05指令 | 控制数字输出指令 |
| 00 FF | 地址 | 固定0x00FF |
| FF 00 | 指令 | 0xFF00:输出导通; 0x0000:输出关断; |
| BC 0A | CRC16 | 前面字节数据的CRC16校验 |
返回码: 01 05 00 FF FF 00 BC 0A
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 05 | 05指令 | 控制数字输出指令 |
| 00 FF | 地址 | 固定0x00FF |
| FF 00 | 指令 | 0xFF00:输出导通; 0x0000:输出关断; |
| BC 0A | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]:
全部输出导通 : 01 05 00 FF FF 00 BC 0A
全部输出关断 : 01 05 00 FF 00 00 FD FA
全部数字输出翻转 : 01 05 10 FF FF 00 B8 CA
读取数字输出状态
发送码:01 01 00 00 00 10 3D C6
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 01 | 01指令 | 查询数字输出状态指令 |
| 00 00 | 输出起始地址 | 要查询的第一个数字输出寄存器地址 |
| 00 10 | 输出数量 | 要查询的输出数量不能超过最大输出地址 |
| 3D C6 | CRC16 | 前面字节数据的CRC16校验 |
返回码:01 01 02 00 00 B9 FC
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 01 | 01指令 | 查询数字输出状态指令 |
| 02 | 字节数 | 返回状态信息的所有字节数。 |
| 00 | 查询的状态 | 返回的数字输出状态。 Bit0:起始输出状态, Bit1:下个输出状态, …… 依次类推高端空闲位则为零。 |
| B9 FC | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
发送 : 01 01 00 00 00 10 3D C6 //查询前16路输出
返回 : 01 01 02 00 00 B9 FC //前16路输出全部关断
发送 : 01 01 00 01 00 03 2D CB //查询2,3,4号输出状态
返回 : 01 01 01 05 91 8B //2、4号输出导通,3号输出关断
发送 : 01 01 00 03 00 05 0C 09 //查询4-8号输出
返回 : 01 01 01 0F 11 8C //4-7号输出导通,8号输出关断
写数字输出状态
发送码:01 0F 00 00 00 10 02 FF FF E3 90
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 0F | 0F指令 | 写数字输出状态指令 |
| 00 00 | 输出起始地址 | 要控制的第一个数字输出寄存器地址 |
| 00 10 | 输出数量 | 操作输出数量不能超过最大输出数量 |
| 02 | 字节数量 | 状态字节数 |
| FF FF | 输出状态 | Bit0:起始输出状态, Bit1:下个输出状态, …… 依次类推高端空闲位则为零 |
| E3 90 | CRC16 | 前面字节数据的CRC16校验 |
返回码:01 0F 00 00 00 10 54 07
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 0F | 0F指令 | 写数字输出状态指令 |
| 00 00 | 输出起始地址 | 要控制的第一个数字输出寄存器地址 |
| 00 10 | 输出数量 | 操作输出数量不能超过最大输出数量 |
| 54 07 | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
输出全部导通 : 01 0F 00 00 00 10 02 FF FF E3 90
输出全部关断 : 01 0F 00 00 00 10 02 00 00 E2 20
1-2开;3-16关闭 : 01 0F 00 00 00 10 02 03 00 E2 D0
单个数字输出闪开闪闭
发送码:01 06 30 00 00 07 C7 08
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写单保持寄存器指令 |
| 30 00 | 闪开闪闭地址 | 要控制输出的闪开闪闭寄存器地址 |
| 00 07 | 间隔时间 | 延时时间为数值*100ms例如数值:0x0007延时:7*100MS = 700MS闪开闪闭的时间最大设置为0x7FFF |
| C7 08 | CRC16 | 前面字节数据的CRC16校验 |
返回码:01 06 30 00 00 07 C7 08
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写单保持寄存器指令 |
| 30 00 | 闪开闪闭地址 | 要控制输出的闪开闪闭寄存器地址 |
| 00 07 | 间隔时间 | 延时时间为数值*100ms ,例如数值:0x0007延时:7*100MS = 700MS闪开闪闭的时间最大设置为0x7FFF |
| C7 08 | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
1号输出闪开 : 01 06 30 00 00 07 C7 08 //700MS = 7*100MS = 700MS
2号输出闪开 : 01 06 30 01 00 08 D6 CC //800MS
1号输出闪闭 : 01 06 40 00 00 05 5C 09 //500MS
2号输出闪闭 : 01 06 40 01 00 06 4D C8 //600MS
多个数字输出闪开闪闭
发送码:01 10 30 00 00 04 08 00 0A 00 0A 00 0A 00 0A 65 8E
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 10 | 10指令 | 写多保持寄存器指令 |
| 30 00 | 闪开闪闭地址 | 要控制第一个输出的闪开闪闭寄存器地址 |
| 00 04 | 输出数量 | 操作输出数量不能超过最大输出数量 |
| 08 | 字节数量 | 后面数据字节数 |
| 00 0A …… 00 0A | 间隔时间 | 延时时间为数值*100ms ,例如数值:0x0007延时:7*100MS = 700MS闪开闪闭的时间最大设置为0x7FFF |
| 65 8E | CRC16 | 前面字节数据的CRC16校验 |
返回码:01 10 30 00 00 04 CE CA
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 10 | 10指令 | 写多保持寄存器指令 |
| 30 00 | 闪开闪闭地址 | 要控制第一个输出的闪开闪闭寄存器地址 |
| 00 04 | 输出数量 | 操作输出数量不能超过最大输出数量 |
| CE CA | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
1号~4号输出闪开1S : 01 10 30 00 00 04 08 00 0A 00 0A 00 0A 00 0A 65 8E //1S = 10*100MS =1000MS
2号、3号输出闪开800ms : 01 10 30 01 00 02 04 00 08 00 08 E6 66 //800MS
5号~8号输出闪闭500ms : 01 10 40 04 00 04 08 00 05 00 05 00 05 00 05 F0 77 //500MS
1号、3号输出闪闭700ms : 01 10 40 00 00 03 06 00 07 00 07 00 07 F6 82 //700MS
读取数字输出控制模式
发送码:01 03 20 00 00 10 4F C6
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 03 | 03指令 | 读取保持寄存器指令 |
| 20 00 | 输出模式起始地址 | 要查询的第一个输出模式地址 |
| 00 10 | 输出数量 | 要查询的输出模式数量不能超过最大输出路数 |
| 4F C6 | CRC16 | 前面字节数据的CRC16校验 |
返回码:01 03 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 59
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 03 | 03指令 | 读取保持寄存器指令 |
| 10 | 字节数 | 返回状态信息的所有字节数。 |
| 00 00 …… 00 00 | 输出模式 | 数字输出控制支持如下几种控制模式。 0x0000:指令模式,输出受指令直接控制; 0x0001:循环模式,输出状态每隔一段时间改变一次; |
| E4 59 | CRC16 | 前面字节数据的CRC16校验 |
循环模式的时间间隔可以通过延时寄存器修改延时时间。
示例:[1号地址设备]
读取1-16号数字输出控制模式 : 01 03 20 00 00 10 4F C6
读取 1号数字输出控制模式 : 01 03 20 00 00 01 8F CA
读取 2号数字输出控制模式 : 01 03 20 01 00 01 DE 0A
读取3-5号数字输出控制模式 : 01 03 20 02 00 03 AF CB
设置单路数字输出控制模式
发送码:01 06 20 00 00 01 43 CA
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写保持寄存器指令 |
| 20 00 | 输出模式地址 | 要设置的输出模式地址 |
| 00 01 | 输出模式 | 数字输出控制支持如下几种控制模式。 0x0000:指令模式,输出受指令直接控制; 0x0001:循环模式,输出状态每隔一段时间改变一次; |
| 43 CA | CRC16 | 前面字节数据的CRC16校验 |
循环模式的时间间隔可以通过延时寄存器修改延时时间。
返回码:01 06 20 00 00 01 43 CA
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写保持寄存器指令 |
| 20 00 | 输出模式地址 | 要设置的输出模式地址 |
| 00 01 | 输出模式 | 数字输出控制模式 |
| 43 CA | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
设置1号输出为循环模式 : 01 06 20 00 00 01 43 CA
设置2号输出为指令模式 : 01 06 20 01 00 00 D3 CA
设置多路数字输出控制模式
发送码:01 10 20 00 00 10 20 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 07 09
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 10 | 10指令 | 写多保持寄存器指令 |
| 20 00 | 输出模式起始地址 | 要设置的第一个输出模式地址 |
| 00 10 | 输出数量 | 操作输出数量不能超过最大输出数量 |
| 20 | 字节数量 | 后面数据字节数 |
| 00 01 …… 00 01 | 输出模式 | 数字输出控制支持如下几种控制模式。 0x0000:指令模式,输出受指令直接控制; 0x0001:循环模式,输出状态每隔一段时间改变一次; |
| 07 09 | CRC16 | 前面字节数据的CRC16校验 |
循环模式的时间间隔可以通过延时寄存器修改延时时间。
返回码:01 10 20 00 00 10 CA 05
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 10 | 10指令 | 写多保持寄存器指令 |
| 20 00 | 输出模式起始地址 | 要设置的第一个输出模式地址 |
| 00 10 | 输出数量 | 操作输出数量不能超过最大输出数量 |
| CA 05 | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
设置1-16通道输出为循环模式: 01 10 20 00 00 10 20 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 07 09
设置3-5通道输出为指令模式: 01 10 20 02 00 03 06 00 00 00 00 00 00 EC 8A
设置单路数字输出延时时间
发送码:01 06 50 00 00 0A 18 CD
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写保持寄存器指令 |
| 50 00 | 输出延时地址 | 要设置的输出延时时间地址 |
| 00 0A | 延时时间 | 延时时间为数值*100ms,例如数值0x0007表示700ms;循环模式下的切换间隔,最大0x7FFF |
| 18 CD | CRC16 | 前面字节数据的CRC16校验 |
输出延时寄存器仅在循环模式时有作用。
返回码:01 06 50 00 00 0A 18 CD
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写保持寄存器指令 |
| 50 00 | 输出延时地址 | 要设置的输出延时时间地址 |
| 00 0A | 延时时间 | 延时时间为数值*100ms,例如数值0x0007表示700ms;循环模式下的切换间隔,最大0x7FFF |
| 18 CD | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
设置1号输出为500ms延时: 01 06 50 00 00 05 58 C9
设置2号输出为1s延时 : 01 06 50 01 00 0A 49 0D
读取软件版本
发送码:01 03 80 01 00 01 FC 0A
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 03 | 03指令 | 读取软件版本指令 |
| 80 01 | 软件版本寄存器 | 固定4x8001 |
| 00 01 | 寄存器数 | 固定0x0001 |
| FC 0A | CRC16 | 前面字节数据的CRC16校验 |
返回码:01 03 02 00 64 B9 AF
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 03 | 03指令 | 读取软件版本指令 |
| 02 | 字节数 | 返回字节数 |
| 00 64 | 软件版本 | 转为十进制然后小数点左移两位即表示软件版本0x0064 = 100 = V1.00 |
| B9 AF | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
发送:01 03 80 01 00 01 FC 0A
返回:01 03 02 01 2C B8 09 //0x012C = 300 =V3.00
读取设备地址
发送码:FE 03 80 02 00 01 18 05
| 字段 | 含义 | 备注 |
|---|---|---|
| FE | 设备地址 | 此处0xFE表示有响应广播地址;对所有地址设备都有效 |
| 03 | 03指令 | 读保持寄存器指令 |
| 80 02 | 设备地址寄存器 | 固定4x8002 |
| 00 01 | 寄存器数 | 固定0x0001 |
| 18 05 | CRC16 | 前面字节数据的CRC16校验 |
返回码:FE 03 02 00 01 6D 90
| 字段 | 含义 | 备注 |
|---|---|---|
| FE | 设备地址 | 此处0xFE表示有响应广播地址;对所有地址设备都有效 |
| 03 | 03指令 | 读保持寄存器指令 |
| 02 | 字节数 | 返回字节数 |
| 00 01 | 设备地址 | 从机设备地址,范围:0x0001-0x00F7 |
| 6D 90 | CRC16 | 前面字节数据的CRC16校验 |
使用0xFE广播地址操作时应只接一个设备接多个设备时所有设备都响应会出现总线冲突。
示例:[1号地址设备]
发送 : FE 03 80 02 00 01 18 05
返回 : FE 03 02 00 02 2D 91 //地址0x02
设置设备地址
发送码:FE 06 80 02 00 01 D4 05
| 字段 | 含义 | 备注 |
|---|---|---|
| FE | 设备地址 | 此处0xFE表示有响应广播地址;对所有地址设备都有效 |
| 06 | 06指令 | 写单保持寄存器指令 |
| 80 02 | 设备地址寄存器 | 固定4x8002 |
| 00 01 | 设置地址 | 设置的从机设备地址,范围:0x0001-0x00F7 |
| D4 05 | CRC16 | 前面字节数据的CRC16校验 |
返回码:FE 06 80 02 00 01 D4 05
| 字段 | 含义 | 备注 |
|---|---|---|
| FE | 设备地址 | 此处0xFE表示有响应广播地址;对所有地址设备都有效 |
| 06 | 06指令 | 写单保持寄存器指令 |
| 80 02 | 设备地址寄存器 | 固定4x8002 |
| 00 01 | 设置地址 | 设置的从机设备地址,范围:0x0001-0x00F7 |
| D4 05 | CRC16 | 前面字节数据的CRC16校验 |
使用0xFE广播地址设置地址时应只接一个设备接多个设备时所有设备都设置为同一个地址。
示例:[1号地址设备]
设置设备地址为0x01 :FE 06 80 02 00 01 D4 05
设置设备地址为0x02 :FE 06 80 02 00 02 94 04
设置设备地址为0x03 :FE 06 80 02 00 03 55 C4
设置串口参数
发送码:01 06 80 03 00 05 90 09
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写单保持寄存器指令 |
| 80 03 | 串口参数寄存器 | 固定4x8003 |
| 00 05 | 串口参数 | Bit0 ~ Bit7:波特率 0 : 4800 1 : 9600 2 : 19200 3 : 38400 4 : 57600 5 : 115200 6 : 128000 7 : 256000 Bit8 ~ Bit12:校验方式 0 : 无校验(None), 1 : 偶校验(Even), 2 : 奇校验(Odd) Bit13 ~ Bit16:停止位 0 : 停止位1位, 1 : 停止位1.5位, 2 : 停止位2位 |
| 90 09 | CRC16 | 前面字节数据的CRC16校验 |
返回码:01 06 80 03 00 05 90 09
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写单保持寄存器指令 |
| 80 03 | 串口参数寄存器 | 固定4x8003 |
| 00 05 | 串口参数 | 串口参数 |
| 90 09 | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
设置波特率9600无校验1位 :01 06 80 03 00 01 91 CA
设置波特率9600偶校验2位 :01 06 80 03 00 D1 90 56
设置波特率115200无校验1位 :01 06 80 03 00 05 90 09
设置看门狗
发送码:01 06 80 04 00 0A 61 CC
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写单保持寄存器指令 |
| 80 04 | 看门狗寄存器 | 固定4x8004 |
| 00 0A | 间隔时间 | 寄存器默认为0看门狗关闭。设置不为零数值后开启看门狗功能。 收到正常modbus指令为一次成功喂狗。如果在时间间隔内没有收到正常Modbus指令则程序复位重启输出恢复开机输出状态。 延时时间为数值*100ms ,例如数值:0x000A延时:10*100MS = 1S |
| 61 CC | CRC16 | 前面字节数据的CRC16校验 |
返回码:01 06 80 04 00 0A 61 CC
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 06 | 06指令 | 写单保持寄存器指令 |
| 80 04 | 看门狗寄存器 | 固定4x8004 |
| 00 0A | 间隔时间 | 看门狗超时时间 |
| 61 CC | CRC16 | 前面字节数据的CRC16校验 |
示例:[1号地址设备]
开启看门狗10S :01 06 80 04 00 64 E0 20
关闭看门狗 :01 06 80 04 00 00 E1 CB
异常功能码
当接收到的指令出错或者异常设备将会返回异常响应异常响应格式如下。
返回码:01 85 03 02 91
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00表示广播地址;0x01-0xF7表示设备地址 |
| 85 | 异常功能码 | 异常功能码 = 请求功能码 + 0x80 |
| 03 | 异常码 | 异常码 |
| 02 91 | CRC16 | 前面字节数据的CRC16校验 |
异常码是一个单字节值用于指示错误的类型。Modbus协议定义的几个常用异常码:
| 异常码 | 名称 | 描述 |
|---|---|---|
| 0x01 | 非法功能 | 请求的功能码不支持 |
| 0x02 | 非法数据地址 | 请求的数据地址错误 |
| 0x03 | 非法数据值 | 请求的数据值或操作无法执行 |
| 0x04 | 服务器故障 | 服务器设备故障 |
| 0x05 | 应答 | 已接收到请求并正在处理 |
| 0x06 | 设备繁忙 | 设备当前正忙无法执行请求的操作 |