Modbus 是工業自動化最普及的通訊協議。本文釐清四大核心功能碼的實際應用場景,協助開發者正確對應現場訊號類型。
| 功能碼 | 名稱 | 資料類型 | 存取 | 典型應用 |
|---|---|---|---|---|
0x01 |
Read Coils | 離散輸出 | 讀取 | 讀取繼電器、指示燈、電磁閥等**輸出裝置狀態**(ON/OFF) |
0x02 |
Read Discrete Inputs | 離散輸入 | 讀取 | 讀取按鈕、限位開關、接近開關等**輸入裝置狀態** |
0x03 |
Read Holding Registers | 類比/暫存器 | 讀/寫 | 讀寫**可保持參數**:設定值、時間、變比、PID 參數、裝置 ID |
0x04 |
Read Input Registers | 類比/暫存器 | 唯讀 | 讀取**即時測量值**:電壓、電流、溫度、壓力、流量、AD 採樣結果 |
0x05 |
Write Single Coil | 離散輸出 | 寫入 | 控制單一輸出:啟動/停止馬達、開關閥門 |
0x06 |
Write Single Register | 暫存器 | 寫入 | 設定單一參數 |
0x0F |
Write Multiple Coils | 離散輸出 | 寫入 | 批次控制多路輸出 |
0x10 |
Write Multiple Registers | 暫存器 | 寫入 | 批次設定多個參數 |
原文中「寫線圈:就是說讀開關量輸入的狀態」錯誤。正確定義:
| 特性 | Holding Register (4x) | Input Register (3x) |
|---|---|---|
| 來源 | 主控站寫入 / 從站內部參數 | 從站即時測量(ADC、感測器) |
| 屬性 | 可讀寫,斷電保持(非易失性) | 唯讀,即時更新 |
| 應用 | 設定值、配方參數、裝置配置 | 類比量測值、計數器即時值 |
htons/htonl 或手動位移)。// 讀取 10 個溫度感測器值(Input Registers, 起始位址 0)
// 請求: 01 04 00 00 00 0A CRC
// 回應: 01 04 14 [20 bytes data] CRC
// 設定 PID 參數(Holding Registers, 位址 100 起)
// 請求: 01 10 00 64 00 03 06 [6 bytes data] CRC
// 回應: 01 10 00 64 00 03 CRC