Skip to content

Edge RS485:Modbus / Private ​

仅对具有 RS485 硬件及对应配置项的 Edge 成品适用。先按本机图连接 A/B、参考地,再设置协议、从站地址、波特率、数据位、校验、停止位、超时及 CRC;与主站保持一致。关闭 CRC 校验只用于受控联调,正式接入保留校验。

两种协议选择 ​

协议上报方向下发方式
Modbus RTU主站查询网关,网关返回最新缓存0x10 写入后转无线下行
Private收到终端业务时主动向串口推送用终端数字序号指定一个目标,无串口回复保证

这些数据来自网关处理后的终端应用字节,不自动转为温度/压力寄存器;特殊旧帧可能先截断,见旧帧兼容处理。不是 Modbus TCP,不向普通网关网页端口发送 Modbus RTU 帧。

Modbus 寄存器映射 ​

设每个终端占 N 个寄存器,则终端数字序号 i 的首地址为 i × N,每个寄存器 2 字节,地址/数量按大端,CRC 低字节在前。使用终端列表的实际数字序号,不用 DevEUI 或列表当前行号计算。

功能码作用地址与数据规则
03读最新业务缓存每终端 N 个寄存器,缓存过长截断,过短补零;不能用补零证明实际测量为零
04读在线状态每终端固定 1 个寄存器;1 在线、0 离线;按在线判定窗口解释
10向终端写数据起始地址对齐 N,数量为 N 的整数倍;每目标下发 2N 字节

03 可跨连续存在的终端区间读取;所需序号缺失时返回异常。04 的映射与 03 不同:N=4 时,序号 1 的业务从地址 4 开始,在线状态仍从地址 1 读取。当前一次读请求数据长度不超过 254 字节。

N=4 的构造样例 ​

用途帧(HEX)
读序号 0、1 的 8 个业务寄存器01 03 00 00 00 08 44 0C
读序号 0~5 在线状态01 04 00 00 00 06 70 08
下发两个终端、每个 8 字节01 10 00 00 00 08 10 39 30 61 62 63 64 65 66 31 32 33 34 35 36 37 38 7F 5D
上述写请求正常回复01 10 00 00 00 08 C1 CF

样例仅说明编码,未向现场发送。当前串口无线下行固定使用 FPort 1;要发其他端口使用 MQTT/管理 API,不能假定寄存器里可指定 FPort。Modbus 写回复只表示网关处理该请求,不证明终端收到了无线命令。

异常响应为功能码加 0x80 和异常码;常见 01 不支持功能、02 地址错误、03 数据值/长度错误。CRC 错误通常不响应,先核对串口格式与完整帧;地址 0 为广播时不期待常规回复。

Private 帧 ​

字节含义
0从站地址,1 字节
1~2终端数字序号,uint16 小端
3应用载荷长度,1 字节
4~原始应用载荷,不是 Base64
末尾 2 字节Modbus CRC16,低字节在前

上下行采用相同结构。构造下发样例 01 01 00 03 01 02 03 1A F4:地址 1、序号 1、载荷 3 字节。Private 下发也使用 FPort 1,不提供逐条串口成功应答;Class A 仍要等上行接收窗口。序号改变、删除终端或缓存变化后重新核对映射,不将串口成功作为无线验收。

图解与主站操作顺序 ​

Edge RS485 配置(界面示例):Modbus、从站地址 1、每终端 4 个寄存器、9600/8N1、读取超时 20ms、CRC 开启。仅用于说明字段位置,未连接 PLC 或发送串口数据。
Edge RS485 配置(界面示例):Modbus、从站地址 1、每终端 4 个寄存器、9600/8N1、读取超时 20ms、CRC 开启。仅用于说明字段位置,未连接 PLC 或发送串口数据。 点击放大
Edge RS485 配置(界面示例):Modbus、从站地址 1、每终端 4 个寄存器、9600/8N1、读取超时 20ms、CRC 开启。仅用于说明字段位置,未连接 PLC 或发送串口数据。
Edge RS485 配置(界面示例):Modbus、从站地址 1、每终端 4 个寄存器、9600/8N1、读取超时 20ms、CRC 开启。仅用于说明字段位置,未连接 PLC 或发送串口数据。
  1. 确认成品带 RS485,按对应原厂图接线。
  2. 从终端列表记录目标的实际数字序号 i;选择 Modbus 时还要确定每终端寄存器数 N。
  3. 在输出配置勾选 RS485,设定协议、从站地址、波特率、数据位、校验位、停止位和读取超时;Modbus 另设 N。保存、等待重启并重连后,再让目标终端产生一条真实业务上行并记录原始字节。重启前的运行缓存不会保留,不能直接用它验收保存后的寄存器。
  4. 使用 Modbus 时,主站选择 Modbus RTU,填写同样串口格式和从站地址,先读一个终端的缓存和在线状态。使用 Private 时,接收程序按本章帧结构等待网关主动推送,不能发 03/04 去查询 Private。最后再验证允许发送的控制命令。
  5. Modbus 比较原始字节和读到的寄存器,记录截断/补零;Private 比较主动推送的序号、长度、载荷与 CRC。两种方式都依赖终端新上报,不是每次主站查询都触发传感器采样。

timeout 是串口读取超时(ms),不是 LoRaWAN 终端响应超时。调得很小可能影响串口分包,调得很大也不改变 Class A 接收窗口。

业务地址和在线地址的具体例子 ​

当终端实际序号 i=1、N=4:03 从地址 4 读 4 个寄存器;04 从地址 1 读 1 个寄存器。请求地址是协议中从 0 开始的地址;有些 PLC 软件用 40001/30001 显示,需要按其驱动说明转换,不能把 40001 直接写进两个地址字节。

假定终端上报字节为 01 02 03,03 对应缓存将是 01 02 03 00 00 00 00 00。这只是字节装载示例,不规定温度、压力的寄存器比例或浮点字节序;测量值仍按该终端协议解析。

串口组播下发 ​

Modbus 0x10 和 Private 下发均能按实际组序号选择组目标。组序号区间与终端序号区间分开;Modbus 组首寄存器地址仍按 组序号 × N 计算,并且必须能放入 16 位地址。不要自行假定组序号起点固定为某个数,先读取当前分组记录。

03/04 只读取终端,不用于读取组缓存或“组在线”。组下发同样固定 FPort 1,前提是网关分组与终端内的组地址/密钥匹配,不能通过 RS485 写寄存器自动完成终端组参数配置。

帧边界与排错 ​

一次发送完整请求,等待回复或超时再发下一条,先避免把多条请求拼接或交错发送。CRC 错误、地址错误、读取长度错误、终端序号缺失应分别排查;当前实现对零数量或读数据超过 254 字节返回 02,长度不匹配等写入问题可返回 03。03 读的是运行缓存,重启后需等待新业务上报,不能把全零当成恢复了历史测量值。

设备使用指南