跳到主要内容

反向RPC详解

本文档面向新手读者,介绍反向RPC的概念、工作原理及在ThingsGatewayRuntime中的配置使用方法。

什么是反向RPC?

基本概念

RPC(远程过程调用) 是一种让一台计算机调用另一台计算机上程序的通信方式。

反向RPC 是传统RPC的"反向"应用:

模式说明类比
传统RPC客户端主动调用服务端方法顾客主动去餐厅点餐
反向RPC服务端被动接受外部系统的写入请求餐厅准备好菜品等待顾客来取

通信模型

反向RPC通信模型

适用场景

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

ThingsGatewayRuntime反向RPC架构

架构层次

反向RPC架构

调用流程

  1. 外部系统发起写入请求
  2. 协议适配层接收请求
  3. 检查权限(变量RPC使能、设备写入权限)
  4. 执行变量写入
  5. 返回执行结果

协议配置详解

一、OPC UA反向RPC

协议特点

特性说明
安全性高支持证书认证和加密通信
跨平台平台无关的通信协议
工业标准广泛应用于工业自动化

配置步骤

步骤一:创建OPC UA Server设备

  1. 在网关配置中创建新通道
  2. 选择OPC UA Server驱动
  3. 配置服务器参数

步骤二:配置服务器属性

参数说明默认值
OpcUaStringUrlOPC 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设备

  1. 添加新通道(TCP Service或串口)
  2. 选择Modbus Slave驱动
  3. 配置从站参数

步骤二:配置从站属性

参数说明示例值
Station默认站号1
ModbusTypeModbus类型Tcp
DeviceRpcEnable允许RPC写入true

步骤三:配置变量映射

变量属性说明示例
ServiceAddress从站变量地址"40001"
VariableRpcEnable允许RPC写入true
DataType数据类型Int16/Float

使用方法

外部Modbus主站通过写入对应寄存器地址,网关自动将数据写入到映射的变量。

测试验证

使用Modbus调试工具(如Modbus Poll):

  1. 配置连接参数(IP、端口、从站地址)
  2. 执行写入操作
  3. 观察网关日志和变量值变化

三、Web API反向RPC

协议特点

特性说明
简单易用基于HTTP协议,易于集成
跨平台任何支持HTTP的平台都可使用
RESTful标准的REST API设计

接口说明

接口方法说明
/api/variable/writePOST写入变量值
/api/variable/valueGET读取变量值
/api/auth/loginPOST登录获取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连接

参数说明示例值
IPIP地址localhost
Port端口1883
ClientId客户端IDgateway_client

步骤二:配置RPC主题

参数说明示例值
RpcWriteTopicRPC写入Topicgateway/rpc/write
RpcQuestTopic数据请求Topicgateway/rpc/quest
QosLevelQoS等级AtMostOnce

步骤三:配置变量RPC属性

变量属性说明设置值
VariableRpcEnable允许RPC写入true

QoS等级说明

等级说明适用场景
0最多一次,可能丢失非关键数据
1至少一次,可能重复一般场景
2恰好一次关键数据

常见问题

Q1: RPC写入失败,提示"权限不足"

解决方案:

  1. 检查变量属性中VariableRpcEnable是否为true(Modbus Slave / MQTT)
  2. 检查设备属性中DeviceRpcEnable是否为true(Modbus Slave / MQTT)
  3. 检查用户角色是否有对应权限

Q2: OPC UA连接被拒绝

解决方案:

  1. 将客户端证书导入服务器信任列表
  2. 确保客户端和服务端安全策略一致(SecurityPolicy配置)
  3. 检查防火墙规则
  4. 若不需要安全策略,可设置SecurityPolicyfalse

Q3: MQTT消息丢失

解决方案:

  1. 提高QoS级别至至少1
  2. 检查主题配置是否正确
  3. 启用客户端自动重连

Q4: Web API Token过期

解决方案:

  1. Token有效期默认为15天(可通过JWTOptions.ExpiredTime配置),过期需重新登录
  2. 在Token即将过期时调用刷新接口

附录

术语解释

术语解释
RPC远程过程调用,一种计算机通信协议
反向RPC服务端被动接受外部调用的RPC模式
OPC UA开放平台通信统一架构,工业通信标准
Modbus一种广泛应用于工业领域的通信协议
MQTT消息队列遥测传输协议,轻量级IoT协议
QoS服务质量等级

相关链接


提示

本文档持续更新中,如有疑问请在社区反馈或查看最新在线文档。