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.toberp.com/
本文标题:一种新的制造BOM存储模型
本文网址:http://www.toberp.com/html/consultation/1082053635.html