免占用產線
開發與測試都在回放資料上進行,不影響生產排程。
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 型號與現場需求,業務團隊會在一個工作天內回覆導入評估與報價。