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