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

1 評(píng)論 2080 瀏覽 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é)議是一種請(qǐng)求/應(yīng)答方式的交互過程,主機(jī)主動(dòng)發(fā)起通訊請(qǐng)求,從機(jī)響應(yīng)主機(jī)的請(qǐng)求,從機(jī)在沒有收到主機(jī)的請(qǐng)求時(shí),不會(huì)主動(dòng)發(fā)送數(shù)據(jù),從機(jī)之間不會(huì)進(jìn)行通訊。

其中 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是一種緊湊的,采用二進(jìn)制表示數(shù)據(jù)的方式。Modbus ASCII是一種人類可讀的,冗長的表示方式。Modbus TCP/IP,基于 TCP/IP 的協(xié)議,用于通過以太網(wǎng)和互聯(lián)網(wǎng)進(jìn)行通信。你看看,Modbus RTU是直接通過物理層和數(shù)據(jù)鏈路層傳遞幀的,不依賴傳輸層和網(wǎng)絡(luò)層。

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

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

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

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

Modbus 的通用幀格式

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

主要包括:

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

Modbus RTU

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

拓?fù)鋱D:

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

幀格式:

01 03 00 00 00 02 C4 0B

01:地址

03:功能碼

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

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

C4 0B:CRC 校驗(yàn)

起始標(biāo)志(Start):通過傳輸中的 3.5 個(gè)字符間隔實(shí)現(xiàn)。

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

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

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

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

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

Modbus RTU 特點(diǎn):

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

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

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

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

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

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

Modbus ASCII 也是基于串口通信的。拓?fù)鋱D見上面的 RTU。

:010300000002FArn

“:”起始標(biāo)志

01:地址

03:功能碼

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

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

FA:LRC 校驗(yàn)

rn:結(jié)束標(biāo)志

Modbus ASCII:

起始標(biāo)志(Start):一個(gè)冒號(hào) :

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

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

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

錯(cuò)誤校驗(yàn)(LRC):2 個(gè) ASCII 字符(表示 1 字節(jié)的十六進(jìn)制值)

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

Modbus TCP/IP

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

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

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

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

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

拓?fù)鋱D:

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

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

:010300000002FArn

“:”起始標(biāo)志

01:地址

03:功能碼

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

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

FA:LRC 校驗(yàn)

rn:結(jié)束標(biāo)志

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

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

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

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

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

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

Modbus 協(xié)議的功能碼

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

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

線圈 = 一個(gè)布爾量。寄存器 = word 操作。

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

Modbus 廣播方式:單薄和廣播

單播:

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

廣播:

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

Modbus 廣播通常用于同時(shí)對(duì)多個(gè)從設(shè)備進(jìn)行相同的操作,例如同時(shí)啟動(dòng)或停止多個(gè)從設(shè)備。

RS-232、RS-485、RS-422 對(duì)比表格:

Modbus RTU、Modbus ASCII、Modbus TCP/IP 對(duì)比表格:

應(yīng)用

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

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

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

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

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

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

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

后記

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

參考文獻(xiàn)

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

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

圖解TCP/IP (第5版)

探索 OSI 會(huì)話層:建立和管理通信會(huì)話的關(guān)鍵_不同機(jī)器之間用戶會(huì)話的建立與管理-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實(shí)踐-CSDN博客

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

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

小米IoT文檔與資源中心

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

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教學(xué)(一):認(rèn)識(shí)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é)議。

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

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

    來自上海 回復(fù)