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 计算

23bei 在线 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模块使用

文件:Modbus relay a.zip

2 pymodbus示例文件,需预先安装python3.7以上版本,并安装pymodbus包:

pip install pymodbus

文件:Modbus relay 485.zip