工業物聯網數據橋接教程:Modbus 橋接到 MQTT

Modbus 介紹

Modbus 是一種串行通信協議,用于連接工業自動化設備,最初由 Modicon 公司開發,誕生于 1979 年,現在已成為通用的通訊標準之一,廣泛用于工業自動化場景。

Modbus 采用主從模式,支持多種傳輸方式,包括串行(RS-232/485)和以太網版本(TCP/IP)。其主要用于監視和控制自動化設備,例如傳感器、電機和 PLC 等。它可以實現設備間的數據交換和控制命令發送,使得各個設備之間能夠互相協調工作。

Modbus 協議中定義了四種類型的存儲區,分別為線圈(Coils)、離散輸入(Discrete Inputs)、輸入寄存器(Input Registers)和保持寄存器(Holding Registers)。不同類型的存儲區對應著不同的讀寫操作。

存儲區名稱數據類型訪問類型PLC 地址寄存器地址
線圈讀寫000001-0655360-65535
離散輸入只讀100001-1655360-65535
輸入寄存器只讀300001-3655360-65535
保持寄存器讀寫400001-4655360-65535

四種存儲區都有各自的地址范圍和讀寫操作碼,根據應用場景選擇合適的存儲區進行讀寫操作。

以 Modbus TCP 為例,其報文結構為MBAP(報文頭)+PDU(幀結構)。

報文頭幀結構
事物標識符協議標識符長度單元標識符功能碼數據

Modbus 協議定義多種功能碼實現對存儲區的讀寫,下面列舉常見功能碼。

功能碼功能位/字操作操作數量
01讀線圈狀態位操作單個或多個
02讀離散輸入狀態位操作單個或多個
03讀保持寄存器字操作單個或多個
04讀輸入寄存器字操作單個或多個
05寫單個線圈位操作單個
06寫單個保持寄存器字操作單個
15寫多個線圈位操作多個
16寫多個保持寄存器字操作多個

假設從機地址為 01H,讀取的保持寄存器起始地址為 006BH,讀取 2 個寄存器,指令如下:

從機地址功能碼起始地址高位起始地址低位寄存器數量高位寄存器數量低位
0103006B0002

每個保持寄存器的長度為 2 個字節。低地址寄存器先傳輸,高地址寄存器后傳輸。每個寄存器數據高字節數據先傳輸,低字節數據后傳輸。響應如下:

從機地址功能碼字節數006BH高字節006BH低字節006CH高字節006CH低字節
01030400000000

為什么將 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 的架構。

Modbus 橋接到 MQTT 的架構

通過 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。

選擇站點號 1。

選擇 Holding Registers。至此,成功啟動模擬器,保持模擬器打開,接下來操作 Neuron。

選擇 Holding Registers

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 采集并上報過來的數據。如下圖所示。

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35894.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35894.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35894.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch深度學習實戰(11)——卷積神經網絡

PyTorch深度學習實戰(11)——卷積神經網絡 0. 前言1. 全連接網絡的缺陷2. 卷積神經網絡基本組件2.1 卷積2.2 步幅和填充2.3 池化2.3 卷積神經網絡完整流程 3. 卷積和池化相比全連接網絡的優勢4. 使用 PyTorch 構建卷積神經網絡4.1 使用 PyTorch 構建 CNN…

H5移動端附件下載

目錄 H5移動端附件下載 1. 使用 window.open() 進行下載 2. 使用 a 標簽創建隱藏的可下載鏈接 3. 使用 iframe 進行下載 4. 使用 FileSaver.js 插件下載 4.1 Vue項目中導入并使用下載附件 4.2 FileSaver.js 的其他知識 H5移動端附件下載 1. 使用 window.open() 進行下載…

ClickHouse的數據類型

1.整數型 固定長度的整型,包括有符號整型或無符號整型。整型范圍(-2n-1~2n-1-1): Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647] Int64 - [-9223372036854775808 : 9223372036854775807]無符…

Linux學習之sed多行模式

N將下一行加入到模式空間 D刪除模式空間中的第一個字符到第一個換行符 P打印模式空間中的第一個字符到第一個換行符 doubleSpace.txt里邊的內容如下: goo d man使用下邊的命令可以實現把上邊對應的內容放到doubleSpace.txt。 echo goo >> doubleSpace.txt e…

sealos安裝k8s

一、前言 1、我前面文章有寫過使用 kubeadm 安裝的方式,大家可以去參考 (二)k8s集群安裝,有一系列的k8s文章說明 2、安裝k8s的方式有很多 kubeadmsealoskubespray等等 3、關于sealos來安裝 k8s ,也是非常建議大家去…

Idea 反編譯jar包

實際項目中,有時候會需要更改jar包源碼來達到業務需求,本文章將介紹一下如何通過Idea來進行jar反編譯 1、Idea安裝decompiler插件 2、找到decompiler插件文件夾 decompiler插件文件夾路徑為:idea安裝路徑/plugins/java-decompiler/lib 3、…

可獨立創建應用的SaaS多租戶低代碼平臺之租戶的應用管理說明

在IT系統中,“租戶”(tenant)通常用于指代一種多租戶架構(multi-tenancy),它是一種軟件架構模式,允許多個用戶或組織共享相同的應用程序或系統實例,但彼此之間的數據和配置被隔離開來…

C#軟件外包開發框架

C# 是一種由微軟開發的多范式編程語言,常用于開發各種類型的應用程序,從桌面應用程序到移動應用程序和Web應用程序。在 C# 開發中,有許多框架和庫可供使用,用于簡化開發過程、提高效率并實現特定的功能。下面和大家分享一些常見的…

代駕小程序怎么做

代駕小程序是一款專門為用戶提供代駕服務的手機應用程序。它具有以下功能: 1. 預約代駕:代駕小程序允許用戶在需要代駕服務時提前進行預約。用戶可以選擇出發地點、目的地以及預計用車時間,系統會自動匹配最合適的代駕司機,并確保…

黑馬B站八股文學習筆記

視頻地址:https://www.yuque.com/linxun-bpyj0/linxun/vy91es9lyg7kbfnr 大綱 基礎篇 基礎篇要點:算法、數據結構、基礎設計模式 1. 二分查找 要求 能夠用自己語言描述二分查找算法能夠手寫二分查找代碼能夠解答一些變化后的考法 算法描述 前提&a…

div 中元素居中的N種常用方法

本文主要記錄幾種常用的div盒子水平垂直都居中的方法。本文主要參考了該篇博文并實踐加以記錄說明以加深理解記憶 css之div盒子居中常用方法大全 本文例子使用的 html body結構下的div 盒子模型如下&#xff1a; <body><div class"container"><div c…

休息是不可能休息的

654.最大二叉樹 分析&#xff1a;相比較遍歷順序構建二叉樹&#xff0c;這個相對簡單。 思路&#xff1a;每次找到數組最大值&#xff0c;然后分割數組 class Solution { public:TreeNode*judge(vector<int>&nums){if(nums.size()0) return nullptr;int maxNum0,in…

Springboot 實踐(1)MyEclipse2019創建maven工程

項目講解步驟&#xff0c;基于本機已經正確安裝Java 1.8.0及MyEclipse2019的基礎之上&#xff0c;Java及MyEclipse的安裝&#xff0c;請參考其他相關文檔&#xff0c;Springboot 實踐文稿不再贅述。項目創建講解馬上開始。 一、首先打開MyEclipse2019&#xff0c;進入工作空間選…

Linux系統下安裝Git軟件

環境說明 Linux系統&#xff1a;CentOS 7.9 安裝GCC等 JDK版本&#xff1a;jdk-8u202-linux-x64.tar.gz Maven版本&#xff1a;apache-maven-3.8.8-bin.tar.gz 在以上環境下安裝Git&#xff08;git-2.41.0.tar.gz&#xff09;軟件。 查看是否安裝Git軟件 查看Git版本&#…

如何建設指標管理平臺,實現企業運營效率提升

隨著企業數字化轉型的深入推進&#xff0c;建設指標管理平臺已經成為企業數字化轉型的重要組成部分。 建設指標管理平臺可以幫助企業更好地了解業務數據和業務指標&#xff0c;實現數據可視化和智能化分析&#xff0c;提高企業的決策效率和管理水平。 在過去&#xff0c;企業通…

【深入了解PyTorch】PyTorch分布式訓練:多GPU、數據并行與模型并行

【深入了解PyTorch】PyTorch分布式訓練:多GPU、數據并行與模型并行 PyTorch分布式訓練:多GPU、數據并行與模型并行1. 分布式訓練簡介2. 多GPU訓練3. 數據并行4. 模型并行5. 總結PyTorch分布式訓練:多GPU、數據并行與模型并行 在深度學習領域,模型的復雜性和數據集的巨大規…

最小路徑和——力扣64

文章目錄 題目描述動態規劃題目描述 動態規劃 class Solution {public:int minPathSum(vector<vector<int>>

Python爬蟲(十一)_案例:使用正則表達式的爬蟲

本章將結合先前所學的爬蟲和正則表達式知識&#xff0c;做一個簡單的爬蟲案例&#xff0c;更多內容請參考:Python學習指南 現在擁有了正則表達式這把神兵利器&#xff0c;我們就可以進行對爬取到的全部網頁源代碼進行篩選了。 下面我們一起嘗試一下爬取內涵段子網站&#xff1…

stm32 cubemx can通訊(3)bsp_can

文章目錄 前言一、bspbsp_can.hbsp_can.c 二、如何使用總結 前言 stm32 cubemx can通訊&#xff08;1&#xff09;回環模式 stm32 cubemx can通訊&#xff08;2&#xff09;過濾器設置說明代碼分析 根據前兩篇文章已經能夠實現can標準幀的收發&#xff0c;但是調用的函數沒有標…

2023年國賽數學建模思路 - 案例:異常檢測

文章目錄 賽題思路一、簡介 -- 關于異常檢測異常檢測監督學習 二、異常檢測算法2. 箱線圖分析3. 基于距離/密度4. 基于劃分思想 建模資料 賽題思路 &#xff08;賽題出來以后第一時間在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、簡介 – 關于異常…