物聯網數據接入篇-應用層 Modbus(5)
前四篇文章講述的是TCP/IP 模型中的網絡接口層、網絡層、傳輸層、應用層一,這里到了第四層應用層二。由于協議比較多,就分開篇來介紹。這篇講Modbus 協議,后面再講 MQTT協議、CoAP 協議、OPC 框架。都是物聯網常用的應用層協議。
第四層:應用層協議之二-物聯網Modbus 協議
Modbus協議是一種請求/應答方式的交互過程,主機主動發起通訊請求,從機響應主機的請求,從機在沒有收到主機的請求時,不會主動發送數據,從機之間不會進行通訊。
其中 Mod 是莫迪康公司,現在被施耐德電器收購。bus 是總線的意思,就是有一根主線,有主站和從站(主人和奴隸)。
Modbus 的分類
Modbus 屬于應用層協議,他依賴于物理層、數據鏈路層和傳輸層來傳輸他的電流電壓、數據幀、數據包。所以,按Modbus 所依賴的網絡接口層協議的不同,可以分為以太網通信的 Modbus、串口通信的 Modbus、無線通信的 Modbus。串口通信的 Modbus包括依賴 RS232、RS485、RS422 等。
Modbus 按照他的傳輸模式,可以分為Modbus ASCII、Modbus RTU、Modbus TCP/IP。
Modbus 總線上所有的設備傳輸模式必須相同。Modbus RTU是一種緊湊的,采用二進制表示數據的方式。Modbus ASCII是一種人類可讀的,冗長的表示方式。Modbus TCP/IP,基于 TCP/IP 的協議,用于通過以太網和互聯網進行通信。你看看,Modbus RTU是直接通過物理層和數據鏈路層傳遞幀的,不依賴傳輸層和網絡層。
Modbus 通信適用的設備
Modbus協議廣泛應用在工業控制器、傳感器、PLC、HMI、控制面板、驅動程序、動作控制、輸入/輸出設備等等。在基于串行鏈路和以太 TCP/IP 網絡的 MODBUS 上可以進行相同通信。
一些網關允許在幾種使用 MODBUS 協議的總線或網絡之間進行通信。
Modbus 網絡體系結構示例圖:
Modbus 的通用幀格式
包括地址域、功能碼、數據、差錯校驗。
主要包括:
- 地址域:1字節,即從機設備地址,通常1-247為有效地址,0為廣播地址。
- 功能碼:1字節,表明主機請求數據的類型。
- 數據:N字節,包含寄存器地址和寄存器數據等。
- 差錯校驗:對數據進行冗余校驗的結果,CRC或LRC
Modbus RTU
RTU 格式是 Modbus 協議中最常用的串行通訊格式之一,數據以二進制方式進行傳輸,采用固定的數據幀長度,傳輸效率高,適用于高速通訊和較遠距離的數據傳輸。
拓撲圖:
Modbus RTU 通常基于 RS-485 串行通信鏈路,RS-485 總線布線規范規定其必須是總線式拓撲結構。在實際布線中,通常采用手牽手菊花鏈布線方式。1 和 2,2 和 3,3 和 4 這樣連接。RS 232 只有一個主站一個從站。
幀格式:
01 03 00 00 00 02 C4 0B
01:地址
03:功能碼
00 00:數據(寄存器地址)
00 02:數據(寄存器數量)
C4 0B:CRC 校驗
起始標志(Start):通過傳輸中的 3.5 個字符間隔實現。
地址(Address):1 字節。
功能碼(Function Code):1 字節。
數據(Data):可變長度(最多 252 字節)。
錯誤校驗(CRC):2 字節(循環冗余校驗)。
結束標志(End):通過傳輸中的 3.5 個字符間隔實現。
Modbus RTU 特點:
協議簡潔:使用二進制格式傳輸數據,提高了通信效率。
可靠性高:通過循環冗余校驗(CRC)來確保數據的完整性。
主從架構:一個主機可以控制多個從機。從機僅在接收到主機的請求后才會發送數據,避免了通信沖突。
易于調試和監控:提供了多種調試和監控工具,便于工程師進行現場維護和故障排除。
Modbus ASCII 數據幀
ASCII 格式是 Modbus 協議中另一種常用的串行通訊格式,數據以 ASCII 碼的十六進制表示進行傳輸,數據幀長度較長,傳輸效率相對較低,適用于低速通訊和較短距離的數據傳輸。
Modbus ASCII 也是基于串口通信的。拓撲圖見上面的 RTU。
:010300000002FArn
“:”起始標志
01:地址
03:功能碼
0000:數據(寄存器地址)
0002:數據(寄存器數量)
FA:LRC 校驗
rn:結束標志
Modbus ASCII:
起始標志(Start):一個冒號 :
地址(Address):2 個 ASCII 字符(表示 1 字節的十六進制值)
功能碼(Function Code):2 個 ASCII 字符(表示 1 字節的十六進制值)
數據(Data):每字節由 2 個 ASCII 字符表示(十六進制)
錯誤校驗(LRC):2 個 ASCII 字符(表示 1 字節的十六進制值)
結束標志(End):CR LF(回車和換行)
Modbus TCP/IP
Modbus TCP 基于以太網通信,因此其網絡拓撲結構更為靈活。從串行鏈路上一主多從的構造,演變為多客戶端/多服務器端的構造模型。注意這里不是主站從站概念,而是客戶端/服務器的概念。
客戶端(Client):發起通信請求,控制和監視網絡中的其他設備。
例子:HMI、PLC(作為控制器)、SCADA系統、工業計算機。
服務端(Server):響應客戶端的請求,提供數據或執行指令。
例子:傳感器、執行器、PLC(作為被控設備)、智能儀表。
拓撲圖:
以太網通訊方式主要包括 Modbus TCP/IP 和 Modbus UDP/IP 兩種。Modbus TCP/IP 是基于以太網的一種通訊方式,它將 Modbus 協議封裝在 TCP/IP 協議棧中,通過以太網傳輸數據,采用基于連接的通訊方式,具有高速、穩定的特點。
Modbus UDP/IP 是基于 UDP/IP 協議的一種通訊方式,采用無連接的通訊方式,不保證數據的可靠性和順序,適用于對實時性要求較高、對通訊效率要求較高的應用場景。幀格式:
:010300000002FArn
“:”起始標志
01:地址
03:功能碼
0000:數據(寄存器地址)
0002:數據(寄存器數量)
FA:LRC 校驗
rn:結束標志
起始標志(Start):無(由 TCP/IP 協議處理)
地址(Address):1 字節
功能碼(Function Code):1 字節
數據(Data):可變長度
錯誤校驗(CRC):在 Modbus TCP 頭中由 TCP/IP 協議處理
結束標志(End):無(由 TCP/IP 協議處理)
Modbus 協議的功能碼
Modbus 協議中,功能碼用于指定請求的操作類型,例如讀取或寫入數據。每個功能碼都有特定的含義和操作。以下是常見的 Modbus 功能碼及其用途:
這里的線圈啊,寄存器都是個什么東西:
線圈 = 一個布爾量。寄存器 = word 操作。
現代 Modbus 設備,它們通常只映射到一塊內存區域。在這個內存區域中,線圈表示位操作(bit),每個線圈對應一個布爾變量(0 或 1、開或關)。而寄存器則表示字操作(word),每個寄存器對應一個整型變量。當然,也可以通過多個寄存器的組合來表示浮點數以及其他復合數據結構。在 Modbus 協議中,一個字(word)的長度是 16 位,即 2 個字節,16 個比特。
Modbus 廣播方式:單薄和廣播
單播:
在單播模式下,從站地址必須唯一,地址范圍為 1 到 247。主站通過特定地址訪問指定的從站,發出一個請求數據幀。請求數據幀的功能可以是讀取或寫入數據。從站接收到請求后,進行相應的處理,并在完成后發送一個應答數據幀,表示讀取或寫入操作成功(又要注意 RS232 只能有一個從站)。獲取數據需要輪詢一下所有的從站。單播模式圖:
廣播:
在廣播模式下,主站向所有從站發出請求數據幀,所有從站都會處理這條命令。對于廣播請求,所有從站無需做出應答操作。通常,地址 0 表示廣播地址。有例外情況哈。
Modbus 廣播通常用于同時對多個從設備進行相同的操作,例如同時啟動或停止多個從設備。
RS-232、RS-485、RS-422 對比表格:
Modbus RTU、Modbus ASCII、Modbus TCP/IP 對比表格:
應用
Modbus 是一個開源的庫,可以用來在嵌入式系統上實現 Modbus 協議。它通常用于以下場景:
嵌入式系統:如 Arduino、ESP8266、Raspberry Pi 等微控制器和單板計算機。
工業自動化設備:如 PLC(可編程邏輯控制器)、傳感器、執行器等。
家庭自動化系統:如智能家居設備和控制系統。
能源管理:電力系統中的數據采集和監控。
樓宇自控:用于空調、照明等系統的集成控制。
水處理:對水處理設備的運行狀態進行監控和管理。
后記
這個系列,物聯網協議進行到了尾聲,這篇寫 Mudbus,下面會寫 MQTT、CoAP、OPC,都是重頭戲。
參考文獻
15 張圖, 把TCP/IP 講得一清二楚!-騰訊云開發者社區-騰訊云
什么是OPC UA&它是如何工作的?_嗶哩嗶哩_bilibili
探索 OSI 會話層:建立和管理通信會話的關鍵_不同機器之間用戶會話的建立與管理-CSDN博客
【2024軟考】《網絡工程師》新版精講視頻-希賽網(零基礎系統教程,建議收藏)!_嗶哩嗶哩_bilibili
MQTT協議_mqtt payload一定要字符串嗎-CSDN博客
MQTT協議_mqtt payload一定要字符串嗎-CSDN博客
如何使用CoAP的對稱加密自主接入和DTLS自主接入_物聯網平臺(IoT)-阿里云幫助中心
network_protocol_structures.pdf
modbus_application_protocol_specification_v1.1b3.pdf
https://help.dtuip.com:8888/images/20191028084839667.pdf
https://zh.wikipedia.org/wiki/Modbus
https://www.51cto.com/article/670429.html
https://www.youtube.com/watch?v=f5oPEVhZFug
本文由 @躍曰 原創發布于人人都是產品經理。未經作者許可,禁止轉載。
題圖來自Unsplash,基于CC0協議。
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
OPC 接下來是重點難點。