plc報文如何分析?
PLC通訊報文解釋
一、 規則
(1)下行和上行報文分別用“發:”和“收:”區別開來。在顏色上也不同,發為綠色,收為藍色。報文不論對錯,只要是從串口和得到的數據都會顯示出來。所以有時可以直接根據報文顯示的情況發現一些問題。具體見第二大條。
(2)報頭和報尾:所有完整報文幀的報頭一定以字符“@”開始,最后以“*”和一個回車符(界面上是不可見的,但如果用鼠標左鍵選中報文尾部,是可以看到此字符確實存在且能夠被選擇,只是無法顯示出來)結束。如果沒有這兩個明顯的字符,此幀是無效幀,不會參與處理。
(3)PLC回應信息符(也就是指編程手冊中的結束碼):一共用兩個字符來表示,這是對當前通訊狀態的一個比較重要的指示,表示了本次問答的PLC與后臺間數據的交換是否正常。具體各數值的意義見第二大條。本PLC回應信息符位于回答幀的第六和第七兩個字符。如正常回答時,前面一部分報文會是:@01RD00 0000……。PLC回復的回應信息符就是這里的字符D后面緊跟的那兩個字符。這里00是表示正常回應,如果FCS校驗也正確的話,那么一切都OK,可以對本幀數據進行處理了。注意,如果是某些遙控或者強制等WR命令時,PLC回復的回應信息符就是字符R后面緊跟的那兩個字符了。非00表示出錯了。
(4)協議是遵守MODBUS協議的。所以如果對MODBUS協議有一定了解的話,本報文是很容易看懂的。無論上行還是下行報文,幀格式都為:
報頭(即@)+ 機號 + 命令 + 起始地址 + 長度 + FCS校驗 + 報尾(即 *+回車符 )
參考報文:
發:@01RD0020001155*
收:@01RD00 0001 300E 0000 0000 0000 0000 0000 0000 0000 0000 0000 55*
報頭和報尾不再贅述。
機號:一號機為01,二號機為02,為PLC設置里面下傳時設定,需對應起來。
命令:常用到的是讀命令RD和寫命令WR、WD。以前的另一種PLC型號出現過擴展區E區,所以對應還有RE,WE等命令。
起始地址:表示本幀的讀或者寫操作的對象區域開始處。與PLC程序里面的內存區完全對應。如協議中規定在PLC里面放置當前水機事故個數到D0020里面。那么上面例子中的RD0020….就會對從D0020這個寄存器開始讀起。返回報文的第一個字就是D0020,也就是當前的事故條數了。
長度:要進行讀或者寫操作區域的長度。
FCS校驗:PLC硬件自動響應上傳報文及自動計算和校驗FCS校驗碼,不用PLC程序進行額外的編寫。
報文中各字符在程序中體現的數據含義的在參考說明書中的設置后,再結合看第三條的詳細解釋。
二、 出錯提示
(1)報文是亂碼,可能原因是RS422的接線出錯,請仔細檢查。也可能是PLC的第四個通訊撥碼沒有撥(一般發貨前會在一樓聯調時撥好)。
(2)運行過程中,數據不來,或者事故不上傳,遙測遙信數據不對等其它不正常情況。首先是要根據回應信息符來判斷,如果回應信息幀正確(為00),那么就要查是不是PLC程序中出了問題了。不為00時,要根據下面的列表來解決問題了。
字符
內容
可能原因
改正措施
00
正常完成
01
運行方式下不執行
PLC在運行方式下,不能執行發送的命令
檢查命令和PLC模式之間的關系
02
監控方式下不執行
PLC在監控方式下,不能執行發送的命令
03
UM寫保護
PLC的UM處于寫保護
PLC上DIP開關的腳1置OFF
04
地址超出區域
設置在SV讀命令或SV修改命令中地址超出65,535最大值
改正程序的地址設置,再傳送命令
13
FCS錯誤
FCS計算錯誤或者噪聲干擾
檢查FCS、確定是否是噪聲干擾
14
格式錯誤
命令格式錯誤或者不可分割的命令被分割
檢查格式,再送命令
15
入口碼數據錯誤
數據超出規定范圍或太長
修改數據再傳送傳送命令
16
命令不不支持
程序中不存在SV讀命令或SV修改命令中指定操作數
改正命令和程序
18
幀長度錯誤
超過最大的幀長度132個字節(如幀超過280個字節,接收溢出標志變ON,不再返回應答)
檢查命令,必要是分成若干幀
19
不執行
讀的項沒有用組合命令(QQ)登記過
在批形式讀之前,執行QQ命令登記讀的項
23
用戶存儲器寫保護
C200HX/HG/HG上DIP開關腳1為ON
置為OFF
A3
傳送數據時因FCS錯誤引起中止
在第二幀或后面的幀中出現FCS錯誤
檢查FCS計算方法、噪聲干擾,再送
A4
傳送數據時因格式錯誤引起中止
命令格式與第二或后面的幀中字節數不匹配
檢查格式再傳
A5
傳送數據時因入口碼數據錯誤引起中止
在第二或后面的幀中有入口碼數據錯誤
修改數據再傳送命令
A8
傳送數據時因幀長度錯誤引起中止
第二或后面幀的長度超過最大值132個字節
保持幀不超過132字節
三、 具體舉例說
選擇的是黃洋口的報文,是一臺PLC帶兩臺機組,數據量比較密集點,所以回復報文的數據位置和常規使用的PLC中數據的擺放位置是略有提前了,但不影響此處對報文進行解釋。
發:@01RD0020001155*
收:@01RD00 0000 300E 0410 A040 2508 1800 0200 0000 0000 0000 0000 55*
發:@01RD0031003056*
收:@01RD00 6101 5C01 6401 0100 3A01 3F01 3501 8A13 2439 9D0C D003 CE00 C900 CA00 F300 0F01 02F0 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 22*
顯然PLC的應答報文中的結束字符,也就是回應信息幀是正常的“00”,所以是正常報文。
報文按00200011,00310030,00610030,0091030的規則發下去,遙信和事故個數幀是十一個字一查詢(根據協議第一個字是事故個數,后面十個連續字為遙信狀態開關量),而每條遙測下發報文的“長度”字符是三十個字一加。
就上面的報文內容來講:
遙信和事故個數幀內容包括:(1)無事故產生。(2)開關量有產生的,具體內容從0021~0030這十個字的二進制碼來進行對位。分別對應第一個遙信到第一在六十個遙信量。
遙測幀說明了數據上正常上傳,顯示的是十六進制碼。程序進行計算后轉送到RDCSERVER中去讓別的程序調用。
注意本處是特殊的協議所以沒有講電壓、電流、功率等具體數據的位置,一般也用不到的。得到報文,再根據PLC.INI文件中的正確設置,程序會將各數據對應放好。