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