← 所有文章

Q 系列 RS485 Modbus RTU 讀寫教學

· 站長

使用 Q06UDVCPU、QJ71C24N 與 GX Works2,從 RS485 接線、預定義協定設定到 GP.CPRTCL 單筆讀寫,附 21 張操作圖與錯誤排查步驟。

先把第一筆資料讀回來

這次帶你用 Q06UDVCPU 搭配 QJ71C24N,從 CH2 的 RS-485 介面,向 Modbus RTU 從站讀取與寫入一個保持暫存器。先完成一次讀取,再寫入 1234,最後重新讀取確認。每一步都要看得到結果,才往下做。

本次使用 教學設定
CPU/工程軟體 Q06UDVCPU/GX Works2
通訊模組/介面 QJ71C24N/CH2:RS-422/485
通訊方法 預定義協定+GP.CPRTCL;PLC 擔任主站
模組位置範例 起始 XY=0000H,32 點;指令指定 U0
練習對象 測試從站或模擬器;站號 1,9600 bps、8E1
練習資料 PDU 位址 0 的一個可讀寫 Holding Register

以下站號、速度與暫存器用於測試從站或模擬器。實作前,請用從站手冊確認可讀寫位址、資料型態及寫入後的用途。不要把練習值寫進設備的啟動、速度或保護設定。

圖片可點開查看原尺寸。先依序完成設定與單筆讀取,再進行寫入;實機通訊結果須在你的測試設備上確認。

閱讀順序:接線 → 模組設定 → 建立讀寫協定 → 看懂程式 → 讀取 → 寫入 → 讀回比對 → 排除錯誤。

01 先確認你手上的硬體

  1. 看模組正面型號:本篇是 QJ71C24N。CH1 是 RS-232,這次接 CH2 的 RS-422/485 端子。

  2. 核對功能版本與序號。本次依手冊範例使用功能版本 B、序號前五碼 11062 以上的模組。預定義協定的基本支援門檻與個別元素功能不同:SH-080850ENG-C 第 3-2~3-3 頁列出基本功能為 10122 以上,部分元素設定另要求 11062 以上。使用較早模組時,先確認實際封包元素與軟體版本是否相容。

  3. 準備從站寄存器表、雙絞屏蔽線,以及可離線操作的測試設備。先只接一個從站。

  4. 先斷電再配線,完成後檢查端子與終端電阻。上電後再進行參數與程式下載。

要抄下來的資料 你要確認什麼
從站站號 本篇用 1;一條總線不能有重複站號。
串列格式 兩端必須同為 9600、8 data bits、Even parity、1 stop bit。
通訊模式 Modbus RTU;不要選 ASCII、MC Protocol 或無協定通訊。
保持暫存器 是否支援 FC03、FC06;位址從 0 還是 1 開始。
數值型態 16-bit unsigned/signed、倍率、是否占用兩個暫存器。
模組起始 XY 本篇 0000H;若現場不同,U 與 X 裝置必須一起改。

先不要處理多站輪詢。第一站能穩定讀寫後,再逐站加入,才能分辨是程式問題還是配線問題。

02 RS485 兩線式要這樣接

QJ71C24N 的 CH2 有分開的送出與接收端子。接兩線式 RS-485 時,把同一訊號極性的送出與接收端接在一起,再接到從站。

QJ71C24N CH2 兩線式連接方式
SDA 與 RDA 短接成一組,接從站對應的正向資料端。
SDB 與 RDB 短接成另一組,接從站對應的負向資料端。
SG 依雙方手冊連接訊號參考端,勿把 SG 當成屏蔽線端子。
FG/屏蔽 依設備接地規範處理;不要任意把 SG 與 FG 短接。

不要只看 A/B 字母就接線。不同廠牌對 A/B 的命名可能相反,請對照資料正負極性或 D+/D− 定義。三菱官方 FAQ 的兩線式接法可用來核對本模組端子。

  1. 先完成 SDA-RDA、SDB-RDB 兩組短接。

  2. 採用總線串接,避免星狀分接與長支線。

  3. 只在總線兩端配置終端電阻。QJ71C24N 手冊列出 RS-422/485 用 110 Ω、1/2 W;另一端依設備手冊配置,先確認內建終端是否已開啟。

  4. 檢查短路、極性與屏蔽處理後才上電。若無回覆,先停下來核對接線,再檢查軟體。

接線可對照三菱官方兩線式 RS-485 說明,端子與電阻規格另見文末基本手冊。

03 建立正確的 CPU 工程

開啟 GX Works2,建立 QCPU 工程,CPU 選 Q06UDV。這裡的型號選項對應 Q06UDVCPU。教學採簡單工程、梯形圖,不使用標籤。

圖 1 新增工程:先選對 CPU,後續指令與參數檢查才有意義。

圖 1 新增工程:先選對 CPU,後續指令與參數檢查才有意義。

接著到 PLC 參數的 I/O 分配,加入 QJ71C24N。這次把起始 XY 設為 0000H,模組占用 32 點。

圖 2 I/O 分配:QJ71C24N、32 點、起始 XY 0000H。

圖 2 I/O 分配:QJ71C24N、32 點、起始 XY 0000H。

完成後確認:型號沒有選成 QJ71C24N-R4;實際底板位置與工程一致。若起始 XY 是 0020H,後面的 U0 要改成 U2,X1D/X1E 要改成 X3D/X3E。

04 先把 CH2 的格式設一致

圖 3 CH2 通訊設定:預定義協定、9600 bps、8E1。

圖 3 CH2 通訊設定:預定義協定、9600 bps、8E1。

設定項目 本篇設定/操作理由
通訊協定 預定義協定;才能由 CPRTCL 呼叫封包定義。
傳輸速度 9600 bps;PLC 與從站必須一致。
資料位元/同位元/停止位元 8 bits/Even/1 bit,合稱 8E1。
操作方式 本例採獨立操作;依畫面確認其他選項。
設定值核對 本例 CH2 對應開關 3=050EH、開關 4=0009H。優先用設定畫面核對,不把數字照抄到不同模組。

參數修改不等於模組已套用。寫入 PLC 後,依工程軟體與模組手冊要求執行重置或重新上電,再確認模組就緒。預定義協定資料也要另外寫入通訊模組。

05 先分清楚三種位址

名稱 例子 你應該怎麼使用
PLC 裝置 D300、M20 PLC 內部資料與狀態;不是從站寄存器。
Modbus 參考編號 40001 常用來表示第一個 Holding Register;依從站手冊判讀。
封包 PDU 位址 0000H 封包實際傳送的 16-bit 位址;傳統 40001 對應 0。

這次把 D152 設為 0,意思是向從站送出 PDU 位址 0000H。不是讀 PLC 的 D0,也不是把 40001 放進封包。若從站手冊已直接列出 0-based 位址,照用即可,不要再減 1。

功能碼 用途 本篇怎麼用
03H 讀 Holding Registers 協定 1:讀一個 word。
04H 讀 Input Registers 唯讀輸入暫存器,不能用 FC06 寫入。
06H 寫單一 Holding Register 協定 2:寫一個 word,正常回覆會回送位址與值。
10H(十進位 16) 寫多個 Holding Registers 延伸練習;需另建封包與資料長度。

一個 Modbus register 是 16 bits。值 1234(十進位)等於 04D2H,線上資料順序為 04 D2。CRC 則是低位元組先送,別把這兩種順序混在一起。

06 開啟預定義協定工具

先建立封包,再讓梯形圖呼叫它。CPRTCL 不會只憑功能碼就自動知道站號、位址與接收位置;這些資料由協定定義決定。

圖 4 GX Works2:工具 → 通訊協定支援功能 → 序列通訊模塊。

圖 4 GX Works2:工具 → 通訊協定支援功能 → 序列通訊模塊。

  1. 從工具選單開啟序列通訊模塊的協定工具。

  2. 新增協定,從預定義協定程式庫選擇 MODBUS。程式庫畫面中的廠牌名稱可能是 Schneider Electric,這是庫項目名稱。

  3. 先加入 03 Read Holding Registers,編號設為 1;再加入 06 Write Single Register,編號設為 2。

不要把協定編號和 Modbus 功能碼混用。本篇 D102=1 表示呼叫「協定 1」,其中的固定功能碼才是 03H。

07 先建立讀取協定 1

圖 5 選取 MODBUS 的 03 Read Holding Registers 作為讀取範本。

圖 5 選取 MODBUS 的 03 Read Holding Registers 作為讀取範本。

範本提供封包結構,但變數裝置仍要由你設定。打開送信封包,依下表指定 PLC 裝置。

送出欄位 裝置/長度 本次內容
站號 D200/1 byte/不交換 1
功能碼 固定 03H 由範本提供
起始位址 D201/2 bytes/交換 0
讀取數量 D202/2 bytes/交換 1 word
CRC 保留範本 CRC 設定 由工具計算,勿再手動附加

兩個 bytes 的位址與數量要依範本設定交換順序,讓 PLC word 的值以 Modbus 高位元組在前的方式送出。1 byte 的站號不交換。

08 核對送信封包的每一格

圖 6 讀取送信封包:D200、固定 03H、D201、D202 與 CRC。

圖 6 讀取送信封包:D200、固定 03H、D201、D202 與 CRC。

圖 7 站號變數設定:D200、1 byte、不交換。

圖 7 站號變數設定:D200、1 byte、不交換。

執行條件:梯形圖接受 M10 的上升緣後,先把操作參數複製到 D200~D202,再呼叫協定。操作中不要直接修改這些送信裝置。

完成設定後,逐格確認裝置、長度及交換選項。讀取 1 個 word 的請求內容,在 CRC 前應是 01 03 00 00 00 01。若看到 01 00 作為數量,先查兩個 bytes 的順序。

09 把正常讀取結果放回 PLC

圖 8 FC03 正常回覆:站號 D210、功能碼 03H、長度 D299、資料 D300 起。

圖 8 FC03 正常回覆:站號 D210、功能碼 03H、長度 D299、資料 D300 起。

圖 9 資料區設定:長度存 D299,接收資料配置 D300~D424。

圖 9 資料區設定:長度存 D299,接收資料配置 D300~D424。

D299 的單位是 byte,不是 word。這次只讀 1 word,所以正常回覆必須是 D299=2。資料區最大 250 bytes,會占用 125 words,因此先保留 D300~D424,避免覆蓋其他程式。

將接收資料設為適當的位元組交換,才能把 04 D2 解讀成 D300=1234。讀取正常回覆必須列為接收封包 1,後面的程式才會用 D110=1 判定。

10 從站回覆錯誤 也要接得住

圖 10 FC03 例外回覆:站號 D211、固定 83H、例外碼 D212。

圖 10 FC03 例外回覆:站號 D211、固定 83H、例外碼 D212。

把這個範本列為接收封包 2。FC03 的例外功能碼是 83H;正常功能碼加上 80H,就表示從站拒絕這次要求。

觀察值 代表什麼 下一步
M101=ON CPRTCL 指令通訊異常 保存 D100,查指令錯誤碼。
M101=OFF、D110=1 匹配正常接收封包 繼續檢查站號、長度或回送值。
M101=OFF、D110=2 匹配例外接收封包 讀 D212(寫入則讀 D234),處理 Modbus 例外。

記住:CPRTCL 成功收到一個符合格式的例外封包,指令本身可能正常完成。因此不能只看 M101=OFF 就把資料當作成功。

你要確認的結果:正常讀取走封包 1;讀取不合法位址時,若從站送出例外回覆,應走封包 2,保留上次有效資料。

11 先給通訊一個明確的等待上限

圖 11 協定詳細設定:接收監視 1 秒、送信等待 10 ms、重試 0 次。

圖 11 協定詳細設定:接收監視 1 秒、送信等待 10 ms、重試 0 次。

本例接收等待 10 × 100 ms=1 秒;送信監視同樣為 1 秒。送信等待 1 × 10 ms=10 ms,重試次數先設 0,讓第一次失敗容易觀察。圖中的重試間隔在重試為 0 時不會產生重試。

9600、8E1 每字元共 11 bits;3.5 字元約 4.01 ms。本例的 10 ms 是教學設定,還要配合從站的處理時間。讀寫兩個協定都設定相同等待與監視條件。

每次執行前清除 OS 接收區可減少上次殘留資料干擾,但仍要用站號、功能碼、資料長度與回送內容判斷回覆。

12 建立寫入協定 2

圖 12 選取 06 Write Single Register,作為協定 2 的寫入範本。

圖 12 選取 06 Write Single Register,作為協定 2 的寫入範本。

選取程式庫項目後,打開送信封包與兩個接收封包,依下表填入裝置。站號與例外碼為 1 byte、不交換;位址與數值為 2 bytes、交換。

封包/欄位 裝置 長度與處理
TX:站號/位址/寫入值 D220/D221/D222 站號 1 byte;位址與值各 2 bytes、交換。
RX1:站號/位址/值 D230/D231/D232 正常功能碼 06H;2-byte 欄位交換。
RX2:站號/例外碼 D233/D234 例外功能碼 86H;各 1 byte。
CRC/監視時間 沿用範本/同圖 11 CRC 交由協定工具處理;重試先用 0 次。

正常回覆會回送請求的站號、位址與寫入值。三者都一致,才判定這次寫入回覆有效。接著還要再用 FC03 讀回,確認從站儲存的值。

13 兩種下載 缺一個都不會通

  1. 儲存 GX Works2 的 PLC 工程與協定工具的協定資料。

  2. 確認協定 1 為 FC03、協定 2 為 FC06;兩者都具有正常與例外接收封包,順序分別是 1、2。

  3. 在協定工具執行檢查,修正未指定裝置、封包長度與範圍重疊等問題。

  4. 將協定資料寫入正確的 QJ71C24N;先確認連線目標與模組起始 I/O。

  5. 另外將 PLC 參數與 MAIN 程式寫入 CPU。依工具提示執行必要的重置/重新上電。

  6. 確認模組無錯誤且預定義協定已就緒,再進行第一次手動讀取。

PLC 程式檢查通過,只能證明這份梯形圖符合檢查規則。它不能證明協定已寫進模組,也不能證明從站支援你選的位址。

若看到這種情況 先查這裡
X1E 不成立 模組就緒、I/O 分配、模組錯誤與實際安裝。
X1E 成立但 X1D 不成立 預定義協定模式、協定資料與模組狀態。
只有 CPU 程式,沒有封包資料 回協定工具確認寫入對象與寫入結果。

完成 CPU 與通訊模組的兩種下載後,再逐項確認就緒訊號,最後觸發交易。

14 用 GP.CPRTCL 呼叫協定

GP.CPRTCL U0 K2 K1 D100 M100
運算元 本例意思
U0 模組起始 XY 0000H。起始 XY÷16 得到 U 編號;0020H 對應 U2。
K2 使用 CH2。
K1 這次執行 1 個協定,不是功能碼 1。
D100 控制資料的起點;呼叫前把協定編號放入 D102。
M100 完成訊號;M101 為緊接的異常完成訊號。兩者是短暫完成訊號。

GP.CPRTCL 是脈衝執行型。M20 從 OFF 變 ON 時啟動一次;等待期間保持 ON,不會每掃描重新送一筆。不要直接換成連續執行型 G.CPRTCL。

M100 在完成時僅維持一個掃描週期範圍。你在監看畫面可能看不到它閃過,所以本例把結果保存到 D120、D121,並以 M150~M153 鎖存。

同一通道還在執行時,新的 CPRTCL 要求不會成為排隊交易。本例用 M20 擋住新的操作。也不要在同一通道混用 OUTPUT/INPUT/ONDEMAND。

15 控制區與操作區 先保留好

裝置 用途/讀法
D100 CPRTCL 完成狀態:0 為正常,非 0 依手冊查錯誤碼。
D101 已執行協定數;參數錯誤可能為 0。
D102~D109 最多 8 個協定編號;本例只使用 D102=1 或 2。
D110~D117 各協定匹配的接收封包編號;本例觀察 D110。0 不是正常封包 1。
D120/D121 完成時保存 D100/D110,方便事後查看。
D122 保存 Modbus 例外碼;只在 M152 有效時解讀。
D150 待執行模式:1=讀取、2=寫入。
D151/D152 待執行站號/PDU 位址。本例 1/0。
D154 待寫入數值;本例 1234。
D500 上次有效讀取值;失敗時不更新。

D150、D151、D152、D154 是操作區。程式接受本次要求後才把它們複製到送信區,因此下一筆準備值不會改動正在送出的資料。

D152 是 16-bit 位址欄位,封包可表示 0~65535。顯示為有號十進位時可能看到負數;檢查位址請切換十六進位或無號顯示,並以從站合法範圍為準。

16 接收資料與狀態旗標

裝置 用途
D200~D202 讀取送信:站號、位址、數量。
D210/D211/D212 讀取正常站號/例外站號/例外碼。
D220~D222 寫入送信:站號、位址、值。
D230~D232 寫入正常回覆:站號、位址、值。
D233/D234 寫入例外:站號、例外碼。
D299/D300~D424 收到的 byte 數/資料區。
M10/M30 操作要求/接受要求的一掃描脈衝。
M20 本程式的交易忙碌旗標。
M40/M41 本掃描的讀取正常/寫入正常條件。
M42/M43 本掃描的讀取例外/寫入例外條件。
M150/M151 有效正常回覆/CPRTCL 通訊異常。
M152/M153 Modbus 例外/回覆未通過檢查。

M150 代表本次讀取或寫入回覆有效。只有讀取成功才更新 D500;寫入成功不會自動更新 D500。要看 D102,才知道最後一次執行的是讀取還是寫入。

X1D 是預定義協定就緒、X1E 是模組就緒。不要拿 CH2 的發送中訊號 X9 當整筆交易忙碌:送完後仍然可能正在等回覆。

17 初始化 先讓狀態有明確起點

圖 13 初始化:SM402 清除操作狀態,設定第一筆練習參數。

圖 13 初始化:SM402 清除操作狀態,設定第一筆練習參數。

執行條件:CPU 開始執行時的初始脈衝 SM402。RST 清除 M10、M20、M30 與結果旗標;MOV 設定讀取模式、站號 1、位址 0、寫入值 1234。

D500 先清為 0。此時 M150 尚未成立,所以這個 0 只是初值,不是從站已回覆的數值。CPU 重新開始執行後,請重新讀取,才能使用有效資料。

18 只接受一次操作 並鎖定參數

圖 14 要求接受條件:M10 上升緣、模組就緒、非忙碌,以及模式與站號合法。

圖 14 要求接受條件:M10 上升緣、模組就緒、非忙碌,以及模式與站號合法。

LDP M10 只取 OFF→ON。X1D、X1E 必須成立,M20 必須為 OFF;模式限定 1~2,站號限定 1~247。符合條件才使 M30 成立一掃描。

圖 15 接受後複製模式、站號、位址、數量與寫入值。

圖 15 接受後複製模式、站號、位址、數量與寫入值。

MOV D150 D102 決定呼叫讀取或寫入協定。D202 固定設 1,表示讀一個 word。忙碌期間按下的要求不會排隊;下一次操作前,先把 M10 切回 OFF,再切 ON。

19 清除舊回覆 再啟動一次交易

圖 16 清除接收判斷欄位後 SET M20,開始這次交易。

圖 16 清除接收判斷欄位後 SET M20,開始這次交易。

圖 17 GP.CPRTCL 執行,完成後保存狀態並判斷指令異常。

圖 17 GP.CPRTCL 執行,完成後保存狀態並判斷指令異常。

接受新要求時,先 RST M150~M153,再清除接收 byte 數與站號。如此可以避免把上次殘留回覆誤當成這次結果。

M20 上升啟動 GP.CPRTCL。M100 完成時,把 D100 存入 D120、D110 存入 D121;若 M101 同時成立,SET M151。看 D120 時要切十六進位,才能方便對照三菱錯誤碼。

20 正常回覆 還要比對內容

圖 18 讀取分支 M40 與寫入分支 M41:各自檢查收到的內容。

圖 18 讀取分支 M40 與寫入分支 M41:各自檢查收到的內容。

分支 全部符合才算有效
讀取 M100 成立、M101 未成立、D110=1、D102=1、D210=D200、D299=2。
寫入 M100 成立、M101 未成立、D110=1、D102=2、D230=D220、D231=D221、D232=D222。

讀取條件成立才 MOV D300 D500。長度不對、站號不對或收到例外封包,都不更新 D500。

寫入除了站號,還要比對回送位址與數值。FC06 回送一致表示寫入命令得到正常回覆;要確認設備目前儲存值,再做一次 FC03 讀取。

M40、M41 使用 OUT,只反映當次掃描的條件;後面會合併成鎖存的 M150,讓監看畫面看得見。

21 把通訊錯誤與例外碼分開處理

圖 19 例外回覆:讀取保存 D212,寫入保存 D234,統一放到 D122。

圖 19 例外回覆:讀取保存 D212,寫入保存 D234,統一放到 D122。

執行條件:M100 完成、M101 未成立、D110=2,再依 D102 判斷是讀取還是寫入,並核對例外回覆的站號。

D122 例外碼 先怎麼處理
01H:Illegal Function 確認設備是否支援 FC03/FC06,以及該介面的模式。
02H:Illegal Data Address 確認位址基準、合法範圍與這個暫存器能否寫入。
03H:Illegal Data Value 確認數量、值的範圍與設備允許的設定。
04H:Server Device Failure 查從站故障與設備診斷;不要連續重送掩蓋問題。

例外回覆是設備明確告訴你「這筆要求不能處理」。先修正要求,再重新觸發;增加等待時間通常不能解決不合法位址。

22 集中保存結果 再解除忙碌

圖 20 集中設置結果旗標,最後由完成訊號清除 M20。

圖 20 集中設置結果旗標,最後由完成訊號清除 M20。

M40 或 M41 成立,就 SET M150;M42 或 M43 成立,就 SET M152。將每個結果旗標集中在一處設置,便於查找,也避免分支重複線圈檢查問題。

完成時如果 M150、M151、M152 都未成立,就 SET M153,表示回覆沒有通過本程式的檢查。最後才 RST M20,允許下一次操作。

不要在等待回覆期間任意強制 RST M20 後重送。若模組故障使交易無法正常結束,先處理模組與通道狀態,再按手冊的取消/接收區清除程序復歸。

23 第一次讀取 照這個順序操作

  1. 在測試從站確認站號 1、9600/8E1,以及 PDU 位址 0 可供 FC03 讀取。先把該值設為你知道的數字,例如 100。

  2. 監看 X1D、X1E:兩者成立;M20 為 OFF。

  3. 寫入操作區:D150=1、D151=1、D152=0。

  4. 讓 M10 先 OFF 再 ON,一次只送一筆;隨後將 M10 切回 OFF。

  5. 等待 M20 回到 OFF,再查看結果。若 M150 成立且 D102=1,確認 D299=2、D500=100。

  6. 若失敗,先記錄 M151/M152/M153、D120、D121、D122,再查原因。

監看值 這次讀取的預期
D102/D121 1/1:協定 1,正常接收封包 1。
M150/M151/M152/M153 ON/OFF/OFF/OFF。
D299/D500 2 bytes/與測試從站相同的數值。
M20 完成後 OFF。

若 M150 沒成立,就不要把 D500 當成本次資料。它可能仍是上次成功值,或是剛啟動的初值。

24 寫入 1234 再讀回來確認

  1. 確認 PDU 位址 0 是測試用、可寫入,且 1234 在設備允許範圍。

  2. 等待 M20=OFF。設定 D150=2、D151=1、D152=0、D154=1234。

  3. M10 OFF→ON,再切回 OFF。等待完成。

  4. 確認 M150=ON、D102=2、D121=1;D230=1、D231=0、D232=1234。

  5. 把 D150 改成 1,其餘站號與位址保持相同,再觸發一次 M10。

  6. 確認這次 D102=1、M150=ON,而且 D500=1234。寫入與讀回一致,才完成本次練習。

寫入與讀取是兩次交易。不要在上一筆尚未完成時切換協定並重送。若要加入自動流程,應使用「寫入完成且內容有效 → 發出讀取 → 讀取有效 → 比對」的狀態順序。

結果 你該如何判斷
寫入正常,讀回不同 檢查設備是否限制值、倍率不同、位址不同或被其他主站/控制邏輯改寫。
寫入例外 02H 先查是否可寫,以及寄存器位址是否錯一格。
D500 仍是舊值 先查最後一次是否為讀取成功,不要只看數字。

25 沒回覆時 按順序縮小範圍

現象 先查什麼 怎麼修正
M10 已按,M20 沒動 就緒訊號、M10 上升緣、模式、站號 先 OFF 再 ON;確認 X1D/X1E、D150=1或2、D151=1~247。
M151 成立 D120 的十六進位錯誤碼 先依 CPRTCL 手冊分類,再查超時、參數或模組問題。
完全收不到回覆 站號、速度、8E1、RTU、接線極性 一次只改一項;先讓一個從站正常。
偶爾正常、偶爾超時 終端、屏蔽、支線、重複站號、第二個主站 修正總線與干擾來源,再調整必要等待。
M152 成立 D122 Modbus 例外碼 依例外修正功能、位址或值。
M153 成立 D121、回覆站號、D299、寫入回送值 對照封包定義與接收裝置,確認正常封包順序。

不要一遇到超時就增加重試。先留下錯誤碼與操作條件,確定單筆交易正確,再評估設備允許的重試次數與間隔。

若 M20 長時間不解除,先看模組是否仍就緒。接收監視時間無法替代模組故障復歸;也不能靠把忙碌位清掉就假定通道空閒。

26 數字不對 先查單位與順序

看到的情況 教你怎麼查
1234 變成其他大數 1234=04D2H。先比對線上 bytes 04 D2 與 PLC word 04D2H,檢查交換設定。
65535 顯示 -1 同一個 FFFFH,無號解讀為 65535、有號為 -1;不一定是通訊錯誤。
1234 應該是 123.4 確認設備倍率,例如原始值÷10。通訊先保留原始值,再做工程單位轉換。
32-bit 數值完全不對 確認占用兩個 registers、word 高低順序、各 word 內 byte 順序,以及整數或 IEEE 754 浮點型態。
多讀幾個值後 M153 本程式只接受 D299=2。擴充時需同步修改數量、接收容量、資料驗證與搬移範圍。

若改成 FC10(10H,十進位 16),封包還包含暫存器數量、byte count 與資料。正常回覆主要回送起始位址和數量,不是把整段寫入值回送,因此不能直接套用 FC06 的比對程式。

RTU 的 CRC 由協定工具範本計算。本例不另外寫 CRC 梯形圖;若使用通訊分析器,請把整個封包與 CRC 一起核對。

27 你要能完成的四個練習

練習 做法 合格結果
A:單筆讀取 從站設 100;執行協定 1。 D500=100,正常旗標成立,忙碌解除。
B:寫入與讀回 寫入 1234,再執行協定 1。 FC06 回送三欄一致,FC03 讀回 1234。
C:例外判斷 在測試環境使用明確不合法位址。 若設備回覆例外,M152 成立且保存例外碼;D500 不更新。
D:等待失敗 停用測試從站,再發出讀取。 監視時間到後取得通訊異常;保存錯誤結果,不把舊值當新資料。

每次記錄:站號、PDU 位址、功能碼、串列格式、D120、D121、D122、D500。完成 A、B 再做 C、D,才容易分辨設定錯誤與刻意製造的失敗。

自我檢查:你應該能說明為何 D299 要等於 2、為何 M101=OFF 不等於 Modbus 成功,以及為何寫入成功還需要再讀回。

答案:一個 word 是 2 bytes;例外封包仍可能被 CPRTCL 正常接收;FC06 正常回送表示命令回覆有效,重新讀取才能確認目標暫存器目前的值。

28 下載前執行程式檢查

圖 21 實際 GX Works2 離線程式檢查結果:程式檢查已完成,無錯誤。

圖 21 實際 GX Works2 離線程式檢查結果:程式檢查已完成,無錯誤。

在 GX Works2 執行程式檢查,確認 CPU 型號、GP.CPRTCL 運算元、裝置範圍與各段接點沒有錯誤。上圖是提供的手冊所附之離線檢查結果,並非本次另行執行 GX Works2 的測試。

離線檢查通過後,仍須完成協定資料寫入、實機下載、RS-485 通訊與從站數值比對。本文未執行實機通訊測試,請依前述四個練習逐項驗證。

實際程式圖片保留接點、指令與裝置位址。截圖中的步號可能因顯示段落而不同;操作與判斷應以指令、裝置及各段說明對照。

29 需要查細節時 直接查這幾份

1.三菱 SH-080850ENG-C:GX Configurator-SC Version 2 Operating Manual (Pre-defined Protocol Support Function)。CPRTCL 請查第 13-18~13-23 頁;可變接收長度請查第 9-12 頁。

開啟三菱預定義協定操作手冊

2.三菱 SH-080006-W:Q Corresponding Serial Communication Module User’s Manual (Basic)。I/O 訊號第 3-20~3-21 頁;接線第 4-9~4-10 頁;開關設定第 4-14~4-17 頁。

開啟三菱序列通訊模組基本手冊

3.三菱官方 FAQ 22986:QJ71C24N 的 RS-485 兩線式接線。

開啟三菱兩線式接線 FAQ

4.Modbus Organization:Modbus over Serial Line Specification and Implementation Guide,RTU 字元間隔見 2.5.1.1;功能碼與例外回覆請對照 Application Protocol。

開啟 Modbus RTU 串列規範

開啟 Modbus 官方規範下載頁

5.GX Works2 操作手冊 SH-080921ENG:預定義協定支援功能的操作。工程軟體安裝目錄附有該手冊,可與實際版本畫面對照。

查表時,先分清楚手冊印刷頁碼與 PDF 檔案頁數。本教材引用的是印刷章節頁碼;設備端位址與數據型態仍以你的從站手冊為準。

文章與圖片依提供的《Q系列 RS485 Modbus RTU 指令教學手冊》整理。

搭配使用的工具與教學


使用 PLC 工具箱 →