(三)Modbus RTU協議使用說明


一、Modbus RTU數據幀說明

  由發送設備將 Modbus 報文構造為帶有已知起始和結束標記的幀。這使設備可以在報文的開始接收新幀,並且知道何時報文結束。不完整的報文必須能夠被檢測到而錯誤標志必須作為結果被設置。RTU 模式,報文幀由時長至少為 3.5 個字符時間的空閑間隔區分。在后續的部分,這個時間區間被稱作 t3.5

  整個報文幀必須以連續的字符流發送。如果兩個字符之間的空閑間隔大於 1.5 個字符時間,則報文幀被認為不完整應該被接收節點丟棄。 

二、MODBUS指令說明

  1、讀線圈寄存器01H

  1) 描述:

  讀MODBUS從機線圈寄存器當前狀態。

  2) 查詢:

  例如從機地址為0x11,線圈寄存器的起始地址為0x0013,結束地址為0x0037。該次查詢總共訪問(0x0037-0x0013 + 1)37個線圈寄存器。

讀線圈寄存器-查詢
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 01
寄存器起始地址高字節(1個字節) 00
寄存器起始地址低字節(1個字節) 13
寄存器數量高字節(1個字節) 00
寄存器數量低字節(1個字節) 25
CRC校驗高字節(1個字節) 0E
CRC校驗低字節(1個字節) 84

  3) 響應

  響應負載中的各線圈狀態與數據內容每位相對應。1代表ON,0代表OFF。若返回的線圈數不為8的倍數,則在最后數據字節未尾使用0代替。

讀線圈寄存器-響應
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 01
返回字節數(1個字節) 05
數據1(線圈0x001A - 線圈0x0013)(1個字節) CD
數據2(線圈0x0022 - 線圈0x001B)(1個字節) 6B
數據3(線圈0x002A - 線圈0x0023)(1個字節) B2
數據4(線圈0x0032 - 線圈0x002B)(1個字節) 0E
數據5(線圈0x0037 - 線圈0x0033)(1個字節) 1B
CRC校驗高字節(1個字節) 45
CRC校驗低字節(1個字節) E6

  線圈0x0013到線圈0x001A的狀態為0xCD,二進制值為11001101,該字節的最高字節為線圈0x001A,最低字節為線圈0x0013。線圈0x001A到線圈0x0013的狀態分別為ON-ON-OFF-OFF-ON-ON-OFF-ON。

 線圈0x0013到0x001A狀態
0x001A 0x0019 0x0018 0x0017 0x0016 0x0015 0x0014 0x0013
ON ON OFF OFF ON ON OFF ON

  最后一個數據字節中,線圈0x0033到線圈0x0037狀態為0x1B(二進制00011011),線圈0x0037是左數第4位,線圈0x0033為該字節的最低字節,線圈0x0037至線圈0x0033的狀態分別為ON-ON-OFF-ON-ON,剩余3位使用0填充。

線圈0x0033到線圈0x0037狀態
0x003A 0x0039 0x0038 0x0037 0x0036 0x0035 0x0034 0x0033
填充 填充 填充 ON ON OFF ON ON

 

  2、讀離散輸入寄存器 02H

  1) 說明

  讀離散輸入寄存器狀態。

  2) 查詢

  從機地址為0x11。離散輸入寄存器的起始地址為0x00C4,結束寄存器地址為0x00D9。總共訪問(0x00D9-0x00C4+1)22個離散輸入寄存器。

 讀離散輸入寄存器——查詢
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 02
寄存器地址高字節(1個字節) 00
寄存器地址低字節(1個字節) C4
寄存器數量高字節(1個字節) 00
寄存器數量低字節(1個字節) 16
CRC校驗高字節(1個字節) BA
CRC校驗低字節(1個字節) A9

  3) 響應

  響應各離散輸入寄存器狀態,分別對應數據區中的每位值,1 代表ON;0 代表OFF。第一個數據字節的LSB(最低字節)為查詢的尋址地址,其他輸入口按順序在該字節中由低字節向高字節排列,直到填充滿8位。下一個字節中的8個輸入位也是從低字節到高字節排列。若返回的輸入位數不是8的倍數,則在最后的數據字節中的剩余位至該字節的最高位使用0填充。

讀輸入寄存器-響應
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 02
返回字節數(1個字節) 03
數據1(0x00CB - 0x00C4)(1個字節) AC
數據1(0x00D3 - 0x00CC)(1個字節) DB
數據1(0x00D9 - 0x00D4)(1個字節) 35
CRC校驗高字節(1個字節) 20
CRC校驗低字節(1個字節) 18

  離散輸入寄存器0x00D4到0x00D9的狀態為0x35 (二進制00110101)。輸入寄存器0x00D9為左數第3位,輸入寄存器0x00D4為最低位,輸入寄存器0x00D9到0x00D4的狀態分別為ON-ON-OFF-ON-OFF-ON。0x00DB寄存器和0x00DA寄存器被0填充。

離散輸入寄存器0x00C4到0x00DB狀態
0x00CB 0x00CA 0x00C9 0x00C8 0x00C7 0x00C6 0x00C5 0x00C4
0 0 1 1 0 1 0 1
0x00D3 0x00D2 0x00D1 0x00D0 0x00CF 0x00CE 0x00CD 0x00CC
1 1 1 0 1 0 1 1
0x00DB 0x00DA 0x00D9 0x00D8 0x00D7 0x00D6 0x00D5 0x00D4
填充 填充 1 1 0 1 0 1

  3、讀保持寄存器 03H

  1) 說明
  讀保持寄存器。可讀取單個或多個保持寄存器。
  2) 查詢
  從機地址為0x11。保持寄存器的起始地址為0x006B,結束地址為0x006D。該次查詢總共訪問(0x006D-0x006B+1)3個保持寄存器。

 讀保持寄存器-查詢
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 03
寄存器地址高字節(1個字節) 00
寄存器地址低字節(1個字節) 6B
寄存器數量高字節(1個字節) 00
寄存器數量低字節(1個字節) 03
CRC高字節(1個字節) 76
CRC低字節(1個字節) 87


  3) 響應
保持寄存器的長度為2個字節。對於單個保持寄存器而言,寄存器高字節數據先被傳輸,低字節數據后被傳輸。保持寄存器之間,低地址寄存器先被傳輸,高地址寄存器后被傳輸。

 
 
 
讀保持寄存器-響應
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 03
字節數(1個字節) 06
數據1高字節(0x006B)(1個字節) 00
數據1低字節(0x006B)(1個字節) 6B
數據2高字節(0x006C)(1個字節) 00
數據2低字節(0x006C)(1個字節) 13
數據3高字節(0x006D)(1個字節) 00
數據3低字節(0x006D)(1個字節) 00
CRC高字節(1個字節) 38
CRC低字節(1個字節) B9
保持寄存器0x006B到0x006D結果

0x006B

高字節

0x006B

低字節

0x006C

高字節

0x006C

低字節

0x006D

高字節

0x006D

低字節

00 6B 00 13 00 00

  4、讀輸入寄存器 04H


  1) 說明
  讀輸入寄存器命令。該命令支持單個寄存器訪問也支持多個寄存器訪問。
  2) 查詢
  從機地址為0x11。輸入寄存器的起始地址為0x0008,寄存器的結束地址為0x0009。本次訪問訪問2個讀入寄存器。

 讀輸入寄存器-查詢
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 04
寄存器起始地址高字節(1個字節) 00
寄存器起始地址低字節(1個字節) 08
寄存器數量高字節(1個字節) 00
寄存器數量低字節(1個字節) 02
CRC高字節(1個字節) F2
CRC低字節(1個字節) 99

  3) 響應
  輸入寄存器長度為2個字節。對於單個輸入寄存器而言,寄存器高字節數據先被傳輸,低字節數據后被傳輸。輸入寄存器之間,低地址寄存器先被傳輸,高地址寄存器后被傳輸。

 讀寄存器-響應
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 04
字節數(1個字節) 04
數據1高字節(0x0008)(1個字節) 00
數據1低字節(0x0008)(1個字節) 0A
數據2高字節(0x0009)(1個字節) 00
數據2低字節(0x0009)(1個字節) 0B
CRC高字節(1個字節) 8B
CRC低字節(1個字節) 80
輸入寄存器0x0008到0x0009結果

0x0008

高字節

0x0008

低字節

0x0009

高字節

0x0009

低字節

0x00 0x0A 0x00 0x0B

  5、寫單個線圈寄存器 05H

  1) 說明
  寫單個線圈寄存器。0xFF00值請求線圈處於ON狀態,0x0000值請求線圈處於OFF狀態。0x05指令設置單個線圈的狀態,0x15指令可以設置多個線圈的狀態,兩個指令雖然都設定線圈的ON/OFF狀態,但是ON/OFF的表達方式卻不同。
  2) 查詢
  從機地址為0x11,線圈寄存器的地址為0x00AC。使0x00AC線圈處於ON狀態,即數據內容為0xFF00。

 寫單個線圈-查詢
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 05
寄存器地址高字節(1個字節) 00
寄存器地址低字節(1個字節) AC
數據1高字節(1個字節) FF
數據1低字節(1個字節) 00
CRC校驗高字節(1個字節) 4E
CRC校驗低字節(1個字節) 8B

 

  3) 響應

強制單個線圈——響應
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 05
寄存器地址高字節(1個字節) 00
寄存器地址低字節(1個字節) AC
寄存器1高字節(1個字節) FF
寄存器1低字節(1個字節) 00
CRC校驗高字節(1個字節) 4E
CRC校驗低字節(1個字節) 8B

  6、寫單個保持寄存器 06H


  1) 說明
  寫保持寄存器。注意0x06指令只能操作單個保持寄存器,0x16指令可以設置單個或多個保持寄存器。
  2) 查詢
  從機地址為0x11。保持寄存器地址為0x0001。寄存器內容為0x0003。

寫單個保持寄存器——查詢
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 06
寄存器地址高字節(1個字節) 00
寄存器地址低字節(1個字節) 01
數據1高字節(1個字節) 00
數據1低字節(1個字節) 01
CRC校驗高字節(1個字節) 9A
CRC校驗低字節(1個字節) 9B

  3) 響應

寫單個保持寄存器——響應
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 06
寄存器地址高字節(1個字節) 00
寄存器地址低字節(1個字節) 01
寄存器數量高字節(1個字節) 00
寄存器數量低字節(1個字節) 01
CRC校驗高字節(1個字節) 1B
CRC校驗低字節(1個字節) 5A

  7、寫多個線圈寄存器 0FH


  1) 說明
  寫多個線圈寄存器。若數據區的某位值為“1”表示被請求的相應線圈狀態為ON,若某位值為“0”,則為狀態為OFF。
  2) 查詢
  從機地址為0x11,線圈寄存器的起始地址為0x0013,線圈寄存器的結束地址為0x001C。總共訪問(0x001C-0x0013+1)10個寄存器。寄存器內容如下表所示。

線圈寄存器0013H到001CH
0x001A 0x0019 0x0018 0x0017 0x0016 0x0015 0x0014 0x0013
1 1 0 0 1 1 0 1
0x0022 0x0021 0x0020 0x001F 0x001E 0x001D 0x001C 0x001B
0 0 0 0 0 0 0 1

  傳輸的第一個字節0xCD對應線圈為0x0013到0x001A,LSB(最低位)對應線圈0x0013,傳輸第二個字節為 0x01,對應的線圈為0x001B到0x001C,LSB對應線圈0x001C,其余未使用位使用0填充。

寫多個線圈寄存器——查詢
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 0F
寄存器地址高字節(1個字節) 00
寄存器地址低字節(1個字節) 13
寄存器數量高字節(1個字節) 00
寄存器數量低字節(1個字節) 0A
字節數(1個字節) 02
數據1(0x0013 - 0x001A)(1個字節) CD
數據2(0x001B - 0x001C)(1個字節) 01
CRC校驗高字節(1個字節) BF
CRC校驗低字節(1個字節) 0B

  3) 響應

寫多個線圈寄存器——響應
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 0F
寄存器地址高字節(1個字節) 00
寄存器地址低字節(1個字節) 13
寄存器數量高字節(1個字節) 00
寄存器數量低字節(1個字節) 0A
字節數(1個字節) 02
CRC校驗高字節(1個字節) 99
CRC校驗低字節(1個字節) 1B

  8、寫多個保持寄存器10H

  1) 說明
  寫多個保持寄存器。
  2) 查詢
  從機地址為0x11。保持寄存器的起始地址為0x0001,寄存器的結束地址為0x0002。總共訪問(0x0002-0x0001+1)2個寄存器。保持寄存器0x0001的內容為0x000A,保持寄存器0x0002的內容為0x0102。

寫多個保持寄存器——請求
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 10
寄存器起始地址高字節(1個字節) 00
寄存器起始地址低字節(1個字節) 01
寄存器數量高字節(1個字節) 00
寄存器數量低字節(1個字節) 02
字節數(1個字節) 04
數據1高字節(1個字節) 00
數據1低字節(1個字節) 0A
數據2高字節(1個字節) 01
數據2低字節(1個字節) 02
CRC校驗高字節(1個字節) C6
CRC校驗低字節(1個字節) F0
保持寄存器0x0001到0x0002內容
地址

0x0001

高字節

0x0001

低字節

0x0002

高字節

0x0002

低字節

數值 0x00 0x0A 0x01 0x02

  3) 響應

寫多個保持寄存器——響應
  Hex
從機地址(1個字節) 11
功能碼(1個字節) 10
寄存器起始地址高字節(1個字節) 00
寄存器起始地址低字節(1個字節) 01
寄存器數量高字節(1個字節) 00
寄存器數量低字節(1個字節) 02
CRC校驗高字節(1個字節) 12
CRC校驗低字節(1個字節) 98


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM