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