關(guān)堂新
摘要:文章討論了了產(chǎn)品結(jié)構(gòu)樹及VBA在產(chǎn)品數(shù)據(jù)統(tǒng)計(jì)中的應(yīng)用。文章基于結(jié)構(gòu)樹的層次結(jié)構(gòu),提出了變形棧算法。首先,對(duì)結(jié)構(gòu)樹報(bào)表進(jìn)行層次標(biāo)識(shí);其次,在標(biāo)識(shí)的基礎(chǔ)上構(gòu)造出一個(gè)變形棧,用于保留歷史層級(jí)的數(shù)據(jù),在計(jì)算時(shí)僅回溯棧,大大簡化了計(jì)算。文中利用某大型雷達(dá)的結(jié)構(gòu)對(duì)算法進(jìn)行了驗(yàn)證。最后,給出了該算法的應(yīng)用分析。
關(guān)鍵詞:結(jié)構(gòu)樹;VBA;變形棧統(tǒng)計(jì)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)27-0207-02
大型電子設(shè)備的研制生產(chǎn)是一個(gè)大型團(tuán)隊(duì)的協(xié)同過程。大型電子設(shè)備是按系統(tǒng)[1]與分系統(tǒng)組織的,每個(gè)分系統(tǒng)由一個(gè)分團(tuán)隊(duì)完成,每個(gè)分系統(tǒng)中又由部件組成,每個(gè)部件又由元器件組成。由于項(xiàng)目設(shè)計(jì)的繼承性要求,每個(gè)部件又有可能包含若干子部件甚至是分系統(tǒng)。這種嵌套性往往很深。
大型電子設(shè)備的物理形態(tài)是結(jié)構(gòu)樹。結(jié)構(gòu)樹在產(chǎn)品生產(chǎn)的物料準(zhǔn)備、工藝準(zhǔn)備、人員分配中起著基礎(chǔ)的作用。
1 大型電子設(shè)備結(jié)構(gòu)樹特點(diǎn)
結(jié)構(gòu)樹,又稱產(chǎn)品結(jié)構(gòu)樹(Product Structure Tree, PST)[2],是描述某一產(chǎn)品的物料組成及各部分文件組成的層次結(jié)構(gòu)樹狀圖,是PDM(Product Data Management)、BOM(Bill of Material)及ERP(Enterprise Resource Plan)的基礎(chǔ)[3]。大型電子設(shè)備的結(jié)構(gòu)樹相當(dāng)復(fù)雜。
首先,大型電子設(shè)備的元器件往往多達(dá)幾萬個(gè)甚至是十幾萬個(gè)。另外,大型電子設(shè)備的元器件種類也很多。
其次,大型電子設(shè)備的結(jié)構(gòu)樹層次多樣。結(jié)構(gòu)樹是一種樹狀的層次結(jié)構(gòu)。
最后,結(jié)構(gòu)樹與電子設(shè)備的物理結(jié)構(gòu)是緊密聯(lián)系的。結(jié)構(gòu)樹上的各個(gè)樹葉、節(jié)點(diǎn)是的順序關(guān)系、包含關(guān)系、數(shù)量、具體功能等均不可改變。
2 PDM系統(tǒng)中特殊性需求分析
大型的企業(yè)級(jí)的產(chǎn)品管理一般是PDM,CAPP及ERP等相互協(xié)調(diào)共同配合完成的。主要功能是由專用程序?qū)崿F(xiàn)的。實(shí)際上,客戶對(duì)PDM及結(jié)構(gòu)樹的使用需求是多種多樣的,很難用一個(gè)固定的軟件全部實(shí)現(xiàn)。
產(chǎn)品的管理需求是多種多樣的,時(shí)時(shí)變化的;有些需求是極為特殊的。因此,電子產(chǎn)品的設(shè)計(jì)者、維護(hù)者應(yīng)基于PDM、ERP基礎(chǔ),特別是結(jié)構(gòu)樹進(jìn)行二次開發(fā),解決產(chǎn)品生產(chǎn)、銷售過程中的各種個(gè)案問題。
3 利用VBA和結(jié)構(gòu)樹實(shí)現(xiàn)特殊需求
在現(xiàn)有PDM系統(tǒng)中均支持統(tǒng)計(jì)報(bào)表的輸出。因此,二次開發(fā)者可以基于統(tǒng)計(jì)報(bào)表進(jìn)行分析。如現(xiàn)有的PDM都支持Excel報(bào)表輸出的方式。這就為我們提供了一個(gè)可以進(jìn)行二次開發(fā)實(shí)現(xiàn)特定功能的接口。
VBA(Visual Basic for Applications)是微軟開發(fā)出來的在其桌面應(yīng)用程序中執(zhí)行通用的自動(dòng)化(OLE)編程語言。VBA主要作用是擴(kuò)展Windows應(yīng)用程序的功能,可以快速實(shí)現(xiàn)復(fù)雜的邏輯,大大提升了Excel等的數(shù)據(jù)處理能力,滿足工作中的特殊要求。
VBA是VB的子集,是面向?qū)ο蟮木幊谭椒ㄔ贠ffice上的實(shí)現(xiàn)。Office中所有的組件都進(jìn)行了面向?qū)ο蟮姆庋b。其中所有的組件及其功能都可以用VBA對(duì)象實(shí)現(xiàn)。
大型電子設(shè)備的每個(gè)子設(shè)備處于結(jié)構(gòu)樹的節(jié)點(diǎn)或葉子上。在組織生產(chǎn)上,需要做的工作是審核每個(gè)子設(shè)備的物料是否齊備,需要統(tǒng)計(jì)出各個(gè)設(shè)備的加工時(shí)間及整機(jī)的齊套時(shí)間;在成本分析上,需要統(tǒng)計(jì)出每個(gè)子設(shè)備的成本,需要統(tǒng)計(jì)出整個(gè)系統(tǒng)的成本;在對(duì)外報(bào)價(jià)上需要給出每個(gè)器件的價(jià)格組成、利潤率等。因而,根據(jù)需要,對(duì)結(jié)構(gòu)樹進(jìn)行相應(yīng)的分析是極為重要的。
我們可以將特定產(chǎn)品或設(shè)備的結(jié)構(gòu)樹生成報(bào)表,并可下載到本地。利用VBA處理報(bào)表,可對(duì)結(jié)構(gòu)樹進(jìn)行針對(duì)性、輕型化的、及時(shí)分析。
4 利用VBA和結(jié)構(gòu)樹統(tǒng)計(jì)某型雷達(dá)元器件數(shù)量及費(fèi)用
產(chǎn)品結(jié)構(gòu)樹的分析基礎(chǔ)性工作是各組成器件的數(shù)量統(tǒng)計(jì)。圖1為某型雷達(dá)的結(jié)構(gòu)樹報(bào)表(局部)。報(bào)表的第一列為器材的標(biāo)識(shí),第二列為器材的技術(shù)狀態(tài),第三列為型號(hào)或規(guī)格(外購件),第四列則為該型器材的數(shù)量。
在組織生產(chǎn)時(shí),如果要制造一套散熱器模塊,需要備料的數(shù)量是[1×25×4×5=500]只,散熱模塊器的僅有4層嵌套。
結(jié)構(gòu)樹為樹型邏輯,數(shù)據(jù)結(jié)構(gòu)中對(duì)樹的遍歷算法。在此,還需要對(duì)其進(jìn)行改造方可以使用,改造的原則是模擬人工統(tǒng)計(jì)的流程。
基于人工的統(tǒng)計(jì)算法如下:
1) 順序訪問第一條記錄,記下裝入的數(shù)量;
2) 分析出該條記錄所處的層級(jí);
3) 向上回溯,直到需要統(tǒng)計(jì)的層級(jí)(如當(dāng)前為四級(jí),則需要向上向三、二、一級(jí)回溯),記下各層級(jí)的裝入數(shù)量;
4) 將回溯的裝入數(shù)量與本級(jí)別數(shù)量的依次乘起來,作為本級(jí)元器件的備料數(shù);
5) 移向下一條記錄,重復(fù)1)~4)步,直到全部結(jié)束。
有的產(chǎn)品有多達(dá)十幾層嵌套。本產(chǎn)品中有30000多個(gè)器件(記錄),按每個(gè)記錄平均4層嵌套計(jì)算,則整機(jī)統(tǒng)計(jì)要做120000次乘法。不僅是乘法,統(tǒng)計(jì)過程還須進(jìn)行遞歸處理,這將是一個(gè)極大的工作負(fù)擔(dān)。因此,需要進(jìn)行自動(dòng)化處理。
為了方便報(bào)表的VBA自動(dòng)化處理,可先對(duì)報(bào)表做適當(dāng)改動(dòng)。如圖-1中的報(bào)表沒有標(biāo)明層次,如在處理中每次都計(jì)算層級(jí),會(huì)增加計(jì)算負(fù)荷。因此,需要對(duì)表單初始化,利用標(biāo)識(shí)列中的空格數(shù)量可判定某條記錄的層級(jí),如圖2所示。
自動(dòng)化處理的另一個(gè)工作是變形棧的設(shè)計(jì)。棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),利用棧可以保存2)、3)兩步的記錄數(shù)量。顯然,這個(gè)棧也不是標(biāo)準(zhǔn)的棧。棧頂和棧底不是固定不變的,如統(tǒng)計(jì)整機(jī)的裝入數(shù)量,則棧底保存的數(shù)一定是1;否則棧底是需要統(tǒng)計(jì)的部件的層級(jí),其數(shù)量應(yīng)設(shè)為1。這是一個(gè)“變形?!保嗽L問順序是后進(jìn)先出外,其他的均是不定的。這種做的好處是,在整個(gè)處理過程中只需要一個(gè)棧,大大節(jié)省處理資源,提高計(jì)算速度。
考慮到數(shù)組對(duì)隨機(jī)訪問的支持,“變形棧”載體采用數(shù)組,棧頂及棧底訪問均采用索引方式,如圖-3所示。采用數(shù)組訪問的一個(gè)缺點(diǎn)是數(shù)組的大小固定,數(shù)組的大小可以利用層級(jí)來確定,如層級(jí)為7,則數(shù)組的大小只要大于7即可,數(shù)組應(yīng)初始化為全1。
如果投產(chǎn)1臺(tái)發(fā)射機(jī),統(tǒng)計(jì)其下的塊的數(shù)量,則將棧頂設(shè)為5即可,需要的數(shù)量為3?1?5?4=60。在統(tǒng)計(jì)到某個(gè)元器件時(shí),將該元器件的數(shù)量填入到其層級(jí)對(duì)應(yīng)的數(shù)組中去替換原有值即可,此后該值在棧中保持不變直到遇到下一個(gè)層級(jí)為1的元器件。這樣,在計(jì)算元器件數(shù)量時(shí),僅回溯棧即可。
結(jié)合上述,自動(dòng)化處理流程綜合如下:
1) 初始化。給結(jié)構(gòu)樹報(bào)表增加一列,該列保存對(duì)應(yīng)元器件的層級(jí);
2) 根據(jù)初始化結(jié)果,取最大層級(jí)號(hào),并以此號(hào)定義數(shù)組容量,其中元素初始化為1;
3) 將擬統(tǒng)計(jì)的元器件號(hào)的層級(jí)號(hào)作為棧底標(biāo)識(shí),并以此為起點(diǎn)向下遍歷;
4) 將當(dāng)前處理的元器件層級(jí)號(hào)作棧頂,將元器件的數(shù)量寫入棧頂替代原來數(shù)值;
5) 自當(dāng)前棧頂向當(dāng)前棧底回溯,并將所有元素相乘,得到的結(jié)果為當(dāng)前元器件的數(shù)量;
6) 重復(fù)3)~5)步,直到遇到層級(jí)號(hào)大于等于棧底層級(jí)號(hào)的元器件。
說明,如果作整機(jī)統(tǒng)計(jì),則棧底的層級(jí)是永遠(yuǎn)0;棧頂將根據(jù)元器件的層級(jí)隨機(jī)改變,循環(huán)到整個(gè)結(jié)構(gòu)樹結(jié)束。
圖4為對(duì)某雷達(dá)進(jìn)行的外購器件數(shù)量及費(fèi)用統(tǒng)計(jì)(節(jié)選)結(jié)果。該雷達(dá)總層級(jí)為,元器件設(shè)計(jì)記錄30000余行,整個(gè)計(jì)算過程小于5分鐘。
5 結(jié)束語
本文算法已在某產(chǎn)品上得到驗(yàn)證,可以統(tǒng)計(jì)出外購件、外協(xié)件、標(biāo)準(zhǔn)件的數(shù)量及費(fèi)用。該方法對(duì)于大型電子設(shè)備的生產(chǎn)、銷售及定價(jià)辦法起著直接的指導(dǎo)作用。本文針對(duì)產(chǎn)品生產(chǎn)過程中的需求的多樣性,在利用VBA和結(jié)構(gòu)樹報(bào)表解決工作過程中的特殊需求方面做了初步探索。
參考文獻(xiàn):
[1] 中華人民共和國國防科學(xué)技術(shù)委員會(huì).GjB74A-1998軍用地面雷達(dá)通用規(guī)范[Z],1998.
[2] GB/Z 18727-2002 企業(yè)應(yīng)用產(chǎn)品數(shù)據(jù)管理(PDM)實(shí)施規(guī)范北京[Z].中國標(biāo)準(zhǔn)出版社, 2002.
[3] 羅鴻.ERP原理設(shè)計(jì)實(shí)施[M].4版.北京:電子工業(yè)出版社,2016,3.
[4] John Green, Stephen Bullen, Rob Bvey, Excel 2007 VBA參考大全[M].ExcelHome,譯.北京:人民郵電出版社,2016.3.
[通聯(lián)編輯:聞翔軍]