當前位置:編程學習大全網 - 源碼下載 - Modbus功能碼

Modbus功能碼

Modbus寄存器分為四種,如表1.1所示:

表1.1 寄存器分類

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

表2.1 常用功能碼

功能碼01H讀取Modbus從機中線圈寄存器的狀態,可以是單個寄存器,或者多個連續的寄存器。

假設從機地址為01H,讀取的線圈寄存器的起始地址為0017H,讀取38個寄存器,指令如表3.1所示:

表3.1 讀線圈寄存器指令:

各線圈的狀態與數據內容的每個bit對應,1代表ON,0代表OFF。如果查詢的線圈數量不是8的倍數,則在最後壹個字節的高位補0。

表3.2.1 讀線圈狀態的返回結果

其中,第壹個字節CDH對應線圈0017H到001E的狀態,轉為二進制是11001101,其中bit0對應0017H,bit7對應001E,如表3.2.2所示:

表3.2.2 線圈0017H到001EH的狀態

最後壹個字節為1BH,對應線圈0037H到003CH的狀態,轉為二進制是00011011,其中bit0對應0037H,bit5對應003CH,其余兩位用0填充,如表3.2.3所示:

表3.2.3 線圈0037H到003CH的狀態

功能碼02H讀取Modbus從機中離散輸入寄存器的狀態,可以是單個寄存器,或者多個連續的寄存器。

假設從機地址為01H,讀取的離散輸入寄存器的起始地址為00C4H,讀取22個寄存器,指令如表4.1所示:

表4.1 讀離散輸入寄存器指令:

各個離散輸入寄存器的狀態與數據內容的每個bit對應,1代表ON,0代表OFF。如果查詢的線圈數量不是8的倍數,則在最後壹個字節的高位補0。

表4.2.1 讀離散輸入寄存器的返回結果

其中,第壹個字節ACH對應00C4H到00CBH寄存器的狀態,轉為二進制是10101100,其中bit0對應00C4H,bit7對應00CB,如表4.2.2所示:

表4.2.2 寄存器00C4H到00CBH的狀態

最後壹個字節為35H,對應寄存器00D4H到00D9H的狀態,轉為二進制是00110101,其中bit0對應00D4H,bit5對應00D9H,其余兩位用0填充,如表4.2.3所示:

表4.2.3 寄存器00D4H到00D9H的狀態

功能碼03H讀取Modbus從機中保持寄存器的數據,可以是單個寄存器,或者多個連續的寄存器。

假設從機地址為01H,讀取的保持寄存器的起始地址為006BH,讀取3個寄存器,指令如表5.1所示:

表5.1 讀保持寄存器指令:

每個保持寄存器的長度為2個字節。保持寄存器之間,低地址寄存器先傳輸,高地址寄存器後傳輸。單個保持寄存器,高字節數據先傳輸,低字節數據後傳輸。

表5.2.1 讀保持寄存器的返回結果

功能碼04H讀取Modbus從機中輸入寄存器的數據,可以是單個寄存器,或者多個連續的寄存器。

假設從機地址為01H,讀取的保持寄存器的起始地址為0008H,讀取2個寄存器,指令如表6.1所示:

表6.1 讀輸入寄存器指令:

每個輸入寄存器的長度為2個字節。輸入寄存器之間,低地址寄存器先傳輸,高地址寄存器後傳輸。單個輸入寄存器,高字節數據先傳輸,低字節數據後傳輸。

表6.2.1 讀輸入寄存器的返回結果

功能碼05H寫單個線圈寄存器,FF00H請求線圈處於ON狀態,0000H請求線圈處於OFF狀態。

假設從機地址為01H,線圈寄存器的地址為00ACH,使其處於ON狀態的指令如表7.1所示:

表7.1 寫單個線圈指令:

如果寫入成功,返回發送的指令,即010500ACFF004C1B。

功能碼06H寫單個保持寄存器。

假設從機地址為01H,保持寄存器的地址為0001H,數據位0003H,指令如表8.1所示:

表8.1 寫單個保持寄存器指令:

如果寫入成功,返回發送的指令,即010600010003980B。

功能碼0FH寫多個線圈寄存器。如果對應的數據位為1,表示線圈狀態為ON;如果對應的數據位為0,表示線圈狀態為OFF。線圈寄存器之間,低地址寄存器先傳輸,高地址寄存器後傳輸。單個線圈寄存器,高字節數據先傳輸,低字節數據後傳輸。如果寫入的線圈寄存器的個數不是8的倍數,則在最後壹個字節的高位補0。

假設從機地址為01H,線圈寄存器的起始地址為0013H,寫入10個寄存器,指令如表9.1.1所示:

表9.1.1 寫入多個線圈寄存器指令

其中,CDH對應線圈0013H到001AH的內容,01H對應線圈001B到001CH的內容,未使用位用0填充。

此時,線圈寄存器的內容如表9.1.2所示:

表9.1.2 線圈寄存器0013H到001CH的內容

如果寫入成功,返回寫入的寄存器數量,如表9.2所示:

表9.2 寫多個線圈寄存器的返回結果

功能碼10H寫多個保持寄存器,其中每個保持寄存器的長度為兩個字節。

假設從機地址為01H,保持寄存器的起始地址為0001H,寫入2個寄存器,指令如表10.1所示:

表10.1 寫入多個保持寄存器指令

如果寫入成功,返回寫入的寄存器數量,如表10.2所示:

表10.2 寫多個保持寄存器的返回結果

  • 上一篇:如何用Java實現對xml文件的讀取和寫入以及保存
  • 下一篇:在tcp的擁塞控制中,什麽是慢啟動,加速遞減和擁塞避免
  • copyright 2024編程學習大全網