Modbus 設定與除錯流程指南
本篇主要針對 MODBUS 的實務設定進行說明。至於其他底層原理等基礎知識,建議可先透過 Google 搜尋,或參考其他 MODBUS 介紹文章。
快速導覽:設定六步驟
正常情況下,完成前三步即可順利通訊;若發生異常,請接續進行後續的除錯步驟:
- 第一步:選定硬體通訊方式 (RS232 / RS485 / Ethernet)
- 第二步:設定通訊參數 (通訊鮑率 / 位元數等)
- 第三步:選擇要讀/寫的參數
- 第四步:檢查錯誤碼 (除錯)
- 第五步:用電腦來收/發資料 (除錯)
- 第六步:用示波器來量傳輸訊號 (除錯)
詳細步驟說明
第一步:選定硬體通訊方式
依據外部裝置跟主控裝置,選定對應的硬體通訊方式。
- RS232:通訊只能「一對一」(單站)。
- RS485 與 Ethernet:支援「一對多」(多站)。
⚠️ 注意:通訊硬體方式一定要一致,絕對無法將 RS232 直接與 RS485 進行通訊。
| 裝置類型 | 硬體與接線腳位範例 |
|---|---|
| 主站 (例如:PLC) | COM2 / RS485 / PIN2 (D+) / PIN3 (D-) |
| 從站 (例如:外部裝置) | RS485 / D+ / D- |
第二步:設定通訊參數
設定相關通訊參數,包含:站號 (主站不需要)、通訊鮑率 (9600/19200/38400)、資料位元 (7/8 位元)、同位元檢查 (O/E/N)、停止位元 (1/1.5/2)、資料格式 (ASCII/RTU)。
⚠️ 注意:選擇 RTU 資料格式時,資料位元只能選 8 位元。
通訊參數設定範例:
| 參數項目 | 主站 (PLC) 設定 | 從站 (溫控器) 設定 |
|---|---|---|
| 站號 | 不需要 | 1 (站號不可重覆) |
| 通訊鮑率 | 9600 | 9600 |
| 資料位元 | 8 位元 | 8 位元 |
| 同位元檢查 | O (Odd) | O (Odd) |
| 停止位元 | 1 | 1 |
| 資料格式 | RTU | RTU |
💡 提示:雙方通訊參數必須「完全一致」否則無法通訊。建議將上述參數記錄下來,一一核對設定。
第三步:選擇要讀 \ 寫的參數
選定我們要讀寫的參數,並在設備手冊內查詢對應的「通訊位址」。以台達溫控器為例,手冊通常會在參數旁直接標示通訊位址,並註明支援的通訊功能碼(例如:03)。
關於 Modicon Format 位址:
Modicon Format 本身已經內含了功能碼的資訊:
4XXXX:代表功能碼 03(讀取保持暫存器)。將該值減去 40001 即可得到實際的十六進制通訊位址。3XXXX:代表功能碼 04(讀取輸入暫存器)。將該值減去 30001 即可得到通訊位址。(一般設備支援 03 功能碼較多,若要用 04 通常需另外設定)。
⚠️ 注意:有些參數被限制為「唯讀」或「唯寫」。如果對該參數執行錯誤的動作,設備會回報錯誤或完全沒有回應。
出問題了嗎?進階除錯步驟
一般來說,完成前三步通常就不會有問題。但如果遇到無法連線,請繼續以下步驟:
第四步:檢查錯誤碼 (Exception Code)
當通訊發生錯誤時,外部設備通常會回覆「通訊錯誤碼」。
- 最高位元設為 1:設備會將原本功能碼的最高位元設為 "1"。例如:如果 PLC 發出功能碼
03,設備錯誤時會回傳83(16進制),這就表示通訊命令被拒絕或有問題。 - 夾帶錯誤代碼:除了改變功能碼,後面通常會接續一組「錯誤碼」(如 01, 02, 03 等),讓使用者能在手冊中查詢具體的出錯原因(例如:位址不存在、數值越界)。
💡 提示:這裡的「通訊錯誤碼」與設備機台本身的「硬體故障碼」不同,不可搞混。
第五步:用電腦來收 / 發資料
如果 PLC 發出了 MODBUS 指令但設備沒有回傳:
- 首先,將通訊參數全部重新確認一次。(注意:某些設備的通訊參數修改後,需要「重新開關機」才會生效)。
- 如果確認無誤,請使用電腦搭配 USB 轉 RS485 傳輸線,開啟檢測工具程式來接收 PLC 的資料,確認 PLC 是否真的有將命令發送出來。
- 電腦除了可以監聽 PLC,也可以主動模擬 PLC 發出命令給外部裝置,測試外部裝置是否會正常回應。
如果使用電腦發出指令,外部設備依然不回應,那通常不是通訊參數設定錯了,就是硬體接線出了問題。