【摘 要】隨著油氣田行業(yè)自動化水平的普及,美國Honeywell公司的PKS軟件得到了廣泛的應(yīng)用。但它是一套成熟的軟件,有時無法滿足用戶特殊的功能需求。語音報警軟件作為PKS軟件的輔助軟件,可協(xié)助PKS軟件實(shí)現(xiàn)更多的功能,包括數(shù)據(jù)異常分析判斷、自定義語音及文字報警、報警點(diǎn)信息維護(hù)記錄日志、定時語音播報、報警信息的查詢和統(tǒng)計(jì)等等。
【關(guān)鍵詞】Honeywell PKS;語音報警;VB編程
1.引言
隨著油氣田行業(yè)自動化水平的普及,越來越多的油氣田場站采用了SCADA系統(tǒng)來保證現(xiàn)場安全、平穩(wěn)、經(jīng)濟(jì)的運(yùn)行。SCADA是Supervisory Control And Data Acquisition的縮寫,即數(shù)據(jù)采集與監(jiān)控系統(tǒng)。它是以計(jì)算機(jī)為基礎(chǔ)的生產(chǎn)過程控制與調(diào)度自動化系統(tǒng),對現(xiàn)場的運(yùn)行設(shè)備進(jìn)行監(jiān)視和控制,實(shí)現(xiàn)數(shù)據(jù)采集、設(shè)備控制、測量、參數(shù)調(diào)節(jié)以及各類信號報警等各項(xiàng)功能。目前美國Honeywell公司的PKS軟件作為業(yè)內(nèi)優(yōu)秀的SCADA系統(tǒng)上位機(jī)軟件被廣泛的應(yīng)用于油氣田場站、長輸管線、閥室,并取得了巨大的成果。但是由于PKS軟件是一套成熟的軟件,因此有時無法滿足用戶特殊的功能需求。語音報警軟件作為PKS軟件的輔助軟件,可以從PKS軟件中實(shí)時讀取生產(chǎn)運(yùn)行數(shù)據(jù),并對其進(jìn)行分析判斷,若數(shù)據(jù)異常則產(chǎn)生報警,并根據(jù)報警級別及事前設(shè)定的聲音或文字要求進(jìn)行語音播報報警;完成報點(diǎn)信息的維護(hù),對報警點(diǎn)信息維護(hù)記錄實(shí)現(xiàn)日志;完成定時語音播報的設(shè)置、播報;實(shí)現(xiàn)報警信息的查詢、統(tǒng)計(jì)。
2.軟件的總體設(shè)計(jì)與實(shí)現(xiàn)
軟件架構(gòu)采用模塊化結(jié)構(gòu)設(shè)計(jì),將所實(shí)現(xiàn)的各種功能分模塊研發(fā),最后匯總至統(tǒng)一程序中。根據(jù)設(shè)計(jì)要求,語音報警軟件包含主要功能如下:讀取PKS軟件數(shù)據(jù);語音報警;參數(shù)配置;系統(tǒng)/報警日志歷史;用戶權(quán)限。由于軟件主要通過人機(jī)界面和用戶交流,故采用Microsoft Visio Basic作為程序設(shè)計(jì)語言。窗體結(jié)構(gòu)采用MDI窗體嵌套技術(shù),分為如下窗體:
2.1 MDI父窗體
MDI父窗體負(fù)責(zé)軟件整體框架、菜單欄顯示、工具欄顯示,以及部分通用代碼的執(zhí)行。主界面、狀態(tài)欄、系統(tǒng)/報警日志歷史畫面等均嵌入到MDI父窗體內(nèi),而系統(tǒng)配置、登錄等窗體均采用彈出的形式實(shí)現(xiàn)。
2.2 主畫面
主畫面主要用于顯示報警點(diǎn)信息、報警狀態(tài)信息、系統(tǒng)日志及報警日志,主要包含如下內(nèi)容:
報警點(diǎn)顯示。這里的位號、參數(shù)要匹配PKS軟件,采集上來的數(shù)據(jù)放在采樣值一欄中,描述、低低報警、低報警、高報警、高高報警欄由用戶自由組態(tài),即軟件可設(shè)置四條報警限。當(dāng)軟件運(yùn)行后會根據(jù)組態(tài)數(shù)值判斷是否產(chǎn)生報警,若產(chǎn)生報警,則會通過語音朗讀在報警內(nèi)容一欄中的內(nèi)容,同時報警狀態(tài)會顯示出現(xiàn)新的報警信息,報警日志中會記錄報警信息。若已達(dá)到報警狀態(tài),之后再采集到的數(shù)據(jù)仍然的該報警狀態(tài)內(nèi),則不會產(chǎn)生新的報警,舊的報警也不會被清除。當(dāng)現(xiàn)場條件恢復(fù),采樣值回到報警限以下時,報警清除,體現(xiàn)在報警狀態(tài)欄中對應(yīng)的報警信息將自動清除,并且下次再升到報警限上時重新產(chǎn)生報警。
報警狀態(tài)顯示。顯示當(dāng)前有哪些數(shù)據(jù)已觸發(fā)了報警,以及它們的觸發(fā)時間、報警狀態(tài)和觸發(fā)報警值。啟動報警后,若產(chǎn)生報警,則該欄會有相應(yīng)的信息出現(xiàn),停止報警時表格將會被清空,再次啟動報警后若產(chǎn)生報警則該欄會繼續(xù)出現(xiàn)相應(yīng)的信息。
系統(tǒng)日志欄中顯示系統(tǒng)的運(yùn)行情況,如系統(tǒng)啟動、報警開啟、進(jìn)入配置界面等等,用戶可根據(jù)系統(tǒng)日志中顯示的內(nèi)容判斷目前系統(tǒng)的運(yùn)行情況。報警日志欄中顯示被觸發(fā)的報警信息。與報警狀態(tài)表格不同的是,這里的報警信息并不會因?yàn)閳缶那宄磺宄?,用戶可以在這里看到相應(yīng)的報警情況。當(dāng)然,這里的系統(tǒng)日志及報警日志顯示的均為本次系統(tǒng)運(yùn)行后所產(chǎn)生的日志,若用戶需要查詢之前的日志,可通過系統(tǒng)/報警日志歷史界面查詢。
2.3 報警點(diǎn)配置畫面
在報警點(diǎn)配置畫面中,用戶可針對報警點(diǎn)進(jìn)行組態(tài)。這里主要實(shí)現(xiàn)各種參數(shù)修改的功能,比如增加行按鈕可增加一新行,刪除行按鈕可刪除當(dāng)前行;數(shù)據(jù)源IP地址可修改PKS服務(wù)器的IP地址;語音測試功能可點(diǎn)擊“朗讀”按鈕測試當(dāng)前行的報警內(nèi)容,可幫助用戶檢驗(yàn)組態(tài)結(jié)果;報警次數(shù)下拉菜單中可選擇報警產(chǎn)生后的播報次數(shù)等等。
2.4 狀態(tài)欄
狀態(tài)欄主要顯示公司標(biāo)識、系統(tǒng)時間、系統(tǒng)狀態(tài)、目標(biāo)PKS服務(wù)器計(jì)算機(jī)名稱、用戶權(quán)限等信息,它與主界面同時顯示。
2.5 系統(tǒng)/報警日志歷史畫面
系統(tǒng)日志歷史和報警日志歷史的畫面非常類似,區(qū)別僅在于各自儲存的數(shù)據(jù)不同,用戶在此可以看到全部的日志歷史,但不包括已經(jīng)歸檔的數(shù)據(jù)。這里主要實(shí)現(xiàn)的功能還包括:
自動保存歷史記錄周期選項(xiàng)用于設(shè)置系統(tǒng)多長時間將收集的記錄保存到日志中,自動歸檔周期用來實(shí)現(xiàn)將日志中的內(nèi)容歸檔到txt文件中,文件路徑由下面的歸檔路徑指定。當(dāng)運(yùn)行歸檔后,日志里面的內(nèi)容將被清空,同時生成相應(yīng)的txt文件,之后日志將重新記錄新信息。用戶也可以通過點(diǎn)擊“手動歸檔”按鈕直接歸檔。
2.6 其他畫面
除了以上主要的嵌入窗體外,另有部分彈出頁面,如參數(shù)配置畫面等,在此不做過多的敘述。
3.讀取PKS軟件數(shù)據(jù)的設(shè)計(jì)與實(shí)現(xiàn)
HONEYWELL PKS軟件提供了相應(yīng)的API函數(shù)[1]可以讀取PKS軟件中的數(shù)據(jù),可采用調(diào)用該API函數(shù)的方法將數(shù)據(jù)讀取過來,并做成全局變量交由其他模塊使用。當(dāng)用戶點(diǎn)擊“啟動報警”按鈕后,數(shù)據(jù)采集程序在后臺運(yùn)行,在軟件初始化的時候報警點(diǎn)組態(tài)表格中的參數(shù)已經(jīng)被賦給了相應(yīng)的變量,這里將這些變量作為參數(shù),并使用API函數(shù)讀取PKS實(shí)時數(shù)據(jù)并填入報警點(diǎn)組態(tài)表格中,具體邏輯如下:
(1)若沒有報警點(diǎn)組態(tài),采集程序直接停止;
(2)初始化數(shù)據(jù),并利用rgetpnt函數(shù)查詢是否報警點(diǎn)數(shù)據(jù)在PKS中存在;
(3)若查詢數(shù)據(jù)成功,則開啟數(shù)據(jù)掃描定時器(Timer)和報警掃描定時器(Timer),可設(shè)定數(shù)據(jù)掃描間隔(并可通過人機(jī)界面配置)、報警掃描間隔(并可通過人機(jī)界面配置),若查詢數(shù)據(jù)不成功,則采集程序停止,并報具體錯誤提示用戶檢查報警點(diǎn)組態(tài);
(4)開啟數(shù)據(jù)掃描定時器(Timer)后,Timer內(nèi)的程序?qū)⒁怨潭〞r間循環(huán)運(yùn)行,采用rGetval_Numb函數(shù)采集PKS的數(shù)據(jù),并將數(shù)據(jù)放入至采樣值一欄中,之后由報警掃描定時器(Timer)對數(shù)據(jù)進(jìn)行分析判斷,若數(shù)據(jù)超過報警線則產(chǎn)生相應(yīng)報警。
4.語音報警的設(shè)計(jì)與實(shí)現(xiàn)
讀取PKS軟件數(shù)據(jù)成功后,程序開啟報警掃描定時器(Timer)。Timer內(nèi)的程序?qū)⒁怨潭〞r間循環(huán)運(yùn)行,從而實(shí)現(xiàn)每隔一段時間挨個對讀取的數(shù)據(jù)進(jìn)行分析判斷,與設(shè)置的報警限比對,如果超過報警限則發(fā)出一條設(shè)置好的語音報警并在報警狀態(tài)欄中產(chǎn)生一條報警狀態(tài),同時將該條報警信息記錄到報警日志中。語音報警采用TTS技術(shù)實(shí)現(xiàn)語音朗讀[2]。對于報警狀態(tài),采取的策略是當(dāng)報警產(chǎn)生,在報警狀態(tài)欄中會產(chǎn)生該條報警狀態(tài),用戶只可查看不可消除。程序會繼續(xù)循環(huán)判斷,若產(chǎn)生報警的條件依然滿足,則該條報警狀態(tài)持續(xù)存在,若產(chǎn)生報警的條件不再滿足,則刪除該條報警狀態(tài)。這樣,我們就可以通過報警狀態(tài)欄從而看到目前有多少報警點(diǎn)處于超限狀態(tài)。而在報警日志中,由于只會記錄不會清除,故我們可以通過查看日志的方式來了解到曾經(jīng)發(fā)生的報警情況。同時,產(chǎn)生的日志會在可設(shè)置的周期內(nèi)保存到日志歷史中。
5.參數(shù)配置的設(shè)計(jì)與實(shí)現(xiàn)
整個軟件需要設(shè)置與保存的參數(shù),包括:(1)通訊參數(shù),如PKS服務(wù)器名,連接周期等等;(2)報警點(diǎn)參數(shù),如位號,描述,采樣值,報警限,報警內(nèi)容,報警次數(shù)等等;(3)日志參數(shù),如日志歸檔路徑、歸檔周期等等;(4)其他參數(shù),如系統(tǒng)配置參數(shù)等等。
語音報警系統(tǒng)采用最簡單的txt文件來保存這些參數(shù),程序啟動時采用Open FileName For Input As #1語句讀取txt文件,將各個參數(shù)讀出來并賦予相應(yīng)的全局變量,從而實(shí)現(xiàn)在程序中應(yīng)用這些變量。若需要實(shí)現(xiàn)參數(shù)修改及保存,可先做相應(yīng)的窗體和TextBox用于填寫可修改的參數(shù),然后設(shè)置一個保存按鈕,當(dāng)用戶點(diǎn)擊按鈕時,產(chǎn)生一個事件,將修改后的參數(shù)利用Open FileName For Output As #1語句寫入到相應(yīng)txt文件中。這樣,我們就可以實(shí)現(xiàn)參數(shù)配置了。
6.系統(tǒng)/報警日志歷史的設(shè)計(jì)與實(shí)現(xiàn)
作為一套成熟的軟件,日志功能是必不可少的,用戶可以通過查看日志的方式來了解到之前究竟發(fā)生了什么。語音報警軟件設(shè)計(jì)了兩套日志,分別為系統(tǒng)日志和報警日志。其中,系統(tǒng)日志中記錄了有關(guān)于系統(tǒng)運(yùn)行的內(nèi)容,比如何時系統(tǒng)啟動,是否成功與PKS連接,如不成功錯誤代碼是什么等等,報警日志中記錄了有關(guān)報警的內(nèi)容,比如何時何數(shù)據(jù)產(chǎn)生了什么級別的報警等等。在主界面中我們可以看到報警日志和歷史日志,但是如果關(guān)閉了軟件,那些日志就沒有了。那么,我們就需要將當(dāng)前的日志保存至日志歷史中,這樣才能在任何時候都可以查看到。我們依然采用了將當(dāng)前日志寫入txt文件的方式用來保存日志歷史。為此,我們設(shè)置了一個自動保存歷史記錄周期的參數(shù),該參數(shù)用于產(chǎn)生一個Timer,當(dāng)Timer觸發(fā)時將該周期收集到的最新日志加入到之前txt文件的末尾,這樣,就實(shí)現(xiàn)了日志歷史記錄的保存。同時,為了防止txt文件過于龐大,設(shè)置了一個自動歸檔周期的參數(shù),該參數(shù)同樣的產(chǎn)生一個Timer,當(dāng)Timer觸發(fā)時將當(dāng)前的txt文件復(fù)制保存至指定的路徑中,同時清空當(dāng)前的txt文件,這樣用戶可以通過在windows系統(tǒng)中查看歸檔文件的方式來查看之前的日志。
為了便于用戶查看系統(tǒng)/報警日志歷史,語音報警系統(tǒng)專門設(shè)計(jì)了一個頁面用于查看當(dāng)前txt文件中的日志記錄。頁面內(nèi)放置TextBox用于顯示日志歷史記錄,讀入txt文件的函數(shù)如下:
Public Function openfile(ByVal FileName As String)As String
Dim a As String
Dim b
Open FileName For Input As #1
While Not EOF(1)
Line Input #1,b
If a=\"\"Then
a=b
Else
a=a vbCrLf b
End If
Wend
Close #1
openfile=a
End Function
7.用戶權(quán)限的設(shè)計(jì)與實(shí)現(xiàn)
為了保證用戶使用起來更加安全可靠,需要對用戶權(quán)限進(jìn)行設(shè)置。語音報警軟件采用了兩級權(quán)限的方式,分別設(shè)置了oper和admin兩個權(quán)限。其中oper用戶僅僅可以進(jìn)行瀏覽,查找日志等一般性操作,而admin權(quán)限則可以進(jìn)行對組態(tài)的修改,包括報警點(diǎn)的添加和刪除、報警限的修改、通訊參數(shù)的修改、歸檔的周期或者歸檔路徑的修改等等。這個功能實(shí)現(xiàn)起來也非常容易,可以設(shè)置全局變量UserPermission。軟件啟動時默認(rèn)為oper權(quán)限,用戶可以通過登錄窗口將oper權(quán)限改為admin權(quán)限,此時UserPermission賦值為admin。用戶所有涉及到權(quán)限的操作,在執(zhí)行前均會查看一下UserPermission的值,若該值為admin則操作繼續(xù)執(zhí)行,若該值為oper則當(dāng)前操作停止執(zhí)行,同時提示用戶權(quán)限不足。同時,還需要提供修改密碼窗口,可供用戶修改admin密碼,修改密碼可以當(dāng)時生效。
參考文獻(xiàn):
[1]Honeywell PKS knowledge builder CD.
[2]趙文東,寇海洲.在VB中使用TTS技術(shù)實(shí)現(xiàn)語音的編輯和播放[J].洛陽工業(yè)高等專科學(xué)校學(xué)報,2003,02.
作者簡介:張世君(1982—),男,工程師,主要從事石油、天然氣行業(yè)自動化控制系統(tǒng)的研究工作。