物聯(lián)網(wǎng)數(shù)據(jù)接入篇-應(yīng)用層 Modbus(5)

1 評論 2278 瀏覽 5 收藏 16 分鐘

前四篇文章講述的是TCP/IP 模型中的網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層一,這里到了第四層應(yīng)用層二。由于協(xié)議比較多,就分開篇來介紹。這篇講Modbus 協(xié)議,后面再講 MQTT協(xié)議、CoAP 協(xié)議、OPC 框架。都是物聯(lián)網(wǎng)常用的應(yīng)用層協(xié)議。

第四層:應(yīng)用層協(xié)議之二-物聯(lián)網(wǎng)Modbus 協(xié)議

Modbus協(xié)議是一種請求/應(yīng)答方式的交互過程,主機主動發(fā)起通訊請求,從機響應(yīng)主機的請求,從機在沒有收到主機的請求時,不會主動發(fā)送數(shù)據(jù),從機之間不會進行通訊。

其中 Mod 是莫迪康公司,現(xiàn)在被施耐德電器收購。bus 是總線的意思,就是有一根主線,有主站和從站(主人和奴隸)。

Modbus 的分類

Modbus 屬于應(yīng)用層協(xié)議,他依賴于物理層、數(shù)據(jù)鏈路層和傳輸層來傳輸他的電流電壓、數(shù)據(jù)幀、數(shù)據(jù)包。所以,按Modbus 所依賴的網(wǎng)絡(luò)接口層協(xié)議的不同,可以分為以太網(wǎng)通信的 Modbus、串口通信的 Modbus、無線通信的 Modbus。串口通信的 Modbus包括依賴 RS232、RS485、RS422 等。

Modbus 按照他的傳輸模式,可以分為Modbus ASCII、Modbus RTU、Modbus TCP/IP。

Modbus 總線上所有的設(shè)備傳輸模式必須相同。Modbus RTU是一種緊湊的,采用二進制表示數(shù)據(jù)的方式。Modbus ASCII是一種人類可讀的,冗長的表示方式。Modbus TCP/IP,基于 TCP/IP 的協(xié)議,用于通過以太網(wǎng)和互聯(lián)網(wǎng)進行通信。你看看,Modbus RTU是直接通過物理層和數(shù)據(jù)鏈路層傳遞幀的,不依賴傳輸層和網(wǎng)絡(luò)層。

Modbus 通信適用的設(shè)備

Modbus協(xié)議廣泛應(yīng)用在工業(yè)控制器、傳感器、PLC、HMI、控制面板、驅(qū)動程序、動作控制、輸入/輸出設(shè)備等等。在基于串行鏈路和以太 TCP/IP 網(wǎng)絡(luò)的 MODBUS 上可以進行相同通信。

一些網(wǎng)關(guān)允許在幾種使用 MODBUS 協(xié)議的總線或網(wǎng)絡(luò)之間進行通信。

Modbus 網(wǎng)絡(luò)體系結(jié)構(gòu)示例圖:

Modbus 的通用幀格式

包括地址域、功能碼、數(shù)據(jù)、差錯校驗。

主要包括:

  • 地址域:1字節(jié),即從機設(shè)備地址,通常1-247為有效地址,0為廣播地址。
  • 功能碼:1字節(jié),表明主機請求數(shù)據(jù)的類型。
  • 數(shù)據(jù):N字節(jié),包含寄存器地址和寄存器數(shù)據(jù)等。
  • 差錯校驗:對數(shù)據(jù)進行冗余校驗的結(jié)果,CRC或LRC

Modbus RTU

RTU 格式是 Modbus 協(xié)議中最常用的串行通訊格式之一,數(shù)據(jù)以二進制方式進行傳輸,采用固定的數(shù)據(jù)幀長度,傳輸效率高,適用于高速通訊和較遠距離的數(shù)據(jù)傳輸。

拓撲圖:

Modbus RTU 通?;?RS-485 串行通信鏈路,RS-485 總線布線規(guī)范規(guī)定其必須是總線式拓撲結(jié)構(gòu)。在實際布線中,通常采用手牽手菊花鏈布線方式。1 和 2,2 和 3,3 和 4 這樣連接。RS 232 只有一個主站一個從站。

幀格式:

01 03 00 00 00 02 C4 0B

01:地址

03:功能碼

00 00:數(shù)據(jù)(寄存器地址)

00 02:數(shù)據(jù)(寄存器數(shù)量)

C4 0B:CRC 校驗

起始標志(Start):通過傳輸中的 3.5 個字符間隔實現(xiàn)。

地址(Address):1 字節(jié)。

功能碼(Function Code):1 字節(jié)。

數(shù)據(jù)(Data):可變長度(最多 252 字節(jié))。

錯誤校驗(CRC):2 字節(jié)(循環(huán)冗余校驗)。

結(jié)束標志(End):通過傳輸中的 3.5 個字符間隔實現(xiàn)。

Modbus RTU 特點:

協(xié)議簡潔:使用二進制格式傳輸數(shù)據(jù),提高了通信效率。

可靠性高:通過循環(huán)冗余校驗(CRC)來確保數(shù)據(jù)的完整性。

主從架構(gòu):一個主機可以控制多個從機。從機僅在接收到主機的請求后才會發(fā)送數(shù)據(jù),避免了通信沖突。

易于調(diào)試和監(jiān)控:提供了多種調(diào)試和監(jiān)控工具,便于工程師進行現(xiàn)場維護和故障排除。

Modbus ASCII 數(shù)據(jù)幀

ASCII 格式是 Modbus 協(xié)議中另一種常用的串行通訊格式,數(shù)據(jù)以 ASCII 碼的十六進制表示進行傳輸,數(shù)據(jù)幀長度較長,傳輸效率相對較低,適用于低速通訊和較短距離的數(shù)據(jù)傳輸。

Modbus ASCII 也是基于串口通信的。拓撲圖見上面的 RTU。

:010300000002FArn

“:”起始標志

01:地址

03:功能碼

0000:數(shù)據(jù)(寄存器地址)

0002:數(shù)據(jù)(寄存器數(shù)量)

FA:LRC 校驗

rn:結(jié)束標志

Modbus ASCII:

起始標志(Start):一個冒號 :

地址(Address):2 個 ASCII 字符(表示 1 字節(jié)的十六進制值)

功能碼(Function Code):2 個 ASCII 字符(表示 1 字節(jié)的十六進制值)

數(shù)據(jù)(Data):每字節(jié)由 2 個 ASCII 字符表示(十六進制)

錯誤校驗(LRC):2 個 ASCII 字符(表示 1 字節(jié)的十六進制值)

結(jié)束標志(End):CR LF(回車和換行)

Modbus TCP/IP

Modbus TCP 基于以太網(wǎng)通信,因此其網(wǎng)絡(luò)拓撲結(jié)構(gòu)更為靈活。從串行鏈路上一主多從的構(gòu)造,演變?yōu)槎嗫蛻舳?多服務(wù)器端的構(gòu)造模型。注意這里不是主站從站概念,而是客戶端/服務(wù)器的概念。

客戶端(Client):發(fā)起通信請求,控制和監(jiān)視網(wǎng)絡(luò)中的其他設(shè)備。

例子:HMI、PLC(作為控制器)、SCADA系統(tǒng)、工業(yè)計算機。

服務(wù)端(Server):響應(yīng)客戶端的請求,提供數(shù)據(jù)或執(zhí)行指令。

例子:傳感器、執(zhí)行器、PLC(作為被控設(shè)備)、智能儀表。

拓撲圖:

以太網(wǎng)通訊方式主要包括 Modbus TCP/IP 和 Modbus UDP/IP 兩種。Modbus TCP/IP 是基于以太網(wǎng)的一種通訊方式,它將 Modbus 協(xié)議封裝在 TCP/IP 協(xié)議棧中,通過以太網(wǎng)傳輸數(shù)據(jù),采用基于連接的通訊方式,具有高速、穩(wěn)定的特點。

Modbus UDP/IP 是基于 UDP/IP 協(xié)議的一種通訊方式,采用無連接的通訊方式,不保證數(shù)據(jù)的可靠性和順序,適用于對實時性要求較高、對通訊效率要求較高的應(yīng)用場景。幀格式:

:010300000002FArn

“:”起始標志

01:地址

03:功能碼

0000:數(shù)據(jù)(寄存器地址)

0002:數(shù)據(jù)(寄存器數(shù)量)

FA:LRC 校驗

rn:結(jié)束標志

起始標志(Start):無(由 TCP/IP 協(xié)議處理)

地址(Address):1 字節(jié)

功能碼(Function Code):1 字節(jié)

數(shù)據(jù)(Data):可變長度

錯誤校驗(CRC):在 Modbus TCP 頭中由 TCP/IP 協(xié)議處理

結(jié)束標志(End):無(由 TCP/IP 協(xié)議處理)

Modbus 協(xié)議的功能碼

Modbus 協(xié)議中,功能碼用于指定請求的操作類型,例如讀取或?qū)懭霐?shù)據(jù)。每個功能碼都有特定的含義和操作。以下是常見的 Modbus 功能碼及其用途:

這里的線圈啊,寄存器都是個什么東西:

線圈 = 一個布爾量。寄存器 = word 操作。

現(xiàn)代 Modbus 設(shè)備,它們通常只映射到一塊內(nèi)存區(qū)域。在這個內(nèi)存區(qū)域中,線圈表示位操作(bit),每個線圈對應(yīng)一個布爾變量(0 或 1、開或關(guān))。而寄存器則表示字操作(word),每個寄存器對應(yīng)一個整型變量。當然,也可以通過多個寄存器的組合來表示浮點數(shù)以及其他復合數(shù)據(jù)結(jié)構(gòu)。在 Modbus 協(xié)議中,一個字(word)的長度是 16 位,即 2 個字節(jié),16 個比特。

Modbus 廣播方式:單薄和廣播

單播:

在單播模式下,從站地址必須唯一,地址范圍為 1 到 247。主站通過特定地址訪問指定的從站,發(fā)出一個請求數(shù)據(jù)幀。請求數(shù)據(jù)幀的功能可以是讀取或?qū)懭霐?shù)據(jù)。從站接收到請求后,進行相應(yīng)的處理,并在完成后發(fā)送一個應(yīng)答數(shù)據(jù)幀,表示讀取或?qū)懭氩僮鞒晒Γㄓ忠⒁?RS232 只能有一個從站)。獲取數(shù)據(jù)需要輪詢一下所有的從站。單播模式圖:

廣播:

在廣播模式下,主站向所有從站發(fā)出請求數(shù)據(jù)幀,所有從站都會處理這條命令。對于廣播請求,所有從站無需做出應(yīng)答操作。通常,地址 0 表示廣播地址。有例外情況哈。

Modbus 廣播通常用于同時對多個從設(shè)備進行相同的操作,例如同時啟動或停止多個從設(shè)備。

RS-232、RS-485、RS-422 對比表格:

Modbus RTU、Modbus ASCII、Modbus TCP/IP 對比表格:

應(yīng)用

Modbus 是一個開源的庫,可以用來在嵌入式系統(tǒng)上實現(xiàn) Modbus 協(xié)議。它通常用于以下場景:

嵌入式系統(tǒng):如 Arduino、ESP8266、Raspberry Pi 等微控制器和單板計算機。

工業(yè)自動化設(shè)備:如 PLC(可編程邏輯控制器)、傳感器、執(zhí)行器等。

家庭自動化系統(tǒng):如智能家居設(shè)備和控制系統(tǒng)。

能源管理:電力系統(tǒng)中的數(shù)據(jù)采集和監(jiān)控。

樓宇自控:用于空調(diào)、照明等系統(tǒng)的集成控制。

水處理:對水處理設(shè)備的運行狀態(tài)進行監(jiān)控和管理。

后記

這個系列,物聯(lián)網(wǎng)協(xié)議進行到了尾聲,這篇寫 Mudbus,下面會寫 MQTT、CoAP、OPC,都是重頭戲。

參考文獻

15 張圖, 把TCP/IP 講得一清二楚!-騰訊云開發(fā)者社區(qū)-騰訊云

什么是OPC UA&它是如何工作的?_嗶哩嗶哩_bilibili

圖解TCP/IP (第5版)

探索 OSI 會話層:建立和管理通信會話的關(guān)鍵_不同機器之間用戶會話的建立與管理-CSDN博客

3、物聯(lián)網(wǎng)的物理層協(xié)議 – 孤情劍客 – 博客園

網(wǎng)絡(luò)工程師教程

【2024軟考】《網(wǎng)絡(luò)工程師》新版精講視頻-希賽網(wǎng)(零基礎(chǔ)系統(tǒng)教程,建議收藏)!_嗶哩嗶哩_bilibili

Modbus通信協(xié)議詳解-CSDN博客

MQTT協(xié)議_mqtt payload一定要字符串嗎-CSDN博客

第一章 – MQTT介紹 · MQTT協(xié)議中文版

MQTT協(xié)議_mqtt payload一定要字符串嗎-CSDN博客

物聯(lián)網(wǎng)協(xié)議之COAP簡介及Java實踐-CSDN博客

如何使用CoAP的對稱加密自主接入和DTLS自主接入_物聯(lián)網(wǎng)平臺(IoT)-阿里云幫助中心

DTU和RTU的區(qū)別_rtu和dtu的區(qū)別-CSDN博客

小米IoT文檔與資源中心

5.1 IP 基礎(chǔ)知識全家桶

network_protocol_structures.pdf

一文看懂Modbus協(xié)議-阿里云開發(fā)者社區(qū)

modbus_application_protocol_specification_v1.1b3.pdf

https://help.dtuip.com:8888/images/20191028084839667.pdf

一文看懂Modbus協(xié)議-阿里云開發(fā)者社區(qū)

Modbus 寄存器 | 人人都懂物聯(lián)網(wǎng)

https://zh.wikipedia.org/wiki/Modbus

MQTT教學(一):認識MQTT – 超圖解系列圖書

https://www.51cto.com/article/670429.html

通訊協(xié)議介紹&CoAP 協(xié)議解析-CSDN博客

OPC 協(xié)議 | 開發(fā)者中心

https://www.youtube.com/watch?v=f5oPEVhZFug

本文由 @躍曰 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議。

該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. OPC 接下來是重點難點。

    來自上海 回復