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