切换深色模式
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 仍要等上行接收窗口。序号改变、删除终端或缓存变化后重新核对映射,不将串口成功作为无线验收。
图解与主站操作顺序

- 确认成品带 RS485,按对应原厂图接线。
- 从终端列表记录目标的实际数字序号 i;选择 Modbus 时还要确定每终端寄存器数 N。
- 在输出配置勾选 RS485,设定协议、从站地址、波特率、数据位、校验位、停止位和读取超时;Modbus 另设 N。保存、等待重启并重连后,再让目标终端产生一条真实业务上行并记录原始字节。重启前的运行缓存不会保留,不能直接用它验收保存后的寄存器。
- 使用 Modbus 时,主站选择 Modbus RTU,填写同样串口格式和从站地址,先读一个终端的缓存和在线状态。使用 Private 时,接收程序按本章帧结构等待网关主动推送,不能发 03/04 去查询 Private。最后再验证允许发送的控制命令。
- 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 读的是运行缓存,重启后需等待新业务上报,不能把全零当成恢复了历史测量值。