MODBUS通訊協定,功能碼,RCR校驗

2020-10-25 08:00:34

MODBUS通訊模式最主要有兩種:

RTU模式和ASCII模式。

RTU模式:

地址碼功能碼資料校驗碼
一位元組一位元組n位元組兩位元組(CRC)

從機都有相應的地址碼,便於主機識別。其中資料已幀為單位進行資料傳輸,每幀最長為252位元組,最短為0。如果一byte資料的傳輸時間為T,那麼每兩幀之間的間隔最小應該要大於3.5T,否則從機不能分辨這是兩幀。第二,同一幀連續的兩個資料之間的間隔時間不能超過1.5T,否則節點會認為這一幀資料不完整,這說明我們在modbus傳輸的時候要使能一個定時器的工作。

ASCII模式:

起始地址碼功能碼資料校驗回車換行
字元  ':'(冒號)兩位元組兩位元組0到2 * 252位元組兩位元組(LRC校驗)兩位元組(CR,LF)

幀的起始一字元 ' : '冒號開始,結束為回車換行,其對應的16進位制可以到ASCII表中進行查詢。位元組間傳輸的間隔時間不能大於1s,大於1s認為這一幀資料丟失.同樣我們可以計算出來ASCII幀的最大長度是513位元組。

RTU使用CRC校驗ASCII使用LRC校驗。

正確的應答格式:

地址碼功能碼資料碼校驗
從機自己的與傳送的保持一致(範圍:0x00-0x7f)根據功能需求校驗碼

錯誤應答:

功能碼加0x80,原本功能碼最高位不會為1,加0x80最高位為1,判斷出錯,資料位的異常碼可以知道大概是什麼錯誤。

地址碼功能碼資料碼校驗
從機自己的與傳送的保持一致(範圍:0x00-0x7f) + 0x80異常碼校驗碼

異常碼:

 

功能碼:

0x01: 讀線圈暫存器(可讀可寫線圈)
0x02: 讀離散輸入暫存器(可讀不可寫線圈)
0x03: 讀保持暫存器(可讀可寫暫存器)
0x04: 讀輸入暫存器(可讀不可寫暫存器)
0x05: 寫單個線圈暫存器(可寫單個線圈不可讀)
0x06: 寫單個保持暫存器(可寫單個暫存器不可讀)
0x0f: 寫多個線圈暫存器(可寫多個線圈不可讀)
0x10: 寫多個保持暫存器(可寫多個暫存器不可讀)

01H-->讀線圈暫存器

 地址碼功能碼資料校驗
傳送010100 20 00 05FD C3
響應010101 1590 47

傳送資料:讀取地址:00 20,從0x20處開始讀取,00 05 讀取5個暫存器。

響應資料:01,只有5個暫存器,小於8,5/8=0,加1,所以為1,假設有9個,則為02,以此類推。15,二進位制:00010101,在5個暫存器中有3個處於開的狀態,在此功能下只能讀取從機狀態。

02H--->讀離散輸入暫存器

 地址碼功能碼資料校驗
傳送010200 20 00 05B9 C3
響應010201 0220 49

傳送資料:讀取地址:00 20,從0x20處開始讀取,00 05 讀取5個暫存器。

響應資料:01,只有5個暫存器,小於8,5/8=0,加1,所以為1,假設有9個,則為02,以此類推。02,二進位制:00000010,在5個暫存器中有1個處於開的狀態,在此功能下只能讀取從機狀態。

03-->讀保持暫存器

 地址碼功能碼資料校驗
傳送010300 14 00 0345 CF
響應010306 00 14 00 1E 00 0071 70

傳送資料:讀取地址:00 20,從0x20處開始讀取,00 05 讀取3個暫存器。

響應資料:06,後面有6位,00 14,傳送的資料0x14,00 1E傳送的資料0x1E,00 00傳送的資料0X00。

04--> 讀輸入暫存器

 地址碼功能碼資料校驗
傳送010400 14 00 03F0 0F
響應010406 00 14 00 1E 00 0030 96

傳送資料:讀取地址:00 20,從0x20處開始讀取,00 05 讀取3個暫存器。

響應資料:06,後面有6位,00 14,傳送的資料0x14,00 1E傳送的資料0x1E,00 00傳送的資料0X00。

05-->寫單個線圈暫存器

 地址碼功能碼資料校驗
傳送010500 20 00 00CC 00
響應010500 20 00 00CC 00

傳送資料:讀取地址:00 20,從0x20處開始寫入,00 00 寫入值。

響應資料:跟傳送的一樣。

06-->寫單個保持暫存器

 地址碼功能碼資料校驗
傳送010600 01 00 03XX XX
響應010600 01 00 03XX XX

傳送資料:讀取地址:00 20,從0x20處開始寫入,00 03 寫入值。

響應資料:跟傳送的一樣。

0F-->寫多個線圈暫存器

 地址碼功能碼資料校驗
傳送010F00 14 00 03 01 00CC 00
響應010F00 14 00 03CC 00

傳送資料:讀取地址:00 20,從0x20處開始寫入,00 03 寫入3個值,01,3小於8,00,寫入的3個資料都為0。

響應資料:00 14,寫入地址,00 03,3個資料。

10-->寫多個保持暫存器

 地址碼功能碼資料校驗
傳送011000 34 00 02 04 0C 02 12 45XX XX
響應011000 34 00 02XX XX

傳送資料:讀取地址:00 34,從0x34處開始寫入,00 02 寫入2個值,04後面有4位元,0C 02和12 45都為資料。

響應資料:00 14,寫入地址,00 02,2個資料。

CRC校驗: