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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM