1. 程式人生 > >modbus協議之序列鏈路

modbus協議之序列鏈路

目錄

modbus協議之序列鏈路

一、modbus簡介

Modbus是一種序列通訊協議,是Modicon公司(現在的施耐德電氣Schneider Electric)於1979年為使用可程式設計邏輯控制(PLC)通訊而發表。Modbus已經成為工業領域通訊協議的業界標準(De facto),並且現在是工業電子裝置之間常用的連線方式。


Modbus有下列三種通訊方式

1、乙太網,對應的通訊模式是MODBUS TCP。

2、非同步序列傳輸(各種介質如有線RS-232-/422/485/;光纖、無線等),對應的通訊模式是MODBUS RTU或MODBUS ASCII。

3、高速令牌傳遞網路,對應的通訊模式是Modbus PLUS。

二、modbus訊息楨

Modbus訊息楨包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,RTU、ASCII訊息楨用於非同步序列傳輸通訊,TCP通訊方式的訊息楨與RTU、ASCII訊息楨也有關聯,具體見《MODBUS-TCP》。 其中非同步序列傳輸通訊中RTU型別的訊息楨最為常用。

2.1、通用訊息楨

ADU: 應用資料單元 PDU: 協議資料單元

2.2、ASCII訊息楨

1、訊息以冒號(:)字元(ASCII碼 3AH)開始,以回車換行符結束(ASCII碼 0DH,0AH)。

2、其它域可以使用的傳輸字元是十六進位制的0...9,A...F。網路上的裝置不斷偵測“:”字元,當有一個冒號接收到時,每個裝置都解碼下個域(地址域)來判斷是否發給自己的。

3、訊息中字元間傳送的時間間隔最長不能超過1秒,否則接收的裝置將認為傳輸錯誤。
 

//序列鏈路bit格式
十六進位制,ASCII字元0...9,A...F 
----訊息中的每個ASCII字元都是一個十六進位制字元組成 每個位元組的位
1個起始位 
7個數據位,最小的有效位先發送 
1個奇偶校驗位,無校驗則無 
1個停止位(有校驗時),2個Bit(無校驗時) 
LRC(縱向冗長檢測) 

問:ASCII訊息楨模式通訊,在訊息中的每個8Bit位元組都作為兩個ASCII字元傳送,怎麼理解?

答:實際上在ASCII模式下,所有的通訊資料都是ASCII碼,包括幀結束用的也是ASCII碼裡的回車、換行。每個位元組都作為一個ASCII碼,這裡說的有點歧義。應該說是兩個ASCII碼。比如要傳送一個位元組,位元組內容是0x23,則實際傳送的是兩個ASCII碼,即字元2(0x32)和字元3(0x33)。這種編碼的好處是所有的字元都是可讀的,不會出現0x00、0xFF這種不可讀的,方便除錯。缺點是效率低,把一個位元組拆成兩個ASCII碼,資料量變大了。


追問:位元組內容是0x23,這是幾個位元組,是幾進位制?

追答:0x23 這個是十六進位制表示方法。這是一節位元組的資料,是指MODBUS裡面的資料,與傳送無關。傳送的時候,把一個位元組拆成2個ASCII表示,0x32,0x33,這個是傳送的過程中的一種變換,接收方在接收到後,需要重新拼接,還原成資料,即0x23。

2.3、RTU訊息楨

1、訊息傳送至少要以3.5個字元時間的停頓間隔開始。在網路波特率下多樣的字元時間,這是最容易實現的(如下圖的T1-T2-T3-T4所示)。傳輸的第一個域是裝置地址。可以使用的傳輸字元是十六進位制的0...9,A...F。

2、網路裝置不斷偵測網路匯流排,包括停頓間隔時間內。當第一個域(地址域)接收到,每個裝置都進行解碼以判斷是否發往自己的。在最後一個傳輸字元之後,一個至少3.5個字元時間的停頓標定了訊息的結束。一個新的訊息可在此停頓後開始。

3、整個訊息幀必須作為一連續的流轉輸。如果在幀完成之前有超過1.5個字元時間的停頓時間,接收裝置將重新整理不完整的訊息並假定下一位元組是一個新訊息的地址域。

4、如果一個新訊息在小於3.5個字元時間內接著前個訊息開始,接收的裝置將認為它是前一訊息的延續。這將導致一個錯誤,因為在最後的CRC域的值不可能是正確的。


//序列鏈路bit格式
8位二進位制,十六進位制數0...9,A...F 
訊息中的每個8位域都是一個兩個十六進位制字元組成 
每個位元組的位 
1個起始位 
8個數據位,最小的有效位先發送 
1個奇偶校驗位,無校驗則無 
1個停止位(有校驗時),2個Bit(無校驗時) 
CRC(迴圈冗長檢測) 

三、modus裝置地址與功能碼

3.1、裝置地址域

訊息幀的地址域包含兩個字元(ASCII)或8Bit(RTU)。可能的從裝置地址是0...247 (十進位制)。單個裝置的地址範圍是1...247。主裝置通過將要聯絡的從裝置的地址放入訊息中的地址域來選通從裝置。當從裝置傳送迴應訊息時,它把自己的地址放入迴應的地址域中,以便主裝置知道是哪一個裝置作出迴應。地址0是用作廣播地址,以使所有的從裝置都能認識。當Modbus協議用於更高水準的網路,廣播可能不允許或以其它方式代替。

3.2、資料域起始地址

1、PLC地址和協議地址區別

PLC地址可以理解為協議地址的變種,在觸控式螢幕和PLC程式設計中應用較為廣泛。

2、暫存器PLC地址
暫存器PLC地址指存放於控制器中的地址,這些控制器可以是PLC,也可以使觸控式螢幕,或是文字顯示器。PLC地址一般採用10進位制描述,共有5位,其中第一位程式碼暫存器型別。PLC地址例如40001、30002等。

3、暫存器協議地址
暫存器協議地址指指通訊時使用的暫存器地址,例如PLC地址40001對應定址地址0x0000,40002對應定址地址0x0001,暫存器定址地址一般使用16進位制描述。再如,PLC暫存器地址40003對應協議地址0002,PLC暫存器地址30003對應協議地址0002,雖然兩個PLC暫存器暫存器通訊時使用相同的地址,但是需要使用不同的命令訪問,所以訪問時不存在衝突。

PLC每個塊其實暫存器起始地址從1開始,一般看手冊上說讀某一地址的資料,給某一地址寫資料,該地址指的都是暫存器的地址,並不是modbus報文中的資料的起始地址。modbus應用協議的中資料的起始地址從0開始。

3.3、功能碼

參考文件:https://blog.csdn.net/lakerszhy/article/details/68927178?locationNum=4&fps=1

功能碼:通訊傳送的第二個位元組。ModBus通訊規約定義功能號為1到127。本儀表只利用其中的一部分功能碼。作為主機請求傳送,通過功能碼告訴從機執行什麼動作。作為從機響應,從機發送的功能碼與從主機發送來的功能碼一樣,並表明從機已響應主機進行操作。如果從機發送的功能碼的最高位為1(比如功能碼大與此同時127),則表明從機沒有響應操作或傳送出錯。

3.3.1、Modbus暫存器


3.3.2、Modbus暫存器資料型別
資料名稱 資料說明 資料型別 讀寫狀態 應用舉例
線圈狀態 DI數字量輸出 位變數 只讀 電磁閥輸出,MOSFET輸出,LED顯示等
離散輸入狀態 DI數字量輸出 位變數 讀寫 撥碼開關,接近開關等
保持暫存器 AO模擬量輸出 16-bit型別 只讀 模擬量輸出設定值,PID執行引數,變數閥輸出大小,感測器報警上限下限
輸入暫存器 AO模擬量輸入 16-bit型別 讀寫 模擬量輸入

3.3.3、Modbus暫存器資料型別

Modbus中常用的功能碼有8個,可以分為位操作和字操作兩類,如表2.1所示:

附錄一、CRC校驗與LRC校驗

附錄二、功能碼

功能碼     名稱               作用

1    讀取線圈狀態      取得一組邏輯線圈的當前狀態(ON/OFF)

2    讀取輸入狀態      取得一組開關輸入的當前狀態(ON/OFF)

3    讀取保持暫存器    在一個或多個保持暫存器中取得當前的二進位制值

4    讀取輸入暫存器    在一個或多個輸入暫存器中取得當前的二進位制值

5    強置單線圈        強置一個邏輯線圈的通斷狀態

6    預置單暫存器      把具體二進值裝入一個保持暫存器

7    讀取異常狀態      取得8個內部線圈的通斷狀態,這8個線圈的地址由控制器決定

8   回送診斷校驗       把診斷校驗報文送從機,以對通訊處理進行評鑑

9   程式設計(只用於484)   使主機模擬程式設計器作用,修改PC從機邏輯

10  控詢(只用於484)   可使主機與一臺正在執行長程式任務從機通訊,探詢該從機是否已完成其操作任務,僅在含有功能碼9的報文傳送後,本功能碼才傳送

11  讀取事件計數        可使主機發出單詢問,並隨即判定操作是否成功,尤其是該命令或其他應答產生通訊錯誤時

12  讀取通訊事件記錄     可是主機檢索每臺從機的ModBus事務處理通訊事件記錄。如果某項事務處理完成,記錄會給出有關錯誤

13  程式設計(184/384 484 584) 可使主機模擬程式設計器功能修改PC從機邏輯

14  探詢(184/384 484 584)可使主機與正在執行任務的從機通訊,定期控詢該從機是否已完成其程式操作,僅在含有功能13的報文傳送後,本功能碼才得傳送

15  強置多線圈  強置一串連續邏輯線圈的通斷

16  預置多暫存器  把具體的二進位制值裝入一串連續的保持暫存器

17  報告從機標識 可使主機判斷編址從機的型別及該從機執行指示燈的狀態

18 (884和MICRO 84) 可使主機模擬程式設計功能,修改PC狀態邏輯

19  重置通訊鏈路   發生非可修改錯誤後,是從機復位於已知狀態,可重置順序位元組

20  讀取通用引數(584L)  顯示擴充套件儲存器檔案中的資料資訊

21  寫入通用引數(584L) 把通用引數寫入擴充套件儲存檔案,或修改之

22~64  保留作擴充套件功能備用

65~72 保留以備使用者功能所用

73~119 非法功能

120~127 保留 留作內部作用

128~255 保留  用於異常應答

其它參考文件

《MODBUS軟體開發指南---楊更更》

https://blog.csdn.net/lakerszhy/article/details/68927178?locationNum=4&fps=1

https://blog.csdn.net/byxdaz/article/details/77892778

https://www.cnblogs.com/luomingui/archive/2013/06/14/Modbus.html

https://blog.csdn.net/ouyangxin95/article/details/78169380

http://www.doc88.com/p-3106325452452.html