MQTT (Professional)
概述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布-订阅消息协议,专为 IoT 和 IIoT 通信设计。它是工业 4.0 中最重要的通信标准之一,实现了车间设备、云平台和企业系统之间的实时数据交换。
realvirtual 中的 MQTT 接口提供了与 MQTT 代理的无缝集成,用于云连接和分布式自动化系统。它支持 MQTT 3.1.1 和 MQTT 5.0 协议,并提供 WebSocket 传输、TLS 加密和自动重连处理选项。
主要特性
- 支持 MQTT 3.1.1 和 MQTT 5.0 协议
- TCP 和 WebSocket 传输选项
- TLS/SSL 加密安全通信
- 用户名/密码身份验证
- 自动信号发现和导入
- 层级化主题组织
- 批量消息发布以优化性能
- 后台线程通信以获得最佳 Unity 性能
- 支持 MQTT 通配符的主题过滤
- 实时双向通信
兼容的 MQTT 代理
该接口适用于所有标准 MQTT 代理,包括:
- Mosquitto - 流行的开源代理 (mosquitto.org)
- HiveMQ - 企业级云代理 (hivemq.com)
- AWS IoT Core - Amazon 托管的 IoT 服务
- Azure IoT Hub - Microsoft 云 IoT 平台
- 本地代理 - 用于本地部署
添加 MQTT 接口
通过选择 Tools > realvirtual > Add Object > Interface > MQTT 将 MQTT 接口添加到 realvirtual 场景。

MQTT 接口通过 Unity Inspector 提供全面的配置选项,包括连接设置、安全选项、信号管理和实时监控。
属性
连接设置
Broker(字符串)- MQTT 代理地址。可以是主机名(例如 test.mosquitto.org)、IP 地址(例如 192.168.1.100)或 localhost(用于本地代理)。
Port(整数)- MQTT 通信端口。默认为 1883,用于未加密的 TCP 连接。常见端口配置:
- 1883:标准 MQTT over TCP
- 8883:MQTT over TLS/SSL
- 8080/8083:MQTT over WebSocket(因代理而异)
Websocket(布尔值)- 启用后,使用 WebSocket 传输代替 TCP。这是 WebGL 构建所必需的,也适用于绕过阻止标准 MQTT 端口的防火墙限制。
MQTT5(布尔值)- 启用 MQTT 5.0 协议功能。禁用时使用 MQTT 3.1.1,与较旧的代理具有更广泛的兼容性。
Send Cycle Ms(整数)- 信号更新的批量持续时间(毫秒)。设置为 0 时,更改会立即发送。大于 0 的值将多个信号更新批量发送以提高性能,在许多信号快速变化时减少网络开销。
安全设置
Security(布尔值)- 安全功能的主开关。启用后,允许配置身份验证凭据和 TLS 加密。
UserName(字符串)- MQTT 代理身份验证的用户名。匿名连接时留空。仅在 Security 启用时可见。
Password(字符串)- 经过身份验证的连接的密码。仅在 Security 启用时可见。
TLS(布尔值)- 启用 TLS/SSL 加密以进行安全通信。该接口接受开发环境中的自签名证书。仅在 Security 启用时可见。
Delete Last Session Packets(布尔值)- 控制清除会话行为。启用后,以全新会话开始,丢弃之前连接中排队的消息。禁用时,保留并交付上次会话中未确认的消息。
信号导入设置
Use Topic Filters(布尔值)- 启用后,使用 MQTT 通配符模式进行选择性主题导入。禁用时,从代理导入所有可用主题。
Import Topic Filters(列表)- 用于选择性信号导入的 MQTT 通配符模式。支持标准 MQTT 通配符:
+匹配单个层级(例如sensor/+/temperature)#匹配多个层级(例如factory/line1/#)仅在 Use Topic Filters 启用时可见。
Import As Hierarchy(布尔值)- 启用后,创建与 MQTT 主题结构匹配的 GameObject 层级。类似 factory/line1/sensor/temp 的主题创建嵌套的 GameObject。禁用时,创建以斜杠替换为下划线的扁平结构。
Max Import Topics(整数)- 限制导入的主题数量,防止大型代理部署使接口过载。设置为 0 表示无限制导入。
运行时状态
State(只读)- 当前连接状态,显示为"Connected"(绿色)或"Disconnected"(红色)。
Input Signals(只读)- PLCInput 信号数量(发布到 MQTT)。
Output Signals(只读)- PLCOutput 信号数量(从 MQTT 订阅)。
Comm Cycle Ms(只读)- 当前通信周期时间(毫秒)。
Cycle Count(只读)- 自连接以来完成的通信周期数。
配置操作
Update Cycle Ms(整数)- 后台线程的目标通信周期时间。
Only Transmit Changed Inputs(布尔值)- 启用后,仅发布自上一个周期以来已更改的信号,减少网络流量。
Auto Reconnect(布尔值)- 连接丢失时自动尝试重连。
Reconnect Interval Seconds(整数)- 重连尝试之间的等待时间。
Max Reconnect Attempts(整数)- 放弃前的最大重连尝试次数(0 = 无限)。
Debug Mode(布尔值)- 启用详细日志记录,用于排查连接和通信问题。
信号管理
自动信号导入
MQTT 接口提供强大的信号发现和导入功能:
- 在 Inspector 中点击 Import Signals 按钮
- 接口连接到代理并根据您的过滤配置订阅主题
- 为发现的主题自动创建信号,具有适当的数据类型(Bool、Int、Float 或 Text)
- 主题映射到 GameObject 名称,特殊字符被清理
主题过滤
在 Import Topic Filters 中使用 MQTT 通配符模式来选择性导入信号:
sensor/+/temperature # 所有温度传感器
machine/press/# # machine/press 下的所有内容
+/+/status # 第三层的所有状态主题
production/line*/+ # 无效 - 通配符必须是 + 或 #
手动信号配置
也可以手动创建信号:
- 在 MQTT 接口下添加子 GameObject
- 添加 PLCInput(发布)或 PLCOutput(订阅)组件
- 将信号的 Name 属性设置为 MQTT 主题
- 如果 Name 为空,则使用 GameObject 名称作为主题
层级化组织
当 Import As Hierarchy 启用时,主题结构 factory/line1/plc/status 创建:
MQTT Interface
└── factory
└── line1
└── plc
└── status (带有 Signal 组件)
这种组织方式有助于在复杂的自动化系统中管理大量信号。
使用示例
基本连接
// 以编程方式配置 MQTT 接口
var mqtt = GetComponent<MQTTInterface>();
mqtt.Broker = "test.mosquitto.org";
mqtt.Port = 1883;
mqtt.OpenInterface();
安全云连接
对于需要身份验证的云代理:
- 启用 Security
- 在 UserName 和 Password 中输入代理凭据
- 启用 TLS 进行加密通信
- 设置适当的端口(TLS 通常为 8883)
WebGL 构建的 WebSocket
对于 Unity WebGL 构建或受防火墙限制的环境:
- 启用 Websocket
- 使用 WebSocket 端口(通常为 8080 或 8083)
- 确保代理支持 WebSocket 连接
性能优化
对于高频信号更新:
- 设置 Send Cycle Ms 以批量更新(例如 100ms)
- 启用 Only Transmit Changed Inputs
- 使用主题过滤器限制订阅
另请参见
- Signal Manager - 管理和组织信号
- Signal Importer Exporter - 导入和导出信号配置
- OPC UA 接口 - 用于工业通信的类似协议
- 接口概述 - 所有通信接口概述