ModBus + Fuxa + MQTT
這是一個非常實用且經典的工業物聯網(IIoT)與數據可視化架構。在這個架構中,Modbus Poll 負責模擬底層工業設備(如 PLC、感測器),MQTT Broker 擔任資料交換的中台,而 FUXA 則是一套開源的 Web-based SCADA 系統,負責將資料抓回並進行動態網頁監控。
為了讓這個通訊範例能夠順利運作,我們將架構設計如下:
Modbus Poll (設備端) ──[Modbus TCP]──> FUXA (SCADA中心) ──[MQTT]──> MQTT Broker (雲端/中台)
以下為您規劃完整的環境建置與通訊設計步驟:
1. 環境準備與軟體設定
請確保您的電腦上已安裝或準備好以下軟體:
Modbus Poll:用於模擬 Modbus TCP Slave(伺服器)或 Master。在本範例中,我們將其設定為 Modbus TCP Slave(模擬一台 PLC)。
MQTT Broker:可以使用公用的 Broker(例如
broker.hivemq.com),或在本地端用 Docker 運行Mosquitto。FUXA:確認已啟動 FUXA 服務(通常透過 Node.js 或 Docker 執行,瀏覽器輸入
http://localhost:1881進入畫面)。
2. 第一階段:Modbus Poll 設定 (模擬工業設備)
我們首先讓 Modbus Poll 模擬一個內含溫度與濕度資料的智能感測器。
步驟 A:建立暫存器
打開 Modbus Poll,點選選單的 Setup -> Read/Write Definition。
設定如下:
Slave ID:
1Function:
03 Read Holding Registers (4x)Address:
0(從 0 開始)Quantity:
10(讀取 10 個暫存器)
點擊 OK。
步驟 B:啟動 Modbus TCP 伺服器
點選選單的 Connection -> Connect...。
在 Connection 下拉選單選擇 Modbus TCP/IP Server。
TCP Server Port: 預設
502(如果權限衝突,可改為5020)。點擊 OK 啟動監聽。
步驟 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 驅動連線
打開 FUXA 網頁控制台,切換到 Configuration (設定) 頁面。
在 Devices 區塊點擊 + Add device。
設定參數:
Name:
Modbus_PLCType:
Modbus TCPHost:
127.0.0.1(若在同一台電腦)Port:
502(需與 Modbus Poll 設定一致)Slave ID:
1
點擊儲存,確認連線狀態顯示為綠色(Connected)。
步驟 B:在 FUXA 中建立標籤 (Tags)
在剛剛建立的 Modbus_PLC 設備下新增兩個 Tags:
溫度標籤 (Temperature)
Name:
TemperatureAddress:
40001(或根據 FUXA 格式輸入F40001或數值類型,通常選 Int16)
濕度標籤 (Humidity)
Name:
HumidityAddress:
40002
此時在 FUXA 的 Tag 列表中,應該就能即時看到從 Modbus Poll 傳過來的 25 與 60。
步驟 C:新增 MQTT 連線 (轉發數據)
在 FUXA 的 Devices 或 Connectivity 區塊(依版本不同),點擊 + Add device/client 並選擇 MQTT。
設定參數:
Name:
MQTT_BrokerURL:
mqtt://broker.hivemq.com:1883(此處以公共測試 Broker 為例)Client ID: 可自訂(如
FUXA_Gateway_01)
儲存並確認連線成功。
步驟 D:設定 Tag 的 MQTT 發布功能
編輯剛剛建立的
Temperature標籤。找到 Publish 或 MQTT Export 相關設定。
啟用發布,並指定 Topic:
Topic:
factory/sensor01/temperature
同理,將
Humidity標籤設定發布至:Topic:
factory/sensor01/humidity
4. 第三階段:MQTT 軟體驗證 (接收端)
為了驗證數據是否成功經由 FUXA 轉發至 MQTT 網路,我們可以使用任意 MQTT 客戶端軟體(例如 MQTTX、MQTT Explorer 或 Advanced REST Client)來進行訂閱(Subscribe)。
打開您的 MQTT 軟體,連線至與 FUXA 相同的 Broker:
Host:
broker.hivemq.comPort:
1883
建立連線後,新增一個訂閱主題(Subscription):
Topic:
factory/sensor01/#(使用萬用字元#可以同時接收該路徑下的所有資料)
驗證結果:
您將會在 MQTT 軟體的接收視窗中,看見定時推送過來的 JSON 格式或純文字訊息,例如:
5. 通訊測試與連動驗證
當整體架構打通後,您可以進行以下測試來驗證通訊的即時性:
回到 Modbus Poll 軟體,將
40001的數值從25修改為28。查看 FUXA 的畫面,確認其畫面上顯示的
Temperature標籤數值已同步變更為28。查看 MQTT 軟體,確認收到一筆新的 Payload,其數值已更新為
28。
透過這個範例,您成功實作了工業現場總線(Modbus)到物聯網雲端協定(MQTT)的數據整合,這也是當前工業 4.0 智慧工廠最核心的通訊架構之一。




















沒有留言:
張貼留言