1. 程式人生 > >一文講透Modbus協議

一文講透Modbus協議

![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/corinne-kutz-qn6dmo4XUXc-unsplash.jpg) ## 前言 Modbus是一種序列通訊協議,是Modicon公司(現在的施耐德電氣 Schneider Electric) 於1979年為使用可程式設計邏輯控制器(PLC)通訊而發表。Modbus已經成為工業領域通訊協議事實上的業界標準,並且現在是工業電子裝置之間常見的連線方式。 Modbus在工業環境下很流行,因為它是公開發布而免版稅的。它是為工業應用開發的,與其他標準相比,它相對易於部署和維護,除了要傳輸的資料格式的大小外,幾乎沒有其他限制。Modbus使用**RS485**作為其物理層。 Modbus支援連線到同一網路的許多裝置之間進行通訊,例如,一個測量溫度和溼度並將結果傳送給伺服器的系統中,Modbus通常用於在監控和資料採集(SCADA)系統中將計算機或伺服器與遠端終端單元(RTU)連線。許多資料型別是根據梯形邏輯(一種通過基於繼電器邏輯電路圖的圖形來代表程式的一種程式語言)的行業用法機及其在驅動繼電器中的用途來命名的: 單位物理輸出稱為線圈,單位物理輸入稱為離散輸入或觸點。 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Devices-Communicate-Using-Modbus-Common-Language.jpg) Modbus協議在RS232,RS422和RS485之上執行。有針對Modbus幀的基於IP鏈路層定義的 Modbus/TCP規範。Modbus協議基於Request(請求)/Response(響應)模型。 ## Modbus通訊協議的型別 串列埠和乙太網存在多種版本的Modbus協議,最常見的是: - Modbus RTU - Modbus ASCII - Modbus TCP - Modbus Plus ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Modbus-Different-Types.jpg) Modicon釋出了基於主從架構的多點網路的Modbus通訊介面。Modbus節點之間的通訊通過傳送請求和讀取響應型別訊息來實現。 ## Modbus協議及其物理媒體 Modbus是描述訊息通訊對話方塊的開放標準。 Modbus通過多種型別的物理介質進行通訊,例如: - 序列RS-232 - 序列RS-485 - 序列RS-422 - 乙太網 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Modbus-Communication-Physical-Media.gif) 最初的Modbus介面在RS-232序列通訊上執行,但是大多數後來的Modbus實現使用RS-485,因為它允許: - 距離更長。 - 更高的速度。 - 單個多點網路中可能有多個裝置。 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Modbus-Communication-over-Serial-RS485-Benefits-.jpg) 使用兩線制通過序列RS-485物理介質進行主從Modbus通訊 傳送 並接收連線。 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Modbus-Communication-over-Serial-RS-485-Physical-Media.jpg) 在簡單的介面(如RS232或RS485)上,Modbus訊息以純格式通過網路傳送,並且該網路將專用於Modbus通訊。 但是,如果您的網路需要使用功能更廣泛的網路系統(例如乙太網上的TCP / IP)使用多個異構裝置,則Modbus訊息將以此物理介面規定的格式嵌入到乙太網資料包中。 因此,在這種情況下,Modbus和其他型別的混合協議可以同時存在於同一物理介面上。 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Modbus-Devices-Compliance-with-Ethernet-Physical-Interface.gif) ## Modbus訊息結構簡介 Modbus的主要訊息結構是點對點。Modbus能夠在點對點和多點網路上執行。 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Modbus-Message-Architecture.jpg) Modbus裝置使用Master-Slave(Ethernet稱為Client-Server)技術進行通訊,其中只有一個裝置(Master 或Server)可以請求資料(稱為查詢)。 其他裝置(Slaves或Clients)通過將請求的資料提供給主伺服器或執行查詢中請求的操作來進行響應。 從站是任何外圍裝置,例如I / O感測器,閥門,網路驅動器或其他測量型別的裝置,它們處理資訊並使用Modbus將其響應訊息傳送到主裝置。 主機可以定址單個從機或向所有從機發起廣播訊息。從站將分別對所有定址到它們的訊息查詢返回響應,但不響應廣播訊息。 從站不會自行回覆訊息,而僅響應從主站傳送的訊息查詢。 對於使用乙太網的協議(例如Modbus TCP),任何裝置都可以發出Modbus命令,因此所有裝置都可以充當主裝置,儘管通常只有一個裝置充當主裝置。 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Modbus-Master-Query-and-Reply.gif) 主站(Master)的查詢將包括: - 從站地址(廣播地址)。 - 帶有從站讀取或寫入資料命令的功能程式碼。 - 如果寫命令是由主機發起的,則寫命令為“資料”。 - 錯誤檢查欄位。 ### 命令 Modbus命令可以指示Modbus裝置執行以下操作: - 更改其暫存器之一的值,該值將被寫入線圈和保持暫存器。 - 讀取I / O埠:從Discrete和Coil埠讀取資料, - 命令裝置傳送回其線圈和保持暫存器中包含的一個或多個值。 Modbus命令包含要使用的裝置的Modbus地址(1到247)。即使其他裝置可能會收到命令,只有被定址的裝置才會響應並執行該命令(例外是傳送到節點0的特定可廣播命令,該命令已執行但未確認)。 所有Modbus命令都包含校驗和資訊,以使接收者能夠檢測到傳輸錯誤。 ### 錯誤檢查 錯誤檢查是主機或從機在傳輸或響應開始時建立的值,然後在接收到訊息時進行檢查以驗證內容是否正確。 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Modbus-Message-Architecture.jpg) 從站的響應包括: - 確認請求的欄位。 - 要返回的資料。 - 錯誤檢查資料。 如果未發生錯誤,則從站的響應將包含所請求的資料。 如果從站接收到的訊息查詢中發生錯誤,或者從站無法執行請求的操作,則從站將返回異常訊息作為其響應。 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Error-in-Modbus-Message-Query.gif) 從站的訊息幀的錯誤檢查欄位允許主站確認訊息的內容有效。 ![](https://james-1258744956.cos.ap-shanghai.myqcloud.com/gateway/Modbus-Slave-Response-Structure.jpg) 在本文中,您瞭解了什麼是Modbus通訊協議以及行業中使用的Modbus通訊