modbus rtu協議


1、Modbus 協議簡介

Modbus協議是一種已廣泛應用於當今工業控制領域的通用通訊協議。通過此協議,控制器相互之間、或控制器經由網絡(如以太網)可以和其它設備之間進行通信。Modbus協議使用的是主從通訊技術,即由主設備主動查詢和操作從設備。一般將主控設備方所使用的協議稱為Modbus Master,從設備方使用的協議稱為Modbus Slave。典型的主設備包括工控機和工業控制器等;典型的從設備如PLC可編程控制器等。

Modbus通訊物理接口可以選用串口(包括RS232、RS485和RS422),也可以選擇以太網口。其通信遵循以下的過程:

  • 主設備向從設備發送請求
  • 從設備分析並處理主設備的請求,然后向主設備發送結果
  • 如果出現任何差錯,從設備將返回一個異常功能碼 

此協議定義了一個控制器能認識使用的消息結構,而不管它們是經過何種網絡進行通信的。它描述了一控制器請求訪問其它設備的過程,如何回應來自其它設備的請求,以及怎樣偵測錯誤並記錄。它制定了消息域格局和內容的公共格式。 

    當在Modbus網絡上通信時,此協議決定了每個控制器須要知道它們的設備地址,識別按地址發來的消息,決定要產生何種行動。如果需要回應,控制器將生成反饋信息並用Modbus協議發出。在其它網絡上,包含了Modbus協議的消息轉換為在此網絡上使用的幀或包結構。這種轉換也擴展了根據具體的網絡解決節地址、路由路徑及錯誤檢測的方法。

Modbus的工作方式是請求/應答,每次通訊都是主站先發送指令,可以是廣播,或是向特定從站的單播;從站響應指令,並按要求應答,或者報告異常。當主站不發送請求時,從站不會自己發出數據,從站和從站之間不能直接通訊。

  Modbus協議是應用層(協議層)報文傳輸協議,它定義了一個與物理層無關的協議數據單元(PDU),即PDU=功能碼+數據域,功能碼1byte,數據域不確定。

  Modbus協議能夠應用在不同類型的總線或網絡。對應不同的總線或網絡,Modbus協議引入一些附加域映射成應用數據單元(ADU),即ADU=附加域+PDU,例如modbus tcp/ip------ ADU=MBAP+ADU。

2、Modbus 通訊方式 

  2.1、Modbus三種通訊方式

    Modbus有下列三種通信方式:

    (1)、以太網:對應的通信模式是Modbus TCP/IP

    (2)、異步串行傳輸(各種介質如有線RS-232-/422/485/;光纖、無線等):對應的通信模式是Modbus RTUModbus  ASCII

    (3)、高速令牌傳遞網絡:對應的通信模式是Modbus PLUS

    Modbus RTU和Modbus ASCII協議應用於串口鏈接(RS232、RS485、RS422),Modbus tcp/ip協議應用於以太網鏈接。

2.2、在Modbus網絡上傳輸

       標准的Modbus口是使用RS-232C兼容串行接口,它定義了連接口的針腳、電纜、信號位、傳輸波特率、奇偶校驗。控制器能直接或經由Modem組網。 

       控制器通信使用主/從技術,即僅一設備(主設備)能初始化傳輸(查詢)。其它設備(從設備)根據主設備查詢提供的數據作出相應反應。

         典型的主設備:主機和可編程儀表。

         典型的從設備:可編程控制器。 

      主設備可單獨和從設備通信,也能以廣播方式和所有從設備通信。如果單獨通信,從設備返回一消息作為回應,如果是以廣播方式查詢的,則不作任何回應。

    Modbus協議建立了主設備查詢的格式:設備(或廣播)地址、功能代碼、所有要發送的數據、一錯誤檢測域。 

      從設備回應消息也由Modbus協議構成,包括確認要行動的域、任何要返回的數據、和一錯誤檢測域。如果在消息接收過程中發生一錯誤,或從設備不能執行其命令,從設備將建立一錯誤消息並把它作為回應發送出去。

2.3、在其它類型網絡上轉輸

      在其它網絡上,控制器使用對等技術通信,故任何控制都能初始和其它控制器的通信。這樣在單獨的通信過程中,控制器既可作為主設備也可作為從設備。提供的多個內部通道可允許同時發生的傳輸進程。 

      在消息位,Modbus協議仍提供了主/從原則,盡管網絡通信方法是“對等”。如果一控制器發送一消息,它只是作為主設備,並期望從從設備得到回應。同樣,當控制器接收到一消息,它將建立一從設備回應格式並返回給發送的控制器。

2.4、查詢---回應

 

 

 (1)、查詢

    查詢消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的任何附加信息。例如功能代碼03是要求從設備讀保持寄存器並返回它們的內容。數據段必須包含要告之從設備的信息:從何寄存器開始讀及要讀的寄存器數量。錯誤檢測域為從設備提供了一種驗證消息內容是否正確的方法。

(2)、回應

     如果從設備產生正常的回應,在回應消息中的功能代碼是在查詢消息中的功能代碼的回應。數據段包括了從設備收集的數據:象寄存器值或狀態。如果有錯誤發生,功能代碼將被修改以用於指出回應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。

MODBUS RTU 詳細解釋

 Modbus 一個工業上常用的通訊協議、一種通訊約定。Modbus 協議包括 RTU、ASCII、TCP。其中 MODBUS-RTU最常用,比較簡單,在單片機上很容易實現。雖然 RTU 比較簡單,但是看協議資料、手冊說得太專業了,
起初很多內容都很難理解。
所謂的協議是什么?就是互相之間的約定嘛,如果不讓別人知道那就是暗號。現在就來定義一個新的最簡單協議。例如,
協議: “A” --“LED 滅”
“B” --“報警”
“C” --“LED 亮”
單片機接收到“A”控制一個 LED 滅,單片機接收到“B”控制報警,單片機接收到“A”控制一個 LED 亮。
那么當收到對應的信息就執行相應的動作,這就是協議,很簡單吧。

 先來簡單分析一條 MODBUS-RTU 報文,例如:01 06 00 01 00 17 98 04

01               06        00 01       00 17               98 04
從機地址 功能號 數據地址      數據             CRC 校驗

 這一串數據的意思是:把數據 0x0017(十進制 23) 寫入 1 號從機地址 0x0001 數據地址。
先弄明白下面的東西。

1、報文
一個報文就是一幀數據,一個數據幀就一個報文: 指的是一串完整的指令數據,就像上面的一串數據。

2、CRC 校驗
意義:例如上面的 98 04 是它前面的數據(01 06 00 01 00 17)通過一算法(見附錄 2,很簡單的)計算出來的結果,其實就像是計算累加和那樣。(累加和:就是 010600010017 加起來的值,然后它的算法就是加法)。
作用:在數據傳輸過程中可能數據會發生錯誤,CRC 檢驗檢測接收的數據是否正確。比如主機發出 01 06 00 01 00 17 98 04,那么從機接收到后要根據 01 06 00 01 00 17 再計算 CRC 校驗值,從機判斷自己計算出來的 CRC 校驗是否與接收的 CRC 校驗(98 04 主機計算的)相等,如果不相等那么說明數據傳輸有錯誤這些數據不能要。

3、功能號
意義:modbus 定義。 作用:指示具體的操作。
最常用功能碼:
下面“線圈”“寄存器”其實分別直的就是“位變量”“16 位變量”
01 (0x01) 讀線圈
02 (0x02) 讀離散量輸入
03 (0x03) 讀保持寄存器
04(0x04) 讀輸入寄存器
05 (0x05) 寫單個線圈
06 (0x06) 寫單個寄存器
15 (0x0F) 寫多個線圈
16 (0x10) 寫多個寄存器
ODBUS-RTU
一、一個報文分析
先聲明下我們的目的,我們是要兩個設備通訊,用的是 MODBUS 協議。上面簡單介紹了:“報文”“CRC 校驗”“功能號”。
在單片機中拿出一部分內存(RAM)進行兩個設備通訊,例如:

 

 數組后面的注釋,說明
OX[20] 代表是輸出線圈,用功能碼 0x010x050x0F 訪問, 開頭地址是 0 (這個后續說明)
IX[20] 代表是輸入線圈,用功能碼 0x02 訪問, 開頭地址是 1 (這個后續說明)
另外兩個一樣的道理。
注意:所謂的“線圈”“寄存器”就是“位變量”“16 位變量”,不要被迷惑。之所以稱“線圈”我覺得
應該是對於應用的設備,MODBUS 協議是專門針對 485 總線設備(例 PLC)開發的。

1、主機對從機寫數據操作
如果單片機接收到一個報文那么就對報文進行解析執行相應的處理,如上面報文:
01              06       00 01      00 17       98 04
從機地址 功能號 數據地址      數據     CRC 校驗

假如本機地址是 1 ,那么單片機接收到這串數據根據數據計算 CRC 校驗判斷數據是否正確,如果判斷數
據無誤,則結果是:

HoldDataReg[1] = 0x0017;
MODBUS 主機就完成了一次對從機數據的寫操作,實現了通訊。

2、主機對從機讀數據操作
主機進行讀 HoldDataReg[1] 操作,則報文是:
01              03       00 01        00 01        D5 CA
從機地址 功能號 數據地址 讀取數據個數 CRC 校驗

那么單片機接收到這串數據根據數據計算 CRC 校驗判斷數據是否正確,如果判斷數據無誤,則結果是:
返回信息給主機,返回的信息也是有格式的:
返回內容

01               03          02               00 17          F8 4A
從機地址 功能號 數據字節個數 兩個字節數據 CRC 校驗

MODBUS 主機就完成了一次對從機數據的讀操作,實現了通訊。

 

 二、MODBUS 報文模型

以上了解到了 MODBUS 的一幀報文是如何通訊的,其實每個報文的格式都基本一樣的。

 

 這里兩個縮略詞以前不知道,但是現在要明白指的是什么,“ADU”“PDU
ADU: 應用數據單元
PDU: 協議數據單元

  三、MODBUS 數據模型

 

 

 

 

四、MODBUS 事務處理
下列狀態圖描述了在服務器側 MODBUS 事務處理的一般處理過程。

 

 五、MODBUS 請求與響應
MODBUS 協議手冊,中文第 10 頁開始,英文第 24 頁開始。手冊非常詳細舉例說明了 MODBUS協議各個功能號的請求與響應。

modbus 協議在單片機上實現過程
MODBUS 任務處理函數

 

 函數中,RcvBuf 為串口接收緩沖區,如果接收了一個報文則,RcvBuf[0] 為從機地址,RcvBuf[0] MODBUS 功能號。根據功能號做出響應,而具體的操作根據功能號在各自的函數中執行,相當於解析接收到的數據。

 

 

 


免責聲明!

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



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