Skip to content

接入 RS-485 外设

适用场景

适用于支持 RS-485 的 WLTE 设备需要与外设交换原始字节的场景。OpenAPI 提供数据透传,不会自动实现完整的 Modbus 协议栈。

你的服务需要构造应用协议数据、按需计算 CRC、解析响应,并根据外设语义制定重试规则。

推荐流程

  1. 查询设备列表读取目标设备的 deviceType
  2. 设备类型定义列表中找到相同的 profile。
  3. 只有 supportedOperations 包含 device.rs485.transceive 时才开放透传功能。
  4. 需要修改波特率时,单独检查 device.rs485.baudRate.set,并从查询设备配置读取当前值。
  5. 使用新的 Idempotency-Key 提交原始请求,并保存返回的命令 ID。
  6. 只有状态为 SUCCESS 时才解析 command.result.responseHex;状态为 SENT 时查询命令结果。

分步骤实现

1. 校验能力和配置

不要根据设备名称或其他型号推断 RS-485 能力,应以 supportedOperations 为准。透传需要 device:control,修改波特率需要 device:config

波特率端点接受的范围和单位以设置 RS485 波特率为准。设备与外设必须使用相同波特率。

2. 构造原始请求

REST 调用通过 RS485 透传命令发送 requestHex。当前契约接受 130 字节的连续十六进制字符串,不能包含空格、0x 前缀或分隔符。

外设使用 Modbus RTU 时,应用需要自行构造地址、功能码、数据和 CRC。OpenAPI 只转发字节并返回原始响应,不校验 Modbus 寄存器或功能码语义。

3. 处理命令结果

  • SUCCESS:按外设协议解析 result.responseHex
  • SENT:调用查询命令结果
  • FAILED:停止并展示已确认的失败。
  • TIMEOUT:等待窗口内没有匹配响应,不能据此认定外设写入失败。

使用 WebSocket 时,匹配到请求的数据在操作 reply 中返回。延迟到达或设备主动发送的数据可能通过 device.rs485.received 到达,该事件不提供历史补发。

关键接口与事件

用途文档
确认设备能力查询设备类型定义列表
通过 REST 发送原始数据RS485 透传命令
通过 WebSocket 发送原始数据RS485 透传
设置波特率设置 RS485 波特率
读取当前配置查询设备配置
接收未匹配数据RS485 数据事件

失败与恢复策略

  • 只有在 HTTP 结果未知或被限流后重试完全相同的透传请求时,才复用原幂等键。
  • TIMEOUT 视为原命令的不确定终态;复用原 key 不会重新发送数据。需要再次执行且外设命令允许安全重试时,生成新 key。
  • 应用数据前,在自己的解析器中校验响应长度、协议校验码、地址和功能码。
  • 无法容忍丢失时,应及时持久化主动或延迟到达的数据;WebSocket 事件不会补发。
  • 遵守设备操作限流,不要向同一台设备并行发送透传请求。

生产环境注意事项

  • 为每条物理 RS-485 总线或设备维护一个协调后的请求队列。
  • 原始总线数据可能包含敏感值时,应在日志中脱敏。
  • 记录命令 ID、幂等键、请求和响应长度、最终状态及 requestId,不要记录凭证或 access token。
  • 开启自动重试前,使用真实外设测试超时和重复响应行为。

下一步

Docs buildVersion v1.3.6-20260720-180213-70
Copyright © 2026 WLTE