“RS485 Modbus Relay PRO”的版本间的差异

来自丢石头百科
第158行: 第158行:
 
! 说明
 
! 说明
 
|-
 
|-
| Relay1 | 0000H | 输出通道 1 开/关
+
| Relay1  
 +
| 0000H  
 +
| 输出通道 1 开/关
 
|-
 
|-
| Relay2 | 0001H | 输出通道 2 开/关
+
| Relay2  
 +
| 0001H  
 +
| 输出通道 2 开/关
 
|-
 
|-
| Relay3 | 0002H | 输出通道 3 开/关
+
| Relay3  
 +
| 0002H  
 +
| 输出通道 3 开/关
 
|-
 
|-
| Relay4 | 0003H | 输出通道 4 开/关
+
| Relay4  
 +
| 0003H  
 +
| 输出通道 4 开/关
 
|-
 
|-
| Relay5 | 0004H | 输出通道 5 开/关
+
| Relay5  
 +
| 0004H  
 +
| 输出通道 5 开/关
 
|-
 
|-
| Relay6 | 0005H | 输出通道 6 开/关
+
| Relay6  
 +
| 0005H  
 +
| 输出通道 6 开/关
 
|-
 
|-
| Relay7 | 0006H | 输出通道 7 开/关
+
| Relay7  
 +
| 0006H  
 +
| 输出通道 7 开/关
 
|-
 
|-
| Relay8 | 0007H | 输出通道 8 开/关
+
| Relay8  
 +
| 0007H  
 +
| 输出通道 8 开/关
 
|}
 
|}
  

2025年9月18日 (四) 11:11的版本

RS485 Modbus Relay PRO
RS485 Modbus Relay PRO 示意图1.png

RS485 Modbus Relay PRO(1, CB, Opto)


RS485 Modbus Relay PRO 示意图2.png RS485 Modbus Relay PRO(2, CB, Opto)


RS485 Modbus Relay PRO 示意图3.png RS485 Modbus Relay PRO(3, CB, Opto)


RS485 Modbus Relay PRO 示意图4.png RS485 Modbus Relay PRO(4, CB, Opto)


RS485 Modbus Relay PRO 示意图5.png RS485 Modbus Relay PRO(8, CB, Opto)

基本信息

分类: 继电器

品牌: 丢石头

功能简介
特性
  • RS485 Modbus 继电器

接口

RS485接口

相关产品

产品概述

  • 继电器是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

产品特点

  • RS485 Modbus Relay PRO1.png

1. Modbus RTU 常用功能码简介

功能码 功能 可操作地址 位/字操作 可操作数量
01 读取线圈状态 0000H–0040H 位操作 单个或多个
03 读取保持寄存器 0000H–008FH 字操作 单个或多个
05 操作单个线圈 0000H–0040H 位操作 单个
06 写单个保持寄存器 0000H–008FH 字操作 单个
0F 操作多个线圈 0000H–0040H 位操作 多个
10 写多个保持寄存器 0000H–008FH 字操作 多个

2. Modbus RTU 在线计算校验码网站

23bei 在线 CRC 计算工具

3. 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;
}



4. 通讯参数(默认)

- 波特率:9600(可选:1200/2400/4800/19200/38400/115200) - 数据位:8 - 校验:N(无校验,可选 E/O) - 停止位:1(若使用奇/偶校验通常为 1,若无校验也可为 2) - 从站地址(Slave ID):1(范围 1–247) - 接口:RS-485,半双工,A/B 差分 - 协议:Modbus RTU

注:以上为常见默认值,实际以设备面板/拨码/寄存器设定为准。

5. 接线说明

- A 接线端子接到上位机/网关的 A(DI+) - B 接线端子接到上位机/网关的 B(DI-) - 建议在总线末端加 120Ω 终端电阻 - 多机并联时注意拓扑尽量总线型,避免星型 - 屏蔽层单端接地,通信线使用双绞线

6. 地址约定与示例

以下为常见“继电器输出线圈”和“参数寄存器”的示例地址分配,实际请以设备固件文档为准。

6.1 线圈(Coils,位操作,功能码 01/05/0F)

- 线圈地址基址:0000H - 典型 8 路继电器示例:

通道 线圈地址(十六进制) 说明
Relay1 0000H 输出通道 1 开/关
Relay2 0001H 输出通道 2 开/关
Relay3 0002H 输出通道 3 开/关
Relay4 0003H 输出通道 4 开/关
Relay5 0004H 输出通道 5 开/关
Relay6 0005H 输出通道 6 开/关
Relay7 0006H 输出通道 7 开/关
Relay8 0007H 输出通道 8 开/关

6.2 保持寄存器(Holding Registers,字操作,功能码 03/06/10)

- 寄存器地址示例范围:0000H–008FH - 常见参数示例(按需调整为设备实际):

地址(十六进制) 名称 数据类型 单位/范围 说明
设备波特率 | uint16 | 枚举 | 1=1200,2=2400,3=4800,4=9600,5=19200,6=38400,7=115200
校验模式 | uint16 | 枚举 | 0=None,1=Odd,2=Even
从站地址 | uint16 | 1–247 | 修改后重启或生效条件见设备说明
通道1 脉冲宽度 | uint16 | ms | 置 05/0F 打开后可自动延时断开(如支持)
通道2 脉冲宽度 | uint16 | ms | —
通道1 上电默认 | uint16 | 0/1 | 上电初始状态(0=OFF,1=ON)如支持
通道2 上电默认 | uint16 | 0/1 | —

7. 帧格式(Modbus RTU)

- 请求/响应均为:地址(1B)+ 功能码(1B)+ 数据域(N B)+ CRC16(低字节在前,高字节在后) - 帧间静默:≥3.5 字节时间 - CRC 多项式:0xA001,初值 0xFFFF,低字节在先

8. 功能码与示例

8.1 读取线圈状态(功能码 01)

用途:读取继电器通道 ON/OFF。 - 请求:地址 1,读起始 0000H,数量 8

01 01 00 00 00 08 CRC_L CRC_H

- 响应示例(8 路,低位对应起始地址):

01 01 01 3F CRC_L CRC_H

说明:3Fh=00111111b 表示通道1~6=1,7~8=0(示例)。

8.2 读取保持寄存器(功能码 03)

读取参数寄存器。 - 请求:读地址 0002H(从站地址),数量 1

01 03 00 02 00 01 CRC_L CRC_H

- 响应示例:

01 03 02 00 01 CRC_L CRC_H

表示当前从站地址=1。

8.3 单线圈写入(功能码 05)

控制单个继电器开/关。 - 打开通道1(地址 0000H):

01 05 00 00 FF 00 CRC_L CRC_H

- 关闭通道1:

01 05 00 00 00 00 CRC_L CRC_H

响应一般回显请求。

8.4 多线圈写入(功能码 0F)

同时设置多个通道。 - 将通道1~8 设置为 1100 0011b(低位为通道1):

01 0F 00 00 00 08 01 C3 CRC_L CRC_H

说明:01=后续字节数,C3h=1100 0011b。

8.5 单保持寄存器写入(功能码 06)

- 将从站地址改为 2(写地址 0002H):

01 06 00 02 00 02 CRC_L CRC_H

8.6 多保持寄存器写入(功能码 10)

- 一次写 2 个寄存器(地址 0000H 起):

01 10 00 00 00 02 04 00 04 00 01 CRC_L CRC_H

说明:将波特率=9600(枚举4),校验=None(0)。

9. 异常响应

当请求非法或超出范围,设备以异常码响应: - 帧格式:地址 + (功能码 | 0x80) + 异常码 + CRC - 常见异常码:

异常码 名称 含义
ILLEGAL FUNCTION | 不支持的功能码
ILLEGAL DATA ADDRESS | 地址不合法
ILLEGAL DATA VALUE | 数据值不合法
SLAVE DEVICE FAILURE | 从站故障

10. 通信时序与可靠性建议

- 帧间隔:主站发送帧与下一帧间,应等待从站响应或超时(典型 100–500 ms,按应用优化) - 帧内静默:RTU 要求帧内静默间隔 < 1.5 字节时间;帧与帧之间 ≥ 3.5 字节时间 - 半双工切换:发送完成到接收前需考虑收发切换延时 - 终端电阻:总线末端建议 120Ω,并可视线长与速率增加匹配电阻/偏置电阻 - 线缆:推荐双绞屏蔽线;远距离/高干扰环境降低波特率

11. CRC 说明与示例

- 多项式:0xA001(即 x^16 + x^15 + x^2 + 1) - 初值:0xFFFF - 输入每字节先与低字节异或,再移位/异或多项式,低位在先 - 附示例数据计算(不含 CRC 字节):

示例帧:01 05 00 00 FF 00
计算结果:CRC_L CRC_H = 0x8C 0x3A(示例)

注:不同示例会有不同 CRC,请以在线工具或代码计算为准。

12. 快速测试

- 读 8 路线圈状态:

01 01 00 00 00 08 CRC_L CRC_H

- 打开通道1:

01 05 00 00 FF 00 CRC_L CRC_H

- 多路写入(1~8 = 1100 0011):

01 0F 00 00 00 08 01 C3 CRC_L CRC_H

13. 常见问题排查

- 无响应:

 - 检查从站地址、波特率、校验位是否与主站一致
 - 检查 A/B 线是否接反;总线是否有终端电阻
 - 增大主站超时与重试次数

- CRC 错误:

 - 确认 CRC 低字节在前;确认帧内无额外空格/分隔符
 - 降低波特率尝试,检查屏蔽接地

- 偶发丢帧:

 - 延长帧间隔,优化收发切换时序
 - 排查供电与共地问题

14. 版本与变更

- v1.0:初版说明,涵盖功能码、地址示例、帧格式、CRC、测试与排查

使用说明

  • 控制继电器时若出现发送指令无法控制的情况,可以尝试以下操作
    • 在控制指令之间加入一条清除指令:0d 0a 0d 0a 0d 0a 0d 0a
    • 指令之间的延时需要大于20ms
  • 继电器的输出端相当于一个电子开关,本身是不输出电流电压的
  • 当继电器输出端接入的负载功率较大或负载类型为感性负载等情况时,建议在负载端加入一个RC吸收回路,在降低通断过程对继电器触点产生的干扰

上位机测试

  • 连接串口
    • 将继电器模块与USB转485模块相连,连接方式:A - A,B - B。GND可不接
    • 打开上位机软件
      • RS485 Modbus Relay 上位机测试1.png
      • 刷新串口
      • 选择对应的串口
      • 选择波特率9600
      • 打开串口
  • 设置通信ID
    • 如果485总线上只有一个模块,则可以点击读取ID按钮自动读取模块的ID,并显示到ID文本框内(16进制格式)。并且可以通过设置ID按钮,将模块的ID设置为ID文本框内的值(16进制格式)。设置的模块ID会保存到模块内,断电也可以保存。
      • RS485 Modbus Relay 上位机测试2.png
    • 如果485总线上不止一个模块,则不可用以上的方法读取或设置ID。必须将要通信的模块的ID手动填到ID文本框内(16进制格式),才可以操作对应的模块。如果ID填0则是广播模式,总线上所有的模块都会收到相同的指令进行相同的动作,但回复的指令可能出现冲突导致意想不到的结果。
      • RS485 Modbus Relay 上位机测试3.png
  • 操作继电器
    • 通过继电器控制的按钮可以操作对应通道的继电器,或全部打开全部关闭。对应通道的输出状态指示会在收到模块回复后进行相应的显示。
      • RS485 Modbus Relay 上位机测试4.png
  • 调试功能
    • 调试区域显示当前串口发送和接收到的指令数据(16进制格式)。点击直接发送按钮可以通过串口发送发送数据文本框内的数据。点击计算CRC按钮会自动计算发送数据文本框内所有数据的CRC,并将结果加到结尾,可以方便进行modbus指令的调试。注意:由于发送的指令已经包含CRC,所以如果要手动修改发送的指令,需要将最后两个字节删除然后再按计算CRC按钮。
      • RS485 Modbus Relay 上位机测试5.png

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

Modbus RTU Relay 校验码.png

  • 交换校验计算结果E499的高低字节位置后得到CRC校验码99E4,以及完整的发送帧:FF 05 00 00 FF 00 99 E4
  • 将该发送帧通过串口调试软件SSCOM V5.13.1发送到Modbus继电器模块即可打开第一路继电器(手动模式),如下:

Modbus RTU Relay 校验码1.png

参考资料

注意事项

  • 电源与负载请在参数范围内使用,请勿超范围使用。
  • 额定负载和寿命是一个参考值,会根据不同的环境因素负载性质与种类而有较大不同,因此最好在实际或模拟实际的使用中进行确认。
  • 模块的负载能力受环境温度和自身温升的影响较大,需依据实际工作环境条件利用空气对流散热即可,要求安装在有良好对流环境。
  • 高温下的电耐久性:模块在高温下使用时,电耐久性会比常温下使用要低,所以请在实际使用中进行确认。

FAQ

Icon-mail.png 联系 丢石头

我们的工作时间是: 09:00-18:00 (UTC+8 周一到周六)