王銳 (1969-)
男,畢業(yè)于西安理工大學(xué),從事自動(dòng)化控制及企業(yè)信息化工作,現就職于金川集團公司自動(dòng)化研究所。
摘 要:信息化在有色企業(yè)生產(chǎn)報表處理中的應用越來(lái)越廣泛,但如何更有效的達到企業(yè)級MES平臺上的生產(chǎn)數據集成與數據共享,最大限度地消除信息孤島,仍是值得研究和探討的。本文在對行業(yè)生產(chǎn)報表詳細分析的基礎上,介紹了B/S架構下生產(chǎn)報表的實(shí)現方式,并針對采用C#、Oracle編程實(shí)現報表的關(guān)鍵技術(shù)進(jìn)行了詳細分析,給出了在某有色企業(yè)“煙氣制酸”節能減排實(shí)踐中的一種行之有效的報表處理方法。
關(guān)鍵詞:有色企業(yè);MES;生產(chǎn)報表;節能減排;C#;Oracle編程
Abstract: According to production statements in Chinese nonferrous metal enterprises, Information technology has been more and more widely used. But it is also worthy of studying ,how to realize the whole Enterprise data integration and sharing on the platform of MES and thus to erase information silo. In this paper, based on a detail analysis of production statement, we introduce the implementation approach of production statement under B/S frame. In addition, we detail some key programming technology for implementing statements ,such as C#、Oracle Programming etc . Furthermore, we give an effective method to deal with the statements in energy conserving and emission reducing of one enterprise.
Key words: nonferrous metal enterprises; MES; production statements; energy conserving and emission reducing; C#; Oracle Programming
1 引言
在我國有色企業(yè)實(shí)現“由大到強”轉變的關(guān)鍵時(shí)期,實(shí)現結構調整、節能降耗是實(shí)現經(jīng)濟增長(cháng)方式轉變,加快企業(yè)國際化和可持續發(fā)展步伐的重要內涵。
MES位于企業(yè)ERP(計劃層)/MES(執行層)/PLC(控制層)三層架構的中間一層,它運用及時(shí)、準確的信息,指導、啟動(dòng)并記錄工廠(chǎng)活動(dòng),從而能夠對條件作出迅速響應,減少非增值活動(dòng),提高工廠(chǎng)運作過(guò)程的效率。起著(zhù)承上啟下,填補計劃層與控制層信息斷層的關(guān)鍵橋梁作用[1]。
在金川公司MES層級的“煙氣制酸”生產(chǎn)監控與調度系統的開(kāi)發(fā)過(guò)程中,涉及兩個(gè)生產(chǎn)二級子廠(chǎng)的12個(gè)主車(chē)間大量生產(chǎn)數據,之前,生產(chǎn)用戶(hù)一直采用紙質(zhì)報表、電話(huà)問(wèn)詢(xún)、人工統計、手抄記錄的方式處理生產(chǎn)數據。報表制作復雜,信息滯后且缺乏準確、實(shí)時(shí)性。生產(chǎn)數據成為孤島、生產(chǎn)管理與生產(chǎn)現場(chǎng)斷層問(wèn)題較為嚴重。因此,對于企業(yè)-二級子廠(chǎng)-車(chē)間系統三級用戶(hù),生產(chǎn)信息的集成、共享與分級顯示成為亟待解決的問(wèn)題。
本文在金川集團公司 “煙氣制酸”生產(chǎn)監控與調度系統的開(kāi)發(fā)過(guò)程中,針對MES層生產(chǎn)報表信息集成與數據共享問(wèn)題,在B/S架構下采用C#面向Office編程技術(shù)[2]以及Oracle編程技術(shù)[3],有效地解決了傳統紙質(zhì)報表所導致的信息難于共享、缺乏實(shí)效性、制作復雜等諸多問(wèn)題。在該企業(yè)節能減排,綜合治理過(guò)程中較好地體現了企業(yè)信息化所帶來(lái)的應有的價(jià)值。
2 生產(chǎn)報表實(shí)現方法
2.1 生產(chǎn)報表分類(lèi)
按照生產(chǎn)報表所依據的數據來(lái)源,可以分為實(shí)時(shí)監控報表和生產(chǎn)管理報表兩個(gè)類(lèi)別。
實(shí)時(shí)監控報表,其數據來(lái)源主要是實(shí)時(shí)生產(chǎn)數據(一般為分鐘或小時(shí)級),這些數據都可以從控制層各分散DCS/PLC系統中,通過(guò)OPC等傳輸協(xié)議組態(tài)到統一的實(shí)時(shí)數據庫平臺中,然后再由實(shí)時(shí)數據庫通過(guò)組態(tài)提取到報表單元格中。
生產(chǎn)管理報表,主要是無(wú)法從控制層自動(dòng)化設備上直接獲取,需要人工錄入的生產(chǎn)管理、計劃、銷(xiāo)售類(lèi)數據以及少量涉及主要生產(chǎn)指標的,可以從實(shí)時(shí)數據庫提取到的實(shí)時(shí)數據,這些實(shí)時(shí)數據實(shí)時(shí)性要求不高(一般為班、日級),而且多數要經(jīng)統計計算處理后才可使用。
2.2 系統架構
該系統采用“瘦”客戶(hù)端的B/S三層架構,報表的編輯和使用都可以通過(guò)瀏覽器方式直接處理,所有程序、數據存儲在服務(wù)器端,而無(wú)需依賴(lài)于客戶(hù)端軟件,減少了軟件維護量,增大了系統安全性、可維護性與穩定性。
如圖1所示,實(shí)時(shí)數據庫(RTDBS)將實(shí)時(shí)數據從各控制系統提取上來(lái),在支持實(shí)時(shí)報表的同時(shí),也為關(guān)系數據庫提供所需的歷史實(shí)時(shí)數據。其他數據存入關(guān)系數據庫(RDBMS)中。RTDBS與RDBMS之間通過(guò)數據庫中間件交互。關(guān)系數據庫與邏輯層之間通過(guò)Oracle PL/SQL程序包將數據處理之后進(jìn)行交互。用戶(hù)對生產(chǎn)報表的編輯和瀏覽完全可以只通過(guò)帶有瀏覽器的客戶(hù)端進(jìn)行訪(fǎng)問(wèn)。報表操作簡(jiǎn)單易用,數據交互效率較高。
2.3 報表格式
采用帶有一定普遍意義的Office Excel格式。編輯、訪(fǎng)問(wèn)、下載、局部化修改、打印等更加符合用戶(hù)傳統習慣。編程時(shí)采用C#語(yǔ)言面向Office編程的相關(guān)方法,先定義好所需的報表模板,通過(guò)提取模板中不同WorkSheet各單元格關(guān)鍵字并嵌入相應SQL語(yǔ)句的方式,與數據庫進(jìn)行交互。
2.4 編輯方式
編輯某個(gè)車(chē)間特定的報表模板時(shí),將模板(xls格式)文件分為多個(gè)WorkSheet工作表,如圖2所示,Report工作表負責為用戶(hù)呈現報表內容,排版格式與該車(chē)間之前使用的紙質(zhì)報表基本一致,只是做了少量有利于信息化處理的修改。Field工作表存放Report中需要從數據庫提取數據的單元格映射,其格式主要是Key-Value鍵值對。同時(shí),Field又將其自身的與Report單元格映射過(guò)的單元格重新映射到圖2中其他Sheet各單元格中,因此它在Report與后續Sheet之間起著(zhù)承上啟下數據傳輸的作用。Global中存放報表處理程序訪(fǎng)問(wèn)該報表時(shí)需要提取的全局化關(guān)鍵字,例如報表日期、所屬部門(mén)、報表頻次等。
其他Sheet用于通過(guò)指標關(guān)鍵字,依據不同的頻次、部門(mén),從數據庫讀取數據并將數據映射回Field中,例如“DCL_MORNING_SHEET(頂吹爐早班數據項)”、“SSL_MONTH(閃速爐月數據)”等。采用B/S架構下的面向Office編程技術(shù),通過(guò)不同關(guān)鍵字提取,依次訪(fǎng)問(wèn)相應的Sheet單元格,這樣就可以將數據庫中該報表需要的數據提取到Report相應單元格中,并最終向用戶(hù)呈現攜帶生產(chǎn)數據的特定報表。
對于Sheet中Key,舉例說(shuō)明:Date,用于獲取報表時(shí)間;TableName,用于獲取Oracle數據庫中存儲相應數據的數據表名稱(chēng);TagCode,用于獲取指標代碼并填入SQL語(yǔ)句;Dep_Code,用于獲取指標部門(mén)關(guān)鍵字;Frequency,用于獲取指標頻次(班、日、旬、月、季、年數據);Freq_Optio,用于獲取班數據頻次(早、中、晚班數據)。
Date/TagCode/Dep_Code/Frequency/Freq_Optio關(guān)鍵字將會(huì )唯一確定報表中一個(gè)數據單元格的值。
2.5 執行過(guò)程
報表編輯、訪(fǎng)問(wèn)執行過(guò)程如圖3所示,不再贅述。
3 問(wèn)題及處理
3.1 報表-數據庫交互過(guò)慢問(wèn)題
C#程序通過(guò)引入Microsoft.Office.Interop.Excel等Excel文件操作類(lèi),可以實(shí)現報表和數據庫之間的數據傳輸,采用Filter將攜帶數據的報表以Excel文件的形式通過(guò)瀏覽器呈現給用戶(hù)。這種方式在實(shí)際應用中,因為每個(gè)車(chē)間報表都包含大量指標數據信息,而每次調用報表,該報表中每個(gè)數據項都會(huì )創(chuàng )建一個(gè)SQL語(yǔ)句,訪(fǎng)問(wèn)數據庫并獲取該指標數據。這樣大量且頻繁的數據項訪(fǎng)問(wèn),耗費大量系統資源,用戶(hù)體驗較差。通過(guò)測試,僅500個(gè)數據項的一張報表,訪(fǎng)問(wèn)一次時(shí)間就要達到25-35分鐘時(shí)間。這樣的時(shí)間耗費,在實(shí)際中根本無(wú)法使用。針對這種問(wèn)題,我們在該項目中采用如下兩種解決方法。
(1)將用戶(hù)訪(fǎng)問(wèn)過(guò)的報表所產(chǎn)生的HTML臨時(shí)文件保存在服務(wù)器ReportHtml文件夾中(如“頂吹爐車(chē)間生產(chǎn)日報2008-03-12.html”),并將用戶(hù)訪(fǎng)問(wèn)過(guò)的特定報表(Excel格式)自動(dòng)下載到服務(wù)器ReportArchive文件夾備份起來(lái)(如“頂吹爐車(chē)間生產(chǎn)日報2008-03-12.xls”)。
這樣,采用C#語(yǔ)句判斷用戶(hù)訪(fǎng)問(wèn),如果用戶(hù)訪(fǎng)問(wèn)的報表已經(jīng)存在于上述文件夾中,則不再重新訪(fǎng)問(wèn)數據庫,自動(dòng)從上述文件夾中提取報表顯示。否則執行C#程序中Generate()和LoadReport()等報表生成程序。這樣就將報表二次訪(fǎng)問(wèn)的時(shí)間縮減到秒級。但這種方法使用的前提只能是在報表數據沒(méi)有更新的情況下,否則哪怕整張報表只有一個(gè)數據項做了更新,所有數據項仍要重新與數據庫交互一遍,以確認更新數據。
(2)采用ORACLE存儲過(guò)程PL/SQL中Package包編程的方式。每次用戶(hù)訪(fǎng)問(wèn)特定報表時(shí),Web應用程序將該報表所需數據項信息集中收集起來(lái),并傳遞給相應Package程序,PL/SQL程序包將這些指標信息所需SQL語(yǔ)句打包,一次性訪(fǎng)問(wèn)相應TABLE中的COLUMN,并將獲取的指標數據存儲在臨時(shí)表中,然后一次性的返回到WEB程序中,再填入該報表各數據項,最終呈現給用戶(hù)。這種方式,避免了以往每個(gè)數據項都要單獨訪(fǎng)問(wèn)數據庫,占用大量系統資源的問(wèn)題,無(wú)論一張報表需要交互的數據項多少,都相當于只執行一次ORACLE查詢(xún)所需的時(shí)間,從而有效解決了數據訪(fǎng)問(wèn)效率的問(wèn)題。通過(guò)測試,采用這種處理方式后,每張報表的訪(fǎng)問(wèn)顯示時(shí)間,亦縮短到秒級。
3.2 報表數據錄入-顯示隔離的問(wèn)題
為了便于用戶(hù)使用、下載、編輯、局部化修改和打印等操作,生產(chǎn)數據采用Web瀏覽器下的xls文件顯示的方式。這就給報表數據的在線(xiàn)錄入造成阻礙。同時(shí)用戶(hù)也要求數據的錄入和顯示必須隔離,以充分保證數據安全性。該系統中,為用戶(hù)提供了一個(gè)簡(jiǎn)潔的生產(chǎn)指標數據錄入界面。通過(guò)權限分配,指定各車(chē)間專(zhuān)人負責數據錄入。而報表顯示權限則由另外的權限分配確定。錄入的數據以指標關(guān)鍵字、日期、頻次、值的方式存入數據庫表中,需要時(shí)再由報表模板通過(guò)C#程序和PL/SQL程序聯(lián)合檢索獲取。這樣就有效地解決了生產(chǎn)數據錄入、顯示的安全隔離問(wèn)題。
3.3 車(chē)間記事等文字信息的問(wèn)題
車(chē)間記事涉及到大量非數字數據,這些數據無(wú)需統計分析,但數據量較大,宜于采用BLOB文本字段的形式存取。為提高交互效率,單獨為其建立Table,與其他數字型指標信息區分開(kāi),以提高訪(fǎng)問(wèn)效率。
3.4 生產(chǎn)相關(guān)實(shí)時(shí)數據獲取問(wèn)題
生產(chǎn)管理型報表中,一般會(huì )涉及少量實(shí)時(shí)數據信息,這些指標信息具有如下特點(diǎn),時(shí)效性要求不是很高,一般為班次(8或12小時(shí)一次);有對應的實(shí)時(shí)位號,可以直接從實(shí)時(shí)數據庫中獲??;一般需要對實(shí)時(shí)數據庫中的數據做累加、平均、取最大、最小、方差等統計處理。
以往的做法是,監控員通過(guò)HMI界面讀取實(shí)時(shí)數據,每隔1~2個(gè)小時(shí)記錄一次,統計員通過(guò)電話(huà)詢(xún)問(wèn)方式獲取該位號特定時(shí)間間隔的值列表,統計計算出最終數據,填入紙質(zhì)報表。這種方法效率低下,統計時(shí)間間隔較大(小時(shí)級),數據無(wú)法精確,人為因素多,費時(shí)費力。我們在該系統中,將生產(chǎn)管理報表中所需的這類(lèi)數據所對應的實(shí)時(shí)數據,組態(tài)到實(shí)時(shí)數據庫中,實(shí)時(shí)數據庫從控制系統中獲取這些指標的秒級數據,并存儲在歷史數據庫中,采用數據庫中間件編程方式,將這些實(shí)時(shí)秒級數據依據報表需求(班級/日級,累加/平均/取最大/方差等),統計分析出最終結果,以REALTAG-DATE-VALUE關(guān)鍵字組合方式存入Oracle數據表中。
4 綜述
傳統的控制系統信息孤島所導致的紙質(zhì)報表,電話(huà)問(wèn)詢(xún),人工統計的方式,在現在工業(yè)生產(chǎn)中,存在信息滯后、效率低下、人為因素多等諸多問(wèn)題,無(wú)法適用于現代高度自動(dòng)化的生產(chǎn)流程,制約規?;?、精細化生產(chǎn)發(fā)展。在本文相關(guān)科研項目的研究中,有效地解決了某有色企業(yè)“煙氣制酸”相關(guān)流程中存在的上述問(wèn)題。通過(guò)該項目的實(shí)施,管理者坐在電腦前,便可以看到各個(gè)二級廠(chǎng)礦的精確及時(shí)的生產(chǎn)狀況信息,該企業(yè)煙氣制酸生產(chǎn)能力有了大幅度的提高,管理更加科學(xué)而富有時(shí)效性。有效降低有色冶煉煙氣排放量的同時(shí),年制酸生產(chǎn)能力也有了顯著(zhù)增強。達到了節能減排和增加效益的雙重效果,是有效利用現代MES理念和信息化、自動(dòng)化手段,解決精細化作業(yè)和實(shí)現企業(yè)增收節支、滿(mǎn)足可持續發(fā)展需求的一次較好的嘗試。目前該科研項目已進(jìn)入實(shí)際運行階段,各相關(guān)生產(chǎn)管理部門(mén)、生產(chǎn)單位使用狀況良好。
后續工作準備將該系統向該企業(yè)其他相關(guān)生產(chǎn)單位的推廣和連接,以達到MES平臺一級的信息共享和集成,最終實(shí)現整個(gè)集團公司平臺上的ERP、MES、PLC三層架構整體信息集成,消除企業(yè)信息孤島和信息斷層狀況。為集團公司國際化經(jīng)營(yíng)戰略奠定信息化基礎。
參考文獻:
[1] 孫彥廣等. 流程工業(yè)制造執行系統[M]. 北京: 化學(xué)工業(yè)出版社,2006.
[2] Christian Nagel. Bill Evjen. JanGlynn etal. Professional C# 2005. John Wiley & Sons,Inc. 2006.
[3] 谷長(cháng)勇,王彬,陳杰等. Oracle 11G權威指南[M]. 北京: 電子工業(yè)出版社,2008.
——轉自《自動(dòng)化博覽》