无需占用产线
开发与测试都在回放数据上进行,不影响生产排程。
Remote HMI Tutorial
传统 Remote HMI 开发必须连接实机反复测试。有了 Falcon 的 log 回放,你可以把现场「带回办公室」,再交给 AI Agent 编写并验证 PySide6 界面,几个小时就能完成原本需要好几天的工作。
开发与测试都在回放数据上进行,不影响生产排程。
回放的是现场真实通信,界面行为与上线后一致。
JSON-RPC 格式清晰,AI 能准确理解点位并生成 PySide6 代码。
PySide6 跨平台、许可友好,便于扩展数据分析与 AI 功能。
Log → Replay → PySide6 + AI
以下以一条冲压产线为例,演示从录制到上线的完整流程。
将 Falcon 串接在 PLC 与 HMI 之间,调用 log.record 录制一个班次的实际操作。所有点位读写都会以 JSON-RPC 格式保存。
把 log 带回办公室,调用 log.replay。Falcon 会按原始时序把通信重新发布到 MQTT,就像产线正在运行。
// Topic: falcon/line-01/rpc/req
{
"jsonrpc": "2.0",
"id": "replay-01",
"method": "log.replay",
"params": { "log": "2026-11-03_line01_shift-a", "speed": 1.0, "loop": true }
}把需求交给 AI coding agent。Agent 会自己订阅回放数据、整理点位、编写 PySide6 代码并运行测试,出错就自动修正。
Build a PySide6 window for "Line 01 Press".
Data arrives as JSON-RPC notifications on MQTT topic
falcon/line-01/event, method "traffic.observed", params.tags.
- Show D100 (pressure, bar) as a large gauge-style number
- Show M20 (motor running) as a green/grey status lamp
- "Set pressure" spin box sends JSON-RPC "tag.write" for D100
to falcon/line-01/rpc/req
Use paho-mqtt in a QThread and Qt signals to update the UI.运行生成的程序,界面会实时反映回放数据。调整布局、报警与数值格式,直到符合操作人员需求。
import json, sys, uuid
import paho.mqtt.client as mqtt
from PySide6.QtCore import QObject, Signal
from PySide6.QtWidgets import (QApplication, QLabel, QPushButton,
QSpinBox, QVBoxLayout, QWidget)
GW = "falcon/line-01"
class Bus(QObject):
tags = Signal(dict)
def __init__(self):
super().__init__()
self.c = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
self.c.on_message = lambda c, u, m: self.tags.emit(
json.loads(m.payload)["params"]["tags"])
self.c.connect("broker.local", 1883)
self.c.subscribe(f"{GW}/event")
self.c.loop_start()
def write(self, tag, value):
self.c.publish(f"{GW}/rpc/req", json.dumps({
"jsonrpc": "2.0", "id": str(uuid.uuid4()),
"method": "tag.write", "params": {"tag": tag, "value": value}}))
app = QApplication(sys.argv)
bus, win = Bus(), QWidget()
pressure, motor = QLabel("--"), QLabel("MOTOR")
setpoint, apply = QSpinBox(maximum=5000), QPushButton("Set pressure")
apply.clicked.connect(lambda: bus.write("D100", setpoint.value()))
def update(tags):
if "D100" in tags: pressure.setText(f"{tags['D100']} bar")
if "M20" in tags:
motor.setStyleSheet(f"background:{'#2e7d32' if tags['M20'] else '#555'}")
bus.tags.connect(update)
layout = QVBoxLayout(win)
for w in (pressure, motor, setpoint, apply): layout.addWidget(w)
win.setWindowTitle("Line 01 — Remote HMI"); win.show()
sys.exit(app.exec())把 MQTT 连接改为现场 Broker,Remote HMI 即可监看真实产线;开启授权后,也能通过 tag.write 进行控制介入。
示例中的 Topic、方法与点位名称为示意,请按实际产品文档与现场点位调整。
AI Agent · Development
AI coding agent(例如 Claude Code)不只会生成代码,还能自己运行、自己验证、自己修正。Falcon 的 JSON-RPC 消息与 log 回放,正好给 agent 一个不用接触实机就能反复测试的环境。
Agent 订阅回放中的 MQTT Topic,从 JSON-RPC 消息整理出点位列表与数据类型。
按你的需求生成 PySide6 界面与 MQTT 连接代码。
调用 log.replay 重现现场数据,检查界面数值、指示灯与报警是否正确。
发现问题就修改代码并重新测试,直到检查全部通过才交给你。
> 按 line-01 的回放 log,做一个冲压机 Remote HMI
● 读取 falcon/line-01/event:找到 D100、D120、M20 等 12 个点位
● 生成 remote_hmi.py(PySide6 + paho-mqtt)
● 执行 log.replay 验证:M20 指示灯正确,D100 数值偏差
↻ 修正:D100 需除以 10 换算为 bar,重新测试
✓ 完成,12 个点位检查全部通过
tag.read、log.replay 这类方法名称,agent 一看就懂,不用猜私有协议。
同一份 log 可以无限次回放,agent 能自己确认修改是否生效。
MQTT 与 JSON 是 agent 最熟悉的技术,生成的代码可靠性高。
开发与测试都在回放数据上进行,agent 的任何错误都不会影响产线。
告诉我们你的 PLC / HMI 型号与现场需求,销售团队会在一个工作日内回复导入评估与报价。