天天看點

Modbus-RTU協定模式學習目錄内容

目錄

1.Modbus定義

2.Modbus協定組成

3.協定定義

4.協定定義例子

5.封包定義

6.Modbus-RTU封包簡單分析

7.CRC校驗知識點

 8.功能号

9.采用Modbus協定在兩個裝置間建立通訊

10.Modbus封包模型

11.Modbus資料模型

12.Modbus事務處理

13.Modbus請求和響應

内容

1.Modbus定義:

   是一種串行通信協定,一開始是為使用PLC(即可程式設計邏輯控制器)裝置通信而發表,已成為工業上通信協定的标準,是工業電       子裝置間常用連接配接方式。

2.Modbus協定組成:

   包括RTU、ASCII、TCP三種模式,其中RTU模式(即Modbus-RTU)最常用。

3.協定定義:

   所謂協定,就是互相之間的約定。如果不讓别人知道那就是暗号。

4.協定定義例子:

   協定: "A"  --  “LED滅”

               "B"  --  "報警"

               "C"  --  "LED亮"

    單片機接收到"A"控制一個LED滅,單片機接收到"B"控制報警,單片機接收到"C"控制一個LED亮。

    總結:當收到已定義的協定中對應指令(比如:A、B、C等)時就執行協定中相應的動作。

5.封包定義:

   一個封包就是一幀資料,一個資料幀就是一個封包,是指一串完整的指令資料(比如下面的一串資料" 01  16  00  01  00  17  98     04")。

6.Modbus-RTU封包簡單分析:

   首先,給出封包如下:

   01  16  00  01  00  17  98  04

   然後,分别解釋封包中數字的含義:

   01 --> 從機位址;16 -->功能号;(00  01) -->資料位址;(00  17) -->資料;(98  04) -->CRC校驗。

   接着,總結:

   上述封包的大緻意思:把資料 0x0017(十進制:23)寫入1号從機位址 0x0001資料位址。

7.CRC校驗知識點:

   7-1.定義:

   CRC是循環備援校驗碼,簡稱循環碼,是一種具有檢錯、糾錯能力的校驗碼。

   7-2.原理:(為友善了解該原理通過具體執行個體說明,這裡參考百度百科)

   假設約定的生成多項式二進制表示為"10011"(共5位),然後假設要發送資料序列的二進制為"101011"(共6位),接着在要發送資料的後面加4個0且二進制表示為"1010110000"(共10位),用已約定好生成多項式二進制(即"10011")去除乘積1010110000(共10位),按"模2算法"(注意不是直接二進制相除)求得餘數比特序列為"0100",接着将餘數添加到要發送資料之後得到真正要發送資料的比特流"1010110100"(共10位其中前6位為原始資料後4位為CRC校驗碼)。

   上面講的是發送端所做工作流程,下面講接收端。

   接收端在接收到帶CRC校驗碼的資料後,如資料在傳輸過程中未出錯将一定能被(和發送端)已約定好的生成多項式(即"10011")整除,如資料在傳輸過程中出錯利用已約定好的生成多項式(即"10011")就不會整除。

   7-3.作用:

   在資料傳輸過程中可能資料會發生錯誤,CRC校驗檢測接收的資料是否正确。比如主機發出"01 06 00 01 00 17 98 04",那麼從機接收到後要根據"01 06 00 01 00 17"再計算CRC校驗值,從機判斷自己計算出來的CRC校驗是否與接收的CRC校驗(98 04主機計算的)相等,如不相等則說明資料傳輸有錯誤。(了解:即便在最終看來從機是重複計算CRC校驗值但根據CRC校驗内部機制也必須這麼做)

 8.功能号:

    意義:這裡隻講Modbus-RTU的最常用功能碼,如下:

     01(0x01) --> 讀線圈 ;02(0x02) --> 讀離散量輸入;03(0x03) --> 讀保持寄存器;04(0x04) --> 讀輸入寄存器;

     05(0x05) --> 寫單個線圈;06(0x06) --> 寫單個寄存器;15(0x0F) --> 寫多個線圈;16(0x10) --> 寫多個寄存器。

     總結:上述講到的"線圈"和"寄存器"分别指的是"位bit"和"記憶體大小2個位元組的變量",後面出現這兩個概念也是同樣意思。

9.采用Modbus協定在兩個裝置間建立通訊:

    9-1.首先,目光轉向單片機(以PLC裝置為例)在其中拿出部分記憶體(RAM)進行兩個裝置(即與PC)通訊,例如:

    數組後的注釋說明:0X[20] --> 輸出線圈,用功能碼0x01、0x05、0x0F通路,開頭位址是0(這個後面解釋);

                                    1X[20]  --> 輸入線圈,用功能碼0x02通路,開頭位址是1(後面解釋)。

     另外兩個同樣道理。

     9-2.然後,要實作主機對從機寫資料操作:

     如果單片機接收到一個封包那麼就對封包進行解析并執行相應處理。以前面講的封包為例,假設本機位址是1,那麼單片機接       收到這串資料根據已約定好的生成多項式計算CRC校驗判斷資料是否正确,如判斷資料無誤則結果是:                                         HoldDataReg[1]=0x0017;

      就這樣,Modbus主機就完成一次對從機資料的寫操作即實作通訊。

      接着,要實作主機對從機讀資料操作:

      主機進行讀HoldDataReg[1]操作,則封包是:"01  03  00  01  00  01  D5  CA",其中:01 --> 從機位址;03 --> 功能号;

      (00  01) --> 讀取資料個數;(D5  CA) --> CRC校驗。

      那麼單片機接收到這串資料根據已約定好的生成多項式計算"CRC校驗"判斷資料是否正确,如判斷資料無誤則結果是: 傳回        資訊給主機且傳回資訊的格式為:"01  03  02  00  17  F8  4A",其中01 --> 從機位址;03 --> 功能号;02 --> 資料位元組個數;

      (00  17) --> 兩個位元組資料;(F8  4A) --> CRC校驗。

      就這樣,Modbus主機就完成一次對從機資料的讀操作即實作通訊。

  10.Modbus封包模型:

        以上已了解Modbus一幀封包的通訊。且每個封包格式基本一緻。如下圖:

Modbus-RTU協定模式學習目錄内容

           這裡的"ADU"指:應用資料單元;這裡的"PDU"指:協定資料單元。    

    11.Modbus資料模型

Modbus-RTU協定模式學習目錄内容
Modbus-RTU協定模式學習目錄内容

    12.Modbus事務處理:

        下列狀态圖描述了在伺服器端Modbus事務處理的一般處理過程:

Modbus-RTU協定模式學習目錄内容

    13.Modbus請求和響應:

        看Modbus協定手冊(連結:http://www.360doc.com/document/19/0403/08/63055906_826089114.shtml),中文第10頁開              始。手冊詳細舉例說明了Modbus協定各個功能号的請求和響應。

繼續閱讀