吳夢(mèng)龍,劉福泉,李宗昌(中國石油四川石化有限責(zé)任公司生產(chǎn)三部,四川 成都 611930)
隨著煉化生產(chǎn)技術(shù)不斷進(jìn)步,生產(chǎn)過程自動(dòng)化控制程度越來越高,生產(chǎn)過程數(shù)據(jù)報(bào)表多、數(shù)據(jù)量大的特點(diǎn)愈發(fā)凸顯,數(shù)據(jù)處理的難度不斷加大,傳統(tǒng)數(shù)據(jù)處理方法不但費(fèi)時(shí)費(fèi)力,而且無法滿足生產(chǎn)指導(dǎo)性數(shù)據(jù)的超高準(zhǔn)確性要求。
Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統(tǒng)的電腦編寫的一款電子表格軟件。直觀的界面、出色的計(jì)算功能和圖表工具,使Excel成為最流行的個(gè)人計(jì)算機(jī)數(shù)據(jù)處理軟件[1]。利用其自帶的函數(shù)和透視表等數(shù)據(jù)處理功能,能滿足用戶對(duì)數(shù)據(jù)處理的基礎(chǔ)要求,但是處理效率不高。
VBA(visual basic for application)是編程語言VB的子集,“寄生于”已有的應(yīng)用程序,例如:Excel、Powerpoint和Word等,其語法結(jié)構(gòu)與VB非常相似,簡(jiǎn)單易懂,且可以靈活調(diào)用Off ice自帶的函數(shù)功能,調(diào)試簡(jiǎn)單,不存在兼容性問題。利用Excel VBA創(chuàng)建個(gè)性化的數(shù)據(jù)處理方案,簡(jiǎn)單易行,快捷高效。
Python是一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語言,簡(jiǎn)單易學(xué)且功能強(qiáng)大,它擁有高效的高級(jí)數(shù)據(jù)結(jié)構(gòu),并且能夠用簡(jiǎn)單而又高效的方式進(jìn)行面向?qū)ο缶幊獭ython的語法簡(jiǎn)單,代碼可讀性高,容易入門門檻低,擁有眾多優(yōu)秀的庫以及工具可直接調(diào)用,逐漸成為近年來數(shù)據(jù)分析領(lǐng)域入門級(jí)的首選編程語言[2]。
Excel函數(shù)與數(shù)據(jù)透視表在處理格式統(tǒng)一、規(guī)律性很強(qiáng)能直接套用自帶函數(shù)或利用透視表分類的數(shù)據(jù)時(shí)具有操作簡(jiǎn)單、執(zhí)行效率高的優(yōu)勢(shì),但是對(duì)于無明顯規(guī)律或格式不統(tǒng)一的數(shù)據(jù)處理明顯力不從心。VBA和Python同為編程語言,但是VBA源自VB與常用操作系統(tǒng)兼容性更好,執(zhí)行效率更高,而且不需要單獨(dú)安裝IDE(集成開發(fā)環(huán)境),與Excel更是結(jié)合的天衣無縫,可以直接在Excel中編寫、調(diào)試代碼,可以做到所見及所得,每一步操作結(jié)果都能即時(shí)呈現(xiàn)出來。而Python則需要單獨(dú)安裝編譯環(huán)境,并且具備一定的編程調(diào)試基礎(chǔ)知識(shí)才能使用,且程序執(zhí)行速度比VBA代碼慢,但是具有跨平臺(tái)適用的優(yōu)勢(shì),比較適合具有一定編程基礎(chǔ)的團(tuán)隊(duì)使用。
綜合考慮,VBA編程更適合生產(chǎn)技術(shù)專業(yè)人員用來采集和處理生產(chǎn)運(yùn)行數(shù)據(jù)。
隨著煉化行業(yè)技術(shù)不斷發(fā)展進(jìn)步,自動(dòng)化程度也越來越高,尤其是以DCS為代表的分散控制系統(tǒng)的成功應(yīng)用,給生產(chǎn)控制系統(tǒng)帶來了質(zhì)的飛躍。依托系統(tǒng)強(qiáng)大的數(shù)據(jù)存儲(chǔ)功能,為日常操作優(yōu)化、性能監(jiān)控評(píng)估、事故原因分析等提供了數(shù)據(jù)支撐,但是典型化工生產(chǎn)流程日?qǐng)?bào)數(shù)據(jù)動(dòng)輒涉及成千上萬個(gè)控制點(diǎn),每個(gè)控制點(diǎn)每分鐘取一個(gè)數(shù)據(jù),有些關(guān)鍵參數(shù)取數(shù)頻率甚至更高,對(duì)應(yīng)產(chǎn)生的總數(shù)據(jù)量非常巨大,而數(shù)據(jù)則是按服務(wù)商預(yù)先設(shè)計(jì)的存儲(chǔ)方式儲(chǔ)存的,沒有明顯的規(guī)律。
日?qǐng)?bào)數(shù)據(jù)是裝置重要運(yùn)行參數(shù)記錄,是工藝管理不可或缺的基礎(chǔ)數(shù)據(jù),也是月報(bào)分析的主要數(shù)據(jù)來源。技術(shù)人員通過月報(bào)表的數(shù)據(jù)分析可以直觀的了解裝置運(yùn)行情況,同時(shí)為下一步調(diào)整操作提供參考依據(jù),但需要從眾多日?qǐng)?bào)數(shù)據(jù)中獲取對(duì)應(yīng)的數(shù)據(jù)進(jìn)行采集、處理、計(jì)算,數(shù)據(jù)處理量大、準(zhǔn)確度要求高。每月DCS數(shù)據(jù)由數(shù)十個(gè)文件夾組成,每個(gè)文件夾包含若干各按天生成的Excel表,每個(gè)Excel表囊括100~300個(gè)參數(shù)小時(shí)數(shù)據(jù)、均值、最大值和最小值等數(shù)據(jù),總數(shù)據(jù)量達(dá)數(shù)十萬個(gè)。傳統(tǒng)的數(shù)據(jù)區(qū)里方法是Excel的“數(shù)據(jù)引用”方法,需要打開每日Excel表格,取出數(shù)據(jù)“Average”行后面的平均值,然后逐一粘貼到月報(bào)對(duì)應(yīng)位置,需要重復(fù)操作數(shù)千次,工作量巨大,且極易出錯(cuò)。
月報(bào)分析的另一個(gè)重要數(shù)據(jù)來源是化驗(yàn)分析數(shù)據(jù)。每個(gè)月的化驗(yàn)分析數(shù)據(jù)至少有15 000行,每行有7個(gè)數(shù)據(jù),數(shù)據(jù)總量超十萬個(gè)。傳統(tǒng)數(shù)據(jù)獲取方法是用“篩選”的方法,篩選出需要的數(shù)據(jù),然后再“復(fù)制—粘貼”到月報(bào)對(duì)應(yīng)位置,完成月報(bào)數(shù)據(jù)需要重復(fù)操作上千次。
想要從海量數(shù)據(jù)中獲取目標(biāo)數(shù)據(jù),首先要對(duì)月報(bào)數(shù)據(jù)結(jié)構(gòu)有深入的了解,并熟練掌握其內(nèi)在關(guān)聯(lián)方式;然后嘗試在原始數(shù)據(jù)中找到單個(gè)目標(biāo)數(shù)據(jù)的位置,對(duì)于不同來源的數(shù)據(jù)需要分別進(jìn)行處理;接下需要通過多次數(shù)據(jù)比對(duì)找到最佳的可編程數(shù)據(jù)獲取方法;最后利用VBA編寫、調(diào)試、修改代碼,實(shí)現(xiàn)一鍵自動(dòng)取數(shù)功能(如圖1所示)。
圖1 一鍵自動(dòng)取數(shù)功能流程
3.2.1 原始數(shù)據(jù)結(jié)構(gòu)分析
我們通過查看數(shù)據(jù)文件可以分析得知日?qǐng)?bào)數(shù)據(jù)是分裝置分單元存儲(chǔ)的、數(shù)據(jù)文件是以存儲(chǔ)日期命名,且不同文件夾內(nèi)數(shù)據(jù)文件名稱基本一致、數(shù)據(jù)文件內(nèi)各控制點(diǎn)參數(shù)數(shù)據(jù)的存儲(chǔ)相對(duì)位置是固定的;而化驗(yàn)分析數(shù)據(jù)可以按取樣時(shí)間分為“08:30”“20:00”和其他三大類、相同采樣位號(hào)的分析項(xiàng)目是一致的、分析數(shù)據(jù)是按時(shí)間先后順序排序的。
3.2.2 構(gòu)思數(shù)據(jù)獲取邏輯
月報(bào)中需要的是各控制點(diǎn)參數(shù)的日均值和關(guān)鍵采樣位號(hào)各分析指標(biāo)數(shù)值,可以通過查找指定控制點(diǎn)位號(hào)或采樣位號(hào)來定位數(shù)值的大概位置,再通過數(shù)組相對(duì)引用將對(duì)應(yīng)的數(shù)值獲取,最終賦值到月報(bào)的相應(yīng)單元格,完成數(shù)值獲取。最后編寫代碼、調(diào)試、驗(yàn)證結(jié)果。
3.2.3 編寫、調(diào)試、驗(yàn)證VBA代碼
利用VBA與Excel的依托關(guān)系,參照?qǐng)?bào)表本身制作程序版Excel報(bào)表,然后保存為“Excel啟用宏的工作簿(*.xlsm)”,將代碼寫入“工作簿-開發(fā)工具-VisualBasic-模塊”中,然后根據(jù)操作界面提示選擇源數(shù)據(jù)所在的文件夾,點(diǎn)擊“運(yùn)行”,即可得到當(dāng)月的報(bào)表數(shù)據(jù)和化驗(yàn)分析數(shù)據(jù)。
(1)獲取原始數(shù)據(jù)路徑。由于月報(bào)各部分?jǐn)?shù)據(jù)來自不同文件,且各月的數(shù)據(jù)存放位置也是不一樣的,因此我們需要先給程序指定日?qǐng)?bào)數(shù)據(jù)存儲(chǔ)的地址。通過以下代碼即可實(shí)現(xiàn)。
(2)獲取對(duì)應(yīng)日?qǐng)?bào)數(shù)據(jù)。根據(jù)數(shù)據(jù)綜合分析結(jié)果,確定通過查找“儀表位號(hào)”來定位目標(biāo)數(shù)據(jù)在日?qǐng)?bào)表中的相對(duì)位置,然后利用相對(duì)引用賦值,獲取目標(biāo)數(shù)據(jù)的地址,最后通過賦值函數(shù)將目標(biāo)數(shù)據(jù)采集到月報(bào)表指定的單元格完成數(shù)據(jù)采集,通過變量循環(huán)實(shí)現(xiàn)對(duì)其他數(shù)據(jù)的采集匯總工作。
(3)獲取化驗(yàn)分析數(shù)據(jù)?;?yàn)分析數(shù)據(jù)獲取按照取樣時(shí)間特點(diǎn)劃分為“08:30”和“20:00”兩大類,首先用數(shù)組將所有符合采樣時(shí)間為“08:30”或“20:00”的化驗(yàn)分析數(shù)據(jù)提取出來,然后采用與上面類似的思路和方法,通過查找采樣位號(hào)分析項(xiàng)目獲取目標(biāo)數(shù)據(jù)的相對(duì)位置,再進(jìn)行引用和賦值,實(shí)現(xiàn)一鍵批量獲取化驗(yàn)分析數(shù)據(jù)功能。
通過開發(fā)運(yùn)用VBA代碼,日?qǐng)?bào)數(shù)據(jù)獲取時(shí)間由24 h左右減少至5 min;化驗(yàn)分析數(shù)據(jù)獲取由6 h縮短至3 min,工作效率顯著提高,同時(shí)正確率達(dá)到100%,助力裝置及時(shí)、準(zhǔn)確的獲取第一手生產(chǎn)數(shù)據(jù)。
鑒于VBA編程在月報(bào)數(shù)據(jù)處理中的應(yīng)用效果,根據(jù)工作需要目前已完成《報(bào)警分級(jí)臺(tái)賬》《化驗(yàn)分析臺(tái)賬》《異常報(bào)警臺(tái)賬》等報(bào)表的編程自動(dòng)化取數(shù)工作,極大提高了工作效率。
文章介紹了VBA編程在化工生產(chǎn)報(bào)表中的應(yīng)用,通過數(shù)據(jù)分析確定解決思路,巧妙利用簡(jiǎn)短的代碼完成枯燥的重復(fù)工作,利用數(shù)據(jù)校驗(yàn)功能實(shí)現(xiàn)獲取的數(shù)據(jù)100%正確。通過代碼模塊化編輯,方便初學(xué)者調(diào)用,使VBA編程更廣泛的應(yīng)用到各類數(shù)據(jù)處理場(chǎng)景中,實(shí)現(xiàn)數(shù)據(jù)處理自動(dòng)化,提高工作效率。