“RS485 Modbus Relay PRO”的版本间的差异
(→概述) |
(→通讯参数) |
||
第82行: | 第82行: | ||
- 停止位:无校验通常 2,奇/偶校验通常 1(以主站与现场为准) | - 停止位:无校验通常 2,奇/偶校验通常 1(以主站与现场为准) | ||
- 从站地址范围:1–255(见寄存器 0042H) | - 从站地址范围:1–255(见寄存器 0042H) | ||
− | |||
== 线圈与寄存器地址 == | == 线圈与寄存器地址 == |
2025年9月18日 (四) 13:15的版本
| ||||||||||||||||||||||
| ||||||||||||||||||||||
| ||||||||||||||||||||||
目录
产品概述
- 继电器是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。
产品特点
本产品为标准的Modbus协议,可通过任意支持Modbus协议的软件或软件包控制继电器的开合,也可以通过给继电器发送Modbus指令控制其开合
RS485 继电器模块 Modbus RTU 协议
概述
本设备通过 RS‑485 半双工总线,采用 Modbus RTU 协议进行通信。支持常用读写线圈与保持寄存器等功能码,提供通道工作模式、批量开关、定时/脉冲等功能配置。
接线说明
- A 接线端子接到上位机/网关的 A(DI+) - B 接线端子接到上位机/网关的 B(DI-) - 如果总线设备较多,建议在总线末端加 120Ω 终端电阻 - 多机并联时注意拓扑尽量总线型,避免星型 - 屏蔽层单端接地,通信线使用双绞线
常用功能码
功能码 | 功能 | 可操作地址 | 位/字操作 | 可操作数量 |
---|---|---|---|---|
01 | 读取线圈状态 | 0000H–0040H | 位操作 | 单个或多个 |
03 | 读取保持寄存器 | 0000H–008FH | 字操作 | 单个或多个 |
05 | 写单个线圈 | 0000H–0040H | 位操作 | 单个 |
06 | 写单个保持寄存器 | 0000H–008FH | 字操作 | 单个 |
0F | 写多个线圈 | 0000H–0040H | 位操作 | 多个 |
10 | 写多个保持寄存器 | 0000H–008FH | 字操作 | 多个 |
通讯参数
- 波特率:可设(见寄存器 0043H),示例支持 4800/9600/14400/19200/38400/56000/57600/115200 - 数据位:8 - 校验位:可设(见寄存器 0044H),0=None,1=Odd,2=Even - 停止位:无校验通常 2,奇/偶校验通常 1(以主站与现场为准) - 从站地址范围:1–255(见寄存器 0042H)
线圈与寄存器地址
以下为手册中给出的主要地址段与含义。具体实现以当前固件为准。
线圈(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×0.1s(示例),0=不检测 |
0041H | 输入口上报/动作次数设定 | >1 时累计 N×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–004FH | 按位控制通道 1–16 | 位=1 输出导通,位=0 关闭(后续 0048H 控 33–48,0049H 控 49–64) |
0048H | 按位控制通道 33–48 | 位语义同上 |
0049H | 按位控制通道 49–64 | 位语义同上 |
004AH | 软复位 | 写1执行复位,设备自复位后本位自动归0 |
004BH–004FH | 保留 | — |
0050H | 通道1 工作模式 | 0:普通;1:点动;2:定时;3:开关循环;4:自动复位(示例枚举) |
… | … | … |
008FH | 通道64 工作模式 | 同上 |
帧格式
- 帧格式:地址(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:读取线圈状态(主机发送)
读取起始地址 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 错误:确认低字节在前;适当降低波特率;检查接地与屏蔽 - 丢帧/误码:放宽主站超时与帧间间隔(≥3.5 字节时间);半双工收发切换预留足够延时
13. 常见问题排查
- 无响应:
- 检查从站地址、波特率、校验位是否与主站一致 - 检查 A/B 线是否接反;总线是否有终端电阻 - 增大主站超时与重试次数
- CRC 错误:
- 确认 CRC 低字节在前;确认帧内无额外空格/分隔符 - 降低波特率尝试,检查屏蔽接地
- 偶发丢帧:
- 延长帧间隔,优化收发切换时序 - 排查供电与共地问题
注意事项
- 控制继电器时若出现发送指令无法控制的情况,可以尝试以下操作
- 在控制指令之间加入一条清除指令:0d 0a 0d 0a 0d 0a 0d 0a
- 指令之间的延时需要大于20ms
- 继电器的输出端相当于一个电子开关,本身是不输出电流电压的
- 当继电器输出端接入的负载功率较大或负载类型为感性负载等情况时,建议在负载端加入一个RC吸收回路,在降低通断过程对继电器触点产生的干扰
上位机测试
- 连接串口
- 将继电器模块与USB转485模块相连,连接方式:A - A,B - B。GND可不接
- 打开上位机软件
- 设置通信ID
- 操作继电器
- 调试功能
Modbus RTU指令简介
Modbus设备通过接收来自外部控制端(如:上位机/MCU)的Modbus RTU指令来执行相关操作,一帧指令一般由设备地址、功能码、寄存器地址、寄存器数据、校验码组成,帧长度和功能码有关。一般每帧数据的首字节为设备地址,可设置范围为1-255,默认255(即0xFF),最后2字节为CRC校验码。
假设设备地址为255,则常用的Modbus RTU指令如下:详情请查看模块使用说明
- 打开1号继电器
发送: FF 05 00 00 FF 00 99 E4 原样返回:FF 05 00 00 FF 00 99 E4
备注1:发送帧的第3--4个字节代表继电器地址,继电器1--继电器8的地址分别为0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007
备注2:发送帧的第5--6个字节代表数据,0xFF00代表打开继电器,0x0000代表关闭继电器
- 关闭1号继电器
发送: FF 05 00 00 00 00 D8 14 原样返回:FF 05 00 00 00 00 D8 14
- 打开所有继电器
发送:FF 0F 00 00 00 08 01 FF 30 1D 返回:FF 0F 00 00 00 08 41 D3
- 关闭所有继电器
发送:FF 0F 00 00 00 08 01 00 70 5D 返回:FF 0F 00 00 00 08 41 D3
- 设置设备地址为255
发送:00 10 00 00 00 01 02 00 FF EB 80 原样返回:00 10 00 00 00 01 02 00 FF EB 80
备注:发送帧的第8和第9个字节0x00FF为写入的设备地址
- 读取设备地址 255
发送:00 03 00 00 00 01 85 DB 返回:00 03 02 00 FF C5 C4
备注:返回帧的第4个和第5个字节0x00FF为读取到的设备地址
- 设置波特率为9600
发送: FF 10 03 E9 00 01 02 00 03 8B CC 返回: FF 10 03 E9 00 01 C5 A7
- 读取继电器状态
发送: FF 01 00 00 00 08 28 12 返回: FF 01 01 01 A1 A0
生成校验码
模块指令通过现成的上位机软件来发送时,CRC校验码是自动生成的,如果想使用串口调试软件(如SSCOM)来测试Modbus继电器模块时就需要手动生成CRC校验码放在发送帧的末尾,比如打开第1路继电器(手动模式):
- 打开/关闭继电器(手动模式)的发送帧组成为:设备地址(1Byte)+功能码(1Byte)+寄存器地址(2Byte)+寄存器数据(2Byte)+CRC校验码(2Byte)
- 假设设备地址为0xFF, 则发送帧的前6个字节为:FF 05 00 00 FF 00
- 使用CRC校验工具对这6个字节求校验码:http://www.ip33.com/crc.html
- 交换校验计算结果E499的高低字节位置后得到CRC校验码99E4,以及完整的发送帧:FF 05 00 00 FF 00 99 E4
- 将该发送帧通过串口调试软件SSCOM V5.13.1发送到Modbus继电器模块即可打开第一路继电器(手动模式),如下:
参考资料
注意事项
- 电源与负载请在参数范围内使用,请勿超范围使用。
- 额定负载和寿命是一个参考值,会根据不同的环境因素负载性质与种类而有较大不同,因此最好在实际或模拟实际的使用中进行确认。
- 模块的负载能力受环境温度和自身温升的影响较大,需依据实际工作环境条件利用空气对流散热即可,要求安装在有良好对流环境。
- 高温下的电耐久性:模块在高温下使用时,电耐久性会比常温下使用要低,所以请在实际使用中进行确认。
FAQ
|