1 問題的提出
多品種小批量生產(chǎn)以其柔性高、適應(yīng)性強的特點成為當(dāng)前制造企業(yè)的一種重要生產(chǎn)模式。在這種生產(chǎn)模式下,零部件借用較多,工程變更相對頻繁;同樣一組零件可能因為裝配地點、型號或客戶等的不同而成為不同部件或產(chǎn)品;而同時一種部件雖然在內(nèi)存中只能有一種物料清單(Bill of Material,BOM)裝配結(jié)構(gòu),但其存儲模型卻可能存在多個不同版本或有效期,而且在產(chǎn)品生命周期的不同階段又會因部門職能的不同而存在設(shè)計BOM視圖、工藝BOM視圖和制造BOM視圖等不同視圖。因此,實際上BOM的存儲模型不同于內(nèi)存中樹形結(jié)構(gòu)的BoM對象,它是一種“圖形結(jié)構(gòu)”。而傳統(tǒng)的BOM模型一般將零部件信息與裝配結(jié)構(gòu)信息耦合在一起進行存儲,導(dǎo)致通用件/借用件等數(shù)據(jù)的冗余度較高,且無法靈活表達BOM的圖形結(jié)構(gòu),更難以支持BOM多視圖轉(zhuǎn)換及工程變更的自動實現(xiàn)。文獻采用級聯(lián)編碼的數(shù)據(jù)構(gòu)造方法,提高了BOM數(shù)據(jù)的執(zhí)行效率,但是在零部件借用關(guān)系的表達上不夠靈活,數(shù)據(jù)存儲冗余度過高;文獻考慮到平衡BOM數(shù)據(jù)存儲和構(gòu)建的效率,基于半結(jié)構(gòu)化數(shù)據(jù)模型構(gòu)建可重用構(gòu)件庫來進行裝配結(jié)構(gòu)的拼裝,但是該模型仍是將部件與結(jié)構(gòu)耦合在一起,不適于表達部件與結(jié)構(gòu)的多對多關(guān)系。
文獻將零部件的裝配關(guān)系定義為三元組SR=
圖1一個樹形產(chǎn)品BOM實例
2 制造物料清單裝配結(jié)構(gòu)的定義
產(chǎn)品的制造BOM信息主要有兩類:①只與零部件(物料)自身相關(guān)的屬性信息,一般由名稱、編號、版本、額定工時等字段組成,是一個簡單的一維數(shù)據(jù)表;②表達零部件之間裝配關(guān)系的信息,即裝配結(jié)構(gòu)。裝配結(jié)構(gòu)一般描述為零部件之間的父子關(guān)系和裝配數(shù)量的集合。在實際工程應(yīng)用中,BOM的裝配結(jié)構(gòu)在存儲上一般是一種圖形數(shù)據(jù)結(jié)構(gòu)。
本文中“父件”是指由其“子件”裝配而成的部件,如圖2a中部件a由一組零部件(c1,c2,...,c10)裝配而成,則稱部件a為這組零部件的父件,這組零部件中所有個體都是部件a的子件;“裝配結(jié)構(gòu)”(簡稱“結(jié)構(gòu)”)則是指父件與子件之間裝配關(guān)系的集合。傳統(tǒng)模型中一般用“父件一子件”來表達裝配關(guān)系,但其冗余度較高且不易表達具有多種裝配結(jié)構(gòu)的部件。如圖2a中a和g具有相同的一組子件(c1,c2,...,c10)時傳統(tǒng)的“父件一子件”表示會有明顯的重復(fù),而且也不易區(qū)分a的兩種不同裝配結(jié)構(gòu)“a一(c1,c2,...,c10),和“a-(e,f)。
圖2 BOM裝配結(jié)構(gòu)的傳統(tǒng)模型與本文模犁的比較
“父件一結(jié)構(gòu)”表示部件具有某種裝配結(jié)構(gòu),如圖2b中“a—s”表示部件a具有裝配結(jié)構(gòu)s(帶圈字母表示“結(jié)構(gòu)”);“結(jié)構(gòu)一子件”表示某個裝配結(jié)構(gòu)中含有某個零部件,如“s—C01”。這樣就通過BOM模型中裝配結(jié)構(gòu)的獨立,使“父件一結(jié)構(gòu)”和“結(jié)構(gòu)一子件”兩層關(guān)系分離,從而更適于表達復(fù)雜的BOM并減少冗余。如圖2b中裝配結(jié)構(gòu)s的存在使得“a—s”與“s—c”相互獨立,避免了a和g相同裝配結(jié)構(gòu)的重復(fù)性表示,同時a的兩種不同結(jié)構(gòu)s和t得以明確地表達。為準確表達上述BOM模型,下面用數(shù)學(xué)集合的方法進行形式化描述:
(1)定義物料.r的集合X=(x1,x2,...);定義結(jié)構(gòu)s的集合S={s1,sz,...},其中s=
3 結(jié)合可擴展標記語言的新型存儲模型
目前BOM的存儲一般采用關(guān)系模型,而內(nèi)存中的BOM一般為樹形結(jié)構(gòu)的對象模型,目前由存儲的BOM數(shù)據(jù)來構(gòu)建內(nèi)存中的BOM對象一般有麗種方法:①按照BOM的層次結(jié)構(gòu)進行遞歸查詢,并依次構(gòu)建對象。這種方法實現(xiàn)起來較為簡單,但速度很慢;②通過SQL腳本來實現(xiàn)遞歸遍歷將零部件添加到臨時表中,然后對臨時表進行遞歸,在內(nèi)存中構(gòu)建樹形BOM對象(創(chuàng)建完成后刪除臨時表),這種方法的速度略有提高但對于復(fù)雜的產(chǎn)品結(jié)構(gòu)仍無法滿足要求。這兩種方法每次查詢都需要將BOM數(shù)據(jù)從關(guān)系模型轉(zhuǎn)換到樹形結(jié)構(gòu)的對象模型,而這種異構(gòu)模型之間的數(shù)據(jù)轉(zhuǎn)換是導(dǎo)致BOM讀取效率低下的主要原因。由此,本文提出將臨時表中的查詢結(jié)果直接以樹形結(jié)構(gòu)在數(shù)據(jù)庫中存儲下來,在以后執(zhí)行同一查詢時直接由數(shù)據(jù)庫中的樹形結(jié)構(gòu)直接映射到內(nèi)存中,從而避免了每次都對關(guān)系模型數(shù)據(jù)進行低效率的查詢。這些BOM查詢結(jié)果存儲在數(shù)據(jù)庫中,起到了數(shù)據(jù)緩存的作用,本文稱其為BOM緩存。
可擴展標記語言(eXtensible Markup Language,XML)作為一種半結(jié)構(gòu)化數(shù)據(jù)具有自描述能力,其天然的樹形結(jié)構(gòu)非常適于表達BOM的層次結(jié)構(gòu),與內(nèi)存中的BOM對象具有數(shù)據(jù)結(jié)構(gòu)上的同構(gòu)性。目前宅要的商業(yè)數(shù)據(jù)庫都已支持XMI。數(shù)據(jù)類型,而且在數(shù)據(jù)查詢方面,XQuery語言已經(jīng)成為萬維網(wǎng)聯(lián)盟(W3C)的推薦標準。但XML在數(shù)據(jù)更新方面的標準仍不成熟,各種商業(yè)軟件的規(guī)范也不統(tǒng)一,而且目前多數(shù)信息系統(tǒng)仍主要支持關(guān)系模型,因此本文提出一種關(guān)系模型與XML模型相結(jié)合的新型存儲模型。該模型在數(shù)據(jù)讀取方面提供了基于XML模型的BOM緩存以獲得高效率,同時仍保留了關(guān)系模型的數(shù)據(jù)讀取/變更接口,以保證良好的兼容性。
如圖3所示,在新型模型中查詢BOM數(shù)據(jù)時,可以直接從XML緩存中讀取以前存儲的BOM查詢結(jié)果;若為首次讀取,則應(yīng)先對關(guān)系模型進行查詢并將得到的臨時表生成樹形BOM數(shù)據(jù)后存儲到XML緩存,然后將其讀入內(nèi)存。在內(nèi)存中BOM數(shù)據(jù)發(fā)生變更時。將直接對存儲中的關(guān)系模型部分進行插入、更新或刪除等數(shù)據(jù)變更操作;在關(guān)系模型完成變更之后,再根據(jù)第2章中的結(jié)構(gòu)有效性判斷式進行判斷。若發(fā)生變更的BOM結(jié)構(gòu)在當(dāng)前時刻有效,則應(yīng)立即刪除緩存中原有的BOM數(shù)據(jù),并存儲變更后的BOM數(shù)據(jù);若當(dāng)前時刻無效,則在生效時自動處理。另外,對于不支持XML讀取接口的傳統(tǒng)系統(tǒng),該存儲模型仍支持對關(guān)系模型的直接讀取。
圖3 結(jié)合XML的新型存儲模型及實現(xiàn)
上述新型BOM存儲模型的實體關(guān)系圖如圖4所示,包括Products(產(chǎn)品)、Items(物料)、PartBomLink(父件一結(jié)構(gòu)關(guān)系)、Structure(結(jié)構(gòu))、Partsln-Structure(結(jié)構(gòu)一子件關(guān)系)五個數(shù)據(jù)表。其中:PK為各表的主鍵;FKl和FK2為外鍵約束;U1為唯一性約束;Items表中的ItemType字段用來存儲物料的類型,有總裝、組裝、自制、外協(xié)、采購、虛擬、過渡和毛坯等;在PartBomLink表中設(shè)計了XML數(shù)據(jù)類型的StructurelnXml字段作為BOM緩存。StructurelnXml字段存儲的XML數(shù)據(jù)完整地定義了零部件的整個BoM結(jié)構(gòu)數(shù)據(jù),該字段的XML架構(gòu)可以簡單地如圖5表示,ParentPart元素為根節(jié)點。為明確表達裝配關(guān)系,Part元素應(yīng)至少包含屬性PartlD和Qty(圖中省去了部分屬性)且可以自身嵌套。
基于以上XML架構(gòu)表示時,圖1中BOM實例的XML代碼如下:
4 物料清單緩存的構(gòu)建及查詢
BOM緩存一般在首次查詢產(chǎn)品或部件的BOM結(jié)構(gòu)時創(chuàng)建,由給定的物料ID值productID(對應(yīng)Items表中的ObjectlD)對關(guān)系模型部分進行查詢并創(chuàng)建臨時表,然后轉(zhuǎn)換為基于XML的樹形BOM數(shù)據(jù),具體步驟如下:
步驟1 創(chuàng)建臨時表TempBOM,添加字段ParentPartID,ChildPartID,ActualQty,Level;臨時堆棧表TempParts,添加字段ChildPartID,Level;臨時表TempStructureXml,添加ParentPartlD和XML類型字段PartStructure;臨時變量level-0;在TempParts中添加一行新紀錄(productID,leve1)。
步驟2若level≥0,則將TempParts首行記錄中ParentPartID字段的值賦給parentPartID,刪除該行記錄,轉(zhuǎn)步驟3;若level 步驟3 通過parentPartlD找到在PartBom-Link表中的關(guān)聯(lián)記錄,若StructureInXml字段不為NULL,則將parentPartID和StructureXml字段數(shù)據(jù)添加到TempStructureXml表中,level=level-1,轉(zhuǎn)步驟2;若StructureInXml字段為NULL。且存在理個StructureID不為NULL,則轉(zhuǎn)步驟4。 步驟4 找到所有n個StructureID所關(guān)聯(lián)Structure集合,根據(jù)結(jié)構(gòu)有效性判斷式得到有效結(jié)構(gòu)sv,獲取sv的ObjectlD,然后轉(zhuǎn)步驟5;若沒有有效結(jié)構(gòu),則轉(zhuǎn)步驟2,level=level-1。 步驟5 level—level+1;由步驟4獲取的StructureID在PartslnStructure表中查詢得到所有關(guān)聯(lián)記錄的PartlD值、Qty值,步驟3中的parent-PartID以及l(fā)evel一并添加到TempBOM中相應(yīng)的ChildPartID,ActualQty,ParentPartID和Level字段,并將所有記錄的PartID值和level一并添加到TempParts表中的相應(yīng)字段;轉(zhuǎn)步驟2。步 上述步驟實現(xiàn)了關(guān)系模型數(shù)據(jù)向樹形結(jié)構(gòu)模型的轉(zhuǎn)換,過程較為復(fù)雜。對于沒有緩存的傳統(tǒng)存儲模型,每次查詢BOM數(shù)據(jù)都需要執(zhí)行類似轉(zhuǎn)換過程,因此執(zhí)行速度較慢。而在設(shè)計了緩存的新型存儲模型中,只有首次查詢時才會執(zhí)行該轉(zhuǎn)換過程。構(gòu)建BOM緩存之后,在Microsoft SQL Server2005數(shù)據(jù)庫中查詢圖l中實例的部件8的BOM結(jié)構(gòu)時可執(zhí)行如下的SQI。查詢語句(該SQL語句中內(nèi)嵌了xQuery查詢語句)。 在構(gòu)建內(nèi)存中的BOM對象時,只需遍歷以上XML數(shù)據(jù)的樹形結(jié)構(gòu),將每個Part元素映射為一個Part對象(將Part元素的屬性值賦給Part對象的同名屬性),并添加到其父級對象的子件鏈表中即可。 5 結(jié)束語 制造BOM是制造企業(yè)實施生產(chǎn)管理系統(tǒng)的關(guān)鍵基礎(chǔ)數(shù)據(jù),如何減少BOM存儲模型的冗余又兼顧運行效率一直是BOM模型設(shè)計中的難點。由于制造BOM的數(shù)據(jù)滇取頻率遠高于數(shù)據(jù)變更的頻率,在盡量避免無益冗余(如圖2a中a和g相同子件的重復(fù)表示)的同時,對于能夠明顯改善BOM讀取效率的冗余,應(yīng)適當(dāng)保留甚全需要專門設(shè)計。本文模型中XMI。緩存部分相對于關(guān)系模型部分雖然也存在一定冗余,但其只是將當(dāng)前有效的部分BOM結(jié)構(gòu)另行存儲,額外占用的空間較少,卻可以大幅度提升BOM存儲模型的整體性能。該模型用于CAXA制造過程管理系統(tǒng)后發(fā)現(xiàn),在零部件節(jié)點越多、裝配層級越多時,對效率的提高效果越明顯。以構(gòu)建有1065個零部件節(jié)點、最深裝配層級為11層的BOM為例,進行了10次實驗與傳統(tǒng)模型進行比較后發(fā)現(xiàn):首次用時傳統(tǒng)模型為6.173 s,本文模型為6.270 s;第2~10次平均用時傳統(tǒng)模型為6.156s,本文模型為0.078 s。結(jié)果表明,除首次讀取時由于構(gòu)建BOM緩存而用時稍長之外,本文模型具有明顯的速度優(yōu)勢。 核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
驟6 由TempBOM和PartStructure表可以通過遞歸獲得基于XML模型表示的BOM數(shù)據(jù),然后將其存儲到PartBomLink表中productID對應(yīng)的StructurelnXmi字段中,以實現(xiàn)BOM緩存的創(chuàng)建或變更。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標題:一種新的制造BOM存儲模型
本文網(wǎng)址:http://www.ezxoed.cn/html/consultation/1082053635.html