Technology

JSON-RPC 規範 × MQTT 介接

Falcon 不發明新協定。它把 PLC 與 HMI 之間的串列通訊,翻譯成工程師早已熟悉的 JSON-RPC 2.0 訊息,並直接走 MQTT 發佈與訂閱。

通訊介面

Falcon 一端接在現場的串列通訊上,另一端以 MQTT 把資料交給你的系統。

連接位置支援方式
現場端:PLC ↔ HMI串列通訊:RS-232、RS-422、RS-485
系統端:Falcon → MES / SCADA / 雲端MQTT,訊息格式為 JSON-RPC 2.0
PLC 與 HMI 之間使用乙太網路目前不支援

請透過詢價表單告訴我們你的 PLC / HMI 型號與接線方式,我們會確認對應的通訊協定與接線。

為什麼是 JSON-RPC + MQTT

清楚的呼叫契約

JSON-RPC 2.0 定義了 method、params、id、result、error,請求與回應一一對應,錯誤碼有標準可循。

工業物聯網的通用語言

MQTT 輕量、支援 QoS 與保留訊息,是 AIoT 與工業 4.0 最普遍的傳輸協定,幾乎所有平台都能直接介接。

語言無關、平台無關

Python、Node.js、C#、Go,或 Node-RED、雲端 IoT 服務,只要會收發 JSON 與 MQTT 就能整合。

一條 Broker 串起全部

監聽資料、遠端指令、系統狀態都走同一個 MQTT Broker,架構簡單、權限集中管理。

MQTT Topic 結構

每台 Falcon 以 Gateway ID 作為 Topic 前綴,依用途分出請求、回應、事件與狀態。

Topic方向用途
falcon/{gw}/rpc/req用戶端 → FalconJSON-RPC 請求(讀寫點位、控制、回放)
falcon/{gw}/rpc/res/{client}Falcon → 用戶端對應 id 的 JSON-RPC 回應
falcon/{gw}/eventFalcon → 訂閱者監聽到的 PLC ↔ HMI 通訊(JSON-RPC notification)
falcon/{gw}/statusFalcon → 訂閱者上線 / 離線狀態(retained + LWT)

請求與回應

用戶端將請求發佈到 rpc/req,並以 reply_to 指定回應 Topic;Falcon 執行後回傳相同 id 的結果或錯誤。

請求:寫入點位json
// Topic: falcon/line-01/rpc/req
{
  "jsonrpc": "2.0",
  "id": "c7f2-0001",
  "method": "tag.write",
  "params": {
    "tag": "D100",
    "value": 1250,
    "reply_to": "falcon/line-01/rpc/res/mes-01"
  }
}
回應:成功json
// Topic: falcon/line-01/rpc/res/mes-01
{
  "jsonrpc": "2.0",
  "id": "c7f2-0001",
  "result": {
    "tag": "D100",
    "value": 1250,
    "ts": "2026-11-04T08:15:02.481Z"
  }
}
回應:錯誤(標準 JSON-RPC 錯誤碼)json
{
  "jsonrpc": "2.0",
  "id": "c7f2-0002",
  "error": {
    "code": -32602,
    "message": "Invalid params",
    "data": { "tag": "D9999", "reason": "out of range" }
  }
}

監聽事件

Falcon 監聽到 HMI 與 PLC 之間的通訊時,會以沒有 id 的 JSON-RPC notification 發佈到 event Topic,任何訂閱者都能即時取得。

JSON-RPC notificationjson
// Topic: falcon/line-01/event   (JSON-RPC notification, no id)
{
  "jsonrpc": "2.0",
  "method": "traffic.observed",
  "params": {
    "direction": "hmi->plc",
    "op": "read",
    "tags": { "D100": 1200, "M20": true },
    "ts": "2026-11-04T08:15:01.937Z"
  }
}

方法一覽(示意)

方法以「領域.動作」命名,一眼就能看懂用途。

Method說明
tag.read讀取一或多個 PLC 點位的目前值
tag.write寫入 PLC 點位(控制介入)
monitor.subscribe設定要監聽並發佈的點位範圍
log.record開始 / 停止錄製通訊 log
log.replay回放指定 log,重現現場通訊
system.info取得 Gateway 版本、狀態與連線資訊

Python 介接範例

用 paho-mqtt 不到 30 行就能訂閱事件並讀取點位。

client.pypython
import json, uuid
import paho.mqtt.client as mqtt

GW = "falcon/line-01"
ME = "mes-01"

def on_message(client, userdata, msg):
    print(msg.topic, json.loads(msg.payload))

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=ME)
client.on_message = on_message
client.connect("broker.local", 1883)
client.subscribe(f"{GW}/event")
client.subscribe(f"{GW}/rpc/res/{ME}")

req = {
    "jsonrpc": "2.0",
    "id": str(uuid.uuid4()),
    "method": "tag.read",
    "params": {"tags": ["D100", "M20"], "reply_to": f"{GW}/rpc/res/{ME}"},
}
client.publish(f"{GW}/rpc/req", json.dumps(req), qos=1)
client.loop_forever()

安全與可靠性

  • 支援 MQTT 帳號密碼驗證與 TLS 加密連線
  • 可依 Topic 設定 ACL,區分唯讀監聽與可寫入的用戶端
  • 寫入操作必須透過明確的 JSON-RPC 方法,並可完整記錄於 log
  • 以 QoS 1 與 LWT 確保指令送達與連線狀態可觀測

本頁的 Topic 命名、方法名稱與欄位為示意範例,實際規格以產品技術文件為準。

Supported PLC

支援的 PLC 品牌

Falcon 支援台灣產線常見的日系與台系 PLC,以串列通訊(RS-232 / RS-422 / RS-485)連接,不需要更換既有設備。

  • 三菱電機Mitsubishi Electric
  • 歐姆龍Omron
  • 台達電子Delta
  • 基恩斯Keyence
  • Panasonic
  • 東芝Toshiba
  • 豐煒Vigor
  • 山武(azbil)Yamatake
  • 理化工業RKC
  • 荏原Ebara

同一品牌依系列與通訊協定支援程度不同。請透過詢價表單告訴我們你的型號,我們會提供相容性確認;清單以外的品牌也歡迎詢問。 聯絡業務詢價 →

讓你的產線今天就開始說 MQTT

告訴我們你的 PLC / HMI 型號與現場需求,業務團隊會在一個工作天內回覆導入評估與報價。

聯絡業務詢價