RS485 Modbus Relay PRO (64, 12V, CN, None, A)
目录
RS485 继电器模块 Modbus RTU 协议
概述
本设备通过 RS‑485 半双工总线,采用 Modbus RTU 协议进行通信。支持常用读写线圈与保持寄存器等功能码,提供通道工作模式、批量开关、定时/脉冲等功能配置。
接线说明
- A 接线端子接到上位机/网关的 A(DI+) - B 接线端子接到上位机/网关的 B(DI-) - 如果总线设备较多,建议在总线末端加 120Ω 终端电阻 - 多机并联时注意拓扑尽量总线型,避免星型 - 屏蔽层单端接地,通信线使用双绞线
通讯参数
- 波特率:默认38400,可设(见寄存器 0043H),示例支持 4800/9600/14400/19200/38400/56000/57600/115200 - 数据位:8 - 校验位:可设(见寄存器 0044H),0=None,1=Odd,2=Even - 停止位:无校验通常 2,奇/偶校验通常 1(以主站与现场为准) - 从站地址范围:1–255(见寄存器 0042H)
帧格式
- 帧格式:地址(1B) + 功能码(1B) + 数据(NB) + CRC16(低字节在前,高字节在后) - 帧间隔:≥3.5 字节时间(RTU 规范) - CRC:多项式 0xA001,初值 0xFFFF(参见下方代码)
CRC 参考实现(C)
uint16_t factory_crc16(uint8_t* bufData, uint16_t buflen)
{
uint16_t TCPCRC = 0xFFFF;
uint16_t POLYNOMIAL = 0xA001;
uint8_t i, j;
for (i = 0; i < buflen; i++)
{
TCPCRC ^= bufData[i];
for (j = 0; j < 8; j++)
{
if ((TCPCRC & 0x0001) != 0)
{
TCPCRC >>= 1;
TCPCRC ^= POLYNOMIAL;
}
else
{
TCPCRC >>= 1;
}
}
}
return TCPCRC;
}
在线 CRC 计算
功能码
功能码 | 功能 | 可操作地址 | 位/字操作 | 可操作数量 |
---|---|---|---|---|
01 | 读取线圈状态 | 0000H–0040H | 位操作 | 单个或多个 |
03 | 读取保持寄存器 | 0000H–008FH | 字操作 | 单个或多个 |
05 | 写单个线圈 | 0000H–0040H | 位操作 | 单个 |
06 | 写单个保持寄存器 | 0000H–008FH | 字操作 | 单个 |
0F | 写多个线圈 | 0000H–0040H | 位操作 | 多个 |
10 | 写多个保持寄存器 | 0000H–008FH | 字操作 | 多个 |
线圈与寄存器地址
以下为手册中给出的主要地址段与含义。具体实现以当前固件为准。
线圈(Coils,位操作,功能码 01/05/0F)
- 范围:0000H–0040H(示例) - 0000H…0007H:可对应继电器通道 1…8 - 更高通道依次顺延;批量位写入时,低位对应起始地址
保持寄存器(Holding Registers,字操作,功能码 03读取/06写单个/10写多个)
地址(HEX) | 名称/作用 | 取值/说明 |
---|---|---|
0000H | 通道1 控制寄存器(工作模式与动作) |
1) work_mode_normal:普通模式,1/0=开/关; 2) work_mode_flip:点动(翻转)模式,“写1翻转接通/断开”; 3) work_mode_delay:延时模式,延时 N×0.01s 后/次; 4) work_mode_loop:开关循环模式,周期/次等由保持时间决定(参考 0040H/0041H); 5) work_mode_auto_reset:自动复位模式,N×0.01s 后自动关闭,掉电保持。 (实际枚举以 0050H 起各通道模式寄存器定义为准) |
003FH | 通道64 控制寄存器 | 同上(通道索引递增) |
0040H | 通信检测时间设置 | 检测时间 N x 0.1s 0:不检测 >1:当通信断开 N x 0.1s 后断开所有输出; 状态掉电保存,重新上电后生效 |
0041H | 输入口上报/动作次数设定 | 0 不主动上报,1 任意输入窗口状态发生变化时主动上报,>1 时累计 (N-1)×0.01s 后上报/动作;掉电保持,上电生效 |
0042H | 从站地址 | 1–255;读数示例=1;掉电保持,重启生效 |
0043H | RS‑485 波特率 | 0:4800,1:9600,2:14400,3:19200,4:38400,5:56000,6:57600,7:115200;掉电保持,重启生效 |
0044H | 奇偶校验 | 0:无校验,1:奇校验,2:偶校验;掉电保持,重启生效 |
0045H | 继电器批量控制 | 1: 全开;0: 全关 |
0046H | 按位控制通道 1–16 | 位=1 输出导通,位=0 关闭 |
0046H | 按位控制通道 17–32 | 位=1 输出导通,位=0 关闭 |
0048H | 按位控制通道 33–48 | 位=1 输出导通,位=0 关闭 |
0049H | 按位控制通道 49–64 | 位=1 输出导通,位=0 关闭 |
004AH | 软复位 | 写1执行复位,设备自复位后本位自动归0 |
004BH–004FH | 保留 | — |
0050H | 通道1 工作模式 | 0:普通;1:点动;2:定时;3:开关循环;4:自动复位 |
… | … | … |
008FH | 通道64 工作模式 | 同上,0:普通;1:点动;2:定时;3:开关循环;4:自动复位 |
通讯示例帧
01:读取线圈状态(主机发送)
读取起始地址 000AH,数量 000AH(示例)
01 01 00 0A 00 0A 9C 0F
01:读取线圈状态(从机返回)
返回 2 字节位图:000AH–0011H、0012H–0019H(示例)
01 01 02 F0 03 BD FD
03:读取保持寄存器(主机发送)
从 0002H 起读 2 个寄存器(示例)
01 03 00 02 00 02 C4 0B
03:读取保持寄存器(从机返回)
返回 4 字节数据:寄存器 0000H/0001H(示例值)
01 03 04 F0 C3 A0 4F 00 FB
05:写单个线圈(主机发送/从机回显)
将线圈 000AH 置位(FF00=ON)
01 05 00 0A FF 00 AC 38
01 05 00 0A FF 00 AC 38
06:写单个寄存器(主机发送/从机回显)
写寄存器 0013H = 0x15C2(示例)
01 06 00 13 15 C2 F7 0E
01 06 00 13 15 C2 F7 0E
0F:写多个线圈(主机发送/从机返回)
从 000AH 起写 10 个线圈,共 2 字节(示例)
01 0F 00 0A 00 0A 02 AA 0A 1A F3
01 0F 00 0A 00 0A 1A F3
10:写多个保持寄存器(主机发送/从机返回)
从 0013H 起写 2 个寄存器,共 4 字节(示例值 0x1253、0x3C1F)
01 10 00 13 00 02 04 12 53 3C 1F 17 17
01 10 00 13 00 02 B0 0D
批量按位控制
- 0046H–004FH:控制通道 1–16(位=1 输出导通) - 0048H:控制 33–48;0049H:控制 49–64 - 0045H:批量全开/全关(1=全开,0=全关)
通道工作模式设定
- 0050H 起每通道 1 字,示例枚举:
- 0:普通模式(直接开/关) - 1:点动/翻转模式(写1翻转) - 2:定时模式(结合 0040H/0041H 设定) - 3:开关循环模式 - 4:自动复位模式(到时自动关闭)
- 008FH:通道 64 工作模式
设备管理与系统寄存器
- 0042H:从站地址(1–255),掉电保持,重启生效 - 0043H:波特率(枚举见上),掉电保持,重启生效 - 0044H:奇偶校验(0/1/2),掉电保持,重启生效 - 004AH:软件复位(写1执行,复位后本位归0)
常见问题排查
- 无响应:
- 检查从站地址、波特率、校验位是否与主站一致 - 检查 A/B 线是否接反;总线是否有终端电阻 - 增大主站超时与重试次数
- CRC 错误:
- 确认 CRC 低字节在前;确认帧内无额外空格/分隔符 - 降低波特率尝试,检查屏蔽接地
- 偶发丢帧:
- 延长帧间隔,优化收发切换时序 - 排查供电与共地问题
相关下载
1 丢石头串口Modbus继电器调试软件
此软件需要配合USB转RS485模块使用
2 pymodbus示例文件,需预先安装python3.7以上版本,并安装pymodbus包:
pip install pymodbus