
BASICS
40001 是什麼意思
這是 Modicon 留下的寫法:第一碼表示資料區,後面四碼是第幾筆。
40001
4=Holding Register
第一碼只表示資料在哪一區。
0001=第 1 筆
編號從 1 起算;封包裡的位址從 0 起算,所以要減 1。
四種資料區,各自的編號與功能碼
Coil
- 編號
- 00001–09999
- 讀
- 01
- 寫
- 0515
每筆 1 bit
常見:DO、繼電器輸出
Discrete Input
- 編號
- 10001–19999
- 讀
- 02
- 寫
- 不可寫
每筆 1 bit
常見:DI、開關接點狀態
Input Register
- 編號
- 30001–39999
- 讀
- 04
- 寫
- 不可寫
每筆 16 bit
常見:量測值
Holding Register
- 編號
- 40001–49999
- 讀
- 03
- 寫
- 0616
每筆 16 bit
常見:設定值、AO、量測值
CONVERT
輸入編號,看資料怎麼走一趟
範例
Master換算編號
- 資料區
- Holding Register
- 功能碼
- 03
- 位址
- 0x000C(DEC 12)
40013 − 40001 = 12
讀到的值
0x26F4
(DEC 9972)示意值
請求Master → Slave
01站號
03功能碼
00 0C位址
00 01數量
44 09CRC
回應Slave → Master
01站號
03功能碼
02位元組數
26 F4數值
A3 A3CRC
Slave 1Holding Register
| 編號 | 位址 | 值 |
|---|---|---|
| 40011 | 0x000A | 0x213E |
| 40012 | 0x000B | 0x2419 |
| 40013 | 0x000C | 0x26F4 |
| 40014 | 0x000D | 0x02BF |
| 40015 | 0x000E | 0x059A |
點一列即可切換。
讀到的值
0x26F4
(DEC 9972)示意值
自家產品實作
套用到 RIO 遠端 I/O
每槽 4 個位址;DI 在 Discrete Input 區、DO 在 Coil 區、AI/AO 在 Holding Register 區,三區用同一組位址。

Module 040x000C–0x000F4 個位址
槽位
模組
通道
ModIO-AICH 01
動作
功能碼
03
位址(DEC 12)
0x000C
編號Holding Register
40013
請求封包(站號 1)
01站號
03功能碼
00 0C位址
00 01數量
44 09CRC
怎麼用:先選型號,在照片或按鈕上點槽位,再選模組、通道與讀寫,就會換算出功能碼、位址、編號與請求封包。
TROUBLESHOOTING
讀不到值時,先看有沒有回應
有回應,但是異常碼
線路是通的,問題在請求內容。異常回應的功能碼會加 0x80,例如 03 失敗回 0x83。
| 碼 | 意思 | 先檢查 |
|---|---|---|
| 01 | 不支援此功能碼 | 功能碼選錯,或設備不支援這個功能碼 |
| 02 | 位址不被接受 | 差 1、減錯起點,或讀取範圍超出位址表 |
| 03 | 請求內容不被接受 | 格式或長度不對,例如 03 一次超過 125 筆 |
| 04 | 設備無法完成 | 重新上電再試,仍發生請聯絡原廠 |
完全沒有回應
設備沒收到請求、或收到時同位元/CRC 錯誤,都不會回應。通常是線路或參數問題。
- Slave 位址一致
- 鮑率、同位元、停止位元一致
- RS-485 D+/D− 沒有接反