模板: Modbus POE ETH Relay 30CH Protocol V2

来自Waveshare Wiki
跳转至: 导航搜索

功能码介绍

功能码 功能说明 备注
01 读线圈状态 读继电器状态
03 读保持寄存器 读取地址、版本
05 写单线圈 写单个继电器
06 写单寄存器 设置波特率,地址
0F 写多个线圈 写全部继电器

寄存器地址介绍

地址(HEX) 地址存储内容 寄存器取值 权限 Modbus 功能码
0x0000
……
0x001D
道通1~通道30继电器地址 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
读/写 0x01,0x05,0x0F
0x00FF 操作全部继电器 0xFF00:继电器全部开启;
0x0000:继电器全部关闭;
0x5500:继电器全部翻转;
0x05
0x0100
……
0x011D
道通1~通道30继电器翻转地址 0xFF00:继电器翻转;
0x0000:继电器不变;
0x05,0x0F
0x01FF 操作全部继电器翻转 0xFF00:继电器全部翻转;
0x0000:继电器全部不变;
0x05
0x0200
……
0x021D
道通1~通道30继电器闪开 延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
0x05
0x0400
……
0x041D
道通1~通道30继电器闪闭 延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
0x05
4x4000 设备地址 直接存储 Modbus 地址
设备地址:0x0001
0x03
4x8000 软件版本 转为十进制然后小数点左移两位即表示软件版本
0x0064 = 100 = V1.00
0x03

操作指令介绍

控制单个继电器

发送码:01 05 00 00 FF 00 8C 3A

字段 含义 备注
01 设备地址 固定0x01
05 05指令 控制继电器指令
00 00 地址 要控制继电器的寄存器地址,0x0000 - 0x001D
FF 00 指令 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
8C 3A CRC16 前6字节数据的CRC16校验和

返回码: 01 05 00 00 FF 00 8C 3A

字段 含义 备注
01 设备地址 固定0x01
05 05指令 控制继电器指令
00 00 地址 要控制继电器寄存器地址,0x0000-0x001D
FF 00 指令 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
8C 3A CRC16 前6字节数据的CRC16校验和

示例: [1号地址设备]:

0号继电器开启 : 01 05 00 00 FF 00 8C 3A
0号继电器关闭 : 01 05 00 00 00 00 CD CA
1号继电器开启 : 01 05 00 01 FF 00 DD FA
1号继电器关闭 : 01 05 00 01 00 00 9C 0A
2号继电器开启 : 01 05 00 02 FF 00 2D FA
2号继电器关闭 : 01 05 00 02 00 00 6C 0A
3号继电器开启 : 01 05 00 03 FF 00 7C 3A
3号继电器关闭 : 01 05 00 03 00 00 3D CA
0号继电器翻转 : 01 05 00 00 55 00 F2 9A
1号继电器翻转 : 01 05 00 01 55 00 A3 5A
2号继电器翻转 : 01 05 00 02 55 00 53 5A
3号继电器翻转 : 01 05 00 03 55 00 02 9A

控制全部继电器

发送码:01 05 00 FF FF 00 BC 0A

字段 含义 备注
01 设备地址 固定0x01
05 05指令 控制继电器指令
00 FF 地址 固定0x00FF
FF 00 指令 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
BC 0A CRC16 前6字节数据的CRC16校验和

返回码: 01 05 00 FF FF 00 BC 0A

字段 含义 备注
01 设备地址 固定0x01
05 05指令 控制继电器指令
00 FF 地址 固定0x00FF
FF 00 指令 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
BC 0A CRC16 前6字节数据的CRC16校验和

示例:[1号地址设备]:

全部继电器开启 : 01 05 00 FF FF 00 BC 0A
全部继电器关闭 : 01 05 00 FF 00 00 FD FA
全部继电器翻转 : 01 05 00 FF 55 00 C2 AA

读取继电器状态

发送码:01 01 00 00 00 1E BC 02

字段 含义 备注
01 设备地址 固定0x01
01 01指令 查询继电器状态指令
00 00 继电器起始地址 继电器起始地址,0x0000-0x001D
00 1E 继电器数量 读取继电器数量
BC 02 CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 01 04 00 00 00 00 FB D1

字段 含义 备注
01 设备地址 固定0x01
01 01指令 查询继电器状态指令
02 字节数 返回状态信息的所有字节数。
00 00 00 00 查询的状态 返回的继电器状态
继电器状态为小端格式,低字节在前,高字节在后
Bit0:起始继电器状态;
Bit1:下个继电器状态,
依次类推,高端空闲位则为零
FB D1 CRC16 前 6 字节数据的 CRC16 校验和

示例:[1号地址设备]

发送 : 01 01 00 00 00 1E BC 02        //查询全部继电器
返回 : 01 01 04 00 00 00 00 FB D1     //全部继电器关闭
发送 : 01 01 00 01 00 03 2D CB        //查询1,2,3号继电器状态
返回 : 01 01 01 05 91 8B              //1、3号继电器开启,2号继电器关闭
发送 : 01 01 00 04 00 0C 7D CE        //查询4-15号继电器
返回 : 01 01 02 0F 00 BC 0C           //4-7号继电器开启,8-15号继电器关闭

写继电器状态

发送码:01 0F 00 00 00 1E 04 FF FF FF 3F C1 92

字段 含义 备注
01 设备地址 固定0x01
0F 0F指令 写继电器状态指令
00 00 继电器起始地址 继电器起始地址,0x0000-0x001D
00 1E 继电器数量 写入继电器数量
04 字节数量 状态字节数
FF FF FF 3F 继电器状态 继电器状态为小端格式,低字节在前,高字节在后
Bit0:起始继电器状态;
Bit1:下个继电器状态,
依次类推,高端空闲位则为零
C1 92 CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 0F 00 00 00 1E D5 C3

字段 含义 备注
01 设备地址 固定0x01
0F 0F指令 全部寄存器控制指令
00 00 地址 继电器起始地址
00 1E 继电器数量 写入继电器数量
D5 C3 CRC16 前 6 字节数据的 CRC16 校验和

示例:[1号地址设备]

继电器全部开启  : 01 0F 00 00 00 1E 04 FF FF FF 3F C1 92
0-1开;3-29关   : 01 0F 00 00 00 1E 04 03 00 00 00 C0 12
0-1开; 3-7关   : 01 0F 00 00 00 08 01 03 BE 94
1,2,3继电器开启 : 01 0F 00 01 00 03 01 07 F3 55

继电器闪开闪闭指令

发送码:01 05 02 00 00 07 8D B0

字段 含义 备注
01 设备地址 固定0x01
05 05指令 单个控制指令
02 指令 02 为是闪开指令,04为闪闭指令
00 继电器地址 要控制的继电器地址,0x00~0x1D
00 07 间隔时间 延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
闪开闪闭的时间最大设置为0x7FFF
8D B0 CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 05 02 00 00 07 8D B0

字段 含义 备注
01 设备地址 固定0x01
05 05指令 单个控制指令
02 指令 02 为是闪开指令,04为闪闭指令
00 继电器地址 要控制继电器地址,0x00~0x1D
00 07 间隔时间 延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
8D B0 CRC16 前 6 字节数据的 CRC16 校验和

示例:[1号地址设备]

0号继电器闪开 : 01 05 02 00 00 07 8D B0  //700MS
1号继电器闪开 : 01 05 02 01 00 08 9C 74  //800MS
0号继电器闪闭 : 01 05 04 00 00 05 0C F9  //500MS
1号继电器闪闭 : 01 05 04 01 00 06 1D 38  //600MS

读取软件版本指令

发送码:01 03 80 00 00 01 AD CA

字段 含义 备注
01 设备地址 固定0x01
03 03指令 读保持寄存器
80 00 指令寄存器 0x8000为读取软件版本
00 01 字节数 固定0x0001
AD CA CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 03 02 00 64 B9 AF

字段 含义 备注
01 设备地址 固定0x01
03 03指令 读保持寄存器
02 字节数 返回字节数
00 64 软件版本 转为十进制然后小数点左移两位即表示软件版本
0x0064 = 100 = V1.00
F0 B8 CRC16 前 6 字节数据的 CRC16 校验和

示例:

发送:01 03 80 00 00 01 AD CA
返回:01 03 02 00 C8 B9 D2       //0x00C8 = 200 =V2.00

异常功能码

当接收到的指令出错或者异常设备将会返回异常响应,异常响应格式如下。

返回码:01 85 03 02 91

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
85 异常功能吗 异常功能码 = 请求功能码 + 0x80
03 字节数 异常码
02 91 CRC16 前 6 字节数据的 CRC16 校验和

异常码是一个单字节值,用于指示错误的类型。Modbus协议定义的几个常用异常码:

异常码 名称 描述
0x01 非法功能 请求的功能码不支持
0x02 非法数据地址 请求的数据地址错误
0x03 非法数据值 请求的数据值或操作无法执行
0x04 服务器故障 服务器设备故障
0x05 应答 已接收到请求并正在处理
0x06 设备繁忙 设备当前正忙无法执行请求的操作