modbus協議

micDavid發表於2021-06-21

說起協議,我們對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不同協議及訊息幀的解析,主從服務的互動等,希望對初入這一行的同伴有所幫助。

 

相關文章