反向RPC详解
本文档面向新手读者,介绍反向RPC的概念、工作原理及在ThingsGatewayRuntime中的配置使用方法。
什么是反向RPC?
基本概念
RPC(远程过程调用) 是一种让一台计算机调用另一台计算机上程序的通信方式。
反向RPC 是传统RPC的"反向"应用:
| 模式 | 说明 | 类比 |
|---|---|---|
| 传统RPC | 客户端主动调用服务端方法 | 顾客主动去餐厅点餐 |
| 反向RPC | 服务端被动接受外部系统的写入请求 | 餐厅准备好菜品等待顾客来取 |
通信模型

适用场景
| 场景 | 说明 | 典型应用 |
|---|---|---|
| 远程控制 | 上位机远程控制现场设备 | 启停设备、调整参数 |
| 数据下发 | 配置参数下发到设备 | 设定阈值、配方下发 |
| 命令执行 | 执行特定的设备操作 | 设备复位、校准操作 |
ThingsGatewayRuntime反向RPC架构
架构层次

调用流程
- 外部系统发起写入请求
- 协议适配层接收请求
- 检查权限(变量RPC使能、设备写入权限)
- 执行变量写入
- 返回执行结果
协议配置详解
一、OPC UA反向RPC
协议特点
| 特性 | 说明 |
|---|---|
| 安全性高 | 支持证书认证和加密通信 |
| 跨平台 | 平台无关的通信协议 |
| 工业标准 | 广泛应用于工业自动化 |
配置步骤
步骤一:创建OPC UA Server设备
- 在网关配置中创建新通道
- 选择OPC UA Server驱动
- 配置服务器参数
步骤二:配置服务器属性
| 参数 | 说明 | 默认值 |
|---|---|---|
| OpcUaStringUrl | OPC UA服务地址(分号分隔,可设置多个URL) | opc.tcp://127.0.0.1:49321 |
| BigTextApplicationName | 应用名称标识 | ThingsGateway OPC UA Server |
| SecurityPolicy | 是否启用安全策略 | false |
| UserName | 用户名(为空时允许匿名访问) | 空 |
| Password | 密码 | 空 |
| ServerCertificateName | 服务器证书名称 | 空 |
| IsAllVariable | 是否启用全部变量 | false |
步骤三:配置变量属性
| 属性 | 说明 | 设置值 |
|---|---|---|
| DataType | 变量数据类型 | 根据实际需求选择,默认Object |
使用方法
外部OPC UA客户端连接到网关后,可直接写入对应的节点,网关会自动将数据写入到对应变量。OPC UA Server会自动根据设备名称和变量名称创建节点结构。
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 连接被拒绝 | 证书未信任 | 导入证书到信任列表或设置SecurityPolicy为false |
| 认证失败 | 用户名密码错误 | 检查UserName和Password配置 |
| 节点不存在 | 变量未正确配置 | 确认变量已添加到设备中 |
二、Modbus Slave反向RPC
协议特点
| 特性 | 说明 |
|---|---|
| 简单可靠 | 协议简单,易于实现 |
| 广泛支持 | 几乎所有工业设备都支持 |
| 主从架构 | 主站发起请求,从站响应 |
工作原理
网关作为Modbus从站,等待外部主站的写入请求:
外部主站 ────写入命令(功能码06/16)────▶ 网关(从站) ────▶ 变量写入
◀───────响应结果────────
寄存器映射
| 寄存器类型 | 功能码 | 地址范围 | 用途 |
|---|---|---|---|
| 线圈(Coil) | 01读/05写 | 00001-09999 | 开关量输出 |
| 保持寄存器 | 03读/06写/16写 | 40001-49999 | 模拟量输出 |
配置步骤
步骤一:创建Modbus Slave设备
- 添加新通道(TCP Service或串口)
- 选择Modbus Slave驱动
- 配置从站参数
步骤二:配置从站属性
| 参数 | 说明 | 示例值 |
|---|---|---|
| Station | 默认站号 | 1 |
| ModbusType | Modbus类型 | Tcp |
| DeviceRpcEnable | 允许RPC写入 | true |
步骤三:配置变量映射
| 变量属性 | 说明 | 示例 |
|---|---|---|
| ServiceAddress | 从站变量地址 | "40001" |
| VariableRpcEnable | 允许RPC写入 | true |
| DataType | 数据类型 | Int16/Float |
使用方法
外部Modbus主站通过写入对应寄存器地址,网关自动将数据写入到映射的变量。
测试验证
使用Modbus调试工具(如Modbus Poll):
- 配置连接参数(IP、端口、从站地址)
- 执行写入操作
- 观察网关日志和变量值变化
三、Web API反向RPC
协议特点
| 特性 | 说明 |
|---|---|
| 简单易用 | 基于HTTP协议,易于集成 |
| 跨平台 | 任何支持HTTP的平台都可使用 |
| RESTful | 标准的REST API设计 |
接口说明
| 接口 | 方法 | 说明 |
|---|---|---|
| /api/variable/write | POST | 写入变量值 |
| /api/variable/value | GET | 读取变量值 |
| /api/auth/login | POST | 登录获取Token |
配置步骤
步骤一:启用Web API服务
Web API服务默认在网关启动时自动运行,端口6100。
步骤二:配置变量RPC属性
在变量属性中启用RPC写入权限。
步骤三:获取认证Token
登录后获取Token,后续请求需携带Token。
使用方法
请求示例:
POST /api/variable/write
Header: Authorization: Bearer {"{token}"}
Body: {
"variableName": "temperature_setpoint",
"value": 28.5
}
响应示例:
{
"code": 200,
"msg": "success",
"data": { "success": true }
}
认证说明
| 项目 | 说明 |
|---|---|
| 认证方式 | JWT Token |
| Token有效期 | 默认15天(可通过JWTOptions.ExpiredTime配置,单位分钟) |
| 默认账号 | admin / 111111 |
四、MQTT反向RPC
协议特点
| 特性 | 说明 |
|---|---|
| 轻量级 | 协议开销小,适合低带宽环境 |
| 发布/订阅 | 解耦的消息传递模式 |
| IoT友好 | 广泛应用于物联网场景 |
主题设计
| 主题 | 说明 | 示例 |
|---|---|---|
| 写入请求 | 接收写入请求 | gateway/rpc/write |
| 写入响应 | 返回执行结果 | gateway/rpc/write/Response |
| 数据请求 | 触发数据推送 | gateway/rpc/quest |
消息格式
写入请求消息:
{
"device": "Device1",
"variable": "temperature_setpoint",
"value": 28.5
}
响应消息:
{
"requestId": "xxx-xxx-xxx",
"success": true,
"message": "写入成功"
}
配置步骤
步骤一:配置MQTT连接
| 参数 | 说明 | 示例值 |
|---|---|---|
| IP | IP地址 | localhost |
| Port | 端口 | 1883 |
| ClientId | 客户端ID | gateway_client |
步骤二:配置RPC主题
| 参数 | 说明 | 示例值 |
|---|---|---|
| RpcWriteTopic | RPC写入Topic | gateway/rpc/write |
| RpcQuestTopic | 数据请求Topic | gateway/rpc/quest |
| QosLevel | QoS等级 | AtMostOnce |
步骤三:配置变量RPC属性
| 变量属性 | 说明 | 设置值 |
|---|---|---|
| VariableRpcEnable | 允许RPC写入 | true |
QoS等级说明
| 等级 | 说明 | 适用场景 |
|---|---|---|
| 0 | 最多一次,可能丢失 | 非关键数据 |
| 1 | 至少一次,可能重复 | 一般场景 |
| 2 | 恰好一次 | 关键数据 |
常见问题
Q1: RPC写入失败,提示"权限不足"
解决方案:
- 检查变量属性中
VariableRpcEnable是否为true(Modbus Slave / MQTT) - 检查设备属性中
DeviceRpcEnable是否为true(Modbus Slave / MQTT) - 检查用户角色是否有对应权限
Q2: OPC UA连接被拒绝
解决方案:
- 将客户端证书导入服务器信任列表
- 确保客户端和服务端安全策略一致(SecurityPolicy配置)
- 检查防火墙规则
- 若不需要安全策略,可设置
SecurityPolicy为false
Q3: MQTT消息丢失
解决方案:
- 提高QoS级别至至少1
- 检查主题配置是否正确
- 启用客户端自动重连
Q4: Web API Token过期
解决方案:
- Token有效期默认为15天(可通过JWTOptions.ExpiredTime配置),过期需重新登录
- 在Token即将过期时调用刷新接口
附录
术语解释
| 术语 | 解释 |
|---|---|
| RPC | 远程过程调用,一种计算机通信协议 |
| 反向RPC | 服务端被动接受外部调用的RPC模式 |
| OPC UA | 开放平台通信统一架构,工业通信标准 |
| Modbus | 一种广泛应用于工业领域的通信协议 |
| MQTT | 消息队列遥测传输协议,轻量级IoT协议 |
| QoS | 服务质量等级 |
相关链接
提示
本文档持续更新中,如有疑问请在社区反馈或查看最新在线文档。