Modbus協議初識

 Modbus名稱取自Modicon公司,該公司於1978年發明了這個協議,作爲第一個真正用於工業現場的總線協議。Modbus因其本身作爲面向消息的協議,可以支持多種電氣接口的特性,加上協議本身簡單緊湊的幀格式和標準、開放的設計理念,使之成爲在世界範圍內被廣泛使用的協議標準

一提到Modbus,總是有人會直接將其與485總線聯繫在一起,其實Modbus協議官方手冊上有明確說明,Modbus作爲一種應用層的信息交換協議,它爲通過不同總線、以太網等鏈路連接的設備,提供了一種C/S架構的通信方式。不同的設備諸如PLC,Control Panel,I/O Device等,通過不同的鏈路諸如RS485,TCP/IP等都可以基於Modbus協議進行通信。

                                      

如上圖所示,不同類型的設備通過Modbus進行通信,交換業務信息。這裏邊值得一提是GateWay這種設備,在整個有線通信系統中扮演着鏈路層轉化的工作,他可以將在以太網上跑的Modbus設備與在RS232上跑的設備互通有無。

Modbus協議定義了一種獨立於鏈路層的數據交換單元(PDU),報文由功能碼以及數據內容構成,功能碼分爲三類:1.公共功能碼。2.用戶自定義功能碼。3.保留的功能碼。作爲一個Modbus設備,建議將所有共有的功能碼實現,應該就能滿足用戶的所有業務需求,如果有自定義功能碼的需求,需要從用戶自定義功能碼中選擇未使用的實現私有的功能。

公共功能碼分爲三類:1.爲數據訪問類功能碼。2.診斷類功能碼。3.其他類別功能碼。其中數據訪問類爲功能碼的主體部分,其主要根據Modbus對數據模型的定義,分爲四小類,第一種爲只讀的單Bit位操作,針對名爲Discretes Input數據模型。第二種是可讀寫的單Bit位操作,針對名爲Coils的數據模型。第三種爲只讀的16-bit字的操作,針對名爲Input Registers數據模型。最後一種爲讀寫的16-bit字的操作,針對名爲Holding Registers的數據模型。具體的工作方式如下圖:

                                     

Modbus協議一次通信的流程首先由客戶端生成Request報文發送給服務器端,服務器端執行相應操作之後,再生成Response報文回覆給客戶端,如果在執行的過程中正常,則回覆的Response報文中功能碼與Request的報文一致,如果在執行功能異常,則將功能碼最高位置一作爲Response報文回覆給客戶端。

我們先對其中一個功能碼舉一個具體通信的例子,比如公共功能碼0x03,它的定義是讀取Holding Registers.ModBus協議,他的Request報文包含功能碼0x03,以及讀取的起始地址以及讀取寄存器數,而Response報文報文則包含功能碼,返回字節數,以及寄存器具體數據,詳細報文內容見下圖:

          

上邊的例子是Modbus協議中定義的比較簡單的例子,文檔《Modbus_Application_Protocol_V1_1b3》有針對所有功能碼的詳細解釋以及功能執行狀態圖。值得注意的是除了文檔定義的基本的四種數據模型,公共功能碼中還支持對File record這種類型的讀寫。

下邊我們將對ModBus在串行網絡以及TCP/IP上的實現分別舉例說明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章