modbus協議

說起協議,我們對http協議比較熟悉,因為每天上網都離不開它。

http協議暫且不表,今天我介紹下modbus協議。modbus是一種應用層協議,它主要在工控場景下使用,比如PLC控制設備,上位機和PLC通過modbus協議通訊。

1、modbus的概況

 

 

 注意:數組長度只是個參考,後面會有詳細說明。數據類型也沒有列舉完。modbus的網路拓撲結構也不是只有master/slave結構,還有其它的結構,比如peer to peer,每一個網路節點既可以是master,也可以充當slaver。不過master/slave結構還是比較典型的網路拓撲。

2、master/slave結構

Reques&Response

正常的請求相應如上圖所示,如果發生異常的情況,請看下圖:

 

 

 

 

 

注意,在modbus協議文檔中,提到Query和Response,Query就是Request,Request&Response更多地是參考了Http。上圖中的Client相當於Master,Server相當於Slave。為什麼呢?因為Client首先發起了請求,所以它就是Master,Master發起查詢,Slave收到查詢後,解析消息,然後返回。這一點,可能初學者容易混淆。

 

3、modbus消息體

 

 

 

 

這裡的Start和End  3.5 Char time,意思是消息的每一幀前後間隔的時間。要明確一點,3.5個字元時間是最小間隔時間。為什麼需要前後間隔呢?因為modbus rtu是一個流式數據,也就是數據流,它不像modbus  ASCII協議,開始位置用:標識。既沒有標識,還不停頓,收到消息的一方,就懵逼了,心想:「我該如何處理呢?」

 

4、modbus消息解析

    

 

 

這是請求包的解析,通俗地說,就是:讓哪個Slave,在哪個暫存器上做什麼。這就涉及到三個要素: 從機地址、功能碼、偏移地址(暫存器地址)。上面的含義:地址為1的從機,從00 0E暫存器開始讀取10個暫存器的值。最後兩個位元組是CRC校驗位,驗證數據的完整性。如果網路傳輸過程中,出現數據丟失,就會知道。

 

Response消息,01和04都是請求時就包含的,表示從機的當前操作返回了數據。20表示10個暫存器的數據量,後面緊接著是數據,最後兩位仍然是校驗位。

5、modubs rtu和moudus ASCII協議區別

  

 

注意:上圖中的Function  04,ASCII碼這邊,缺失一個4,它是把十六進位的每一位都當字元來傳,每個字元佔一個位元組,所以Rtu用一個位元組,它就得兩個位元組。

 

 

 

 

從上面兩個圖上可以看出,modbus rtu的優點很明顯,在相同的速率下,傳輸的位元組數基本上是modbus  ASCII的兩倍。那moubus  ASCII的優勢在哪裡?它在傳輸過程中,字元之間的傳輸時間間隔是可以長一點的,而不會出現問題。

6、PDU和ADU

 

從上圖可以看出,ADU是一個完成的數據包,PDU是解析時,最後要拿出來的數據。modbus rtu的數據量最大不能超過256個位元組。所以,PDU最大位元組數是253。同時,說明了modbus Tcp和Rtu的區別,就是有前導位元組,沒有校驗位。

 

 7、設備記憶體分布

 

 

 

 

 8、常用功能碼

 

 

 

 

 9、modbus實際應用

 

油田注水儀數據接收及解析

10、小結

本篇就modbus協議的方方面面做了介紹,尤其是modbus不同協議及消息幀的解析,主從服務的交互等,希望對初入這一行的同伴有所幫助。

 

Tags: