王珍珠,劉 偉,劉占清
(1.中國科學院研究生院,北京 100039;2.中國科學院 沈陽計算技術研究所,沈陽 110168;3.沈陽高精數(shù)控技術有限公司,沈陽 110168)
可編程控制器是一種數(shù)字運算操作的電子系統(tǒng),專為在工業(yè)環(huán)境應用而設計的。它采用可編程序的存儲器,用來在其內(nèi)部存儲執(zhí)行邏輯運算、順序控制、定時、計數(shù)與算術運算等操作的指令,并通過數(shù)字式、模擬式的輸入和輸出,控制各種類型的機械或生產(chǎn)過程??删幊炭刂破骷捌溆嘘P外部設備,都應按易于是工業(yè)控制系統(tǒng)形成一個整體,易于擴充其功能的原則設計[1-2]?;谖⑻幚砥鞯目删幊炭刂破?Programmable Logic Controller-PLC)是通過用戶編程來控制工業(yè)設備運行的控制系統(tǒng)[3]。隨著PLC在工業(yè)控制領域中越來越發(fā)揮特有的優(yōu)勢,數(shù)控系統(tǒng)(CNC)對PLC的監(jiān)控作為PLC應用過程的一個重要環(huán)節(jié)也顯得至關重要。S.Da’na等設計并實施了一種通過TCP/IP和GSM網(wǎng)絡對PLC程序進行監(jiān)控的平臺[3]。Sung Jung Mulman提出一種利用神經(jīng)網(wǎng)絡對PLC程序進行監(jiān)控和錯誤預測的算法[4]。張志強等基于PC-PLC控制系統(tǒng)串口通訊技術和對串口通訊故障問題的研究,提出了運行于PC和PLC間的串口通訊監(jiān)控程序的設計方法[5]。姜海等提出了以MCGS組態(tài)軟件為開發(fā)平臺,實現(xiàn)可編程控制器工作狀態(tài)監(jiān)控的方法[6]。文獻[7]介紹了運用 VC++實現(xiàn) PC機和PLC串行通信的編程方法,開發(fā)了上位機監(jiān)控系統(tǒng)。文獻[8]提出了一種PC機和主控節(jié)點通過串口通信實現(xiàn)對監(jiān)控節(jié)點進行監(jiān)控的方式。文獻[9]提出了一種基于PC-PLC結構的以組態(tài)王為平臺的監(jiān)控方案。本文提出的監(jiān)控算法是在數(shù)控系統(tǒng)中的PLC梯形圖編輯器的編輯模式下,通過設置梯形圖圖元顯示位進行實時監(jiān)控PLC邏輯狀態(tài),可正確有效地對PLC系統(tǒng)進行實時監(jiān)控。
梯形圖[10]是 IEC61131-3 標準[11]規(guī)定的一種圖形化編程語言,它將PLC指令的圖形符號通過串聯(lián)或并聯(lián)結構連接在一起,形成簡單、直觀、具有特定功能的流通圖。PLC梯形圖圖元的數(shù)據(jù)結構如下:
In:為1表示該節(jié)點左面的邏輯為通路,否則不通。
Out:節(jié)點為常開常閉節(jié)點時,Out為1表示該節(jié)點需顯示上一掃描周期的值,并將當前周期的值暫存在curIn;Out為0顯示當前周期值;虛節(jié)點Out為1表示虛節(jié)點的后續(xù)節(jié)點顯示位為1,Out為0表示后續(xù)節(jié)點顯示位為0或者不存在后續(xù)節(jié)點。
CNC和PLC的通信是通過數(shù)據(jù)報的傳輸來實現(xiàn)的。該數(shù)據(jù)報結構包括首部和有效負載兩部分。數(shù)據(jù)報格式如圖1所示。
首部包括通信協(xié)議(Communications Protocol)、有效負載長度(Length of Payload)、有效負載首地址(First Address of Payload),共占用3個字節(jié)。
有效負載的數(shù)據(jù)單元包括邏輯名LOGN(Logical name)、字操作數(shù) WODN(Word Name)、對照位 RB(Reference Bit)、地址 ADDR(Address)、值 VALUE(Value)。
圖1 數(shù)據(jù)報格式
(1)通信協(xié)議CP占一個字節(jié),是CNC和PLC通信規(guī)則的集合。PLC向CNC發(fā)送請求,CNC對PLC的請求進行應答。PLC向CNC請求數(shù)據(jù)時將CP置為2(010表示字操作數(shù)改變的數(shù)據(jù)請求)或6(110表示字操作數(shù)未改變的數(shù)據(jù)請求),終止請求時CP置為0。若CNC收到PLC的請求,則準備請求數(shù)據(jù)值送回給PLC,將CP置為3,若在CNC準備數(shù)據(jù)的過程中出錯則將CP置為5送回給PLC。在此共五種信號,僅用了8位中的3位,剩余5位用于擴展。通信協(xié)議位圖如圖2。
圖2 通信協(xié)議位圖
(2)有效負載長度LP占一個字節(jié),是PLC向CNC請求的數(shù)據(jù)的個數(shù)。梯形圖一屏共12行,一行最多有9個節(jié)點,所以有效負載長度最大值為12×9=108,最小值為0(只有首部無有效負載)。有效負載數(shù)據(jù)單元的長度為31字節(jié),有效負載長度的范圍是:0×9×31~12×9×31字節(jié)。
(3)有效負載的首地址FAP占一個字節(jié),是PLC向CNC請求數(shù)據(jù)的首地址。該算法將按照有效節(jié)點的個數(shù)建立一個有效負載的動態(tài)數(shù)組。
(4)邏輯名LOGN占13個字節(jié),是梯形圖中節(jié)點及節(jié)點參數(shù)的邏輯名稱。
(5)字操作數(shù)WODN占13個字節(jié),是邏輯名對應的字操作數(shù)。
(6)對照位RB占1個字節(jié),字操作數(shù)與對照位相與得到邏輯值。
(7)字操作數(shù)的地址 ADDR,是指向 INT的指針。
(8)VALUE占2個字節(jié),將字操作數(shù)地址存放的內(nèi)容取出賦值給VALUE。CNC就是根據(jù)這個VALUE值來進行動態(tài)顯示的。
PLC梯形圖中圖元的類型不同導致實時顯示的依據(jù)不同。若圖元(類型為多路選擇器除外)的邏輯值為1則設置節(jié)點的visited為1,顯示為綠色,否則顯示為黃色(缺省顏色),而在多路選擇器中,visited為1表示多路選擇器的八條路徑中至少有一條路徑是通的,僅選擇最靠上面的一條通路顯示綠色;visited為時,代表多路選擇器沒有通路,八條路徑均顯示為黃色。
該算法設計了乒乓快捷操作鍵(“ALT+D”和“SPACE”)操作?!癆LT+D”鍵控制梯形圖“編輯模式”/“監(jiān)控模式”之間的互換?!癝PACE”鍵為暫停/繼續(xù)掃描鍵?!癙gUp”和“PgDn”對監(jiān)控模式下的梯形圖進行上下翻頁。
該監(jiān)控模塊包括二大部分的算法,一是監(jiān)視前的準備,二是實時監(jiān)視。
監(jiān)視前的準備包括程序初始化,建立數(shù)據(jù)鏈,建立有效負載的動態(tài)數(shù)組,獲得數(shù)據(jù)。
3.1.1 程序初始化
程序初始化是對圖元節(jié)點中的In,Out,CurIn,visited四種標示位設置初始值,并對要求顯示上一周期的圖元節(jié)點作標記(Out的值為1)。如果Out為1,則要將當前周期的邏輯值暫存在CurIn里,以備下一周期顯示使用。
3.1.2 建立數(shù)據(jù)鏈
建立數(shù)據(jù)鏈是建立有效節(jié)點所涉及的參數(shù)邏輯名的數(shù)據(jù)鏈,首先要計算有效節(jié)點。在任一時刻,數(shù)控系統(tǒng)中的PLC梯形圖編輯器屏幕最多能顯示12行梯形圖,所謂有效節(jié)點是指屏幕上的梯形圖中構成完整邏輯的節(jié)點,靠近屏幕上部和下部的圖符如果要與12行之外的圖符才能構成完整的梯形圖邏輯則不計算在內(nèi)。把一屏中除去有效節(jié)點的剩余節(jié)點稱之為非有效節(jié)點。
建立當前屏幕有效節(jié)點的數(shù)據(jù)鏈,再通過該數(shù)據(jù)鏈建立動態(tài)數(shù)組,而不是直接利用整個梯形圖的鏈結構建立當前屏幕的動態(tài)數(shù)組,是因為建立動態(tài)數(shù)組需知道當前所建數(shù)組的確切長度。當然,也可利用整個梯形圖的鏈結構建立一條有效節(jié)點的指針鏈,但所占內(nèi)存要多很多。因此,對于內(nèi)存資源有限的數(shù)控系統(tǒng)來說,用動態(tài)數(shù)組更為合適。
3.1.3 建立有效負載的動態(tài)數(shù)組
根據(jù)3.1.2節(jié)中建立的有效節(jié)點數(shù)據(jù)鏈中的邏輯名,得到動態(tài)數(shù)組元素字操作數(shù)、對照位,并將動態(tài)數(shù)組的首地址賦值給有效負載的首地址FAP。
字操作數(shù)根據(jù)邏輯名的不同而獲得的方式不同:
(1)邏輯名以T開頭代表定時器,以C開頭的代表計數(shù)器,以P開頭的代表脈沖,這幾種操作數(shù)統(tǒng)稱元操作數(shù)。它們的字操作符與邏輯名相同。而RB的設置,除計數(shù)器中的CxxWxx的 RB為255之外,其余的情況計數(shù)器(CxxIxx,CxxAxx,CxxZxx,CxxRxx)、定時器和脈沖的RB均為1。
(2)邏輯名以W開頭的代表是字操作數(shù),其LOGN和WODN是一樣的,RB的值均為255。
(3)邏輯名以U,I開頭的代表輸入或輸出假設UabKcd對應的字操作數(shù)WODN為WabKef,其中ef=cd/8,RB=2cd%8。
3.1.4 獲得數(shù)據(jù)
模擬版本中獲得數(shù)據(jù)是通過讀文件得到的,真實版本中獲得數(shù)據(jù)是從I/O映像表中得到的。
實時監(jiān)視包括設置節(jié)點、橫線和豎線的顯示位,非有效節(jié)點的處理,刷新顯示,顯示后的處理。
3.2.1 圖元節(jié)點顯示位的設置
PLC獲得數(shù)據(jù)后,先要將此數(shù)據(jù)與對照位RB相與得到其邏輯值,然后根據(jù)圖元節(jié)點的類型來設置該節(jié)點的顯示位visited,且此功能塊僅對節(jié)點的visited進行設置。設n為梯形圖中任一節(jié)點,下面根據(jù)節(jié)點類型來設置:
(1)n的類型為常開觸點、輸出節(jié)點、比較器、符號函數(shù),若邏輯值為1,則顯示位visited為1,顯示綠色,否則顯示黃色。而若n為常閉觸點、反輸出節(jié)點分別與常開觸點、輸出節(jié)點的設置相反。
(2)n的類型為多路選擇器時,此時的visited顯示位含義與上述不同,用一長度為8的數(shù)組存放多路選擇器的布爾值,數(shù)組的下標加1對應選擇器的8個路徑。選擇器顯示第一個布爾值為1的路徑為綠色;若8個布爾值都為,則選擇器8條路徑均為黃色。
3.2.2 橫線顯示位的設置
橫線顯示位的設置是根據(jù)其左面的路徑是否為通路來處理的。設置橫線的顯示位還必須先設置In位。為了豎線顯示位設置(4.2.3小節(jié))方便,也設置了虛節(jié)點的In和Out。從當前屏有效節(jié)點開始掃描,設n為當前節(jié)點,np為n上一節(jié)點,n1為n的下一節(jié)點,在掃描過程中設置每一節(jié)點的In,并設置橫線的visited和虛節(jié)點的In和Out。由于橫線顯示位設置較節(jié)點顯示位設置復雜,圖3給出了橫線顯示位設置流程圖。
圖3 橫線顯示位設置流程圖
橫線顯示位設置過程描述如下:
(1)從梯形圖當前屏中取出一個有效節(jié)點n,如果該節(jié)點為空節(jié)點,就結束,否則就將n1=n->next。
(2)根據(jù)n的類型不同來進行不同的設置,分5種類型:
(a)n為條件節(jié)點,若n的In為1,則n的 visited為1。
(b)n為多路選擇器,此時若多路選擇器的顯示位為1,則下一節(jié)點n1的In也為1。
(c)n為常開節(jié)點、常閉節(jié)點、數(shù)值比較器、符號函數(shù)時,若n的In和visited都為1,則n1的In也為1。
(d)n為橫線,若np是虛結點,則n的In為1,若np不是虛節(jié)點,且n的 In為1,則n的 visited為1,此時要根據(jù)橫線n的前一節(jié)點np是否是虛節(jié)點來設置n的In位和visited顯示位。若n的In和visited都為1,則n1的In位也為1。
(e)n為虛節(jié)點,梯形圖中并聯(lián)結構是由虛節(jié)點來連接的,圖4標出出虛節(jié)點的位置。若存在與虛節(jié)點同行且緊接虛節(jié)點的圖元節(jié)點n1,若n1的visited為1,則 n 的 Out為1。
圖4 豎線顯示位設置流程圖
(3)繼續(xù)取當前屏中的有效節(jié)點進行上述處理,直到處理完當前屏中所有的有效節(jié)點。
3.2.3 豎線的設置
我們假定圖5中的三個虛節(jié)點分別記為x,x2,x1,其中x2的visited控制x和x2之間的豎線的顯示,x1的visited控制x2和x1之間的豎線的顯示。如果梯形圖中x和x1之間還有虛節(jié)點則設為xn。在掃描梯形圖的過程中,虛節(jié)點的設置是一個遞歸的過程,設置過程描述如下,流程圖如圖4所示。
圖5 查找梯形圖中的虛節(jié)點
豎線顯示位設置過程描述如下:
(1)取當前屏中有效節(jié)點中的一個虛節(jié)點x。
(2)查看虛節(jié)點x的In和Out,若滿足條件
(x->In==0&&x->Out==0)(記為條件a),說明當前虛節(jié)點不需要處理。
(3)如果x不滿足條件a,就做以下處理:
(a)找到x最底層的虛節(jié)點,在圖5中,最底層的虛節(jié)點為x1,若滿足條件:(x->In==1&&x1->Out==1)||(x->Out==1&& x1- >In==1)(記為條件b),那么x下面的虛節(jié)點的visited都為1,In和Out都為。如果不滿足條件 b,則 x1->visited=0。
(b)找到緊接x1的上一行的虛節(jié)點(圖5中為x2),若不存在x2,豎線處理結束,否則按處理x和x1的方法,即遞歸條用(1)處理x和x2。如果x和x2之間還存在多個虛節(jié)點,比如x和x2之間還有xn,則按同樣的方法處理x和xn。
(4)繼續(xù)掃描并處理虛節(jié)點,直到當前屏有效節(jié)點的虛節(jié)點都處理結束。
該算法是在梯形圖編輯器下先是設置梯形圖中各圖元節(jié)點狀態(tài)顯示,然后根據(jù)圖元節(jié)點狀態(tài)設置橫線顯示,最后根據(jù)圖元節(jié)點和橫線的顯示來確定梯形圖中豎線的顯示來進行實時監(jiān)控的。通過模擬數(shù)據(jù)驗證,該算法可以正確、快捷地跟蹤PLC內(nèi)部運行數(shù)據(jù)的狀態(tài),為梯形圖的監(jiān)控模塊設計起到了指導意義。
[1]唐明軍.基于ARM的可編程控制器的研制[J].南京:南京信息工程大學,2007.
[2]于廣慶.可編程控制器原理及系統(tǒng)設計[M].北京:清華大學出版社,2004.
[3]S.Da’na,A.Sagahyroon,A.Elrayes,et al.Development of a monitoring and control plat form for PLC-based applications.Computer Standards and Interfaces.2008,3(30):157-166.
[4]Sung Jung,Mulman BM,Devinder Thapa,et al.PLC Control Logic Error Monitoring and Prediction Using Neural Network.Natural Computation,ICNC '08.Fourth International Conference,Korea,IEEE,2008(2):484-488.
[5]張志強,孫寧.PC-PLC控制系統(tǒng)的串口通訊監(jiān)控程序設計[J]. 工業(yè)控制計算機,2006,19(12):35-37.
[6]姜海,田春艷.MCGS組態(tài)軟件在PLC工作狀態(tài)監(jiān)控中的應用[J]. 裝備制造技術,2008(2):56-57,59.
[7]吳鎮(zhèn)平,林海漲,李捷輝.利用VC++6.0實現(xiàn)PLC實時監(jiān)控[J].裝備制造技術,2009(7):80-91.
[8]陶杰.基于CAN總線的多品牌小型PLC監(jiān)控系統(tǒng)的設計與實現(xiàn)[D].蘇州大學,2008.
[9]王登貴.基于PC-PLC結構的計算機監(jiān)控系統(tǒng)設計及實現(xiàn)[J]. 自動化技術與應用,2008,27(11):107-108.
[10]裴元方,馮萍,康繼昌.PLC梯形圖的一種數(shù)據(jù)結構描述方法[J]. 計算機工程與科學,2009,12(31):87-89.
[11]Karl-Heinz John,Michael Tiegelkamp,IEC61131-3.Programming Industrial Automation Systems[M].Germany:Springer-Verlag Company,2001.