關(guān)世才,關(guān)朋,李艷東,展鵬,劉輝,羅青華
(天津電氣傳動設(shè)計研究所,天津 300180)
隨著近年來國家節(jié)能減排方針的深入實施,淘汰落后產(chǎn)能、提高生產(chǎn)效率已經(jīng)成為各個鋼鐵企業(yè)的首要任務(wù),在這樣的背景下精確的成本核算變得尤為重要。在高爐煉鐵中,槽下配料的重量統(tǒng)計報表就是公司核算原料成本的主要依據(jù)。文章中介紹的高爐上料系統(tǒng)PLC采用Rockwell的ControlLogix控制器,F(xiàn)actoryTalk View SE作為監(jiān)控軟件,并以Access為數(shù)據(jù)記錄模型,通過ADO技術(shù)外部調(diào)用可執(zhí)行文件實現(xiàn)Excel全自動報表功能。這種方法可以彌補(bǔ)工控軟件報表功能的不足,滿足實際生產(chǎn)的需要。
DAO(database access object)數(shù)據(jù)訪問對象使用Microsoft Jet數(shù)據(jù)庫引擎來訪問數(shù)據(jù)庫,它提供了完成管理關(guān)系型數(shù)據(jù)庫所需要的全部操作的屬性和方法。RDO(remote data objects)遠(yuǎn)程數(shù)據(jù)對象是一個專門為訪問遠(yuǎn)程ODBC、面向?qū)ο笤O(shè)計的接口,可以實現(xiàn)服務(wù)器/客戶端的設(shè)計目標(biāo),但RDO訪問Jet或ISAM數(shù)據(jù)庫方面受到限制。隨著數(shù)據(jù)訪問技術(shù)的發(fā)展,微軟推出ADO技術(shù)正在逐漸取代DAO和RDO技術(shù)。
ADO(microsoft activeX data objects),又稱為OLE自動化接口,是目前Microsoft通用的數(shù)據(jù)訪問技術(shù)。ADO是為OLE DB數(shù)據(jù)訪問方式的一種主要對象模型,而OLE DB則是由ODBC延伸出來的COM組件,是一個便于應(yīng)用的底層接口。使用ADO以后,OLE DB的使用變得更加簡單,速度更快以及較低的內(nèi)存占用。ADO對象中主要包括建立與數(shù)據(jù)庫連接的Connection對象,可以發(fā)出命令操作數(shù)據(jù)源的Command對象,以及連接數(shù)據(jù)庫中的表或者是Command對象的執(zhí)行結(jié)果返回的記錄集的Recordset對象。通過ADO可以訪問多種類型的SQL數(shù)據(jù)庫數(shù)據(jù),包括SQL Server,Access,Oracle等,也可以訪問非SQL應(yīng)用程序的文件,如Excel文件,文本文件等。ADO的另一個功能是“遠(yuǎn)程數(shù)據(jù)訪問”(RDS),能夠通過一個來回的傳輸將數(shù)據(jù)從服務(wù)器移動到客戶端應(yīng)用程序或 Web頁中,然后在客戶端對數(shù)據(jù)進(jìn)行操作,最后將更新數(shù)據(jù)返回服務(wù)器。
相對于DAO,ADO對象可以直接創(chuàng)建,而不必嚴(yán)格遵循對象的層次關(guān)系,因此可以只創(chuàng)建一個“Connection”對象,但是可以有多個獨立的“Recordset”對象來使用它,這些對象均為平面型頂級對象,ADO的RDS包含了RDO對于OLE DB數(shù)據(jù)源交互的大部分功能。而且ADO對數(shù)據(jù)庫操作相對以往數(shù)據(jù)訪問方式不但易于使用,還有高速度、低內(nèi)存支出和占用磁盤空間較少的特點。因為ADO是一個和編程語言無關(guān)的COM組件系統(tǒng),經(jīng)常用到的編程語言包括:V BA,VBScript,VC,Java等,以及集成了這些語言的上位機(jī)監(jiān)控軟件,如:Rockwell公司的FactoryTalk View SE以及早期的RSView32、西門子公司的Wincc,Intellution公司的IFix、施耐德公司的CITECT等許多主流上位機(jī)監(jiān)控軟件集成的VBA都可以調(diào)用ADO對象,所以ADO的適用范圍非常廣泛,并且成為主流的數(shù)據(jù)庫訪問方式。
通常高爐上料系統(tǒng)的生產(chǎn)工藝分成槽下配料和爐頂布料,槽下配料系統(tǒng)由料倉、振動給料機(jī)、篩分及稱量設(shè)備、膠帶運輸機(jī)、返礦(焦)系統(tǒng)、地坑中間倉等組成。這些設(shè)備按上料程序,把礦、焦等原燃料按重量、料種配成比例裝入上料小車,再由卷揚系統(tǒng)送至爐頂,最后通過爐頂布料器將原燃料均勻地放入爐內(nèi)冶煉。如圖1所示。
圖1 槽下配料系統(tǒng)流程圖Fig.1 Flowchart of blast-furnace burden distribution control system
高爐上料系統(tǒng)PLC應(yīng)用Rockwell公司的ControlLogix系列控制器。Logix平臺提供了通用的控制引擎、軟件編程環(huán)境,以及跨多個硬件平臺的通訊支持。上位機(jī)監(jiān)控軟件選用FactoryTalk View SE,作為系統(tǒng)的人機(jī)界面軟件,用于監(jiān)視、控制設(shè)備狀況完成數(shù)據(jù)采集管理。FactoryTalk View SE以內(nèi)部集成的RSLinx Enterprise作為上位機(jī)對PLC采集數(shù)據(jù)的數(shù)據(jù)服務(wù)器。作為歷史數(shù)據(jù)的記錄,數(shù)據(jù)記錄模型可以保存成文件集的格式,但這種格式不方便自動化接口調(diào)用,除了記錄到文件集之外,用戶還可以設(shè)置FactoryTalk View SE將數(shù)據(jù)記錄到中央的ODBC兼容數(shù)據(jù)庫,通過ODBC連接到Access數(shù)據(jù)庫作為數(shù)據(jù)記錄模型,通過ADO將Access數(shù)據(jù)庫中的數(shù)據(jù)按條件查詢并寫入到Excel文件中。
根據(jù)高爐的工藝要求,任何時刻都能直接查找Excel表格,生產(chǎn)過程中每上完一批料把上料的品種、重量記錄并統(tǒng)計到實時報表中。根據(jù)這種要求,需要做成能隨生產(chǎn)實時更新數(shù)據(jù)的Excel報表。FactoryTalk View SE提供了事件觸發(fā)功能,可以利用此功能實現(xiàn)報表的實時記錄更新。雖然FactoryTalk View SE內(nèi)嵌了VBA語言可以作為自動化輔助接口,但是FactoryTalk View SE的事件中無法調(diào)度內(nèi)部腳本事件,不能很好實現(xiàn)上述的報表功能,因此選擇通過VB6.0編寫報表程序并生成的可執(zhí)行文件,再由FactoryTalk View SE利用外部事件觸發(fā)命令A(yù)PPSTART調(diào)用此程序,實現(xiàn)將數(shù)據(jù)記錄到Excel表格文件中。數(shù)據(jù)流向的系統(tǒng)架構(gòu)如圖2所示。
圖2 數(shù)據(jù)流向Fig.2 The flow of statistics
稱量報表需要記錄的是每批料放入高爐內(nèi)的實際稱量值,根據(jù)工藝要求,當(dāng)爐頂料流調(diào)節(jié)閥開啟后,料罐內(nèi)爐料放空的時候PLC發(fā)出料批結(jié)束信號,這時將料罐內(nèi)的料批數(shù)據(jù)記錄更新至報表。稱量斗中的料批重量數(shù)據(jù)是從槽下通過料車、受料斗、料罐逐級傳遞到高爐內(nèi)并對歷次凈重進(jìn)行累加,當(dāng)料批中出現(xiàn)結(jié)束標(biāo)志時將料批信息放入報表中間變量并清空料批信息,并調(diào)用報表程序。為便于上位機(jī)準(zhǔn)確從PLC檢測到料批結(jié)束的信號,所以需要在PLC程序中將料批結(jié)束信號變成一個延時的脈沖信號以滿足HMI的采樣時間。
Microsoft Office Access數(shù)據(jù)庫是由微軟發(fā)布的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),擁有圖形用戶界面的特點,比較Sql Server數(shù)據(jù)庫用戶可以直觀的查看數(shù)據(jù)庫中的數(shù)據(jù)內(nèi)容。Windows的開放數(shù)據(jù)互聯(lián)ODBC數(shù)據(jù)源管理器是微軟開放服務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫的一個組成部分,提供了一組對數(shù)據(jù)庫訪問的接口,在ODBC的系統(tǒng)DNS中添加Driver do Microsoft Access數(shù)據(jù)庫,設(shè)置數(shù)據(jù)源名Access Database,對應(yīng)的數(shù)據(jù)庫選擇在D盤TG3_BAOBIAO文件夾下創(chuàng)建一個BAOBIAO.mdb的空數(shù)據(jù)庫文件。
典型的數(shù)據(jù)源依然需要支持開放式數(shù)據(jù)庫連接(ODBC)標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫,首先在數(shù)據(jù)記錄中把需要報表歸檔的數(shù)據(jù)記錄到ODBC數(shù)據(jù)源中,數(shù)據(jù)源的名稱寫成ODBC數(shù)據(jù)管理器中名稱Access Database,連接后自動在BAOBIAO.mdb中創(chuàng)建了一個含有標(biāo)記表TagTable,浮點表FloatTable,字符串表StringTable的數(shù)據(jù)庫,數(shù)據(jù)就記錄在浮點表中。記錄觸發(fā)器選擇根據(jù)要求,當(dāng)一個批料完全放入爐內(nèi)時觸發(fā)FactoryTalk View命令DataLogSnapshot,將料批重量記錄到數(shù)據(jù)庫中并調(diào)用VB程序,將Access數(shù)據(jù)寫入到Excel中。
Visual Basic(VB)是近年來在國內(nèi)外得到迅速推廣應(yīng)用的可視化程序設(shè)計語言,通過VB環(huán)境與其他應(yīng)用軟件數(shù)據(jù)連接需要通過引用其他程序的目標(biāo)庫接口實現(xiàn)。首先在VB工程菜單下的引用中選中需要用到的在本機(jī)注冊的接口目標(biāo)庫:Microsoft Access12.0 Object Library,Microsoft ActiveX Data Objects2.8(Mulit dimensional Library以及 Microsoft Excel12.0Object Library,接下來就可以訪問VB中的ADO對象來訪問數(shù)據(jù)庫,并寫入Excel報表文件中。
With ExcelApplication
.Workbooks.Add’新建工作簿
.Visible=False’自動報表窗體不可見
.Sheets(1).Name= "日報表"’表單名稱
.Cells(3,1)= "時間"
.Cells(3,2)= "批數(shù)"
.Cells(3,3)= "焦1"’設(shè)置表頭其余省略
.Worksheets("日報表").ActivateSet’激活表單
Excel Application = CreateObject("Excel.Application")’創(chuàng)建 Excel對象
Set cn1= CreateObject("adodb.connection")’連接ODBC數(shù)據(jù)源
cn1.Open"driver={Microsoft Access Driver(*.mdb)};DBQ=d:\TG3_BAOBIAO\BAOBIAO"’通過ODBC數(shù)據(jù)源打開數(shù)據(jù)庫文件
Set rs= CreateObject("adodb.recordset")’將rs定義為數(shù)據(jù)集
Sql="select*from FloatTable where datediff(’d’,DateAndTime,date())<1order by DateAndTime asc,tagindex asc"’篩選方法
rs.Open Sql,cn1’對打開的數(shù)據(jù)庫文件中當(dāng)天內(nèi)所有記錄數(shù)據(jù)進(jìn)行查詢并且按照從早到晚的順序排序
Do While Not rs.EOF
.Cells(I,1)=rs("DateAndTime")
.Cells(I,J)=rs("Val")
If J<=19Then
J=J+1
Else
J=2
I=I+1
End If
rs.MoveNext
Loop’將查詢后得到的結(jié)果循環(huán)寫入Excel報表文件中
.DisplayAlerts=False’報警信息不提示
.ActiveWorkbook.SaveAs FileName:="D:\" &Day(Date)&".xls"’保存為當(dāng)前日期
.DisplayAlerts=True’報警信息提示
.Quit’退出并釋放內(nèi)存
綜上,從工程環(huán)境下注冊接口目標(biāo)庫、對連接對象的創(chuàng)建、打開Excel以及ADO對象、重新排序、寫入數(shù)據(jù)到Excel、保存報表到指定位置并且最終釋放內(nèi)存,完成了對報表的數(shù)據(jù)檢索的基本工作。
報表的格式是依據(jù)工藝要求制定的,它需要直觀地反映實際的料批重量。報表內(nèi)容方面包括:報表的標(biāo)題,倉位的名稱,料批時間,當(dāng)前時間日期,匯總計算等。格式方面包括:字體大小要適合閱讀,由于用A4紙張打印Excel需要制表,需要用到合并單元格指令Merge,合理設(shè)置表格的高度RowHeight和列的寬度ColumnWidth,設(shè)置字體指令 Font.Bold,F(xiàn)ont.Size,Name,HorizontalAlignment等,識別到數(shù)據(jù)的最后一列和最后一行后要把表格內(nèi)部以及邊框?qū)懙奖砀裰械墓ぷ鞫夹枰ㄟ^程序代碼調(diào)整以滿足打印和查看的需要。下面列出了部分制表命令。
’row=ExcelApplication.Cells.SpecialCells(11).row ’查找用戶使用的最后一行,與行是否連續(xù)無關(guān)’
COL=ExcelApplication.Cells(row,255).End(-4159).Column’從得到的最后一行,從右向左查找用戶最后使用的的列,與列是否連續(xù)無關(guān).
Range(Cells(3,1),Cells(Row,21)).Borders(xlEdgeLeft).LineStyle=1’設(shè)置邊框
制表完成后保存表格到指定目錄中,并命名為當(dāng)前日期以便查找。最后將文件復(fù)制到需要查看報表的網(wǎng)絡(luò)客戶端。生成的報表如圖3所示。
圖3 報表Fig.3 Report statistics
1)表格擴(kuò)展。報表的內(nèi)容不僅限于前述的料批重量,可以根據(jù)不同的要求增加本批的探尺料位、布料方式、原料來源、爐身溫度、水系統(tǒng)溫度、風(fēng)壓風(fēng)溫、透氣性指數(shù)、噴煤富氧量、理論燃燒溫度等工藝參數(shù),通過不同的數(shù)據(jù)組合方式生成趨勢報表、班報表、日報表、月報表等。對工藝生產(chǎn)更加重要的是通過在表格中植入配料計算功能,根據(jù)配比公式計算出各種物料需求的比值,對比爐況后向卷稱工段下發(fā)上料料單。這樣通過報表的反饋和理論計算可以使鐵水的含碳量含硫量等數(shù)據(jù)控制得更加精確,高爐更加高效穩(wěn)定地運行。
2)數(shù)據(jù)通訊方式。報表中的VB可執(zhí)行文件是通過料批脈沖來觸發(fā)執(zhí)行。這樣設(shè)計是結(jié)合現(xiàn)場生產(chǎn)的需求,使報表中VB窗體不可見,這樣不需要現(xiàn)場人員進(jìn)行其他操作,直接查看Excel,實現(xiàn)了盡可能少的人工干預(yù),完全實現(xiàn)了報表的全自動。在制作此程序時,同時也制作了通過人為觸發(fā)查詢執(zhí)行的程序,這樣就可以在RSView SE的畫面中插入ActiveX控件中Microsoft Data and Timer Picker控件或者ADO控件中的日歷控件,再通過RSView SE中內(nèi)嵌的VBA輔助程序制作成針對兩個時間點之間的數(shù)據(jù)查詢并輸出報表。也可以通過AB的OPC(OLE for process control)服務(wù)器的自動化接口軟件RSLinx連接VB中引用的RSLinx OPC Automation 2.0接口,按照時間循環(huán)將報表信息通過比較寫入到Excel表格(也可以通過數(shù)據(jù)庫存儲)生成需要格式的報表,或者在VB中建立可視窗體,這樣可以不依賴于HMI和數(shù)據(jù)庫環(huán)境獨立于服務(wù)器系統(tǒng),形成一套獨立的系統(tǒng),通過消耗少量的CPU硬件通訊時間和以太網(wǎng)連接數(shù)節(jié)省服務(wù)器計算機(jī)的內(nèi)存占用,經(jīng)過現(xiàn)場試驗同樣非常穩(wěn)定。
[1]韓小良,韓舒婷.Excel VBA從入門到精通[M].北京:中國鐵道出版社,2006.
[2]劉玠.煉鐵生產(chǎn)自動化技術(shù)[M].北京:冶金工業(yè)出版社,2005.
[3]靳平,方康玲,趙萬峰.ADO技術(shù)在IFIX報表中的應(yīng)用[D].武漢:武漢科技大學(xué),2003.