2026年6月9日 星期二

ModBus + Fuxa + MQTT

 ModBus + Fuxa + MQTT 




這是一個非常實用且經典的工業物聯網(IIoT)與數據可視化架構。在這個架構中,Modbus Poll 負責模擬底層工業設備(如 PLC、感測器),MQTT Broker 擔任資料交換的中台,而 FUXA 則是一套開源的 Web-based SCADA 系統,負責將資料抓回並進行動態網頁監控。

為了讓這個通訊範例能夠順利運作,我們將架構設計如下:

Modbus Poll (設備端) ──[Modbus TCP]──> FUXA (SCADA中心) ──[MQTT]──> MQTT Broker (雲端/中台)

以下為您規劃完整的環境建置與通訊設計步驟:

1. 環境準備與軟體設定

請確保您的電腦上已安裝或準備好以下軟體:

  1. Modbus Poll:用於模擬 Modbus TCP Slave(伺服器)或 Master。在本範例中,我們將其設定為 Modbus TCP Slave(模擬一台 PLC)。

  2. MQTT Broker:可以使用公用的 Broker(例如 broker.hivemq.com),或在本地端用 Docker 運行 Mosquitto

  3. FUXA:確認已啟動 FUXA 服務(通常透過 Node.js 或 Docker 執行,瀏覽器輸入 http://localhost:1881 進入畫面)。

2. 第一階段:Modbus Poll 設定 (模擬工業設備)

我們首先讓 Modbus Poll 模擬一個內含溫度與濕度資料的智能感測器。

步驟 A:建立暫存器

  1. 打開 Modbus Poll,點選選單的 Setup -> Read/Write Definition

  2. 設定如下:

    • Slave ID: 1

    • Function: 03 Read Holding Registers (4x)

    • Address: 0 (從 0 開始)

    • Quantity: 10 (讀取 10 個暫存器)

  3. 點擊 OK

步驟 B:啟動 Modbus TCP 伺服器

  1. 點選選單的 Connection -> Connect...

  2. 在 Connection 下拉選單選擇 Modbus TCP/IP Server

  3. TCP Server Port: 預設 502(如果權限衝突,可改為 5020)。

  4. 點擊 OK 啟動監聽。


ModbusTCPTool

Modbus TCP test tool, support server and client mode, support 4 types of registers, client support regular reading data, data support hexadecimal, binary and other





步驟 C:模擬數據輸入

在編號 40001 (Address 0) 與 40002 (Address 1) 的格子點兩下,分別手動輸入數值:

  • 40001 (Address 0): 輸入 25 (模擬溫度 $25^\circ\text{C}$)

  • 40002 (Address 1): 輸入 60 (模擬濕度 $60\%$)

3. 第二階段:FUXA 設定 (SCADA 核心)

FUXA 在這裡扮演雙重角色:它既要透過 Modbus TCP 向 Modbus Poll 讀取資料,又要透過 MQTT 將資料 發布(Publish) 出去。

步驟 A:新增 Modbus TCP 驅動連線

  1. 打開 FUXA 網頁控制台,切換到 Configuration (設定) 頁面。

  2. Devices 區塊點擊 + Add device

  3. 設定參數:

    • Name: Modbus_PLC

    • Type: Modbus TCP

    • Host: 127.0.0.1 (若在同一台電腦)

    • Port: 502 (需與 Modbus Poll 設定一致)

    • Slave ID: 1

  4. 點擊儲存,確認連線狀態顯示為綠色(Connected)。

步驟 B:在 FUXA 中建立標籤 (Tags)

在剛剛建立的 Modbus_PLC 設備下新增兩個 Tags:

  1. 溫度標籤 (Temperature)

    • Name: Temperature

    • Address: 40001 (或根據 FUXA 格式輸入 F40001 或數值類型,通常選 Int16)

  2. 濕度標籤 (Humidity)

    • Name: Humidity

    • Address: 40002

此時在 FUXA 的 Tag 列表中,應該就能即時看到從 Modbus Poll 傳過來的 2560

步驟 C:新增 MQTT 連線 (轉發數據)

  1. 在 FUXA 的 DevicesConnectivity 區塊(依版本不同),點擊 + Add device/client 並選擇 MQTT

  2. 設定參數:

    • Name: MQTT_Broker

    • URL: mqtt://broker.hivemq.com:1883 (此處以公共測試 Broker 為例)

    • Client ID: 可自訂(如 FUXA_Gateway_01

  3. 儲存並確認連線成功。

步驟 D:設定 Tag 的 MQTT 發布功能

  1. 編輯剛剛建立的 Temperature 標籤。

  2. 找到 PublishMQTT Export 相關設定。

  3. 啟用發布,並指定 Topic:

    • Topic: factory/sensor01/temperature

  4. 同理,將 Humidity 標籤設定發布至:

    • Topic: factory/sensor01/humidity

4. 第三階段:MQTT 軟體驗證 (接收端)

為了驗證數據是否成功經由 FUXA 轉發至 MQTT 網路,我們可以使用任意 MQTT 客戶端軟體(例如 MQTTXMQTT ExplorerAdvanced REST Client)來進行訂閱(Subscribe)。

  1. 打開您的 MQTT 軟體,連線至與 FUXA 相同的 Broker:

    • Host: broker.hivemq.com

    • Port: 1883

  2. 建立連線後,新增一個訂閱主題(Subscription):

    • Topic: factory/sensor01/# (使用萬用字元 # 可以同時接收該路徑下的所有資料)

  3. 驗證結果

    您將會在 MQTT 軟體的接收視窗中,看見定時推送過來的 JSON 格式或純文字訊息,例如:

    JSON
    { "value": 25, "timestamp": 1780000000000 }




















5. 通訊測試與連動驗證

當整體架構打通後,您可以進行以下測試來驗證通訊的即時性:

  1. 回到 Modbus Poll 軟體,將 40001 的數值從 25 修改為 28

  2. 查看 FUXA 的畫面,確認其畫面上顯示的 Temperature 標籤數值已同步變更為 28

  3. 查看 MQTT 軟體,確認收到一筆新的 Payload,其數值已更新為 28

透過這個範例,您成功實作了工業現場總線(Modbus)物聯網雲端協定(MQTT)的數據整合,這也是當前工業 4.0 智慧工廠最核心的通訊架構之一。

沒有留言:

張貼留言

ModBus + Fuxa + MQTT

  ModBus + Fuxa + MQTT  這是一個非常實用且經典的工業物聯網(IIoT)與數據可視化架構。在這個架構中, Modbus Poll 負責模擬底層工業設備(如 PLC、感測器), MQTT Broker 擔任資料交換的中台,而 FUXA 則是一套開源的 W...