李楊,鄧有緯
(南京南自科林系統(tǒng)工程有限公司,江蘇 南京 210032)
隨著人們安全生產(chǎn)意識(shí)的增強(qiáng),國(guó)家對(duì)安全生產(chǎn)日益重視,現(xiàn)代化電廠(chǎng)在自動(dòng)化生產(chǎn)過(guò)程中,對(duì)于事故根源確定、事故原因確認(rèn)的要求也越來(lái)越急迫。iFIX組態(tài)軟件作為目前國(guó)內(nèi)常用的生產(chǎn)過(guò)程監(jiān)控軟件已在國(guó)內(nèi)大部分現(xiàn)代化電廠(chǎng)中使用。操作記錄作為可能與事故有關(guān)的重要信息,已被越來(lái)越多的自動(dòng)化電廠(chǎng)所重視。為了在事故發(fā)生后準(zhǔn)確地找出事故根源,清楚地判定是否由于誤操作或其他因素造成的事故,操作員操作記錄應(yīng)準(zhǔn)確地記錄每臺(tái)操作員站發(fā)出的操作指令信息,操作指令信息應(yīng)包括指令發(fā)出時(shí)間、操作對(duì)象、操作指令及操作員等具體內(nèi)容。
iFIX組態(tài)軟件因集成了大量的向?qū)Ш蛯?zhuān)家,使得用戶(hù)不需要進(jìn)行任何編程就可自動(dòng)完成多種功能。以往在實(shí)現(xiàn)操作記錄時(shí),大家也充分利用了這些專(zhuān)家和向?qū)?,在?shí)現(xiàn)過(guò)程中大部分采用以下4種方法。
(1)在iFIX組態(tài)軟件中,啟用報(bào)警開(kāi)放數(shù)據(jù)庫(kù)互聯(lián)ODBC(Open Database Connectivity),利用了報(bào)警記錄設(shè)備狀態(tài)的改變。該方法在實(shí)現(xiàn)的過(guò)程中會(huì)比較頻繁地打開(kāi)、關(guān)閉數(shù)據(jù)庫(kù),生產(chǎn)系統(tǒng)負(fù)荷會(huì)越來(lái)越大。
(2)在iFIX組態(tài)軟件中,啟用報(bào)警文件記錄,在每天生成的報(bào)警文件(.alm)中篩選操作記錄。該方法需將過(guò)程數(shù)據(jù)庫(kù)中的標(biāo)簽名中文描述提前設(shè)置好,這樣,造成標(biāo)簽名的中文描述與實(shí)際意義不完全相符。
(3)在動(dòng)作的按鈕腳本中添加 SendOperatorMessage,然后在報(bào)警ODBC中進(jìn)行查詢(xún)。該方法能比較真實(shí)地反映操作員的操作指令,但同樣需要頻繁地打開(kāi)關(guān)閉數(shù)據(jù)庫(kù),造成系統(tǒng)負(fù)荷越來(lái)越大。
(4)利用事件調(diào)度將操作記錄寫(xiě)入數(shù)據(jù)庫(kù)中。該方法能比較真實(shí)地反映操作員的操作指令,但實(shí)現(xiàn)起來(lái)工作量大,而且會(huì)造成系統(tǒng)負(fù)荷增大。
在這些實(shí)現(xiàn)方法中,大部分都利用了iFIX組態(tài)軟件對(duì)消息事件進(jìn)行了處理,而消息事件不僅包括操作記錄,還包括所有的報(bào)警信息,這就決定了操作記錄文件中不僅有操作員的操作記錄,還有所有的報(bào)警信息。另外,消息事件是基于過(guò)程數(shù)據(jù)庫(kù)中數(shù)據(jù)值的變化,而數(shù)據(jù)值的變化除了可由操作產(chǎn)生外,還可在設(shè)備聯(lián)鎖控制或設(shè)備自動(dòng)控制時(shí)產(chǎn)生。因此,上述大部分實(shí)現(xiàn)方法都不能準(zhǔn)確、真實(shí)地反映出操作員的操作狀況,而是記錄設(shè)備的運(yùn)行情況。而事件調(diào)度雖然可以準(zhǔn)確、真實(shí)地反映操作員的操作,但實(shí)現(xiàn)工作量大,在實(shí)際工程應(yīng)用中使用也比較少。
在iFIX組態(tài)軟件中,雖然有眾多的專(zhuān)家和向?qū)В珜?duì)于操作記錄而言,iFIX組態(tài)軟件自身并未提供專(zhuān)家式或向?qū)焦ぞ摺T谶@種情況下,可通過(guò)自主編程來(lái)完成,自主編程在iFIX組態(tài)軟件中也顯得非常輕松,這主要得益于iFIX組態(tài)軟件在內(nèi)部集成了微軟(Microsoft)的VBA開(kāi)發(fā)環(huán)境,它與微軟的操作系統(tǒng)的兼容性非常好。
通過(guò)iFIX組態(tài)軟件內(nèi)部集成的微軟VBA開(kāi)發(fā)環(huán)境,開(kāi)發(fā)一個(gè)自定義的操作記錄工具。該操作記錄工具應(yīng)該能夠有效地記錄操作員的每次操作指令信息。根據(jù)國(guó)內(nèi)現(xiàn)代化電廠(chǎng)的運(yùn)行習(xí)慣,經(jīng)過(guò)需求分析可以得出,需要完成的操作記錄應(yīng)具有如下功能:
(1)確定操作記錄的存貯位置。作為現(xiàn)代化電廠(chǎng)的管理者,非常希望在事故發(fā)生后能夠方便、迅速地查詢(xún)操作記錄。在需要對(duì)事故進(jìn)行詳細(xì)分析時(shí)可將最近的操作記錄導(dǎo)出并保存。因此,需要快速定位操作記錄并將所需的操作記錄置于統(tǒng)一位置,以便導(dǎo)出保存。
(2)確定操作記錄的存貯文件。當(dāng)管理人員或事故分析人員需要查詢(xún)操作記錄時(shí),可根據(jù)查詢(xún)規(guī)則快速地查詢(xún)所需要的記錄。一般來(lái)說(shuō),以時(shí)間順序來(lái)記錄操作員的操作指令信息符合人們的認(rèn)知習(xí)慣,最好是將一定時(shí)間段內(nèi)的操作指令信息記錄在同一個(gè)文件中,以自然天為單位的時(shí)間段能夠方便地幫助管理人員或事故分析人員確定他們所需要的操作記錄。
(3)操作時(shí)間。操作時(shí)間是操作指令信息的重要組成部分,它指示了操作指令發(fā)出的具體時(shí)間,是事故分析時(shí)必不可少的重要因素,一般操作時(shí)間應(yīng)精確到秒。
(4)操作對(duì)象。操作對(duì)象是操作指令信息的重要組成部分,它指示了操作指令所針對(duì)的設(shè)備。對(duì)于生產(chǎn)系統(tǒng)中所有可程控操作設(shè)備被操作時(shí)都應(yīng)在操作記錄中生成相應(yīng)的記錄。
(5)操作指令。操作指令是操作指令信息的重要組成部分,它指示了操作員對(duì)設(shè)備發(fā)出的指令。對(duì)于生產(chǎn)系統(tǒng)中所有可程控操作設(shè)備的所有操作,都應(yīng)在操作記錄中生成相應(yīng)的記錄。
(6)操作員。操作員是操作指令信息的重要組成部分,它指示了發(fā)出操作指令的操作人,是操作設(shè)備的責(zé)任人。
根據(jù)上述功能描述,可以得出操作記錄應(yīng)是一個(gè)文件夾的結(jié)論,該文件夾包含了若干文件,每個(gè)文件都以時(shí)間順序記錄了當(dāng)天時(shí)間段內(nèi)的某一時(shí)刻,某個(gè)設(shè)備被如何操作,操作人是誰(shuí)。文件形成的內(nèi)容見(jiàn)表1。
表1 操作記錄(2012-03-01)
對(duì)于上述功能的實(shí)現(xiàn),在iFIX組態(tài)軟件中可以創(chuàng)建一個(gè)全局的VBA子程序,該VBA子程序可以被生產(chǎn)過(guò)程中的任一操作調(diào)用,調(diào)用完成后,自動(dòng)生成相應(yīng)的操作信息記錄。在調(diào)用該VBA子程序時(shí),首先應(yīng)檢查所需的存貯位置和存貯文件是否存在,存在則生成操作記錄。否則,應(yīng)先創(chuàng)建存貯空間和存貯文件。
在自動(dòng)生成操作指令信息時(shí),對(duì)于操作時(shí)間可以獲取生產(chǎn)系統(tǒng)當(dāng)前的日期和時(shí)間;對(duì)于操作員則可以獲取生產(chǎn)系統(tǒng)當(dāng)前登錄的用戶(hù)。
操作對(duì)象和操作指令可在iFIX組態(tài)軟件組態(tài)時(shí),由組態(tài)人員根據(jù)設(shè)備和指令編寫(xiě)在相應(yīng)的動(dòng)作腳本下。當(dāng)組態(tài)完成后,運(yùn)行人員在生產(chǎn)系統(tǒng)上操作設(shè)備,則可自動(dòng)生成如表1所示的操作記錄。
考慮到操作記錄主要是為了事故發(fā)生后準(zhǔn)確地找出事故根源,清楚地判定是否由于誤操作或其他因素造成事故的發(fā)生。因此,對(duì)于操作記錄不需要保存很長(zhǎng)的時(shí)間,這樣,也可大大地節(jié)約操作員站的存貯空間。對(duì)此可對(duì)操作記錄采用循環(huán)存貯的方式來(lái)實(shí)現(xiàn),亦即若需保存n天的操作記錄,則第n+1天的操作記錄覆蓋第1天的操作記錄。其操作記錄子程序OperateRecord具體實(shí)現(xiàn)過(guò)程如下:
操作記錄子程序作為一個(gè)自定義的全局子函數(shù),應(yīng)置于iFIX組態(tài)軟件VBA編輯器的Project_User中,這樣,可保證在iFIX組態(tài)軟件的任一位置都可調(diào)用。為了確保操作記錄的完整性,在畫(huà)面上的任何一次有效操作(包括有效地操作按鈕,修改數(shù)據(jù)等),都應(yīng)可通過(guò)操作記錄子程序OperateRecord的調(diào)用而自動(dòng)地記錄到當(dāng)天的文件中。
下面以某電廠(chǎng)輸煤程控系統(tǒng)中皮帶機(jī)的操作記錄實(shí)現(xiàn)來(lái)具體說(shuō)明操作記錄子程序的調(diào)用。
皮帶操作畫(huà)面如圖1所示。從圖1中可以看出,對(duì)于#3B皮帶機(jī)的操作總共為12種指令,分別為啟動(dòng)、停止、鳴警鈴、置聯(lián)鎖、解聯(lián)鎖、置自動(dòng)、解自動(dòng)、置檢修位、置工作位、解除撕裂保護(hù)、投入撕裂保護(hù)、解除打滑保護(hù)、投入打滑保護(hù)、解除重跑偏保護(hù)和投入重跑偏保護(hù)。
圖1 皮帶操作畫(huà)面
因此,在畫(huà)面上對(duì)于按鈕的每次有效點(diǎn)擊之后,在按鈕的點(diǎn)擊腳本下調(diào)用操作記錄子程序OperateRecord,將定義好的操作指令信息自動(dòng)生成到相應(yīng)的文件中。由于iFIX組態(tài)軟件中采用了標(biāo)簽組,即多個(gè)相同類(lèi)型的設(shè)備可以使用同一控制畫(huà)面,當(dāng)打開(kāi)一個(gè)畫(huà)面或切換當(dāng)前畫(huà)面時(shí),系統(tǒng)可以讀取標(biāo)簽組文件,并且使用其中所定義的過(guò)程值替代控制畫(huà)面中的標(biāo)記。因此在operaterecord"程控手動(dòng)啟動(dòng)"&Text1.Caption ,user.UserName_SM.CurrentValue語(yǔ)句中并沒(méi)有出現(xiàn)設(shè)備名稱(chēng)#3B皮帶機(jī),而是在運(yùn)行時(shí)由對(duì)應(yīng)設(shè)備的標(biāo)簽組的內(nèi)容來(lái)替換Text1.Captionuser.UserName_SM.Current_Value則是生產(chǎn)系統(tǒng)當(dāng)前的登錄用戶(hù)名。
下面分別以啟動(dòng)按鈕和聯(lián)鎖按鈕的操作為例來(lái)說(shuō)明操作記錄子程序的調(diào)用過(guò)程。程序4啟動(dòng)按鈕腳本如下:
程序5聯(lián)鎖按鈕腳本如下:
在聯(lián)鎖按鈕腳本中,增加了對(duì)聯(lián)鎖按鈕內(nèi)容值的判斷,根據(jù)判斷可以自由地寫(xiě)入操作指令是置聯(lián)鎖或是解聯(lián)鎖。
由于操作記錄寫(xiě)入到了記事本文件中,在查詢(xún)時(shí)為了防止人員隨意修改已經(jīng)生成的操作記錄,同時(shí)也為了保證iFIX的安全性,可以在iFIX組態(tài)軟件中新建一個(gè)畫(huà)面,利用WebBrowser控件來(lái)調(diào)用用戶(hù)需求的操作記錄。其調(diào)用效果如圖2所示。
圖2 操作記錄
WebBrowser控件調(diào)用腳本如下:
對(duì)操作記錄的功能需求進(jìn)行了分析,給出了操作記錄子程序、操作記錄子程序調(diào)用、操作記錄查詢(xún)的實(shí)例。通過(guò)在河南豐鶴電廠(chǎng)輸煤程控系統(tǒng)及廣東云浮電廠(chǎng)C廠(chǎng)輸煤程控系統(tǒng)的實(shí)際應(yīng)用,該操作記錄子程序能夠準(zhǔn)確、詳實(shí)、完整地記錄每一用戶(hù)的任一操作信息。為事故發(fā)生后準(zhǔn)確地找出了事故根源,清楚地判定是否由于誤操作或其他因素造成事故的而提供了有力的證據(jù)。
[1]沈大林.中文 Visual Basic 6.0案例教程[M].北京:人民郵電出版社,2005.
[2]劉炳文.Visual Basic程序設(shè)計(jì)教程[M].3版.北京:清華大學(xué)出版社,2006.
[3]胡靜,方彥軍.基于ODBC的iFIX工控組態(tài)軟件與關(guān)系數(shù)據(jù)庫(kù)通訊探討[J].微計(jì)算機(jī)信息,2003,19(2):19 -20.