自動化

Modbus 功能碼與暫存器記憶體映射完全指南:FC01~FC16 讀寫與 0X/1X/3X/4X 定址解析

詳細解析 Modbus 四大記憶體分區(0X Coils、1X Discrete Inputs、3X Input Registers、4X Holding Registers)與 FC01、FC03、FC06、FC16 常用功能碼的對接邏輯。

Modbus 功能碼與暫存器記憶體映射完全指南:FC01~FC16 讀寫與 0X/1X/3X/4X 定址解析

cover

一、Modbus 四大記憶體區塊分區模型

Modbus 協定將設備內部的數據結構抽象化為四大獨立的記憶體區域(Memory Mapping)。理解這四大分區是編寫 PLC 通訊程式與設備對接的基礎。

  1. 0X 線圈 (Coils):可讀、可寫的 1-Bit 開關量。傳統 PLC 位址 00001 ~ 09999,常用於控制繼電器、馬達啟停或警報燈號。
  2. 1X 離散輸入 (Discrete Inputs):只讀的 1-Bit 開關量。傳統 PLC 位址 10001 ~ 19999,用於讀取極限開關、光電感測器狀態。
  3. 3X 輸入暫存器 (Input Registers):只讀的 16-Bit 字元量。傳統 PLC 位址 30001 ~ 39999,用於讀取感測器即時數值(如即時溫度、壓力、電壓)。
  4. 4X 保持暫存器 (Holding Registers):可讀、可寫的 16-Bit 字元量。傳統 PLC 位址 40001 ~ 49999,用於設定 PID 參數、目標溫度與設備組態。

二、常用功能碼 (Function Codes, FC) 讀寫邏輯

功能碼(Function Code)在 Modbus 封包中佔用 1 個 Byte,告知從站欲發起的運作指令:

  • FC 01 (0x01) : 讀取線圈 (Read Coils)
  • FC 02 (0x02) : 讀取離散輸入 (Read Discrete Inputs)
  • FC 03 (0x03) : 讀取保持暫存器 (Read Holding Registers) - 最常用!
  • FC 04 (0x04) : 讀取輸入暫存器 (Read Input Registers)
  • FC 05 (0x05) : 寫入單一線圈 (Write Single Coil)
  • FC 06 (0x06) : 寫入單一暫存器 (Write Single Register)
  • FC 15 (0x0F) : 寫入多個線圈 (Write Multiple Coils)
  • FC 16 (0x10) : 寫入多個暫存器 (Write Multiple Registers)

diagram 1


三、Modbus 暫存器區塊與功能碼對照表

下表整理 Modbus 四大區域長度與功能碼對照:

記憶體區域數據長度存取權限PLC 傳統位址讀取功能碼寫入功能碼
0X 線圈1-Bit可讀可寫 (R/W)00001 ~ 09999FC 01 (0x01)FC 05 (0x05) / FC 15 (0x0F)
1X 離散輸入1-Bit只讀 (Read-Only)10001 ~ 19999FC 02 (0x02)無 (只讀)
3X 輸入暫存器16-Bit只讀 (Read-Only)30001 ~ 39999FC 04 (0x04)無 (只讀)
4X 保持暫存器16-Bit可讀可寫 (R/W)40001 ~ 49999FC 03 (0x03)FC 06 (0x06) / FC 16 (0x10)

四、異常碼回應機制 (Exception Codes 0x81~0x86)

當 Master 發送無效請求時,Slave 會回傳最高位置 1 的異常功能碼(原功能碼 + 0x80):

  • 0x83 異常回應:代表原功能碼 0x03 執行出錯。
  • 常見 Exception Code 代碼
  • 01 (ILLEGAL FUNCTION):從站韌體不支援該功能碼。
  • 02 (ILLEGAL DATA ADDRESS):請求的暫存器位址超出設備支援範圍。
  • 03 (ILLEGAL DATA VALUE):寫入數值超出範圍或長度錯誤。
  • 04 (SLAVE DEVICE FAILURE):從站內部硬體發生未預期故障。

diagram 2


五、32-Bit 浮點數 (Float) 與 Byte Swap 順序處理 SOP

Modbus 原生暫存器為 16-Bit (2 Bytes)。當需傳輸 32-Bit 浮點數(IEEE 754 Float)時,必須佔用 2 個連續暫存器。

不同廠商的 PLC 與儀表大端/小端(Big-Endian / Little-Endian)排列順序不同:

  1. AB CD:Big-Endian (高位在先)
  2. CD AB:Little-Endian Byte Swap (低 Word 在先)
  3. BA DC:Big-Endian Byte Swap
  4. DC BA:Little-Endian (低位在先)

對接 SOP:若讀取到的浮點數顯示為 NaN 或巨大異常數值,代表 Byte Swap 順序不匹配。請在軟體中切換 Word/Byte 顛倒選項即可恢復正常。

從閱讀到行動:聯絡禹芃科技