(西北工業(yè)大學(xué) 自動化學(xué)院,西安 710129)
工業(yè)用PLC環(huán)境適應(yīng)性強(qiáng),可靠性高,對工業(yè)環(huán)境中常見的電磁干擾[1]、潮濕狀態(tài)具有很好的耐受力,對自身的各類異常具備良好的自我檢測能力[2]。工業(yè)用PLC大多能夠加裝各類擴(kuò)展模塊,以支持豐富多樣的用戶需求[3],三菱Q系列PLC是其中的典型代表[4]。
三菱Q系列PLC主要使用QJ71C24系列通信模塊與外部智能設(shè)備通信[5]。該系列模塊可選用無順序協(xié)議通過自定格式報文與自定控制步驟實(shí)現(xiàn)通信功能。無順序協(xié)議在接收方式上分為用于接收固定長度數(shù)據(jù)的“接收結(jié)束數(shù)據(jù)數(shù)”與接收可變長度且具有固定結(jié)尾數(shù)據(jù)的“接收結(jié)束代碼”兩種[6]。
智能設(shè)備在工業(yè)應(yīng)用中具有運(yùn)行效率高、故障診斷能力強(qiáng)的特點(diǎn)[7]。但其連續(xù)通信時所發(fā)送報文的長度與報文結(jié)尾可能不固定,設(shè)備與Q系列PLC通信協(xié)議不匹配現(xiàn)象時有發(fā)生。再者,智能設(shè)備使用的通信連接接口各異,對于三線式RS-232通信及兩線式RS-485通信,通信模塊的線路連接與數(shù)據(jù)處理方法并不直接。因此開拓一種使Q系列PLC能夠接收變長度無固定結(jié)尾數(shù)據(jù)并兼容多種通信協(xié)議的自由通信方法,對于擴(kuò)展Q系列PLC對智能設(shè)備的支持范圍、節(jié)省用戶使用成本具有重要意義。如無特別標(biāo)注,本文所指通信模塊特指QJ71C24N。
智能設(shè)備的通信端口各異,通信模塊原生支持標(biāo)準(zhǔn)DB9式RS-232以及螺栓端子排式RS-422串行通信接口,于此硬件基礎(chǔ)上可擴(kuò)展出三線式RS-232(TXD、RXD、GND)與兩線式RS-485(A、B)串行通信的接口線路連接與配套數(shù)據(jù)處理方式。
對于三線式RS-232通信智能設(shè)備。由于通信模塊于通信過程中持續(xù)對RS-232端口的RTS/CTS、DTR/DSR端子進(jìn)行檢測,故三線式連接時不可簡單將TXD、RXD、GND端子直接引出。經(jīng)實(shí)驗(yàn),可通過圖1方式接線繞過端子檢測并建立三線式RS-232串口通信。顯然的,依此接線時不可進(jìn)行DTR/DSR控制,但可進(jìn)行DC代碼控制。為了對抗可能影響通信的較大外部噪聲,應(yīng)利用連接電纜的屏蔽層將設(shè)備與通信模塊的FG端子連接,并且將RXD、TXD信號連接線分別與GND雙絞連接[6]。
圖1 三線式RS-232串口通信鏈接
對于兩線式RS-485通信設(shè)備。通信模塊的RS-422與RS-485共用接口,使用兩線制RS-485通信時應(yīng)如圖2接線,終端電阻為110 Ω 0.5 W[6]。然而受模塊限制,RS-422與RS-485所在通信通道無法被設(shè)定為半雙工模式,這意味著使用圖2接線方式時,模塊發(fā)出的數(shù)據(jù)必然會被自身所接收,由此應(yīng)采取如下數(shù)據(jù)處理方式:使用固定結(jié)尾接收方式時,需去除前n位,n為發(fā)送報文長度。而使用固定接收長度方式時,需要將原指定接收長度延長n位長度,以包容發(fā)送報文,再于接收報文處理時將報文前n位去除。類似于232接口,可連接電纜的屏蔽層與模塊FG端子應(yīng)對外部噪聲[6]。
圖2 兩線式RS-485串口接線
通信模塊默認(rèn)支持3大通信協(xié)議:MELSEC通信協(xié)議、無順序協(xié)議、雙向協(xié)議。MELSEC通信協(xié)議是由目標(biāo)通信設(shè)備主動對CPU的軟元件數(shù)據(jù)、程序進(jìn)行讀寫;無順序協(xié)議通信是由通信模塊以任意用戶定義的報文格式及傳送控制步驟對任意數(shù)據(jù)發(fā)送接收;雙向協(xié)議為通信雙方設(shè)備使用“雙向協(xié)議”報文格式及傳送控制步驟實(shí)現(xiàn)收發(fā)功能的通信方式。智能設(shè)備可使用的通信方式出廠即已固定,因此通信方式上只有無順序協(xié)議通信可選。
無順序協(xié)議通信原生支持“接收結(jié)束數(shù)據(jù)數(shù)”與“接收結(jié)束代碼”兩種數(shù)據(jù)接收方式?!敖邮战Y(jié)束數(shù)據(jù)數(shù)”方式即當(dāng)所接收報文達(dá)到指定接收長度后認(rèn)為報文完結(jié),用于接收固定長度數(shù)據(jù)。“接收結(jié)束代碼”方式即當(dāng)接收到指定結(jié)束代碼時認(rèn)為報文完結(jié),用于接收變長度有固定結(jié)尾的數(shù)據(jù)[6]。
若用戶使用的智能設(shè)備通信方式與智能模塊配合良好(長度始終固定或存在固定結(jié)尾),此時使用模塊的自動刷新功能不失為一種方便可靠的通信實(shí)現(xiàn)方法。反之應(yīng)使用順控程序配合無順序協(xié)議通信以求最大的兼容范圍及使用靈活性。
順控程序的一般過程為:首先保證通信前線路凈空。發(fā)送數(shù)據(jù)時,將PLC中準(zhǔn)備好的通信數(shù)據(jù)存儲至某一系列連續(xù)軟元件組,調(diào)用發(fā)送指令,數(shù)據(jù)由模塊發(fā)出。接收數(shù)據(jù)時,依據(jù)接收讀取請求信號調(diào)用數(shù)據(jù)接收指令,將緩沖存儲區(qū)內(nèi)數(shù)據(jù)存儲至目標(biāo)連續(xù)軟元件組。為保證半雙工接口線路凈空可使用應(yīng)答式通信,即PLC向目標(biāo)設(shè)備發(fā)出通信要求后于一定時間范圍內(nèi)等待目標(biāo)回文,若通信錯誤或超時則重發(fā)通信要求重試通信,通信要求多次重發(fā)后仍沒有正確回文則認(rèn)為通信失敗,置位相應(yīng)標(biāo)志位。
常用收發(fā)控制指令為G.INPUT與G.OUTPUT[8]。數(shù)據(jù)發(fā)送指令G.OUTPUT在結(jié)構(gòu)化梯形圖模式中構(gòu)建方式如圖3所示。其中參數(shù)數(shù)組包括發(fā)送通道指定(1或2)、發(fā)送數(shù)據(jù)長度指定、由系統(tǒng)賦值的發(fā)送結(jié)果三項(xiàng)。發(fā)送許可置位后,指令將以緩存軟元件為起始的連續(xù)指定個數(shù)的軟元件內(nèi)的數(shù)據(jù)發(fā)出。結(jié)束數(shù)組由指令是否結(jié)束與結(jié)束是否正常兩個標(biāo)志位組成。此外發(fā)送指令還有上升沿觸發(fā)的GP.OUTPUT形式。
圖3 G.OUTPUT
類似地,數(shù)據(jù)接收指令G.INTPUT構(gòu)建方式如圖4所示。特別地,參數(shù)數(shù)組包括接收通道指定、接收數(shù)據(jù)允許數(shù)指定、由系統(tǒng)賦值的接收結(jié)果、接收數(shù)據(jù)計數(shù)值共4項(xiàng)。其中接收數(shù)據(jù)數(shù)計數(shù)值用于統(tǒng)計當(dāng)前緩沖存儲器中已接收到的數(shù)據(jù)位數(shù),接收數(shù)據(jù)允許數(shù)用于指定緩存軟元件中可存儲的接收數(shù)據(jù)的長度。連續(xù)的數(shù)據(jù)由串口輸入PLC后將持續(xù)存入模塊的操作系統(tǒng)區(qū)域,模塊依據(jù)“接收結(jié)束代碼”或“接收結(jié)束數(shù)據(jù)數(shù)”方式對操作系統(tǒng)區(qū)域內(nèi)數(shù)據(jù)進(jìn)行接收完成判斷[6]。若接收完成則接收讀取請求(X3/X4)置位,實(shí)際接收數(shù)據(jù)由操作系統(tǒng)區(qū)域復(fù)制存儲于601H/A01H開始的緩沖存儲器地址中,接收數(shù)據(jù)計數(shù)值保存于地址600H/A00H。順控程序調(diào)用G.INPUT則是將緩沖存儲器中的數(shù)據(jù)賦值給用戶于G.INPUT指令中指定的接收數(shù)據(jù)計數(shù)值與接收數(shù)據(jù)存儲軟元件,并返回接收狀態(tài)。一個方便的順控程序接收方式是將“接收許可”直接指定為X3/X4,如此當(dāng)有接收結(jié)尾被確認(rèn)則直接可將指定軟元件賦值。
圖4 G.INPUT
顯然地,若接收到的報文內(nèi)容異常,即“接收結(jié)束代碼”確認(rèn)方式中結(jié)束代碼丟失或改變,或“接收數(shù)據(jù)數(shù)”方式中數(shù)據(jù)丟失或增添任何一個單位數(shù)據(jù),則接收結(jié)尾失效。理想情況下,使用“接收結(jié)束代碼”方式時本次接收數(shù)據(jù)會同下次的接收數(shù)據(jù)發(fā)生單次“拼接”,而使用“接收數(shù)據(jù)數(shù)”方式會致使往后的所有數(shù)據(jù)在發(fā)生“拼接”的同時均前后移動出現(xiàn)“錯位”,即連續(xù)發(fā)生“錯位拼接”。對于單次“拼接”情況可由報文中的校驗(yàn)位將個別異常報文予以濾除。對于連續(xù)“錯位拼接”情況應(yīng)舍棄干擾接收的操作系統(tǒng)區(qū)域內(nèi)的殘余數(shù)據(jù),并給順控程序予一個開關(guān)量提示。模塊提供一個專用指令ZP.CSET[8],構(gòu)建方式如圖5所示。參數(shù)數(shù)組包括兩個固定項(xiàng):執(zhí)行類型(指定為0)、請求類型(指定為4),一項(xiàng)系統(tǒng)賦值的結(jié)束狀態(tài),以及其他108項(xiàng)系統(tǒng)用軟元件。若某一通道正在執(zhí)行OUTPUT、INPUT、CSET指令時不可使用CSET指令,否則將觸發(fā)“專用指令同時執(zhí)行錯誤”(錯誤代碼0x7FF0,該錯誤將使模塊報故,順控程序停止),正在執(zhí)行CSET指令時調(diào)用INPUT指令不會出現(xiàn)該錯誤。需要注意的是,指令梯形圖中插槽號軟元件為字符串形,如0槽應(yīng)為“U00”。
圖5 ZP.CSET
通信模塊對于變長度無固定結(jié)尾報文并未提供直接接收方法。這里提出一種改良自“接收結(jié)束數(shù)據(jù)數(shù)”接收方式,可接收變長度無固定結(jié)尾報文的接收方法,其大體思路如下:
智能設(shè)備大多可采取應(yīng)答式的收發(fā)方式,主機(jī)發(fā)送通信要求后智能設(shè)備產(chǎn)生的正確回文的數(shù)據(jù)位數(shù)是一定的,連續(xù)的通信可被拆分為若干次針對預(yù)估正確回文長度的固定長度報文通信。
雖然模塊“接收結(jié)束數(shù)據(jù)數(shù)”接收方式的結(jié)束數(shù)據(jù)數(shù)設(shè)定在初始化時即已被燒寫入模塊,但該參數(shù)還被保存于一個緩沖存儲器中,可通過緩沖存儲器訪問指令將其修改。
具體操作流程為:將智能模塊以“接收結(jié)束數(shù)據(jù)數(shù)”接收方式初始化,接收結(jié)束代碼設(shè)定為0xFFFF即無接收結(jié)束代碼。主機(jī)發(fā)送通信要求前調(diào)用緩沖存儲器數(shù)據(jù)寫入指令將存有接收結(jié)束數(shù)據(jù)數(shù)的緩沖存儲器0xA4/0x144置為正確回文的數(shù)據(jù)位數(shù),并啟動一個定時器。通信順利情況下智能設(shè)備回文正確地被通信模塊以固定長度報文接收,在下次通信要求發(fā)送前再次修改接收結(jié)束數(shù)據(jù)數(shù)至新的正確回文長度,重復(fù)該流程。反之異常情況有兩種:一種是通信模塊接收到指定長度報文,但原始回文比設(shè)定長度更長或者所收到報文與原始回文內(nèi)容不同而長度相同,這種情況可通過回文的校驗(yàn)位將異常報文排除,之后由主機(jī)重新發(fā)送通信要求,再次通信。另一種異常情況是主機(jī)一直沒有收到回文或收到的回文長度小于指定長度,此時“接收讀取請求”無法置位,這類異常可通過設(shè)定報文長度時啟動的定時器排除,即于定時時間內(nèi)未完成通信要求則主機(jī)重發(fā)通信要求,再次要求通信。多次超時異??勺鳛橹悄茉O(shè)備離線的判斷依據(jù)。
通信過程中模塊可能發(fā)生溢出出錯、成幀出錯、奇偶性出錯等通信模塊故障,通信模塊“ERR”燈被點(diǎn)亮,它們將使通信模塊完全停止工作。這類故障于有人值守系統(tǒng)可通過PLC的機(jī)械復(fù)位開關(guān)復(fù)位解決,無人值守長時運(yùn)行系統(tǒng)則需要PLC使用順控程序自行排除故障。系統(tǒng)在調(diào)試階段應(yīng)盡可能模擬實(shí)際使用中的外部電磁條件,收集與推測可能出現(xiàn)的故障錯誤代碼并制定故障排除方案。
以無順序協(xié)議通信模塊1通道成幀出錯(錯誤代碼7F68)的排除為例:模塊故障,ERR燈亮起,根據(jù)出錯端口的不同X0E/0F被置位,這里被置位的為X0E。從緩沖存儲器地址0x201/202中讀取亮燈原因,0x201此時b1即SIO位置位,0X202的b15即CH1 ERR被置位。以此跳轉(zhuǎn)至地址0X258通道1接收出錯出錯代碼存儲緩沖存儲器中獲取錯誤代碼。其他錯誤對應(yīng)的緩沖存儲器還有0x268通道2接收出錯、0x203開關(guān)設(shè)置與模式切換出錯、0x257/267數(shù)據(jù)發(fā)送出錯等。以保存的錯誤代碼為索引執(zhí)行相關(guān)處理步驟,這里強(qiáng)制執(zhí)行G.INPUT指令將不必要數(shù)據(jù)舍去并執(zhí)行ZP.CSET指令清空操作系統(tǒng)區(qū)域內(nèi)數(shù)據(jù)。于出錯信息初始化請求區(qū)(地址0x00/01)賦值00FF /C0FF清除出錯代碼,并將將線圈出錯信息初始化請求Y0E/0F置位,完成故障滅燈,模塊故障排除通信重啟。
如圖6所示,驗(yàn)證系統(tǒng)由三線式RS-232通信下的一臺RW3-3035冷卻機(jī),兩線式RS-485通信下的數(shù)臺D08-8C溫度控制器與數(shù)臺AI518P流量積算儀組成。通信線纜額外由通信模塊端子根部接出至測試PC串口,測試PC通過該線路在PLC與智能設(shè)備通信時發(fā)送若干位干擾或模擬異常設(shè)備發(fā)送錯誤報文,以檢測本通信方法對異常的耐受能力。測試PC還通過PLC數(shù)據(jù)線監(jiān)視當(dāng)前PLC緩沖存儲區(qū)與相應(yīng)軟元件儲值情況,作為測試結(jié)果評判依據(jù)。
圖6 驗(yàn)證系統(tǒng)
溫度控制器使用AIBUS通信協(xié)議[9],流量積算儀使用自有通信協(xié)議,冷卻機(jī)使用Modbus通信協(xié)議[10]。前兩者接入同一RS-485端口,采用應(yīng)答式通信,出廠預(yù)設(shè)通信報文首字節(jié)均為本智能設(shè)備地址,且波特率、數(shù)據(jù)位、停止位相同,這也是他們共線通信的基礎(chǔ)。
自由通信方法可實(shí)現(xiàn)不同協(xié)議下“變長度無固定結(jié)尾”數(shù)據(jù)的接收,即能夠共線但使用不同協(xié)議的智能設(shè)備可與PLC在沒有固定報文結(jié)尾的情況下實(shí)現(xiàn)變長度報文通信。 PLC以AIBUS通信協(xié)議發(fā)送 “81 81 52 0C 00 00 53 0C”意為要求地址為81的溫度控制器回報當(dāng)前設(shè)定精度。返回報文“C4 08 B8 0B 64 60 81 00 62 75” 報文共10字節(jié)無固定結(jié)尾,校驗(yàn)位“62 75”校驗(yàn)正確,目標(biāo)參數(shù)“81 00”即小數(shù)精度0.01同時顯示減一位,實(shí)時溫度“C4 08”即22.44℃,設(shè)定溫度“B8 0B” 即30.00℃。此時溫度控制器儀表畫面顯示:實(shí)時溫度22.4℃(精度0.1),設(shè)定溫度30.00℃,此時智能模塊正確完成一次無干擾10字節(jié)數(shù)據(jù)接收。PLC以流量積算儀自有協(xié)議發(fā)送“02 03 00 02 00 08 E5 FF” 意為要求訪問地址為02的流量積算儀的狀態(tài)。返回報文“02 03 10 02 01 08 10 03 00 01 13 0F 0F 00 00 00 12 11 80 49 60”,該報文共21字節(jié)無固定結(jié)尾,其中CRC校驗(yàn)“49 60”校驗(yàn)正確,瞬時流量“02 01 08 10”即0.812 L/Min,累積流量“03 00 01 13 0F 0F”即3.103 L。流量積算儀面板顯示流量0.812 L/Min,累積流量3.092 L,智能模塊接收21字節(jié)報文正常。通過以上兩次連續(xù)收發(fā)可證實(shí)智能模塊此時具備對可共線智能設(shè)備使用不同通信協(xié)議接收變長度無固定結(jié)尾報文的能力。
自由通信方法可實(shí)現(xiàn)對于異常數(shù)據(jù)的濾除:將PLC與智能設(shè)備間連接斷開,由測試PC模擬異常智能設(shè)備,發(fā)送超長、不足長度、錯誤內(nèi)容的回文,并使用GX Works2監(jiān)視PLC軟元件置位情況[11],以此檢測通信方法對異常數(shù)據(jù)的適應(yīng)性。PLC發(fā)送“01 05 00 18 00 FF 0D 8D”意為對01地址流量積算儀流量清零,智能設(shè)備發(fā)送的正確回文應(yīng)與PLC發(fā)送報文相同。測試PC回文“01 05 00 18 00 FF 0D”模擬回文缺失字節(jié)情況,PLC于指定時間內(nèi)未收到足夠長度數(shù)據(jù),定時器超時,正確認(rèn)定數(shù)據(jù)異常。重發(fā)流量清零報文,要求重新通信。測試PC回文“AA 05 00 18 00 FF 0D”模擬字節(jié)錯誤情況,由監(jiān)視發(fā)現(xiàn)報文CRC校驗(yàn)失敗,數(shù)據(jù)異常被正確識別,PLC再次重發(fā)流量清零報文。測試PC回文“01 01 05 00 18 00 FF 0D 8D”模擬回文超長情況,此時PLC緩存軟元件收數(shù)據(jù)如圖7所示,超長部分不被接收,且由于已接收部分CRC校驗(yàn)失敗,此次通信數(shù)據(jù)異常判定正確。由于連續(xù)3次接收數(shù)據(jù)異常,PLC正確認(rèn)定智能設(shè)備或通信線路失能,對應(yīng)離線標(biāo)志位置位。測試PC通過監(jiān)視還發(fā)現(xiàn)以上三次通信均由于正確觸發(fā)數(shù)據(jù)異常判定而調(diào)用過ZP.CSET指令,操作系統(tǒng)區(qū)域內(nèi)錯誤數(shù)據(jù)按設(shè)定被清除,正確消除單次通信失敗對往后通信的負(fù)面影響。至此可認(rèn)為智能模塊對異常數(shù)據(jù)報文的適應(yīng)性良好。
圖7 超長回文緩沖軟元件監(jiān)視
自由通信方法具備通信模塊故障的自恢復(fù)能力:在PLC與智能設(shè)備通信過程中由測試PC強(qiáng)行于線路中發(fā)送若干位干擾數(shù)據(jù),以此引發(fā)通信模塊故障。由PLC錯誤履歷中發(fā)現(xiàn)若干次成幀出錯、奇偶性出錯,但肉眼未見模塊ERR燈亮起,同時由監(jiān)視發(fā)現(xiàn)通信過程中除少量報文由于異常報文濾除功能出現(xiàn)丟失外繼續(xù)進(jìn)行??赏茢嗤ㄐ拍K曾出現(xiàn)過使模塊失能的故障,PLC執(zhí)行了錯誤自恢復(fù)程序,故障被順控程序消除。可見通信方法錯誤自恢復(fù)能力良好,具備長時無人值守工作能力。
以上介紹了Q系列PLC基于QJ71C24N通信模塊的擴(kuò)展通信方法,該方法實(shí)現(xiàn)了模塊的自由通信,拓寬了模塊的應(yīng)用場景,具備“變長度無固定結(jié)尾”數(shù)據(jù)接收、異常數(shù)據(jù)消除與通信模塊故障自恢復(fù)能力。