|
|
(未显示同一用户的8个中间版本) |
第38行: |
第38行: |
| * [[USB Relay PRO]] | | * [[USB Relay PRO]] |
| }} | | }} |
| + | |
| + | == 注意 == |
| + | * 本页面仅适用于塑料外壳版本的RS485 Modbus Relay PRO,以下为托盘版本RS485 Modbus Relay PRO的相关WIKI: |
| + | [[RS485 Modbus Relay PRO (64, 12V, CN, None, A)]] |
| | | |
| == 产品概述 == | | == 产品概述 == |
第45行: |
第49行: |
| *[[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 协议进行通信。支持常用读写线圈与保持寄存器等功能码,提供通道工作模式、批量开关、定时/脉冲等功能配置。
| |
− |
| |
− | == 常用功能码 ==
| |
− | {| 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)
| |
− | - 接口:RS‑485 半双工,A/B 差分;总线末端建议 120Ω 终端电阻
| |
− |
| |
− | == 线圈与寄存器地址 ==
| |
− | 以下为手册中给出的主要地址段与含义。具体实现以当前固件为准。
| |
− |
| |
− | === 线圈(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×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) ==
| |
− | <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 错误:确认低字节在前;适当降低波特率;检查接地与屏蔽
| |
− | - 丢帧/误码:放宽主站超时与帧间间隔(≥3.5 字节时间);半双工收发切换预留足够延时
| |
− |
| |
− | == 13. 常见问题排查 ==
| |
− | - 无响应:
| |
− | - 检查从站地址、波特率、校验位是否与主站一致
| |
− | - 检查 A/B 线是否接反;总线是否有终端电阻
| |
− | - 增大主站超时与重试次数
| |
− | - CRC 错误:
| |
− | - 确认 CRC 低字节在前;确认帧内无额外空格/分隔符
| |
− | - 降低波特率尝试,检查屏蔽接地
| |
− | - 偶发丢帧:
| |
− | - 延长帧间隔,优化收发切换时序
| |
− | - 排查供电与共地问题
| |
| | | |
| == 注意事项 == | | == 注意事项 == |
RS485 Modbus Relay PRO
|
RS485 Modbus Relay PRO(1, CB, Opto)
RS485 Modbus Relay PRO(2, CB, Opto)
RS485 Modbus Relay PRO(3, CB, Opto)
RS485 Modbus Relay PRO(4, CB, Opto)
RS485 Modbus Relay PRO(8, CB, Opto)
|
|
|
|
|
注意
- 本页面仅适用于塑料外壳版本的RS485 Modbus Relay PRO,以下为托盘版本RS485 Modbus Relay PRO的相关WIKI:
RS485 Modbus Relay PRO (64, 12V, CN, None, A)
产品概述
- 继电器是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。
产品特点
本产品为标准的Modbus协议,可通过任意支持Modbus协议的软件或软件包控制继电器的开合,也可以通过给继电器发送Modbus指令控制其开合
注意事项
- 控制继电器时若出现发送指令无法控制的情况,可以尝试以下操作
- 在控制指令之间加入一条清除指令:0d 0a 0d 0a 0d 0a 0d 0a
- 指令之间的延时需要大于20ms
- 继电器的输出端相当于一个电子开关,本身是不输出电流电压的
- 当继电器输出端接入的负载功率较大或负载类型为感性负载等情况时,建议在负载端加入一个RC吸收回路,在降低通断过程对继电器触点产生的干扰
上位机测试
- 连接串口
- 将继电器模块与USB转485模块相连,连接方式:A - A,B - B。GND可不接
- 打开上位机软件

- 刷新串口
- 选择对应的串口
- 选择波特率9600
- 打开串口
- 设置通信ID
- 如果485总线上只有一个模块,则可以点击读取ID按钮自动读取模块的ID,并显示到ID文本框内(16进制格式)。并且可以通过设置ID按钮,将模块的ID设置为ID文本框内的值(16进制格式)。设置的模块ID会保存到模块内,断电也可以保存。
- 如果485总线上不止一个模块,则不可用以上的方法读取或设置ID。必须将要通信的模块的ID手动填到ID文本框内(16进制格式),才可以操作对应的模块。如果ID填0则是广播模式,总线上所有的模块都会收到相同的指令进行相同的动作,但回复的指令可能出现冲突导致意想不到的结果。
- 操作继电器
- 通过继电器控制的按钮可以操作对应通道的继电器,或全部打开全部关闭。对应通道的输出状态指示会在收到模块回复后进行相应的显示。
- 调试功能
- 调试区域显示当前串口发送和接收到的指令数据(16进制格式)。点击直接发送按钮可以通过串口发送发送数据文本框内的数据。点击计算CRC按钮会自动计算发送数据文本框内所有数据的CRC,并将结果加到结尾,可以方便进行modbus指令的调试。注意:由于发送的指令已经包含CRC,所以如果要手动修改发送的指令,需要将最后两个字节删除然后再按计算CRC按钮。
Modbus RTU指令简介
Modbus设备通过接收来自外部控制端(如:上位机/MCU)的Modbus RTU指令来执行相关操作,一帧指令一般由设备地址、功能码、寄存器地址、寄存器数据、校验码组成,帧长度和功能码有关。一般每帧数据的首字节为设备地址,可设置范围为1-255,默认255(即0xFF),最后2字节为CRC校验码。
假设设备地址为255,则常用的Modbus RTU指令如下:详情请查看模块使用说明
发送: 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代表关闭继电器
发送: 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
发送: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为写入的设备地址
发送:00 03 00 00 00 01 85 DB
返回:00 03 02 00 FF C5 C4
备注:返回帧的第4个和第5个字节0x00FF为读取到的设备地址
发送: 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
|
联系 丢石头
我们的工作时间是: 09:00-18:00 (UTC+8 周一到周六)
|
|