摘要:自動化配煤系統中,相關信息的采集、分析處理及存儲起著比較重要的作用。本文針對自動配煤過程中的相關的數據采集、處理方法以及所需要的報表制作、聲音報警功能的實現進行描述。針對其中的關鍵技術、原理和方法進行了詳細的闡述。
關鍵詞:組態軟件IFIX;ODBC;ADO;數據庫管理系統;API
中圖分類號:TP29文獻標識碼:A文章編號:1009-3044(2008)31-0892-04
Data Report and Realization of in Automation of Coal Blending System
ZHU Hui1, HAN Fang-fang2
(1. Shandong Province Sanhekou Mining Co., Ltd., Jining 277600, China; 2. College of Information and Electrical Engineering of CUMT., Xuzhou 221008, China)
Abstract: Related information collection,processing and storage plays a more important role in automation of coal blending system. This paper Statements the process of data reports making and the realization of the sound alarm function,and described the key technologies,principles and methods in detail.
Key words: IFIX; ODBC; ADO; database management system; API
1 引言
計算機自動配煤系統的原理是基于裝車皮帶末端的灰分儀給出的實時在線灰分數據和皮帶秤的流量,根據約束條件和目標灰分,建立合理的數學模型,動態優化配比,閉環控制,用開給煤機的臺數進行粗調,變頻調速技術來進行細調,使實際灰分和目標灰分最大限度接近,從而使配煤更加穩定、可靠和準確。配煤系統的自動運行,減少人員的參與,提高裝車的速度和可靠性,改變過去人工配煤裝車的落后方式,并且計算機自動配煤裝車系統的實施要在最大化的利用原有生產設備的基礎上進行,充分利用現有資源,節省成本。
本文章所依據的某礦的自動配煤系統由可編程邏輯控制器PLC、組態軟件ifix以及工控機等設備組成,該自動配煤系統不僅能夠讓操作員控制現場設備,查看設備當前的狀態信息以及相關的配煤數據如皮帶上的煤流量、各皮帶的實時灰份、配煤的目標灰分等,還可以對之前的數據進行查詢、打印等,當相關的參數超出要求范圍發出相關的報警信息。其結構和相關數據,如圖1示。我們主要針對該系統中報表的制作和聲音報警的實現進行闡述。
2 數據采集方案研究與確定
IFIX中也有歷史數據庫和實時數據庫,但所能存儲的時間和數據量是有限的,并且對相關數據的處理也不太方便,因此我們需要將我們所需要的一些關鍵數據轉存至專業的數據庫管理系統中,以備我們制作報表[1]以及查詢等相關的數據操作。IFIX使用VBA(Visual Basic for Applications)作為其腳本語言。腳本在iFIX 中許多地方都有應用。VBA面向對象和事件驅動的開發環境,支持Microsoft 窗體和ActiveX,可以使用命令專家或使用VB編輯器VBE編寫IFIX中對象的VBA腳本。
IFIX過程數據庫中的數據存儲時間和存儲容量有限且不方便我們對數據進行相關的操作,為此我們一般要將過程數據庫中的數據首先轉存到關系數據庫如Access[3]或Sql server[2]數據庫中,以便于我們對數據進行相關的管理和分析以及報表的制作。將這些數據轉存至關系數據庫可以通過兩種方式進行,一種是利用ODBC接口,另一種是通過ADO接口,下面我們分別討論對兩種方式實現的方法。
2.1 利用ODBC接口實現數據轉存
在本工程應用中數據庫管理軟件可采用ACCESS或SQL SERVER,由于iFIX和這兩種數據庫管理軟件都支持ODBC標準,可以通過ODBC接口實現SCADA節點和數據庫服務器之間的數據通訊。開放式數據庫互連(ODBC)是Microsoft建議并開發的數據庫訪問API標準,它是建立在各種數據庫管理系統底層驅動程序之上的一個標準層,對數據庫的底層作了封裝,允許應用程序用統一的訪問數據標準:結構化查詢語言(SQL)來訪問數據庫管理系統中的數據。ODBC技術的最大優勢是開放的互操作性,通過安裝多種ODBC驅動程序,可實現同一應用程序對不同數據庫的訪問。
通過在iFIX端安裝數據庫客戶端程序,把SQL SERVER/Access數據庫作為數據源來實現連接。在iFIX中可通過兩種ODBC結構(多層ODBC結構和單層ODBC結構)來實現通訊。單層結構,如Access驅動器,通常直接在數據庫文件上運行。單層ODBC結構可以處理ODBC調用和實際SQL命令。多數情況下,數據庫文件和應用存在于同一臺計算機上。但數據庫文件也可以通過網絡像共享文件一樣位于另外一臺計算機上。多層結構更為普遍,通常與遠程數據庫服務器如SQL和Oracle等一起使用。多層結構處理由應用層引起的ODBC呼叫,傳遞實際SQL命令到數據庫系統。Ifix數據庫管理系統建立ODBC連接的過程如圖2所示。首先數據庫客戶端程序向IFIX系統發出請求建立ODBC連接,然后IFIX響應請求并通過ODBC接口與數據庫客戶端程序進行數據通訊,再由數據庫引擎實現數據的操作。
2.2 通過ADO接口實現數據的轉存
ADO是ActiveX數據對象(ActiveX Data Objects),這是Microsoft開發數據庫應用程序的面向對象的新接口。ADO訪問數據庫是通過訪問OLE DB數據提供程序來進行的,提供了一種對OLE DB數據提供程序的簡單高層訪問接口。ADO技術簡化了OLE DB的操作,OLE DB的程序中使用了大量的COM接口,而ADO封裝了這些接口,它是一種高層的訪問技術。它具有功能較強、通用性好、效率高、占空間少等特點。隨著信息網絡化的發展,對數據庫的訪問宜采用ADO對象模型,以獲得更好的性能和更大的靈活性。Ifix中的數據通過ADO接口轉存至關系數據庫中的流程如圖3所示。具體的實現步驟如下:
1) 引用
在使用ADO前,必須做一定的準備工作,如進行聲明,指定各自的版本,這項工作,稱為引用。IFIX軟件是基于VBA語言的,在IFIX中,ADO的引用是通過代碼編輯界面中的工具/引用菜單,然后在相應的對話框中選擇需要版本的microsoft activex data objects選項即可。
2) 建立連接和動態記錄集
建立與數據源的連接,創建動態記錄集,連接成功后不需要將數據移動和轉換,而是根據需要選擇相應的字段或記錄形成動態記錄集,這樣能有效控制數據的流量。程序中可能有很多模塊需要數據庫連接的操作,因此我們在公用模塊project_user的通用部分聲明這段代碼以使各個模塊均可以調用該子程序,以連接access數據庫為例,這部分語句如下:
Public con As New ADODB.connection
Public rst As New ADODB.Recordset
Public sql As String%對數據庫進行操作的sql語句
Public Sub connection()
Dim strcon As String
strcon=\"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= :\\data\\lqdata.mdb ;Persist Security Info=False;Jet OLEDB:SFP=True\"
con.Open strcon
End Sub
當連接sql sever數據庫時,要改變其中的連接字符串:
strcon =\"Provider=SQLOLEDB.1;PersistSecurityInfo=False;User _ ID=sa;PassWord=123;Initial Catalog=ifixdata;Data Source=192.168.0.4\"
以上幾句是用ADO建立聯接。
下面是建立動態記錄集的程序:
Public Sub Record()
Call connection
Set rst = New Recordset
With rst.CursorLocation = adUseClient
.CursorType = adOpenStatic
.Open sql, con
Set .ActiveConnection = Nothing
End With
完成了與數據庫的連接,建立相應的動態數據集后便可以對關系數據庫的數據進行相關的操作了。
3) 對記錄進行操作
第二步完成后,就可以開始對數據庫進行一系列操作,如查詢記錄、更新記錄、刪除記錄等,一般通過Recordset對象的方法或屬性進行。如AddNew方法用于增加一條新記錄;Delete方法用于刪除一條記錄;Update方法用于更新記錄;Find方法用于搜索Recordset中滿足指定條件的記錄;Filter屬性用于為Recordset中的數據指定篩選條件。
將數據從IFIX中轉存至關系數據庫中后,我們是通過基于時間或事件的調度來進行的,基于時間的調度項是依據設定的掃描周期執行調度中的代碼,基于事件的調度項是按照設定的周期對事件的條件進行判定,符合條件則執行調度中的代碼,否則不執行。基于時間和事件的調度流程分別如圖4和圖5。
3 數據的存儲和報表制作
我們要創建查詢界面,和相應的報表,對于相關數據的存儲,配煤系統中我們要進行存儲的數據主要有煤的目標灰分、實際灰分、皮帶上的煤流量等數據,我們針對這些要觀察的數據進行分析,制作相應的查詢界面以及可打印的報表,我們采用比較簡單的EXCEL報表。
查詢界面的實現是利用IFIX中的VXData控件通過ODBC接口與相應的數據源建立連接以及對數據源中的數據進行相關的篩選,再將Data Grid控件綁定到VXData所對應的數據表中,即實現了將數據源快速的連接到到可視的查詢界面上,界面以實現在ifix軟件中對相關數據的查詢等相關操作。界面如圖所示:
■
圖6 數據查詢界面圖7 可打印的EXCEL報表
但利用VXData、Data Grid控件實現的查詢界面可以很方便的實現按時間段對數據進行查詢,及刪除不需要的數據,但不可以對查詢得到的數據進行打印,因此我們還要利用水晶報表、或其他報表控件實現對所查詢數據的可打印功能,我們可以將這些查詢的數據導入相應的控件即可,實現可打印的報表,這里我們簡單介紹將數據導入EXCEL表單中,以實現相關數據的打印功能。
下面的語句是將數據導入建立的EXCEL表myrtp.xls中,數據庫的連接及數據的查詢部分省略。
Set xlapp = CreateObject(\"Excel.Application\")
xlapp.Workbooks.Open Filename:=\"c:\\myrtp.xls\"
Set exBook = xlapp.Workbooks(1)
Set exsheet = exBook.Worksheets(\"sheet1\")
With exsheet
.Cells(1, 1) = \"自動配煤裝車系統日報表\"
For bi = 0 To rst.Fields.Count–1%統計數據的數目
.Cells(2, bi+1) = rst.Fields(bi).Name
Next
For bi = 0 To rst.RecordCount - 1
For br = 0 To rst.Fields.Count - 1
.Cells(bi + 3, br + 1) = rst.Fields(br).Value%數據導入
Next br
rst.MoveNext
Next bi
End With
xlapp.Visible = True
可以看到數據的查詢界面如圖6,將數據導入EXCEL表中生成的可打印報表的效果如圖7所示。
4 聲音報警的實現
在自動配煤的過程中,我們主要是根據灰分儀和核子秤提供的數據對相應的給煤機頻率進行調整,調節不同媒質的煤的流量,從而達到要求的目標灰分。在這個過程中,我們不僅要保證灰分達到要求還要保證皮帶上的煤流量。當實際的灰分確實達不到要求的時候我們要給出報警信息,以備操作人員進行相關的操作。我們利用API函數實現在ifix中的聲音報警,首先制作所需的WAV格式的聲音文件,再通過調用API函數實現聲音文件的播放。
API[4]的英文全稱(Application Programming Interface),簡單來說,API就是應用程序接口), API 函數在使用時必須先聲明, 未經聲明的API 函數是不能調用的, VBA 提供了API 文本瀏覽器簡化了聲明過程。在VBA中聲明API函數的語法格式是:
[ Public | Private ] Declare Function name \" libname\" [ Alias \" aliasname\" ] [ (list) ] [ as type ]
調用API 函數時必須明白所調用函數的作用, 以及List 參數列表各參數的意義,我們用到的函數名稱是winmm.dll庫中的函數sndPlaySound,下面是在通用部分對API函數的聲明語句:
Private Declare Function sndPlaySound Lib \"winmm.dll\" Alias \"sndPlaySoundA\" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
我們在調度里實現對相關參數的循環檢測,按照設定時間對相關參數進行掃描判定是否發出聲音報警,并存儲相關的報警數據,對API函數的調用如下程序。
Dim filename As String
If(……)Then %判定是否滿足報警條件
sflags = snd_async
filename = \"文件路徑+文件名.wav\"
Call sndPlaySound(filename, snd_async)%調用API函數
End If
在滿足聲音報警的條件下便可以聽到相應的聲音報警。
5 總結
文章針對某礦自動配煤系統中的數據的查詢、打印及相關的聲音報警的實現進行了探討,用比較簡單的方法實現了自動配煤系統中的相關數據的可打印報表以及聲音報警。
參考文獻:
[1] IFIX.154 Student guide 2001,intellution,inc.chapter 23.
[2] Mike Gunderloy Joseph.SQL Server 2000 從入門到精通[M].北京:人民郵電出版社,2001,3.
[3] 王宇虹,等. Access 數據庫系統開發從基礎到實踐[M].北京:電子工業出版社,2006.
[4] 李際. Windows2000 API超級寶典[M].北京:人民郵電出版社,2001.