江劼
(上海電氣自動(dòng)化設(shè)計(jì)研究所有限公司,上海 200023)
隨著自動(dòng)化技術(shù)的發(fā)展,目前集散控制系統(tǒng)廣泛應(yīng)用于現(xiàn)代化生產(chǎn)過程控制中。集中管理、分散控制具其主要特點(diǎn),它將整個(gè)系統(tǒng)的功能分成若干臺(tái)不同的計(jì)算機(jī)去完成,各個(gè)計(jì)算機(jī)之間通過網(wǎng)絡(luò)實(shí)現(xiàn)相互之間的協(xié)調(diào)和系統(tǒng)的集成[1]。這樣全部信息通過通信網(wǎng)絡(luò)由上位管理計(jì)算機(jī)監(jiān)控,實(shí)現(xiàn)了最優(yōu)化的控制,不僅克服了人機(jī)聯(lián)系差及單計(jì)算機(jī)控制系統(tǒng)安全性和穩(wěn)定性差的缺點(diǎn),而且節(jié)約了大量勞動(dòng)成本,使得相關(guān)工作人員的工作效率大大提高。
本文結(jié)合ControlLogix系列PLC的特點(diǎn),通過編程使重要數(shù)據(jù)可以根據(jù)實(shí)際情況自動(dòng)進(jìn)行備份或還原操作,避免了因設(shè)備出現(xiàn)故障或人為誤操作而造成的數(shù)據(jù)丟失,保證實(shí)際應(yīng)用中數(shù)據(jù)的安全性及完整性。
傳統(tǒng)PLC的數(shù)據(jù)分配是基于內(nèi)存地址進(jìn)行的分配,以西門子400系列PLC為例,控制器的內(nèi)存地址對(duì)用戶開放,用戶可以根據(jù)實(shí)際需要自由分配內(nèi)存地址,并定義相應(yīng)的標(biāo)簽;若用戶分配的內(nèi)存地址沖突,則會(huì)影響存儲(chǔ)于該內(nèi)存地址的數(shù)據(jù)的準(zhǔn)確性,造成數(shù)據(jù)錯(cuò)誤;在下載時(shí)可以選擇只下載邏輯程序,而不下載離線的數(shù)據(jù)。
ControlLogix系列PLC采用的數(shù)據(jù)結(jié)構(gòu)不同于西門子PLC等傳統(tǒng)PLC。對(duì)于ControlLogix系列PLC的控制器來說,數(shù)據(jù)的表達(dá)形式稱為數(shù)據(jù)標(biāo)簽,用來描述控制對(duì)象。數(shù)據(jù)庫的標(biāo)簽是基于文字表達(dá)的指向數(shù)據(jù)存放位置的標(biāo)記,它將占用控制器的內(nèi)存空間;標(biāo)簽是分配內(nèi)存的基本機(jī)制,存放于邏輯執(zhí)行有關(guān)的數(shù)據(jù),并被直接監(jiān)視[2]。用戶可以根據(jù)實(shí)際需要建立標(biāo)簽,控制器根據(jù)標(biāo)簽的數(shù)據(jù)類型自動(dòng)分配內(nèi)存地址,這樣,用戶無需擔(dān)心內(nèi)存地址沖突,避免了由于分配內(nèi)存沖突造成的數(shù)據(jù)錯(cuò)誤。但在下載時(shí)程序邏輯和離線數(shù)據(jù)同時(shí)下載至控制器中,對(duì)于某些重要的在線數(shù)據(jù)(例如累計(jì)量),會(huì)造成在線數(shù)據(jù)被離線數(shù)據(jù)覆蓋,可能產(chǎn)生嚴(yán)重的后果。
ControlLogix系列PLC具有在線編輯的功能,可以在線對(duì)程序邏輯和數(shù)據(jù)進(jìn)行修改。對(duì)于程序邏輯的大量修改,在線編輯的效率反而沒有離線編輯在線下載高,且在線編輯不能對(duì)數(shù)據(jù)類型和結(jié)構(gòu)進(jìn)行更改。對(duì)于在下載時(shí)離線數(shù)據(jù)覆蓋在線數(shù)據(jù)這種情況,通常有以下三種數(shù)據(jù)備份及還原的方法。
這種方法是在下載之前,將需要備份的數(shù)據(jù)手動(dòng)記錄下來;在下載完成之后,再將備份的數(shù)據(jù)手動(dòng)寫入在線標(biāo)簽中。這種方法只適用于少量數(shù)據(jù)的備份恢復(fù)。若需要備份的數(shù)據(jù)很多,勢(shì)必要耗費(fèi)大量的時(shí)間和精力,效率不高且容易產(chǎn)生人為錯(cuò)誤。
這種方法通過編程將在線數(shù)據(jù)即時(shí)備份至遠(yuǎn)程PLC中,在程序首個(gè)掃描周期時(shí)利用S:FS將備份的數(shù)據(jù)恢復(fù)至本地PLC中。S:FS的狀態(tài)取決于順序功能圖(sequential function chart,以下簡(jiǎn)稱SFC)的狀態(tài)。如果S:FS用于SFC中,則該步執(zhí)行時(shí),S:FS置位并保持一個(gè)掃描周期。如果用于SFC調(diào)用事例,則在每次調(diào)用激活時(shí)置位并保持一個(gè)掃描周期。如果SFC沒有調(diào)用事例,則S:FS會(huì)在任務(wù)第一次掃描時(shí)置位[3]。這種方法可以解決手動(dòng)備份恢復(fù)大量數(shù)據(jù)時(shí)效率低下的問題,但若在線編輯時(shí)誤修改了數(shù)據(jù),那么錯(cuò)誤的數(shù)據(jù)會(huì)立刻備份至遠(yuǎn)程PLC中。此方法雖然優(yōu)于手動(dòng)備份操作,但在某些情況下依然不能避免人為的操作失誤。
ControlLogix編程軟件自帶工具Data Preserved download tool。該工具執(zhí)行以下操作:
(1)檢查和讀取程序文件中所有定義的標(biāo)簽,但不包括MOTION_GROUP、ALARM_ANALOG、ALARM_DIGITAL、MESSAGE等部分類型的標(biāo)簽。
(2)將這些標(biāo)簽的結(jié)構(gòu)和數(shù)據(jù)存儲(chǔ)到工具路徑下的文件(Taginfo.csv)中。
(3)將離線程序下載到PLC控制器。
(4)將Taginfo.csv文件中存放的標(biāo)簽數(shù)據(jù)恢復(fù)至PLC控制器對(duì)應(yīng)的標(biāo)簽。
該工具不支持多點(diǎn)及橋接,不保留上次下載至PLC控制器的強(qiáng)制信號(hào)。
有此可見在下載時(shí)利用自帶工具Data Preserved download tool進(jìn)行數(shù)據(jù)恢復(fù)非常方便,但該工具在實(shí)際應(yīng)用中具有局限性,且依然無法避免人為修改數(shù)據(jù)的操作失誤。
ControlLogix系列PLC在下載時(shí)會(huì)把離線程序和數(shù)據(jù)下載至本地PLC控制器中,因此自備份及恢復(fù)需要利用同一局域網(wǎng)內(nèi)的其它PLC控制站來完成,只要局域網(wǎng)內(nèi)的PLC控制站之間能夠進(jìn)行正常通訊即可。圖1是一種基本的自備份及恢復(fù)網(wǎng)絡(luò)原理圖。
圖1 自備份及恢復(fù)網(wǎng)絡(luò)原理圖
圖1 中PLC1控制站將數(shù)據(jù)備份至 PLC2站,需要恢復(fù)時(shí)從PLC2控制站把備份的數(shù)據(jù)恢復(fù)至PLC1控制站;PLC2控制站將數(shù)據(jù)備份至 PLC3站,需要恢復(fù)時(shí)從PLC3控制站把備份的數(shù)據(jù)恢復(fù)至PLC2控制站;PLC3控制站、PLC4控制站同理。這樣每一個(gè)PLC控制站都只有1個(gè)PLC控制站備份的數(shù)據(jù)。如果將所有數(shù)據(jù)都備份至網(wǎng)絡(luò)上的同一個(gè)PLC控制站中,當(dāng)該P(yáng)LC控制站故障時(shí),整個(gè)網(wǎng)絡(luò)的數(shù)據(jù)備份都將受到影響。采用這種輪序備份恢復(fù)的方式時(shí),當(dāng)某個(gè)PLC控制站故障,只會(huì)暫時(shí)影響到相鄰的2個(gè)PLC控制站,其它PLC控制站的數(shù)據(jù)自備份恢復(fù)不受到影響,因此網(wǎng)絡(luò)中的PLC控制站越多,影響的范圍比率越小。
需要進(jìn)行自備份及還原的數(shù)據(jù)通常為非布爾型內(nèi)部數(shù)據(jù),例如設(shè)備的累計(jì)運(yùn)行時(shí)間和累計(jì)停止時(shí)間,通過對(duì)運(yùn)行時(shí)間和停止時(shí)間進(jìn)行累計(jì)可以合理調(diào)度設(shè)備的運(yùn)行,防止設(shè)備過度使用,使設(shè)備的損耗大致相同。通過總線傳輸?shù)臄?shù)據(jù)及IO數(shù)據(jù)會(huì)在PLC每次進(jìn)行輸入輸出寄存器掃描時(shí)進(jìn)行更新,完全由外部信號(hào)所決定,因此無需進(jìn)行自備份及還原。
ControlLogix系列的非布爾型數(shù)據(jù)類型常用的為整型,雙整型和浮點(diǎn)型。對(duì)于需要自備份及恢復(fù)的非布爾型內(nèi)部數(shù)據(jù),類似于設(shè)備的累計(jì)運(yùn)行時(shí)間和累計(jì)停止時(shí)間,一般都是持續(xù)增大的,不會(huì)出現(xiàn)減小的情況。由于以上非布爾型數(shù)據(jù)有取值范圍,一旦超出該范圍則會(huì)造成數(shù)據(jù)溢出產(chǎn)生顯示錯(cuò)誤,一般會(huì)設(shè)置一個(gè)清零信號(hào),在該類型的數(shù)據(jù)即將超出取值范圍時(shí)對(duì)其進(jìn)行清零操作。只有在這種情況下,數(shù)據(jù)才會(huì)由大變小。因此,在數(shù)據(jù)變小的時(shí)候,只需判斷是否由用戶的清零操作造成,如果不是則進(jìn)行恢復(fù)操作,其余時(shí)間則進(jìn)行備份操作。因此,還需要對(duì)用戶的清零次數(shù)進(jìn)行統(tǒng)計(jì)并同時(shí)進(jìn)行自備份。數(shù)據(jù)自備份及恢復(fù)的邏輯流程圖如圖2。
圖2 數(shù)據(jù)自備份及恢復(fù)邏輯流程圖
其中Cnt為本地清零次數(shù),Cntb為備份的清零次數(shù),Data為本地?cái)?shù)據(jù),Datab為備份的數(shù)據(jù)。根據(jù)清零次數(shù)可以分為三種情況。
(1)本地清零次數(shù)小于備份的清零次數(shù)。若在下載之前已經(jīng)進(jìn)行過清零操作,本地清零次數(shù)會(huì)即時(shí)備份至備份的清零次數(shù)。這樣備份的清零次數(shù)大于下載之后的本地清零次數(shù),相應(yīng)的備份的數(shù)據(jù)是正確的數(shù)據(jù),因此在下載了程序之后需要先進(jìn)行數(shù)據(jù)恢復(fù)操作。在線編輯時(shí)人為誤改小清零次數(shù)也會(huì)產(chǎn)生備份的清零次數(shù)大于本地清零次數(shù)的情況。此時(shí)通過自動(dòng)進(jìn)行的數(shù)據(jù)恢復(fù)操作,人為誤修改的清零次數(shù)被恢復(fù)為正確的清零次數(shù),避免了人為誤修改數(shù)據(jù)。
(2)本地清零次數(shù)等于備份的清零次數(shù)。若在下載之前未進(jìn)行清零操作,會(huì)出現(xiàn)這種情況。在這種情況下,在線的本地?cái)?shù)據(jù)和備份的數(shù)據(jù)一致,均不小于離線數(shù)據(jù)。若小于的話只要先自動(dòng)進(jìn)行數(shù)據(jù)恢復(fù)操作,就可以保證數(shù)據(jù)的正確性。
(3)本地清零次數(shù)大于備份的清零次數(shù)。此時(shí)本地?cái)?shù)據(jù)為正確的數(shù)據(jù),因此只需進(jìn)行通常的自動(dòng)備份操作即可。即使人為修改增大本地清零次數(shù),也只會(huì)同步增大備份的清零次數(shù),并不會(huì)對(duì)數(shù)據(jù)產(chǎn)生影響。
數(shù)據(jù)自備份及恢復(fù)功能通過創(chuàng)建用戶自定義指令A(yù)dd-On Instruction來實(shí)現(xiàn)。設(shè)備的相關(guān)數(shù)據(jù)可以通過調(diào)用自定義指令完成自備份及恢復(fù)。圖3為用戶自定義指令的參數(shù)設(shè)置界面。
圖3 用戶自定義指令參數(shù)設(shè)置圖
圖中分別定義了形參清零次數(shù)、清零次數(shù)備份、數(shù)據(jù)、數(shù)據(jù)備份及設(shè)備的運(yùn)行小時(shí)和運(yùn)行分鐘。Usage為運(yùn)用目的而建立的數(shù)據(jù)結(jié)構(gòu)。定義的形參全部選擇為InOut類型,即外部可讀寫參數(shù),其指向控制器或程序區(qū)域的標(biāo)簽;Req決定帶入或帶出的參數(shù)是否可選擇,指向了程序或控制器中的外部標(biāo)簽;指向外部標(biāo)簽時(shí),將自動(dòng)與內(nèi)部數(shù)據(jù)互相復(fù)制;Vis決定參數(shù)是否顯示在指令上;如果單獨(dú)選擇此項(xiàng)而沒有選擇Req,則在指令上表現(xiàn)為只讀數(shù)據(jù);External Acess選擇 Read/Write,即可讀寫;若選擇 Read Only則只能進(jìn)行讀取而不能寫入,None則不能進(jìn)行讀寫[4-5]。
用戶自定義指令設(shè)置完成并根據(jù)邏輯流程圖編寫完程序后,在本地與遠(yuǎn)程目標(biāo)PLC站中建立同樣大小的標(biāo)簽數(shù)組用以存放數(shù)據(jù)。在本地PLC站中先用MSG讀取遠(yuǎn)程備份的數(shù)據(jù),經(jīng)過用戶自定義指令進(jìn)行自備份或恢復(fù)操作之后,再將更新之后的數(shù)據(jù)寫入遠(yuǎn)程目標(biāo)PLC站即完成了一次自備份恢復(fù),程序段如圖4所示。
與常規(guī)的備份恢復(fù)相比較,遠(yuǎn)程自備份恢復(fù)的優(yōu)勢(shì)在于以下幾點(diǎn):
(1)當(dāng)網(wǎng)絡(luò)通訊中斷或者單PLC站故障時(shí),自備份恢復(fù)功能只會(huì)暫時(shí)影響相鄰2個(gè)PLC站備份恢復(fù)。一旦故障消除,自備份恢復(fù)功能會(huì)自動(dòng)恢復(fù),無需人工干預(yù)。
(2)在下載程序時(shí)無需考慮數(shù)據(jù)的備份與恢復(fù),該功能可以即時(shí)修正錯(cuò)誤數(shù)據(jù),節(jié)省了維護(hù)時(shí)間,提高了維護(hù)的效率。
(3)在線修改時(shí)可以自動(dòng)修正誤修改的數(shù)據(jù),保證了數(shù)據(jù)的正確安全可靠。
圖4 自備份恢復(fù)調(diào)用程序示意圖
在日常的設(shè)計(jì)及維護(hù)中經(jīng)常碰到文中提到的情況,因此專門研究設(shè)計(jì)了該功能。該功能已應(yīng)用于南京橋北污水處理廠的自控系統(tǒng)。通過最初的調(diào)試與長時(shí)間的觀察,該功能運(yùn)行良好,達(dá)到了預(yù)期的目的。但由于環(huán)境資源所限,還未能將其設(shè)計(jì)成一個(gè)通用的自定義指令,需要根據(jù)實(shí)際情況進(jìn)行些許修改才能滿足各種條件下的實(shí)際使用需要。今后還需要在實(shí)踐中對(duì)其進(jìn)行進(jìn)一步的完善。
[1]劉翠玲,黃建兵.集散控制系統(tǒng)[M].北京:北京大學(xué)出版社,2006.
[2]鄧?yán)?ControlLogix系統(tǒng)實(shí)用手冊(cè)[M].北京:機(jī)械工業(yè)出版社,2008.
[3]Logix5000 Controllers Controller Information and Status Programming Manual[DB/OL].(2014-10)[2015-02-22]http://literature.rockwellautomation.com/idc/groups/literature/documents/pm/1756 -pm015_-en-p.pdf?_ga=1.44091500.972293070.1373436821.
[4]Logix5000 Controllers Add-on Instructions Programming Manual[DB/OL]. (2014 -10)[2015 -02 -22]http://literature.rockwellautomation.com/idc/groups/literature/documents/pm/1756 -pm010_-en-p.pdf.
[5]Logix5000 Controllers I/O and Tag Data Programming Manual[DB/OL].(2014-10)[2015-02-22]http://literature.rockwellautomation.com/idc/groups/literature/documents/pm/1756-pm004_-en-p.pdf.