Modbus是一種串行通信協議,由于其協議簡單易用,且沒有版權要求,目前已經成為工業領域通信協議的實施標準。Modbus協議由Modicon公司在1979年提出,目標是為使用可編程邏輯控制器(PLC)通信。Modicon后來被施耐德電氣Schneider Electric收購,Modbus 協議現在也成為 工業電子設備之間常用的連接方式。
即總線協議。比如串口協議、IIC協議、SPI都是通信協議。你接觸到這種協議,相信你所處的行業是工業方面或者你的產品用于工業。
總體來說,Modbus協議被工業領域接受主要的原因如下:
公開發表并且無版權要求
易于部署和維護
對供應商來說,修改移動本地的比特或字節沒有很多限制。
簡單來說,免費+簡單+方便修改!

Modbus協議類型
Modbus協議屬于應用層的報文傳輸協議,Modbus目前有兩個主要版本 Modbus串口,Modbus TCP/IP,Modbus 串口又有兩個變種:Modbus RTU是一種緊湊的,采用二進制表示數據的方式,Modbus ASCII是一種人類可讀的,冗長的表示方式。三者的協議并不相同,但有類似的地方,所以說Modbus協議時,最好說這三種類型中的一種。
ModBus協議內容介紹
設備必須要有RTU協議!這是Modbus協議上規定的,且默認模式必須是RTU,ASCII作為選項。所有設備都有RTU協議,ASCII協議很少,Modbus協議,只需要了解RTU協議,ASCII作為學習的了解就足夠了。
ModBus協議最基本的通信單位是幀,整個ModBus幀又被稱之為應用數據單元(ADU),ADU中又包含了協議數據單元(PDU)用于傳真正需要傳輸的數據。Modbus協議幀從上圖可以看出:
幀結構 = 地址域 + 功能碼 + 數據 + 差錯校驗
地址域: 占用一個字節,范圍0-255,其中有效范圍是1-247,其他有特殊用途,比如255是廣播地址(廣播地址就是應答所有地址,正常地需要兩個設備的地址一樣才能進行查詢和回復)。每個終端設備的地址是唯一的,如果查詢某個終端設備,必須包含該設備的地址。終端回應也會包含該地址,通過該地址,主機知道哪個終端在與自己進行通信。
功能碼: 常用的功能碼有01、05、03、06、16。一般占用一個字節,功能碼的意義就是,知道這個指令是干啥的,比如你可以查詢從機的數據,也可以修改數據,所以不同功能碼對應不同功能。常用的功能碼是03和06。
數據: 通信的主要內容,可能是數值、參考地址或者極限值??赡苁墙K端執行特定功能所需要的數據或者終端響應查詢時采集到的數據,根據功能碼不同,有不同結構。
差錯校驗: 為了保證數據不錯誤,增加這個,然后把前面的數據進行計算看數據是否一致,如果一致,就說明這個數據是正確的,我再回復;如果不一樣,說明你這個數據在傳輸的時候出了問題,數據不對的,所以就拋棄了。有時,由于電噪聲和其它干擾,一組數據在從一個設備傳輸到另一個設備時在線路上可能會發生一些改變,出錯校驗能夠保證主機或者終端不去響應那些傳輸過程中發生了改變的數據,這就提高了系統的安全性和效率,出錯校驗使用了16位循環冗余的方法。

ModBus協議傳輸和應答架構
Modbus協議
Modbus協議是一個主/從架構的協議。在同一個Modbus網絡中同一時刻只有一個節點是主(master)節點,其他使用Modbus協議參與通信的節點是從(slave)節點,從節點的最大編號為247。每一個slave設備都有一個唯一的地址。
在串行網絡中,通訊總是由主節點發起 ,子節點在沒有收到主節點請求時不會發送數據。各個子節點之間不會直接相互通信。
在以太網,任何一個設備都能發送一個Modbus命令,通常啟動指令是某個主節點,子節點會進行應答、在同一個時刻,主節點只會發起一個Modbus事務處理。什么是事務處理呢?其實就是一次網絡上完整的應答通訊。主要包含兩種形式,1 單播模式 , 2 廣播模式。
所謂單播模式就是主節點給某個指定的節點發送消息(通過ADU中的地址域指定),從節點收到并處理完請求后,從節點向主節點返回一個應答報文,在這種模式下,一個Modbus事務包含兩個報文,一個來自主節點的請求,一個來自子節點的應答。
Modbus協議單播模式
所謂廣播模式,是主節點向所有的子節點發送請求,當主節點發送的請求報文的地址域值為0時,代表廣播請求,所有的從節點都需要接受處理,但不需要向主節點返回報文。
Modbus協議廣播模式
其實在物理層所有設備都會收到所有的請求,但地址域不為0時,從機判斷當前為單播模式,只有地址域和自身地址號相同的從機才會響應請求,當地址域為0時,從機判斷為廣播消息,所有的從機都會執行指令,所有收到指令的設備都會運行,只不過不回應指令。