Modbus RTU 是一種串行通信協(xié)議,由于具有協(xié)議透明,實現(xiàn)成本低,簡單易用等諸多特點,至今仍然廣泛應用在工業(yè)控制的各個領域。
為了通信可以長期穩(wěn)定的運行,并且可以在故障時可以及時處理和排查,特梳理此文,用做參考學習使用。
診斷工作以 S7-1200/S7-1500 PLC的串口通信模塊上的指示燈開始:
1)模塊本體集成 RX/TX LED 指示燈,用來指示串口通信模塊的信息收發(fā)狀態(tài)。
2)TX 代表發(fā)送,RX 代表接收,例如 CM PtP RS422/RS485 HF 通信模塊的 LED 指示燈如圖1所示。

圖1 LED指示燈
通過 RX/TX 指示燈的狀態(tài)可以快速定位 Modbus RTU 通信故障,并且結合 Modbus RTU 通信指令狀態(tài)代碼,可以高效率地解決在現(xiàn)場中碰到的各類Modbus RTU 通信問題,故障診斷判斷流程如圖 2 所示。

圖2 通信故障的判斷流程圖
作為 Modbus 主站,當與從站設備通信不上時,觸發(fā)主站指令后,觀察串口通信模塊的 TX 指示燈是否閃爍:
1)如果閃爍,則說明程序已經正確執(zhí)行,此時如果 RX 不亮,則故障的判斷方向為接線或從站一側。如果 RX 也閃爍,則捕捉主站指令的狀態(tài)代碼,根據代碼的具體含義排查故障原因;
2)如果串口通信模塊的 TX 指示燈不閃爍,則說明程序并未正確執(zhí)行,故障原因主要方向為編程問題,檢查初始化指令和主站指令是否編程正確,并捕捉初始化指令和主站指令的狀態(tài)代碼,根據代碼的具體含義排查故障原因。
作為 Modbus 從站,當與主站設備通信不上時,觀察串口通信模塊的 RX 指示燈是否閃爍:
1)如果閃爍,則說明可以接收主站發(fā)來的消息。在確認主站參數設置正確之后,故障主要判斷方向為從站的編程問題,檢查初始化指令和從站指令是否編程正確,并捕捉初始化指令和從站指令的狀態(tài)代碼,根據代碼的具體含義排查故障原因;
2)如果串口通信模塊的 RX 指示燈不閃爍,則說明模塊并未接收到來自主站的任何消息,故障原因主要為接線或主站一側,需檢查接線是否正確、主站是否已成功啟動等問題。
捕捉狀態(tài)代碼
由于 Modbus RTU 通信指令的狀態(tài)代碼僅持續(xù)一個掃描周期,直接在線監(jiān)控無法實時看到,所以我們可以編寫程序捕捉代碼。
捕捉代碼示例如圖3所示。初始化指令、主站指令、從站指令均需捕捉狀態(tài)代碼。

圖3 捕捉代碼
16#80C8
該代碼含義為:從站在設置時間內未響應,需要檢查數據傳輸率、奇偶校驗和從站的接線情況。
產生該代碼的可能原因:
①接線錯誤。
在主從站接線時,很多用戶習慣性的將設備間的 A 與 A,B 與 B 相連,進而組成總線式 RS485 網絡,其實,正確方式為根據正負進行組網,應將設備間的正與正,負與負相連,因為并非所有設備的 A 為正,B 為負,如 CB1241 通信板,B 為正,A 為負,如圖4所示。

圖4 CB1241 通信接線
16#81Ex
該代碼均指向字符幀錯誤,如16#81EA:字符幀過短,16#81E2:字符幀錯誤。
產生該代碼的可能原因:
①? 字符幀設置錯誤。
依次檢查起始位、數據位、奇偶校驗位、數據傳輸速率和結束位個數的設置是否一致。
其中,結束位的個數是在初始化指令的背景 DB 塊中進行設置,默認為1個停止位。如圖5所示。

圖5 背景DB設置
② 字符間最大字符延遲時間 “ICHAR_GAP”
在 Modbus RTU 規(guī)約中, Modbus RTU 報文幀之間間隔不小于 3.5 個字符時間。如圖6所示。

圖6 Modbus RTU 報文幀以及間隔
西門子串口通信模塊默認 Modbus RTU 報文幀結束的默認條件為 3.5 個字符時間。
假設波特率為 9600 bit/s,1 個起始位,1 個停止位,8 個數據位,1 個校驗位,則 3.5 個字符時間為(1/9600)*1000*11*3.5=4 ms,不同波特率,對應的字符時間不同。
如果因為伙伴響應時間稍長、線路阻抗較大,或外界干擾等問題,Modbus RTU 報文幀中的字符間延時超過 3.5 個字符時間,則 PLC 會誤認為報文幀結束,但實際并未結束,進而產生該類錯誤。
可以適當增大字符間最大字符延遲時間 “ICHAR_GAP”,避免該錯誤的發(fā)生,如圖7所示。

圖7 字符延遲時間
16#8280/16#8281
該代碼含義為:讀取/寫入模塊時失敗,請檢查 Port 參數的輸入。
產生該代碼的可能原因:
①?初始化指令 Port 管腳輸入錯誤
初始化指令 Port 管腳應輸入串口通信模塊的硬件標識符,錯誤的硬件標識符將導致初始化失敗。
②?未指定工作模式
應在初始化指令的背景 DB 塊 Mode 參數中,指定串口通信模塊的工作模式,模式 4 為半雙工(RS485)兩線模式,如圖 8 所示,下載程序后斷電重啟生效。不同的 Mode 數值代表不同的工作模式,如表 1所示。
該設置僅適用于 Modbus(RTU)指令集,不適用 Modbus 指令集。

圖8 DB塊模式

表1 各種模式列表
總結:以上內容是針對經常出現(xiàn)的 S7-1200/1500 Modbus RTU 通信故障的處理總結,更多內容歡迎與我們交流。