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