Modbus RTU 是一種串行通信協(xié)議,由于具有協(xié)議透明,實現(xiàn)成本低,簡單易用等諸多特點(diǎn),至今仍然廣泛應(yīng)用在工業(yè)控制的各個領(lǐng)域。
為了通信可以長期穩(wěn)定的運(yùn)行,并且可以在故障時可以及時處理和排查,特梳理此文,用做參考學(xué)習(xí)使用。
診斷工作以 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 通信故障,并且結(jié)合 Modbus RTU 通信指令狀態(tài)代碼,可以高效率地解決在現(xiàn)場中碰到的各類Modbus RTU 通信問題,故障診斷判斷流程如圖 2 所示。

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

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

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

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

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

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

圖8 DB塊模式

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