本篇專注於 MODBUS 的通訊設定步驟 進行說明,其他底層通訊原理類別的內容可先自行搜尋。
📖 延伸閱讀:MODBUS 介紹
設定流程總覽
標準設定 3 步驟(正常情況下依序完成即可通訊):
- 選定硬體通訊方式:RS232 / RS485 / MODBUS
- 設定通訊參數:鮑率、資料位元、同位元檢查、停止位元
- 選擇要讀/寫的參數:確認手冊通訊位址與功能碼
通訊異常時的 3 步排查法:
- 檢查錯誤碼:觀察功能碼最高位元與回傳異常碼
- 用電腦收發資料:確認主站是否有發出指令與從站回覆
- 用示波器量測傳輸訊號:抓實體波形確認干擾或衰減
正常設定三步驟
第一步:選定硬體通訊方式
依外部裝置與主控裝置規格,選定實體層通訊方式。
⚠️ 特別注意事項:
- RS232 通訊僅能一對一(單站)。
- RS485 與 Ethernet 支援一對多(多站架構)。
- 兩端硬體介面必須一致,絕對無法直接用 RS232 與 RS485 互相通訊。
接線範例:
主站 (PLC) 硬體腳位:COM2 / RS485 / PIN2 (D+) / PIN3 (D-)
從站 (外部裝置) 腳位:RS485 / D+ 、 D-
第二步:設定通訊參數
MODBUS 連線必須確保兩端參數完全一致,常見參數項目如下:
- 站號 (Station ID):從站必填且不可重複;主站通常不需要設定站號。
- 通訊鮑率 (Baud Rate):9600 / 19200 / 38400 bps
- 資料位元 (Data Bits):7 或 8 位元(若為 RTU 格式只能選 8 位元)
- 同位元檢查 (Parity):None (無) / Odd (奇) / Even (偶)
- 停止位元 (Stop Bits):1 / 1.5 / 2 位元
- 資料格式 (Mode):ASCII 或 RTU
參數配對示範(以 PLC 連接溫控器為例):
| 參數項目 | 主站 (PLC) 設定 | 從站 (溫控器) 設定 |
|---|---|---|
| 站號 | - | 1(不可重複) |
| 通訊鮑率 | 9600 | 9600 |
| 資料位元 | 8 位元 | 8 位元 |
| 同位元檢查 | Odd (奇同位) | Odd (奇同位) |
| 停止位元 | 1 | 1 |
| 資料格式 | RTU | RTU |
💡 經驗叮嚀:兩端通訊參數只要有一個沒對齊就絕對通不了!建議施工前將參數白紙黑字抄在筆記本上一一確認。
第三步:選擇要讀/寫的參數
確認我們要存取的數值,並於設備通訊手冊中查詢對應的通訊位址與功能碼:
以台達溫控器手冊為例:
手冊在參數旁會直接列出對應的通訊位址,紅框處亦標明了支援的通訊功能碼 03(讀取多個暫存器):
如果是 Modicon Format 格式的位址:
Modicon Format 規格本身已內含功能碼定義:
- 4XXXX:對應功能碼 03,實體通訊位址 = 數值減去 40001
- 3XXXX:對應功能碼 04,實體通訊位址 = 數值減去 30001(多數設備支援 03 居多,04 通常需另行設定)
⚠️ 注意讀寫權限:有些參數是唯讀(Read Only)或唯寫(Write Only),如果對唯讀參數發送寫入命令,設備會直接回傳通訊錯誤或不回應。
通訊異常時的 3 步排查法
一般來說做到第三步就能正常連線。如果連線失敗,請依序使用以下三招排查:
第四步:檢查錯誤碼 (Exception Code)
當外部裝置無法正確執行收到的命令時,標準 MODBUS 會回傳帶有異常標記的封包:
-
功能碼最高位元(MSB)會被置為 1(即加上 0x80):
例如 PLC 發送功能碼 03,如果發生錯誤,從站會回傳 83,代表該指令執行失敗。 -
錯誤碼緊接在功能碼之後:
緊接在 83 後方的那一個 Byte 即為 Exception Code(如 01 功能碼不支援、02 位址非法、03 數值超出範圍等),可在設備手冊中查得具體原因。
📌 請注意:此處指的「MODBUS 通訊錯誤碼」與設備本身的硬體警報碼(Alarm Code)不同,兩者不能混淆。
第五步:用電腦來收發資料
若 PLC 送出命令後完全沒有任何回應,通常是參數設定問題:
- 先將鮑率、站號、同位元重新確認一次。
- 注意:許多儀表或驅動器的通訊參數修改後,必須將儀表重新斷電開機才會生效!
如果參數都確定無誤,建議改用電腦串列埠(USB-RS485)搭配調適工具來排查:
- 側聽模式:監聽 PLC 是否真的有把封包丟出來。
- 模擬模式:用電腦軟體模擬 PLC 指令向從站發送,看從站是否會回應。如果電腦都收不到回傳,代表硬體線路(如 D+/D- 反接、終端電阻)或設定根本有誤。
📺 參考測試影片:RS485 檢測工具程式實作示範
第六步:用示波器量測傳輸訊號
如果電腦能連、但 PLC 連不上,或者現場偶發性通訊中斷,最終絕招就是直接用示波器量實體波形。
MODBUS 底層本質上就是 0 與 1 的二進制方波訊號。透過示波器量測 A/B(D+/D-)差動訊號,可以清楚確認:
- 電平電壓準位是否足夠(排除訊號衰減問題)。
- 方波邊緣是否變形(阻抗不匹配、線路過長未加終端電阻)。
- 波形上是否有變頻器或高頻突波帶來的雜訊干擾。
🔬 實務量測範例參考:示波器抓通訊資料實作
請教一下,若是想要在沒有MODBUS模組的PLC透過RS-485與具有MODBUS功能的裝置(如電錶)做通訊,應該要怎麼做呢?
回覆刪除感謝回答!
Modbus是軟體的協議,
刪除所以硬體跟一般的232、485、ETHERNET並沒有不同。
所以只要有232、485、ETHERNET埠,
雖然有串列通訊指令,就可以達到MODBUS通訊功能了。
MODBUS專用模組是做什麼用!?
其實只是幫你處理,像是CRC檢查碼、LRC檢查碼,
自動發送等等自動的功能。
所以不用專用模組也可以。
我自已本就用三菱非專用MODBUS模組,一般通訊埠,
自已在PLC寫功能碼這些,
就可以通訊了。
原來如此!
刪除我也是使用三菱PLC目前嘗試不靠模組,直接用RS-485通訊。
那請問有什麼通訊的例子可以供我參考嗎?
我想試著寫,但在第一關設定通訊參數這邊就卡關不知道從何下手
當初我在測試時的一些資料:
刪除串列通訊模組 QJ71C24
https://vkinngworld.blogspot.tw/2014/09/qj71c24.html
資料搬移的一些相關指令
https://vkinngworld.blogspot.tw/2015/10/modbus-ascii.html?m=0
用PLC不加通訊模組連接外部485的模組。
回覆刪除要先分解資料串,並用相同的時脈,模擬485格式的資料串送出的時間及間隔。理論上是能達成的。但是還有寫接收的解碼。
個人拙見
如果不加通訊模組,不只是非modbus,是幾乎不太可能的。
刪除因為通訊的基本(最低)鮑率就4800bps(bit per sec)
(再低就非標準了)
代表每個output要有4800次變化,在目前的plc幾乎是不可能的。
所以用通訊模組,來取代modbus模組是可行。
用output(非通訊模組) 應該是不可能。需要更高速的上位。
陳先生您好:
回覆刪除想請問如果三菱的PLC(FX-3U)搭配左側外接模組485ADP-MB模組想與溫溼度感測器做RS-485通訊(已知感測器有485通訊功能),而廠商給我的是感測器的Modbus Protocol,而我一直收不到感測器的485訊號,是否感測器的為只需要另行解碼動作呢?
1.感測器也是要設定的,站號、ASCII/RTU通訊速度、位元....
刪除2.把485ADP-MB設定跟感測器一樣。
3.找出你要讀取資料的位址。例:0000H 或 40001
4.感測器支援的功能碼Command Code,一般常用的是 03,但有的要用04
5.利用ADPRW來讀取
https://vkinngworld.blogspot.tw/2016/05/fx3u-485adp-mb-fx3modbus.html
志豪大哥:
回覆刪除我是岳霖,感謝你發這篇文章。
"所以只要有232、485、ETHERNET埠,
雖然有串列通訊指令,就可以達到MODBUS通訊功能了。"
我想繼續追問這句話,因目前遇到設備(電空比例閥RS-232C),因不清楚是否有MODBUS,但是我若是PLC(RS-232)選擇FX3U-232-BD這款沒有MODBUS的應該也是能通訊?
另外請問,(Slave)設備沒有MODBUS的狀況多嗎? 感覺應該不常見?!
有rs232,沒有支援modbus的也有很多
刪除請教一下,目前想用fx3u-485-bd這塊模組,有辦法抓到modbus的表頭嗎? 是要用rs指令嗎?感謝老師
回覆刪除fx3u-485-bd這塊沒有MODBUS協議,所以要連MODBUS的錶頭,會很累,但也是可以的,
刪除是用RS指令沒錯。
不好意思想問一下
回覆刪除我使用FX3U-485ADP-MB做通訊三菱E720變頻器讀取頻率可以讀到
但無法寫入.我想要外部啟動然後用通訊丟頻率..請問有範例或那裡要注意的地方嘛.感謝感謝
1.如果能讀頻率 應該會寫通訊。
刪除2.不能寫入,有回覆錯誤碼嗎?
3.應該有參數設定,使用通訊寫入的頻率,非一般面板或類比
4.剛看手冊,設定頻率有兩個命令碼,一個讀取一個寫入,有確定寫對地方嗎?