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

来自丢石头百科
第45行: 第45行:
 
*[[File:RS485 Modbus Relay PRO1.png|800px]]
 
*[[File:RS485 Modbus Relay PRO1.png|800px]]
 
本产品为标准的Modbus协议,可通过任意支持Modbus协议的软件或软件包控制继电器的开合,也可以通过给继电器发送Modbus指令控制其开合
 
本产品为标准的Modbus协议,可通过任意支持Modbus协议的软件或软件包控制继电器的开合,也可以通过给继电器发送Modbus指令控制其开合
 
= RS485 继电器模块 Modbus RTU 协议 =
 
 
== 概述 ==
 
本设备通过 RS‑485 半双工总线,采用 Modbus RTU 协议进行通信。支持常用读写线圈与保持寄存器等功能码,提供通道工作模式、批量开关、定时/脉冲等功能配置。
 
 
 
== 接线说明 ==
 
- A 接线端子接到上位机/网关的 A(DI+)
 
- B 接线端子接到上位机/网关的 B(DI-)
 
- 如果总线设备较多,建议在总线末端加 120Ω 终端电阻
 
- 多机并联时注意拓扑尽量总线型,避免星型
 
- 屏蔽层单端接地,通信线使用双绞线
 
 
== 常用功能码 ==
 
{| class="wikitable"
 
! 功能码 !! 功能 !! 可操作地址 !! 位/字操作 !! 可操作数量
 
|-
 
| 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写多个) ===
 
{| class="wikitable"
 
! 地址(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:自动复位
 
|}
 
 
== 帧格式 ==
 
- 帧格式:地址(1B) + 功能码(1B) + 数据(NB) + CRC16(低字节在前,高字节在后)
 
- 帧间隔:≥3.5 字节时间(RTU 规范)
 
- CRC:多项式 0xA001,初值 0xFFFF(参见下方代码)
 
 
== CRC 参考实现(C) ==
 
<syntaxhighlight lang="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;
 
}
 
</syntaxhighlight>
 
 
== 在线 CRC 计算 ==
 
[https://www.23bei.com/tool/59.html 23bei 在线 CRC 计算工具]
 
 
== 通讯示例帧 ==
 
 
=== 01:读取线圈状态(主机发送) ===
 
读取起始地址 000AH,数量 000AH(示例)
 
<syntaxhighlight lang="text">
 
01 01 00 0A 00 0A 9C 0F
 
</syntaxhighlight>
 
 
=== 01:读取线圈状态(从机返回) ===
 
返回 2 字节位图:000AH–0011H、0012H–0019H(示例)
 
<syntaxhighlight lang="text">
 
01 01 02 F0 03 BD FD
 
</syntaxhighlight>
 
 
=== 03:读取保持寄存器(主机发送) ===
 
从 0002H 起读 2 个寄存器(示例)
 
<syntaxhighlight lang="text">
 
01 03 00 02 00 02 C4 0B
 
</syntaxhighlight>
 
 
=== 03:读取保持寄存器(从机返回) ===
 
返回 4 字节数据:寄存器 0000H/0001H(示例值)
 
<syntaxhighlight lang="text">
 
01 03 04 F0 C3 A0 4F 00 FB
 
</syntaxhighlight>
 
 
=== 05:写单个线圈(主机发送/从机回显) ===
 
将线圈 000AH 置位(FF00=ON)
 
<syntaxhighlight lang="text">
 
01 05 00 0A FF 00 AC 38
 
01 05 00 0A FF 00 AC 38
 
</syntaxhighlight>
 
 
=== 06:写单个寄存器(主机发送/从机回显) ===
 
写寄存器 0013H = 0x15C2(示例)
 
<syntaxhighlight lang="text">
 
01 06 00 13 15 C2 F7 0E
 
01 06 00 13 15 C2 F7 0E
 
</syntaxhighlight>
 
 
=== 0F:写多个线圈(主机发送/从机返回) ===
 
从 000AH 起写 10 个线圈,共 2 字节(示例)
 
<syntaxhighlight lang="text">
 
01 0F 00 0A 00 0A 02 AA 0A 1A F3
 
01 0F 00 0A 00 0A 1A F3
 
</syntaxhighlight>
 
 
=== 10:写多个保持寄存器(主机发送/从机返回) ===
 
从 0013H 起写 2 个寄存器,共 4 字节(示例值 0x1253、0x3C1F)
 
<syntaxhighlight lang="text">
 
01 10 00 13 00 02 04 12 53 3C 1F 17 17
 
01 10 00 13 00 02 B0 0D
 
</syntaxhighlight>
 
 
== 批量按位控制 ==
 
- 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 低字节在前;确认帧内无额外空格/分隔符
 
  - 降低波特率尝试,检查屏蔽接地
 
- 偶发丢帧:
 
  - 延长帧间隔,优化收发切换时序
 
  - 排查供电与共地问题
 
  
 
== 注意事项 ==
 
== 注意事项 ==

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

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

本产品为标准的Modbus协议,可通过任意支持Modbus协议的软件或软件包控制继电器的开合,也可以通过给继电器发送Modbus指令控制其开合

注意事项

  • 控制继电器时若出现发送指令无法控制的情况,可以尝试以下操作
    • 在控制指令之间加入一条清除指令: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 周一到周六)