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 型号与现场需求,销售团队会在一个工作日内回复导入评估与报价。

联系销售询价