物聯(lián)網(wǎng)數(shù)據(jù)接入篇-應(yīng)用層 Modbus(5)
前四篇文章講述的是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
探索 OSI 會(huì)話層:建立和管理通信會(huì)話的關(guān)鍵_不同機(jī)器之間用戶會(huì)話的建立與管理-CSDN博客
3、物聯(lián)網(wǎng)的物理層協(xié)議 – 孤情劍客 – 博客園
【2024軟考】《網(wǎng)絡(luò)工程師》新版精講視頻-希賽網(wǎng)(零基礎(chǔ)系統(tǒng)教程,建議收藏)!_嗶哩嗶哩_bilibili
MQTT協(xié)議_mqtt payload一定要字符串嗎-CSDN博客
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博客
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博客
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ù)。
OPC 接下來是重點(diǎn)難點(diǎn)。