關世才,關朋,李艷東,展鵬,劉輝,羅青華
(天津電氣傳動設計研究所,天津 300180)
隨著近年來國家節能減排方針的深入實施,淘汰落后產能、提高生產效率已經成為各個鋼鐵企業的首要任務,在這樣的背景下精確的成本核算變得尤為重要。在高爐煉鐵中,槽下配料的重量統計報表就是公司核算原料成本的主要依據。文章中介紹的高爐上料系統PLC采用Rockwell的ControlLogix控制器,FactoryTalk View SE作為監控軟件,并以Access為數據記錄模型,通過ADO技術外部調用可執行文件實現Excel全自動報表功能。這種方法可以彌補工控軟件報表功能的不足,滿足實際生產的需要。
DAO(database access object)數據訪問對象使用Microsoft Jet數據庫引擎來訪問數據庫,它提供了完成管理關系型數據庫所需要的全部操作的屬性和方法。RDO(remote data objects)遠程數據對象是一個專門為訪問遠程ODBC、面向對象設計的接口,可以實現服務器/客戶端的設計目標,但RDO訪問Jet或ISAM數據庫方面受到限制。隨著數據訪問技術的發展,微軟推出ADO技術正在逐漸取代DAO和RDO技術。
ADO(microsoft activeX data objects),又稱為OLE自動化接口,是目前Microsoft通用的數據訪問技術。ADO是為OLE DB數據訪問方式的一種主要對象模型,而OLE DB則是由ODBC延伸出來的COM組件,是一個便于應用的底層接口。使用ADO以后,OLE DB的使用變得更加簡單,速度更快以及較低的內存占用。ADO對象中主要包括建立與數據庫連接的Connection對象,可以發出命令操作數據源的Command對象,以及連接數據庫中的表或者是Command對象的執行結果返回的記錄集的Recordset對象。通過ADO可以訪問多種類型的SQL數據庫數據,包括SQL Server,Access,Oracle等,也可以訪問非SQL應用程序的文件,如Excel文件,文本文件等。ADO的另一個功能是“遠程數據訪問”(RDS),能夠通過一個來回的傳輸將數據從服務器移動到客戶端應用程序或 Web頁中,然后在客戶端對數據進行操作,最后將更新數據返回服務器。
相對于DAO,ADO對象可以直接創建,而不必嚴格遵循對象的層次關系,因此可以只創建一個“Connection”對象,但是可以有多個獨立的“Recordset”對象來使用它,這些對象均為平面型頂級對象,ADO的RDS包含了RDO對于OLE DB數據源交互的大部分功能。而且ADO對數據庫操作相對以往數據訪問方式不但易于使用,還有高速度、低內存支出和占用磁盤空間較少的特點。因為ADO是一個和編程語言無關的COM組件系統,經常用到的編程語言包括:V BA,VBScript,VC,Java等,以及集成了這些語言的上位機監控軟件,如:Rockwell公司的FactoryTalk View SE以及早期的RSView32、西門子公司的Wincc,Intellution公司的IFix、施耐德公司的CITECT等許多主流上位機監控軟件集成的VBA都可以調用ADO對象,所以ADO的適用范圍非常廣泛,并且成為主流的數據庫訪問方式。
通常高爐上料系統的生產工藝分成槽下配料和爐頂布料,槽下配料系統由料倉、振動給料機、篩分及稱量設備、膠帶運輸機、返礦(焦)系統、地坑中間倉等組成。這些設備按上料程序,把礦、焦等原燃料按重量、料種配成比例裝入上料小車,再由卷揚系統送至爐頂,最后通過爐頂布料器將原燃料均勻地放入爐內冶煉。如圖1所示。

圖1 槽下配料系統流程圖Fig.1 Flowchart of blast-furnace burden distribution control system
高爐上料系統PLC應用Rockwell公司的ControlLogix系列控制器。Logix平臺提供了通用的控制引擎、軟件編程環境,以及跨多個硬件平臺的通訊支持。上位機監控軟件選用FactoryTalk View SE,作為系統的人機界面軟件,用于監視、控制設備狀況完成數據采集管理。FactoryTalk View SE以內部集成的RSLinx Enterprise作為上位機對PLC采集數據的數據服務器。作為歷史數據的記錄,數據記錄模型可以保存成文件集的格式,但這種格式不方便自動化接口調用,除了記錄到文件集之外,用戶還可以設置FactoryTalk View SE將數據記錄到中央的ODBC兼容數據庫,通過ODBC連接到Access數據庫作為數據記錄模型,通過ADO將Access數據庫中的數據按條件查詢并寫入到Excel文件中。
根據高爐的工藝要求,任何時刻都能直接查找Excel表格,生產過程中每上完一批料把上料的品種、重量記錄并統計到實時報表中。根據這種要求,需要做成能隨生產實時更新數據的Excel報表。FactoryTalk View SE提供了事件觸發功能,可以利用此功能實現報表的實時記錄更新。雖然FactoryTalk View SE內嵌了VBA語言可以作為自動化輔助接口,但是FactoryTalk View SE的事件中無法調度內部腳本事件,不能很好實現上述的報表功能,因此選擇通過VB6.0編寫報表程序并生成的可執行文件,再由FactoryTalk View SE利用外部事件觸發命令APPSTART調用此程序,實現將數據記錄到Excel表格文件中。數據流向的系統架構如圖2所示。

圖2 數據流向Fig.2 The flow of statistics
稱量報表需要記錄的是每批料放入高爐內的實際稱量值,根據工藝要求,當爐頂料流調節閥開啟后,料罐內爐料放空的時候PLC發出料批結束信號,這時將料罐內的料批數據記錄更新至報表。稱量斗中的料批重量數據是從槽下通過料車、受料斗、料罐逐級傳遞到高爐內并對歷次凈重進行累加,當料批中出現結束標志時將料批信息放入報表中間變量并清空料批信息,并調用報表程序。為便于上位機準確從PLC檢測到料批結束的信號,所以需要在PLC程序中將料批結束信號變成一個延時的脈沖信號以滿足HMI的采樣時間。
Microsoft Office Access數據庫是由微軟發布的關聯式數據庫管理系統,擁有圖形用戶界面的特點,比較Sql Server數據庫用戶可以直觀的查看數據庫中的數據內容。Windows的開放數據互聯ODBC數據源管理器是微軟開放服務結構中有關數據庫的一個組成部分,提供了一組對數據庫訪問的接口,在ODBC的系統DNS中添加Driver do Microsoft Access數據庫,設置數據源名Access Database,對應的數據庫選擇在D盤TG3_BAOBIAO文件夾下創建一個BAOBIAO.mdb的空數據庫文件。
典型的數據源依然需要支持開放式數據庫連接(ODBC)標準的關系型數據庫,首先在數據記錄中把需要報表歸檔的數據記錄到ODBC數據源中,數據源的名稱寫成ODBC數據管理器中名稱Access Database,連接后自動在BAOBIAO.mdb中創建了一個含有標記表TagTable,浮點表FloatTable,字符串表StringTable的數據庫,數據就記錄在浮點表中。記錄觸發器選擇根據要求,當一個批料完全放入爐內時觸發FactoryTalk View命令DataLogSnapshot,將料批重量記錄到數據庫中并調用VB程序,將Access數據寫入到Excel中。
Visual Basic(VB)是近年來在國內外得到迅速推廣應用的可視化程序設計語言,通過VB環境與其他應用軟件數據連接需要通過引用其他程序的目標庫接口實現。首先在VB工程菜單下的引用中選中需要用到的在本機注冊的接口目標庫:Microsoft Access12.0 Object Library,Microsoft ActiveX Data Objects2.8(Mulit dimensional Library以及 Microsoft Excel12.0Object Library,接下來就可以訪問VB中的ADO對象來訪問數據庫,并寫入Excel報表文件中。
With ExcelApplication
.Workbooks.Add’新建工作簿
.Visible=False’自動報表窗體不可見
.Sheets(1).Name= "日報表"’表單名稱
.Cells(3,1)= "時間"
.Cells(3,2)= "批數"
.Cells(3,3)= "焦1"’設置表頭其余省略
.Worksheets("日報表").ActivateSet’激活表單
Excel Application = CreateObject("Excel.Application")’創建 Excel對象
Set cn1= CreateObject("adodb.connection")’連接ODBC數據源
cn1.Open"driver={Microsoft Access Driver(*.mdb)};DBQ=d:\TG3_BAOBIAO\BAOBIAO"’通過ODBC數據源打開數據庫文件
Set rs= CreateObject("adodb.recordset")’將rs定義為數據集
Sql="select*from FloatTable where datediff(’d’,DateAndTime,date())<1order by DateAndTime asc,tagindex asc"’篩選方法
rs.Open Sql,cn1’對打開的數據庫文件中當天內所有記錄數據進行查詢并且按照從早到晚的順序排序
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’將查詢后得到的結果循環寫入Excel報表文件中
.DisplayAlerts=False’報警信息不提示
.ActiveWorkbook.SaveAs FileName:="D:\" &Day(Date)&".xls"’保存為當前日期
.DisplayAlerts=True’報警信息提示
.Quit’退出并釋放內存
綜上,從工程環境下注冊接口目標庫、對連接對象的創建、打開Excel以及ADO對象、重新排序、寫入數據到Excel、保存報表到指定位置并且最終釋放內存,完成了對報表的數據檢索的基本工作。
報表的格式是依據工藝要求制定的,它需要直觀地反映實際的料批重量。報表內容方面包括:報表的標題,倉位的名稱,料批時間,當前時間日期,匯總計算等。格式方面包括:字體大小要適合閱讀,由于用A4紙張打印Excel需要制表,需要用到合并單元格指令Merge,合理設置表格的高度RowHeight和列的寬度ColumnWidth,設置字體指令 Font.Bold,Font.Size,Name,HorizontalAlignment等,識別到數據的最后一列和最后一行后要把表格內部以及邊框寫到表格中的工作都需要通過程序代碼調整以滿足打印和查看的需要。下面列出了部分制表命令。
’row=ExcelApplication.Cells.SpecialCells(11).row ’查找用戶使用的最后一行,與行是否連續無關’
COL=ExcelApplication.Cells(row,255).End(-4159).Column’從得到的最后一行,從右向左查找用戶最后使用的的列,與列是否連續無關.
Range(Cells(3,1),Cells(Row,21)).Borders(xlEdgeLeft).LineStyle=1’設置邊框
制表完成后保存表格到指定目錄中,并命名為當前日期以便查找。最后將文件復制到需要查看報表的網絡客戶端。生成的報表如圖3所示。

圖3 報表Fig.3 Report statistics
1)表格擴展。報表的內容不僅限于前述的料批重量,可以根據不同的要求增加本批的探尺料位、布料方式、原料來源、爐身溫度、水系統溫度、風壓風溫、透氣性指數、噴煤富氧量、理論燃燒溫度等工藝參數,通過不同的數據組合方式生成趨勢報表、班報表、日報表、月報表等。對工藝生產更加重要的是通過在表格中植入配料計算功能,根據配比公式計算出各種物料需求的比值,對比爐況后向卷稱工段下發上料料單。這樣通過報表的反饋和理論計算可以使鐵水的含碳量含硫量等數據控制得更加精確,高爐更加高效穩定地運行。
2)數據通訊方式。報表中的VB可執行文件是通過料批脈沖來觸發執行。這樣設計是結合現場生產的需求,使報表中VB窗體不可見,這樣不需要現場人員進行其他操作,直接查看Excel,實現了盡可能少的人工干預,完全實現了報表的全自動。在制作此程序時,同時也制作了通過人為觸發查詢執行的程序,這樣就可以在RSView SE的畫面中插入ActiveX控件中Microsoft Data and Timer Picker控件或者ADO控件中的日歷控件,再通過RSView SE中內嵌的VBA輔助程序制作成針對兩個時間點之間的數據查詢并輸出報表。也可以通過AB的OPC(OLE for process control)服務器的自動化接口軟件RSLinx連接VB中引用的RSLinx OPC Automation 2.0接口,按照時間循環將報表信息通過比較寫入到Excel表格(也可以通過數據庫存儲)生成需要格式的報表,或者在VB中建立可視窗體,這樣可以不依賴于HMI和數據庫環境獨立于服務器系統,形成一套獨立的系統,通過消耗少量的CPU硬件通訊時間和以太網連接數節省服務器計算機的內存占用,經過現場試驗同樣非常穩定。
[1]韓小良,韓舒婷.Excel VBA從入門到精通[M].北京:中國鐵道出版社,2006.
[2]劉玠.煉鐵生產自動化技術[M].北京:冶金工業出版社,2005.
[3]靳平,方康玲,趙萬峰.ADO技術在IFIX報表中的應用[D].武漢:武漢科技大學,2003.