Modbus 介紹
Modbus 是一種串行通信協議,用于連接工業自動化設備,最初由 Modicon 公司開發,誕生于 1979 年,現在已成為通用的通訊標準之一,廣泛用于工業自動化場景。
Modbus 采用主從模式,支持多種傳輸方式,包括串行(RS-232/485)和以太網版本(TCP/IP)。其主要用于監視和控制自動化設備,例如傳感器、電機和 PLC 等。它可以實現設備間的數據交換和控制命令發送,使得各個設備之間能夠互相協調工作。
Modbus 協議中定義了四種類型的存儲區,分別為線圈(Coils)、離散輸入(Discrete Inputs)、輸入寄存器(Input Registers)和保持寄存器(Holding Registers)。不同類型的存儲區對應著不同的讀寫操作。
存儲區名稱 | 數據類型 | 訪問類型 | PLC 地址 | 寄存器地址 |
---|---|---|---|---|
線圈 | 位 | 讀寫 | 000001-065536 | 0-65535 |
離散輸入 | 位 | 只讀 | 100001-165536 | 0-65535 |
輸入寄存器 | 字 | 只讀 | 300001-365536 | 0-65535 |
保持寄存器 | 字 | 讀寫 | 400001-465536 | 0-65535 |
四種存儲區都有各自的地址范圍和讀寫操作碼,根據應用場景選擇合適的存儲區進行讀寫操作。
以 Modbus TCP 為例,其報文結構為MBAP(報文頭)+PDU(幀結構)。
報文頭 | 幀結構 | ||||
---|---|---|---|---|---|
事物標識符 | 協議標識符 | 長度 | 單元標識符 | 功能碼 | 數據 |
Modbus 協議定義多種功能碼實現對存儲區的讀寫,下面列舉常見功能碼。
功能碼 | 功能 | 位/字操作 | 操作數量 |
---|---|---|---|
01 | 讀線圈狀態 | 位操作 | 單個或多個 |
02 | 讀離散輸入狀態 | 位操作 | 單個或多個 |
03 | 讀保持寄存器 | 字操作 | 單個或多個 |
04 | 讀輸入寄存器 | 字操作 | 單個或多個 |
05 | 寫單個線圈 | 位操作 | 單個 |
06 | 寫單個保持寄存器 | 字操作 | 單個 |
15 | 寫多個線圈 | 位操作 | 多個 |
16 | 寫多個保持寄存器 | 字操作 | 多個 |
假設從機地址為 01H,讀取的保持寄存器起始地址為 006BH,讀取 2 個寄存器,指令如下:
從機地址 | 功能碼 | 起始地址高位 | 起始地址低位 | 寄存器數量高位 | 寄存器數量低位 |
---|---|---|---|---|---|
01 | 03 | 00 | 6B | 00 | 02 |
每個保持寄存器的長度為 2 個字節。低地址寄存器先傳輸,高地址寄存器后傳輸。每個寄存器數據高字節數據先傳輸,低字節數據后傳輸。響應如下:
從機地址 | 功能碼 | 字節數 | 006BH高字節 | 006BH低字節 | 006CH高字節 | 006CH低字節 |
---|---|---|---|---|---|---|
01 | 03 | 04 | 00 | 00 | 00 | 00 |
為什么將 Modbus 橋接到 MQTT
隨著工業 4.0 的到來,制造業中的智能化、自動化和數據化需求越來越高。在這種背景下,Modbus 協議也面臨了一些挑戰。
首先,Modbus 協議在安全性方面存在較大問題。由于其通信方式較為簡單,容易受到黑客攻擊和數據篡改等安全問題。
其次,在實時性和帶寬利用率方面,Modbus 協議與現代工業通信標準相比顯得不夠優秀。特別是在大規模設備聯網的情況下,傳統的串行通信方式已經不能滿足要求。
此外,在多層次架構和云平臺應用方面,Modbus 協議還存在一定的局限性。它只能進行點對點通信,并沒有很好地支持分布式系統和云計算平臺。
MQTT 相比于 Modbus 優勢明顯。MQTT 協議是一種基于發布/訂閱模式的輕量級消息傳輸協議,其構建于 TCP/IP 協議上,由 IBM 在 1999 年發布。2014 年 10 月 29 日,MQTT 成為 OASIS 正式批準的通訊標準。目前已經廣泛應用于物聯網、移動互聯網、智能硬件、車聯網、智慧城市、遠程醫療、電力、石油與能源等領域。
MQTT 主要有以下優勢:
- 輕量級:MQTT 非常輕量級,可以在帶寬有限、網絡質量不好的環境下使用。
- 靈活性:MQTT 支持多種連接方式,通過訂閱/發布模式實現靈活的消息傳遞。
- 可靠性:MQTT 可以保證消息的可靠傳輸,即使網絡中斷也可以重新連接并恢復通信。
- 安全性:MQTT 支持 SSL/TLS 加密和認證機制,可以保障數據安全性。
因此,在物聯網領域,MQTT 更適合于分布式系統中的消息傳遞。可以將 Modbus 橋接 MQTT 取長補短,完成升級改造。
Modbus 橋接到 MQTT 的架構
Modbus 數據源將數據發送到 MQTT Broker,MQTT Broker 接收并轉發。實現此過程需要兩個組件:一是邊緣端將 Modbus 協議轉換為 MQTT 并發送到 MQTT Broker;二是需要一個處理 MQTT 消息的 MQTT Broker。
EMQ 旗下的 Neuron 可以將 Modbus 協議轉換為 MQTT;EMQX 則可以作為 MQTT Broker 處理海量連接。
Neuron 是一款現代的工業物聯網連接服務器,可以連接多種使用標準協議或者設備專有協議的工業設備,實現了工業物聯網平臺與各種設備的互聯互通。作為一款輕量級的工業協議網關軟件,Neuron 可以運行在各種有限資源的物聯網邊緣硬件設備上,旨在解決以數據為中心的自動化設備數據難以統一訪問的問題,為智能制造提供基礎支撐。
EMQX 是一款大規模可擴展的云原生分布式物聯網 MQTT 消息服務器。作為全球最具擴展性的 MQTT 消息服務器,EMQX 提供了高效可靠海量物聯網設備連接,能夠高性能實時移動與處理消息和事件流數據,幫助用戶快速構建關鍵業務的物聯網平臺與應用。
下面展示了 Neuron 從邊緣端采集數據并轉換為 MQTT 上傳到 MQTT broker 的架構。
通過 Neuron 將 Modbus 橋接到 MQTT
此章節將介紹如何使用 Neuron 采集 Modbus 設備的數據,將采集到的數據上傳到 MQTT Broker(EMQX),并使用 MQTTX 查看。
EMQX 快速使用
EMQX 提供多種安裝方式,用戶可在 安裝 中查看詳細的安裝方式。本實例采用容器化部署的方式,以便于最快開始體驗 EMQX。
運行以下命令獲取 Docker 鏡像:
docker pull emqx/emqx:5.1.0
運行以下命令啟動 Docker 容器
docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.1.0
通過瀏覽器訪問 http://localhost:18083/ (localhost 可替換為您的實際 IP 地址)以訪問 EMQX Dashboard 管理控制臺,進行設備連接與相關指標監控管理。本教程保持 docker 啟動即可。
初始用戶名: admin
,初始密碼:public
安裝 Modbus 模擬器
安裝 PeakHMI Slave Simulators 軟件,安裝包可在 PeakHMI 官網 中下載。
安裝后,運行 Modbus TCP slave EX。須保證 Neuron 與模擬器運行在同一局域網內。
點擊 Windows->Register data 查看數據。
選擇站點號 1。
選擇 Holding Registers。至此,成功啟動模擬器,保持模擬器打開,接下來操作 Neuron。
Neuron 快速開始
Neuron 提供多種安裝方式,用戶可在 安裝 中查看詳細的安裝方式。本實例采用容器化部署的方式,以便于最快開始體驗 Neuron。
獲取 Docker 鏡像:
$ docker pull emqx/neuron:latest
啟動 Docker 容器:
$ docker run -d --name neuron -p 7000:7000 --privileged=true --restart=always emqx/neuron:latest
打開 Web 瀏覽器,輸入運行 Neuron 的網關地址和端口號,即可進入到管理控制臺頁面,默認端口號為 7000。通過瀏覽器訪問 http://localhost:7000/
(localhost 可替換為您的實際 IP 地址)
第一步,登錄
頁面打開后,進入到登錄界面,用戶可使用初始用戶名與密碼登錄(初始用戶名:admin,初始密碼:0000)。
第二步,添加南向設備
在 配置 菜單中選擇 南向設備,進入到南向設備界面,點擊 添加設備 新增設備。
- 名稱:填寫設備名稱,例如 modbus-tcp-1;
- 插件:下拉框選擇 Modbus TCP 插件。
第三步,設置南向設備參數
添加南向設備后自動進入設備配置界面,填寫參數并提交。
- 傳輸模式:選擇 TCP;
- 連接模式:選擇 Client;
- 最大重試次數:默認 0;
- 指令重新發送間隔:默認 0;
- 指令發送間隔:默認 20;
- IP 地址:填寫安裝 PeakHMI Slave Simulators 軟件的 PC 端 IP 地址;
- 端口號:默認 502;
- 連接超時時間:默認 3000。
第四步,在設備卡片中創建組
點擊設備節點卡片任意空白處,進入組列表管理界面,點擊 創建 ,彈出 創建組 的對話框。填寫參數并提交:
- 組名稱:填寫組名稱,例如 group-1;
- 間隔:默認 1000。
第五步,在組中添加數據點位
點擊組卡片任意空白處,進入點位列表管理界面,點擊 創建 ,進入添加點位頁面。
填寫點位參數并提交:
- 名稱:填寫點位名稱,例如,tag-1;
- 屬性:下拉選擇點位屬性,例如,Read,Write;
- 類型:下拉選擇數據類型,例如,INT16;
- 地址:填寫驅動地址,例如,1!40001。1 代表 Modbus 模擬器中設置的點位站點號,40001 代表點位寄存器地址;
- 描述、乘系數、精度不填。
第六步,數據監控中查看采集數據
選擇監控→數據監控,進入數據監控界面,查看已創建點位讀取到的數值,如下圖所示。
注意,請確認 Modbus 模擬器已啟動。
數據監控以組為單位顯示數值:
- 南向設備:下拉框選擇想要查看的南向設備,例如,選擇已創建的 modbus-tcp-1;
- 組名稱:下拉框選擇想要查看所選南向設備下的組,例如,選擇已創建的 group-1;
- 選擇完成,頁面將會展示讀取到的組中所有點位的值。
第七步,為應用程序添加北向插件模塊
創建北向應用, Neuron 與北向應用建立連接并將采集到的設備數據上傳到 MQTT Broker(EMQX)。
在配置菜單中選擇北向應用,點擊 添加應用 ,如下圖所示。
添加一個 MQTT 云連接模塊:
- 名稱:填寫應用名稱,例如,MQTT;
- Plugin:下拉框選擇 MQTT 插件。
第八步,設置北向應用參數
添加北向應用后自動進入應用配置界面,填寫參數并提交。
設置 MQTT 連接:
- 客戶端 ID:注意此 ID 要相互獨立,重復 ID 會導致客戶端被踢除。例如設置為,MQTT1999;
- QoS 等級:默認為 0;
- 上報數據格式:默認為 Values-format;
- 寫請求主題:默認為 /neuron/MQTT/write/req;
- 寫響應主題:默認為 /neuron/MQTT/write/resp;
- 離線緩存:默認關閉;
- 服務器地址:填寫創建的 emqx broker 地址,地址為部署 emqx 的地址 localhost,即您實際的 IP 地址。
- 服務器端口:默認 1883;
- 用戶名、密碼:不填;
- SSL:默認關閉。
第九步,訂閱南向點位組
點擊剛創建的 MQTT 應用節點卡片任意空白處,進入訂閱組界面,點擊 添加訂閱 。
訂閱南向設備的數據組:
- 南向設備:下拉框選擇已創建的南向設備,例如,modbus-tcp-1;
- 組:下拉框選擇所要訂閱的組,例如,group-1;
- 主題:MQTT 主題,本例中默認為 /neuron/MQTT/group-1。接下來在 MQTTX 中訂閱此主題并接收消息。
第十步,在 MQTT 客戶端查看數據
訂閱完成后,除了 neuron 自己的數據監控界面,用戶可以使用 MQTT 客戶端 - MQTTX 連接到 EMQX 來查看上報的數據。
啟動 MQTTX 后在主頁面點擊 + New Connection,填寫配置參數后,點擊右上角連接。
-
名稱:對消息起名便于查看,例如起名為 modbus-tcp;
-
Client ID:使用默認值即可,保證 ID 獨立;
-
服務器地址:下拉框選擇 ws://,
emqx@localhost
,(localhost 可替換為您的實際 IP 地址); -
端口:8083。
其他參數選填,完成后點擊右上角連接。成功連接后訂閱主題。
-
點擊 添加訂閱,Topic 與第九步中的主題一致。例如,填寫
/neuron/MQTT/group-1
。
訂閱成功后可以看到 MQTTX 持續接收到 Neuron 采集并上報過來的數據。如下圖所示。
工業物聯網應用場景
石油生產數據采集
隨著石油生產數字化建設規模的擴大,自動化設備的數量也在增加,導致了數據采集和管理的復雜性。
設備側通過邊緣工業協議網關軟件 Neuron 對接各類工業設備,可以將石油生產環境中的 DTU、RTU 以及各類型 PLC 的數據進行統一采集。同時在設備上報過程中實現對采集點、采集頻率、上報頻率、上報格式的統一規劃,方便上層業務系統存儲與數據消費。
結合 Neuron 和 EMQX、eKuiper、EMQX-ECP 等其他 EMQ 產品的整體解決方案可以為石油行業帶來以下好處:
- 輕前端、重后端的系統架構,降低現場設備與系統運維成本。
- 基于物聯網協議作為數據采集與傳輸的主要方式,實現了生產數據低時延實時上報,提高業務響應能力。
- 解決海量異構設備與系統的實時數據統一匯聚,實現了各類型生產與監控設備數據統一匯聚存儲,使數據資產有效整合。
- 通過統一接入平臺以及平臺提供的豐富數據接口,實現數據采集與數據消費系統的解偶,使應用開發更加便捷高效。
賦能工業網絡化、數字化和智能化
統一的一站式工業物聯網數據平臺在工業 4.0 的背景下變得至關重要。
Neuron 可以支持 Modbus、OPC-UA、IEC61850、IEC104 等完整工業協議,實現各類異構工業設備數據的高效接入。輕量級邊緣流處理引擎 eKuiper 在邊緣端進行采集、過濾、補全、時間窗口計算等,為邊緣 AI 推理服務提供高質量數據源。
通過在云端實現實時數據連接、移動、存儲、處理和分析,這為大數據分析和人工智能應用奠定了堅實的數據基礎,使企業能夠快速開發上層應用。
結語
使用 Modbus 協議可以實現設備之間的通信和數據交換,而 MQTT 則提供了一種高效、靈活且安全的消息傳輸機制。通過將 Modbus RTU 或 TCP 轉換為 MQTT 消息,可以輕松地將設備數據發送到云端,并在需要時進行遠程控制和監控。這種方式可以幫助工業企業更好地管理其設備和生產過程,并提高生產效率和質量。
版權聲明: 本文為 EMQ 原創,轉載請注明出處。
原文鏈接:https://www.emqx.com/zh/blog/bridging-modbus-data-to-mqtt-for-iiot