MODBUS協議詳細講解

2021-03-04 01:13:06 字數 2598 閱讀 5996

modbus rtu詳細解釋

modbus乙個工業上常用的通訊協議、一種通訊約定。modbus協議包括rtu、ascii、tcp。其中modbus-rtu 最常用,比較簡單,在微控制器上很容易實現。

雖然rtu比較簡單,但是看協議資料、手冊說得太專業了,起初很多內容都很難理解。

所謂的協議是什麼?就是互相之間的約定嘛,如果不讓別人知道那就是暗號。現在就來定義乙個新的最簡單協議。例如,

協議:「a」--「led滅」

「b」--「報警」

「c」--「led亮」

微控制器接收到「a」控制乙個led滅,微控制器接收到「b」控制報警,微控制器接收到「a」控制乙個led亮。那麼當收到對應的資訊就執行相應的動作,這就是協議,很簡單吧。

先來簡單分析一條modbus-rtu報文,例如:0106000100179804

0106000100179804

從機位址功能號資料位址資料crc校驗

這一串資料的意思是:把資料0x0017(十進位制23)寫入1號從機位址0x0001資料位址。

先弄明白下面的東西。

1、報文

乙個報文就是一幀資料,乙個資料幀就乙個報文:指的是一串完整的指令資料,就像上面的一串資料。

2、crc校驗

意義:例如上面的9804是它前面的資料(010通過一演算法(見附錄2,很簡單的)計算出來的結果,其實就像是計算累加和那樣。(累加和:

就是010*********加起來的值,然後它的演算法就是加法)。

作用:在資料傳輸過程中可能資料會發生錯誤,crc檢驗檢測接收的資料是否正確。比如主機發出010600 010*******,那麼從機接收到後要根據010*********再計算crc校驗值,從機判斷自己計算出來的crc校驗是否與接收的crc校驗(9804主機計算的)相等,如果不相等那麼說明資料傳輸有錯誤這些資料不能要。

3、功能號

意義:modbus定義。見附錄1。

作用:指示具體的操作。

modbus-rtu

一、乙個報文分析

先宣告下我們的目的,我們是要兩個裝置通訊,用的是modbus協議。上面簡單介紹了:「報文」「crc校驗」「功能號」。

在微控制器中拿出一部分記憶體(ram)進行兩個裝置通訊,例如:

陣列後面的注釋,說明

ox[20]代表是輸出線圈,用功能碼0x01,0x05,0x0f訪問,開頭位址是0(這個後續說明)

ix[20]代表是輸入線圈,用功能碼0x02訪問,開頭位址是1(這個後續說明)

另外兩個一樣的道理。

注意:所謂的「線圈」「暫存器」就是「位變數」「16位變數」,不要被迷惑。之所以稱「線圈」我覺得應該是對於應用的裝置,modbus協議是專門針對485匯流排裝置(例plc)開發的。

1、主機對從機寫資料操作

如果微控制器接收到乙個報文那麼就對報文進行解析執行相應的處理,如上面報文:

0106000100179804

從機位址功能號資料位址資料crc校驗

假如本機位址是1,那麼微控制器接收到這串資料根據資料計算crc校驗判斷資料是否正確,如果判斷資料無誤,則結果是:

holddatareg[1]=0x0017;

modbus主機就完成了一次對從機資料的寫操作,實現了通訊。

2、主機對從機讀資料操作

主機進行讀holddatareg[1]操作,則報文是:

010*********d5ca

從機位址功能號資料位址讀取資料個數crc校驗

那麼微控制器接收到這串資料根據資料計算crc校驗判斷資料是否正確,如果判斷資料無誤,則結果是:返回資訊給主機,返回的資訊也是有格式的:

返回內容:

010*******f84a

從機位址功能號資料位元組個數兩個位元組資料crc校驗

modbus主機就完成了一次對從機資料的讀操作,實現了通訊。

二、modbus報文模型

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

這裡兩個縮略詞以前不知道,但是現在要明白指的是什麼,「adu」「pdu」adu:應用資料單元

pdu:協議資料單元

三、modbus資料模型

四、modbus事務處理

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

五、modbus請求與響應

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

modbus協議在微控制器上實現過程modbus任務處理函式

函式中,rcvbuf為串列埠接收緩衝區,如果接收了乙個報文則,rcvbuf[0]為從機位址,rcvbuf[0]為modbus功能號。根據功能號做出響應,而具體的操作根據功能號在各自的函式中執行,相當於解析接收到的資料。

附錄1:modbus-rtu功能碼

最常用功能碼:

下面「線圈」「暫存器」其實分別直的就是「位變數」「16位變數」

01(0x01)讀線圈

02(0x02)讀離散量輸入

03(0x03)讀保持暫存器

04(0x04)讀輸入暫存器

05(0x05)寫單個線圈

06(0x06)寫單個暫存器

15(0x0f)寫多個線圈

16(0x10)寫多個暫存器

附錄2:crc generation

modbus通訊協議

工業控制已從單機控制走向集中監控 集散控制,如今已進入網路時代,工業控制器連網也為網路管理提供了方便。modbus就是工業控制器的網路協議中的一種。一 概述 modbus 協議是應用於電子控制器上的一種通用語言。通過此協議,控制器相互之間 控制器經由網路 例如乙太網 和其它裝置之間可以通訊。它已經成...

MODBUS通訊協議v1 6版

引數存放首址對應輸入暫存器首址。主機傳送命令格式如下 從機位址 1byte 功能編碼 1byte 輸入暫存器首址 2byte 輸入暫存器個數 2byte crc校驗值 2byte 從機位址值範圍在1 99 從機回應格式如下 從機位址 1byte 功能編碼 1byte 讀出的位元組個數 1byte 位...

PLC通過MODBUS協議與ABB變頻器通訊

摘要 本文通過西門子公司的s7 200 關鍵詞 modbus plc 變頻器 中圖分類號 tp273 文獻標識碼 a 文章編號 1007 9416 2012 02 0072 02 1 引言 modbus作為一種簡單易用的通訊協議已經越來越多的應用在各類儀器儀表中,對modbus通訊的應用進行敘述,以...