賀明慶
(大慶油田第一采油廠儀表安裝維修大隊(duì),黑龍江 大慶 163453)
目前,油田配注系統(tǒng)普遍采用“集中配置,分散注入”的工藝流程,即一個(gè)配置站對(duì)應(yīng)多個(gè)注入站。其過程是在配置站將化學(xué)藥劑與清水按照一定比例混合,制成符合濃度要求的母液,母液經(jīng)過熟化后,由外輸泵輸送至各個(gè)注入站,在注入站按照每口井的配比方案加入清水,然后,注入井下。
注入站工藝流程為:上游配置站輸送來的母液進(jìn)入母液儲(chǔ)罐,經(jīng)柱塞泵增壓后被輸送到母液匯管中,再經(jīng)過單井母液調(diào)節(jié)閥進(jìn)入混合器。注水站來的清水經(jīng)過單井清水調(diào)節(jié)器進(jìn)入混合器,在這里與母液充分混合后被注入井下。
注入站的測(cè)控參數(shù)主要包括母液儲(chǔ)罐液位、柱塞泵進(jìn)出口壓力、單井壓力、單井清水流量等。
采用“VBA+數(shù)據(jù)庫”的方案實(shí)現(xiàn)報(bào)表查詢。VBA(Visual Basic for Application)是新一代標(biāo)準(zhǔn)宏語言,是基于Visual Basic for Windows發(fā)展而來的,語言簡(jiǎn)單易學(xué),功能強(qiáng)大。
VBA是VB的應(yīng)用程序版本,必須依賴于已有的應(yīng)用程序,不能獨(dú)立運(yùn)行。目前,WIinCC、FactoryTalk View Studio、Ifix等主流組態(tài)軟件都支持VBA編程。
具體過程是利用組態(tài)軟件SE的數(shù)據(jù)記錄功能建立數(shù)據(jù)記錄模型,將需要的數(shù)據(jù)采集并存儲(chǔ)在ODBC指定的數(shù)據(jù)庫中。當(dāng)操作員查詢報(bào)表時(shí),選擇日期后,按下查詢按鈕,即執(zhí)行VBA代碼,將數(shù)據(jù)庫中的數(shù)據(jù)讀出來,并寫入報(bào)表模板中,生成指定日期的生產(chǎn)數(shù)據(jù)報(bào)表。
展開HMI服務(wù)器的“HMI標(biāo)簽”,右鍵點(diǎn)擊“標(biāo)簽”,點(diǎn)擊“打開”,在打開的標(biāo)簽窗口中點(diǎn)擊“新建”,在標(biāo)簽名稱欄中輸入標(biāo)簽名“DayReport_Date”,類型選擇“字符串”,數(shù)據(jù)源類型選擇“內(nèi)存”,點(diǎn)擊“接受”,保存標(biāo)簽。
ActiveX控件是一種基于COM接口的控件,通常不能獨(dú)立使用,只能在宿主程序中運(yùn)行,支持COM接口規(guī)范的編程環(huán)境均可使用它。在報(bào)表查詢畫面中,需要使用日歷控件,必須提前在“Visual Basic編輯器”中添加ActiveX控件引用。打開SE,點(diǎn)擊“視圖”,選擇“Visual Basic編輯器”。在打開的窗口中點(diǎn)擊“工具”,選擇“引用”,在列表欄中勾選“MicroSoft Calender control 2007”,點(diǎn)擊“確定”,保存設(shè)置。
打開SE的應(yīng)用項(xiàng)目瀏覽器窗口,展開HMI服務(wù)器的“圖形”,右鍵點(diǎn)擊“顯示”,選擇“新建”,創(chuàng)建畫面“Report”。打開畫面“Report”,添加日歷控件、按鈕、文本、字符串等對(duì)象。將日歷控件的“Value”屬性及字符串的表達(dá)式屬性與“DayReport_DATE”標(biāo)簽相關(guān)聯(lián),并設(shè)置字體、顏色等其他相關(guān)屬性。
根據(jù)生產(chǎn)崗位的需求,采用Micosoft Office Excel 2007設(shè)計(jì)報(bào)表模板“日?qǐng)?bào)表.xlsx”。并將報(bào)表模板文件存儲(chǔ)在“D:模板”路徑下備用(此路徑應(yīng)與VBA代碼中指定的路徑一致)。
展開HMI服務(wù)器的“數(shù)據(jù)記錄”,右鍵點(diǎn)擊“數(shù)據(jù)記錄模型”,點(diǎn)擊“新建”,打開數(shù)據(jù)記錄模型的設(shè)置窗口。點(diǎn)擊“設(shè)置”標(biāo)簽,選擇“ODBC數(shù)據(jù)庫”,點(diǎn)擊“ODBC數(shù)據(jù)源”;選擇“系統(tǒng)數(shù)據(jù)源”標(biāo)簽,點(diǎn)擊“新建”;選擇“系統(tǒng)數(shù)據(jù)源”,點(diǎn)擊“下一步”;選擇“Micosoft Access Driver(?.mdb ?.a(chǎn)ccdb)”,點(diǎn)擊“完成”;彈出的“ODBC Micosoft Access 安裝”窗口,在“數(shù)據(jù)源名”欄中輸入“Report”,點(diǎn)擊“創(chuàng)建”按鈕,選擇保存數(shù)據(jù)庫的位置,在“數(shù)據(jù)庫名”欄中輸入“Report”,點(diǎn)擊“確定”。點(diǎn)擊“創(chuàng)建表”標(biāo)簽,在數(shù)據(jù)庫中創(chuàng)建表“FloatTable”“StringTable”“TagTa ble”。點(diǎn)擊“路徑”標(biāo)簽,勾選“啟用ODBC備用路徑”。點(diǎn)擊“文件管理”標(biāo)簽,設(shè)置清除ODBC數(shù)據(jù)庫中保存舊記錄的天數(shù)。點(diǎn)擊“記錄觸發(fā)器”標(biāo)簽,勾選“周期性”,根據(jù)需求,在“間隔”欄中設(shè)置數(shù)據(jù)采集周期。點(diǎn)擊“模型中的標(biāo)簽”標(biāo)簽,添加需要記錄的數(shù)據(jù)標(biāo)簽。
(1)通用中代碼
Option Explicit
Public MyTagGroup As TagGroup
Dim sDateTag As Tag
Public gS_DBPath As String
Public gO_Connection As ADODB.Connection
(2)頁面初始化代碼
Private Sub Display_AnimationStart()
gS_DBPath = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:dataDatabase1.a(chǎn)ccdb;”
Set gO_Connection = New ADODB.Connection
gO_Connection.CursorLocation = adUseClient
gO_Connection.Open gS_DBPath
If MyTagGroup Is Nothing Then
Set MyTagGroup=Application.CreateTagGroup(Me.AreaName)
MyTagGroup.Add “DayReport_DATE”
Set sDateTag = MyTagGroup.Item(“DayReport_DATE”)
If sDateTag.Value = “” Then
sDateTag.Value = Format(Now, “yyyy-mm-dd”)
End If
End If
End Sub
(3)查詢按鈕部分代碼
Private Sub 按鈕 3_Released()
Dim sSql As String
Dim rsData As New ADODB.Recordset
Dim i As Integer
Dim ExcelID As Excel.Application
Dim rptName As String
Dim sDate As String
If sDateTag.Value =“”Then
sDate = Format(Now, “yyyy-mm-dd”)
Else
sDate = sDateTag.Value
End If
Set ExcelID = New Excel.Application
ExcelID.Workbooks.Open (“d: 模 板 日 報(bào) 表.xlsx”)
ExcelID.Worksheets(1).Activate
sSql = “select ? from tagtable inner join floattable on tagtable.tagindex = floattable.tagindex where tagtable.tagName like ‘%MBFT%ACC%’ and floattable.dateandtime in (select min(dateandtime) from floattable where floattable.dateandtime between #” +CStr(DateAdd(“d”, -1, sDate)) + “ 10:00:00# and #+ CStr(DateAdd(“d”, -1, sDate)) + “ 10:05:00#)order by tagtable.tagindex desc”
rsData.Open sSql, gO_Connection, adOpenKeyset,adLockReadOnly
For i = 0 To rsData.RecordCount - 1
ExcelID.Cells(i + 7, 11) = Format(rsData.Fields(“val”), “###0.00”) ‘ 將 結(jié) 果 集 記 錄 寫 入Excel
rsData.MoveNext
Next i
rsData.Close: Set rsData = Nothing
ExcelID.DisplayAlerts = False
rptName =“D:data”+Format(DateAdd(“d”,1, sDate), “yyyy-mm-dd”)+“日?qǐng)?bào)表 .xlsx”
ExcelID.ActiveWorkbook.SaveAs rptName
ExcelID.ActiveWorkbook.Close
ExcelID.Quit: Set ExcelID = Nothing
End Sub
采用“VBA+數(shù)據(jù)庫”的方式實(shí)現(xiàn)報(bào)表功能,比單純使用VBA開發(fā)報(bào)表的方式更為簡(jiǎn)單靈活,但應(yīng)當(dāng)注意的是,采用Office Access數(shù)據(jù)庫,當(dāng)數(shù)據(jù)記錄達(dá)到數(shù)萬條時(shí),查詢效率較低,有時(shí)需要一兩分鐘,甚至出現(xiàn)系統(tǒng)無響應(yīng)的情況。為了提高查詢效率,也可以采用Micosoft SQL數(shù)據(jù)庫,原理相同,只需對(duì)數(shù)據(jù)庫連接的代碼略作改動(dòng),并添加相應(yīng)的ODBC數(shù)據(jù)源即可,此處不再贅述。