CATALOG

24路远程控制的核心挑战在于:单台24路继电器模块通常采用Modbus协议,而芯步的开放接口标准是HTTP/MQTT。这篇方案将围绕“协议转换”这一关键环节,给出从硬件选型、接口封装到代码实现的完整对接路径。

1. 解决概述

1.1 项目目标

本方案的目标是通过芯步开放平台的标准化API接口,实现对24路远程控制继电器模块的集成与控制。最终目标是让开发者或集成商能够通过简单的HTTP请求或MQTT协议,轻松控制24个独立线路的通断状态,从而应用于智能照明、工业设备控制、机房动环监控、农业灌溉等场景。

1.2 核心对接思路

芯步的开放接口标准是面向“物模型”的通用接口,而市面上大多数24路继电器模块(如基于Modbus RTU/TCP协议的工业级IO模块)具有自己的通信协议。实现对接通常有以下两种路径:

  • 路径A(推荐):使用透传网关 + Modbus 24路继电器模块。将24路继电器模块挂载在支持Modbus协议转换的芯步生态网关下,由网关完成Modbus到JSON的协议转换。

  • 路径B:若24路继电器模块本身支持自定义TCP/UDP/MQTT上报,可直接将其按照芯步的设备接入规范封装。

本方案侧重于路径A,因为这是工业控制场景中最成熟、成本最优的方案,充分利用了芯步平台对Modbus RTU/TCP的良好适配性

2. 硬件选型与连接架构

2.1 硬件组成

  1. 24路继电器模块:选择支持标准Modbus RTU协议或Modbus TCP协议的工业级IO控制器

    • 推荐参数:触点容量满足负载需求(如10A/250V AC),具备RS485接口。

  2. 芯步生态网关:需要一台支持485接口且已接入芯步平台的网关设备(如DTU或边缘网关)。

  3. 云平台:芯步开放平台(已创建AppID和AppSecret)。

2.2 物理连接

  • 接线:将24路继电器模块的 RS485 A(+) 线连接至网关的 A(+) 端子,B(-) 线连接至网关的 B(-) 端子,并确认共地(GND)。

  • 参数匹配:确保网关的串口参数(波特率、数据位、校验位)与24路继电器模块一致(默认通常为9600,8,N,1)

2.3 寄存器映射关系

要实现控制,必须在芯步后台定义“物模型”。标准24路继电器(如DAM2424)的Modbus寄存器通常定义如下:

逻辑通道功能描述Modbus寄存器地址读写属性数据类型值含义
Channel 1第1路继电器输出0x0000 (或 00001)读/写线圈(Coil)0xFF00=闭合/0x0000=断开
Channel 2第2路继电器输出0x0001读/写线圈...
..................
Channel 24第24路继电器输出0x0017读/写线圈...

注:具体地址请参考对应继电器模块的Modbus通讯手册

3. API对接核心流程

芯步开放平台提供HTTP API和MQTT两种方式,此处以更通用的HTTP API为例

3.1 认证与签名计算

所有API请求都需要携带签名(sign)和时间戳(ts)以确保安全。

  • AppID:开发者ID

  • AppSecret:开发者密钥

  • Sign算法sign = md5( md5(AppSecret) + ts )

3.2 关键接口:向设备下发指令

在网关已经配置好Modbus子设备(24路继电器模块)的前提下,上层应用只需控制网关,或者直接控制子设备(若平台支持透传)。芯步标准接口device/control调用方式如下:

  • 请求地址http(s)://api.thingboot.com/{AppID}/device/control/

  • 请求方法POST

  • 请求体

4. 控制24路的指令构造详解

为实现对24路继电器的独立或组合控制,我们需要结合具体的网关解析逻辑。如果网关将Modbus指令映射成了标准的JSON功能,可以参考以下构造方式:

4.1 单路控制(如:单独打开第3路)

大多数透传网关支持在order中直接指定Modbus寄存器地址或自定义的通道名称。假设:网关定义的功能为channel数组或relay1-relay24字段

  • 打开第3路

  • 关闭第3路

4.2 批量控制(多路同时动作)

如果需要同时打开所有照明线路,无需调用24次接口,可以一次性下发全部状态。

这种机制显著降低了网络延迟和服务器压力,利用芯步的单次请求多字段下发能力

4.3 高级功能:闪开与闪断(点动模式)

在工业场景中,有时需要继电器接通1秒后自动断开(例如给电磁阀一个脉冲信号)。如果24路继电器模块支持该功能,通常可以通过在order中携带特定参数实现

5. 实战代码示例(HTTP POST)

以下示例展示了如何使用Python通过芯步API控制24路继电器模块的第1路和第2路。

注意:上述代码中的relay1relay2需要替换为你实际在芯步平台为24路模块定义的物模型功能标识符(Identifier)

6. 群组控制策略

如果有多个24路继电器模块(例如管理整栋楼的灯光),芯步的标签(Tag)分组(Group)功能非常适合进行场景联动。

6.1 创建群组

在芯步控制台中,创建一个名为“车间照明组”的群组,并将多个24路继电器设备的对应通道添加进去。

6.2 一键执行场景

通过调用/tag/control/接口,可以实现一键关闭整个车间的所有线路

7. 注意事项与最佳实践

  1. 异步消息与状态反馈API返回200仅代表指令下发成功,不代表设备真的执行了(因为设备可能离线)。为了获取准确的执行结果,需要配置芯步的消息推送(Webhook/MQTT),接收设备上报的当前状态。在接收到设备上报的relay1_status=1回执后,才在前端界面显示“已开启”。

  2. 设备离线处理如果24路继电器模块通过RS485连接网关,网关离线会导致控制失败。开发者在设计逻辑时应调用设备状态查询接口,确认网关在线后再下发重要指令。

  3. 24路地址映射部分工业Modbus模块(如LORA2424)的寄存器地址可能不是连续的,或者需要使用Modbus的05功能码写单线圈、15功能码写多线圈。如果芯步网关不支持直接写多线圈,可能需要网关厂商提供特定的LUA脚本或边缘计算脚本进行适配。

  4. 并发控制短时间内频繁对同一路继电器下发指令(例如反复开关),可能会导致模块死锁或触点打火。在前端做防抖处理,最小间隔大于200ms。

通过上述方案,用户可以快速、稳定地通过芯步的开放API实现对24路远程继电器模块的智能化改造,将复杂的Modbus协议细节封装在硬件层,上层应用只需关注业务逻辑与简单的JSON交互。