Modbus通訊協議 2

2021-04-02 20:17:10 字數 4509 閱讀 3104

2、rtu幀

使用 rtu模式,訊息傳送至少要以3.5個字元時間的停頓間隔開始。在網路波特率下多樣的字元時間,這是最容易實現的(如下圖的t1-t2-t3-t4所示)。傳輸的第乙個域是裝置位址。可以使用的傳輸字元是十六進製制的0...9,a...f。網路裝置不斷偵測網路匯流排,包括停頓間隔時間內。當第乙個域(位址域)接收到,每個裝置都進行解碼以判斷是否發往自己的。在最後乙個傳輸字元之後,乙個至少3.5個字元時間的停頓標定了訊息的結束。乙個新的訊息可在此停頓後開始。

整個訊息幀必須作為一連續的流轉輸。如果在幀完成之前有超過 1.5個字元時間的停頓時間,接收裝置將重新整理不完整的訊息並假定下一位元組是乙個新訊息的位址域。同樣地,如果乙個新訊息在小於3.5個字元時間內接著前個訊息開始,接收的裝置將認為它是前一訊息的延續。這將導致乙個錯誤,因為在最後的crc域的值不可能是正確的。一典型的訊息幀如下所示:

圖 3 rtu訊息幀

起始位

裝置位址

功能**

資料 crc 校驗

結束符

t1-t2-t3-t4

8bit

8bit

n 個 8bit

16bit

t1-t2-t3-t4

3、位址域

訊息幀的位址域包含兩個字元( ascii)或8bit(rtu)。可能的從裝置位址是0...247 (十進位制)。單個裝置的位址範圍是1...247。主裝置通過將要聯絡的從裝置的位址放入訊息中的位址域來選通從裝置。當從裝置傳送回應訊息時,它把自己的位址放入回應的位址域中,以便主裝置知道是哪乙個裝置作出回應。

位址 0是用作廣播位址,以使所有的從裝置都能認識。當modbus協議用於更高水準的網路,廣播可能不允許或以其它方式代替。

4、如何處理功能域

訊息幀中的功能**域包含了兩個字元( ascii)或8bits(rtu)。可能的**範圍是十進位制的1...255。當然,有些**是適用於所有控制器,有此是應用於某種控制器,還有些保留以備後用。

當訊息從主裝置發往從裝置時,功能**域將告之從裝置需要執行哪些行為。例如去讀取輸入的開關狀態,讀一組暫存器的資料內容,讀從裝置的診斷狀態,允許調入、記錄、校驗在從裝置中的程式等。

當從裝置回應時,它使用功能**域來指示是正常回應 (無誤)還是有某種錯誤發生(稱作異議回應)。對正常回應,從裝置僅回應相應的功能**。對異議回應,從裝置返回一等同於正常**的**,但最重要的位置為邏輯1。

例如:一從主裝置發往從裝置的訊息要求讀一組保持暫存器,將產生如下功能**:

0 0 0 0 0 0 1 1 (十六進製制03h)

對正常回應,從裝置僅回應同樣的功能**。對異議回應,它返回:

1 0 0 0 0 0 1 1 (十六進製制83h)

除功能**因異議錯誤作了修改外,從裝置將一獨特的**放到回應訊息的資料域中,這能告訴主裝置發生了什麼錯誤。

主裝置應用程式得到異議的回應後,典型的處理過程是重發訊息,或者診斷發給從裝置的訊息並報告給操作員。

5、資料域

資料域是由兩個十六進製制數集合構成的,範圍 00...ff。根據網路傳輸模式,這可以是由一對ascii字元組成或由一rtu字元組成。

例如,如果主裝置需要從裝置讀取一組保持暫存器(功能** 03),資料域指定了起始暫存器以及要讀的暫存器數量。如果主裝置寫一組從裝置的暫存器(功能**10十六進製制),資料域則指明了要寫的起始暫存器以及要寫的暫存器數量,資料域的資料位元組數,要寫入暫存器的資料。

如果沒有錯誤發生,從從裝置返回的資料域包含請求的資料。如果有錯誤發生,此域包含一異議**,主裝置應用程式可以用來判斷採取下一步行動。

在某種訊息中資料域可以是不存在的( 0長度)。例如,主裝置要求從裝置回應通訊事件記錄(功能**0b十六進製制),從裝置不需任何附加的資訊。

6、錯誤檢測域

標準的 modbus網路有兩種錯誤檢測方法。錯誤檢測域的內容視所選的檢測方法而定。

ascii

當選用 ascii模式作字元幀,錯誤檢測域包含兩個ascii字元。這是使用lrc(縱向冗長檢測)方法對訊息內容計算得出的,不包括開始的冒號符及回車換行符。lrc字元附加在回車換行符前面。

rtu

當選用 rtu模式作字元幀,錯誤檢測域包含一16bits值(用兩個8位的字元來實現)。錯誤檢測域的內容是通過對訊息內容進行迴圈冗長檢測方法得出的。crc域附加在訊息的最後,新增時先是低位元組然後是高位元組。故crc的高位位元組是傳送訊息的最後乙個位元組。

7、字元的連續傳輸

當訊息在標準的 modbus系列網路傳輸時,每個字元或位元組以如下方式傳送(從左到右):

最低有效位 ...最高有效位

使用 ascii字元幀時,位的序列是:

有奇偶校驗

無奇偶校驗

啟始位

1 2

3 4

5 6

7 奇偶位

停止位

啟始位

1 2

3 4

5 6

7 停止位

停止位

圖 4. 位順序(ascii)

使用 rtu字元幀時,位的序列是:

有奇偶校驗

啟始位

1 2

3 4

5 6

7 8

奇偶位

停止位

無奇偶校驗

啟始位

1 2

3 4

5 6

7 8

停止位

停止位

圖 4. 位順序(rtu)

四、錯誤檢測方法

標準的 modbus序列網路採用兩種錯誤檢測方法。奇偶校驗對每個字元都可用,幀檢測(lrc或crc)應用於整個訊息。它們都是在訊息傳送前由主裝置產生的,從裝置在接收過程中檢測每個字元和整個訊息幀。

使用者要給主裝置配置一預先定義的超時時間間隔,這個時間間隔要足夠長,以使任何從裝置都能作為正常反應。如果從裝置測到一傳輸錯誤,訊息將不會接收,也不會向主裝置作出回應。這樣超時事件將觸發主裝置來處理錯誤。發往不存在的從裝置的位址也會產生超時。

1、奇偶校驗

使用者可以配置控制器是奇或偶校驗,或無校驗。這將決定了每個字元中的奇偶校驗位是如何設定的。

如果指定了奇或偶校驗,「 1」的位數將算到每個字元的位數中(ascii模式7個資料位,rtu中8個資料位)。例如rtu字元幀中包含以下8個資料位:

1 1 0 0 0 1 0 1

整個「 1」的數目是4個。如果便用了偶校驗,幀的奇偶校驗位將是0,便得整個「1」的個數仍是4個。如果便用了奇校驗,幀的奇偶校驗位將是1,便得整個「1」的個數是5個。

如果沒有指定奇偶校驗位,傳輸時就沒有校驗位,也不進行校驗檢測。代替一附加的停止位填充至要傳輸的字元幀中。

2、lrc檢測

使用 ascii模式,訊息包括了一基於lrc方法的錯誤檢測域。lrc域檢測了訊息域中除開始的冒號及結束的回車換行號外的內容。

lrc域是乙個包含乙個8位二進位制值的位元組。lrc值由傳輸裝置來計算並放到訊息幀中,接收裝置在接收訊息的過程中計算lrc,並將它和接收到訊息中lrc域中的值比較,如果兩值不等,說明有錯誤。

lrc方法是將訊息中的8bit的位元組連續累加,丟棄了進製。

lrc簡單函式如下:

static unsigned char lrc(auchmsg,usdatalen)

unsigned char *auchmsg ; /* 要進行計算的訊息 */

unsigned short usdatalen ; /* lrc 要處理的位元組的數量*/

{ unsigned char uchlrc = 0 ; /* lrc 位元組初始化 */

while (usdatalen--) /* 傳送訊息 */

uchlrc += *auchmsg++ ; /* 累加*/

return ((unsigned char)(-((char_uchlrc))) ;

3、crc檢測

使用 rtu模式,訊息包括了一基於crc方法的錯誤檢測域。crc域檢測了整個訊息的內容。

crc域是兩個位元組,包含一16位的二進位制值。它由傳輸裝置計算後加入到訊息中。接收裝置重新計算收到訊息的crc,並與接收到的crc域中的值比較,如果兩值不同,則有誤。

crc是先調入一值是全「1」的16位暫存器,然後呼叫一過程將訊息中連續的8位位元組各當前暫存器中的值進行處理。僅每個字元中的8bit資料對crc有效,起始位和停止位以及奇偶校驗位均無效。

crc產生過程中,每個8位字元都單獨和暫存器內容相或(or),結果向最低有效位方向移動,最高有效位以0填充。lsb被提取出來檢測,如果lsb為1,暫存器單獨和預置的值或一下,如果lsb為0,則不進行。整個過程要重複8次。在最後一位(第8位)完成後,下乙個8位位元組又單獨和暫存器的當前值相或。最終暫存器中的值,是訊息中所有的位元組都執行之後的crc值。

crc 新增到訊息中時,低位元組先加入,然後高位元組.

modbus通訊協議

modbus是由modicon 現為施耐德電氣公司的乙個品牌 在1979年發明的,是全球第乙個真正用於工業現場的匯流排協議。modbus網路是乙個工業通訊系統,由帶智慧型終端的可程式設計序控制器和計算機通過公用線路或區域性專用線路連線而成。其系統結構既包括硬體 亦包括軟體。它可應用於各種資料採集和過...

modbus 通訊協議

modbus rtu模式的協議字段 modbus協議rtu模式要求每一幀的起始和結束都以至少3.5個字元為間隔。每個字元間隔是字元位數 波特率,以1位起始位,8位資料,1位停止位,無奇偶校驗位的10位資料。以波特率為9600b s為例,字元間隔為1.04ms,也就是每一幀的開始和結束都伴隨著至少3....

Modbus通訊協議

儲存到相簿 2019 6 19 11 24 上傳 modbus通訊協議 modbus概述 modbus是由modicon公司 現為施耐德電氣的乙個品牌 在1978年發明的,這是乙個跨時代 里程碑式的網路協議,因為工業網路從此拉開了序幕。modbus是全球第乙個真正用於工業現場的匯流排協議,據不完全統...