PDM/PLM/CAPP
按行业筛选
请选择行业
----------------------
-全部行业
------------------
-机床与金属加工设备
-刀具/量具/夹具/磨具
-模具设计与制造
-塑料机械/橡胶机械
-通用机械/化工机械
-工程机械/建材机械
-交通运输/海工装备
-农业机械
-食品机械/烟草机械
-包装机械
-印刷机械/广告设备
-纺织机械
-木工/造纸/环保/医疗设备
-物流设备
-智能楼宇/安防设备
-炉窑/热处理设备
-五金工具
------------------
-工业自动化
-佳工激光网
-仪器/仪表/衡器
-电力设备
-电子/通讯/办公文具
-家电/照明/健康设备
------------------
-基础件/通用件
-标准件
-工业原材料
-电子元器件及材料
-包装材料
------------------
-CAD/CAM/PDM/PLM
-ERP/制造业信息化
-管理咨询/认证
-服务/培训/工业设计
按产品筛选
----------------------
-本行业全部文章
--------------------
-CAD/CAM软件
-CAE/模拟仿真
-PDM/PLM/C
-EDA/专用CAD
-三维打印机
-三坐标测量机
-三维扫描仪
-CAD硬件/先进制
查看本类全部文章
产品设计BOM的自动生成方法及关键技术研究
作者:武汉华中科技大学 朱林
1 引言
在制造业中,产品物料清单即BOM(Bill of Material)是企业基础的核心数据,是联系企业设计制造和生产经营管理的桥梁。在整个产品全生命周期的各个阶段,面对不同的生产部门存在多种不同意义的BOM视图:设计BOM、工艺BOM、制造BOM、质量BOM、成本BOM、采购BOM、销售BOM。设计BOM是企业产品设计部门用来组织和管理生产某种产品所需的零部件物料清单,它是产品设计工程师在完成产品设计后获得的,它是其它BOM视图的基础,其它的BOM都是在设计BOM的基础上,根据自身的需要,将其分解、添加、修改、调整后形成的,所以说设计BOM在整个系统中起着关键性作用。
国内针对BOM的研究很多,但是大部分都是侧重于阐述BOM在企业中如何应用,或者阐述BOM 的数据组织结构及其各种BOM之间的转换,而针对BOM具体如何生成并没有详细的阐述,忽略了一个最为基础且关键的问题:面对现代复杂产品,其BOM数据是如何获得的,在获得数据后,最初的设计BOM 是如何形成的。如果依然采用手工填写数据、编写BOM的方法,显然对于复杂的产品是不可取的,不仅费力,费时,繁琐,而且容易出错。本文正是基于以上提到的问题,特别针对设计BOM、对其BOM数据的提取以及BOM的自动生成方法及相关技术做了研究,并将其应用于企业,解决了企业的实际问题。
2 设计BOM 自动生成系统的整体框架
设计BOM 本质上是产品在工程设计阶段的产品结构的反映,在设计部门完成产品设计以后,设计BOM 已经隐含在产品当中,我们要将这种隐含关系提取出来并且以适当的表现方式将其显式地表现出来。基于目前企业基本都采用了CAD 系统来进行产品设计,因此产品结构存在的最原始的状态也就是CAD 系统产生的成套电子工程图纸,而设计BOM的数据也正是来自于这些电子图纸。这些图纸以图形和文本的形式清楚地描述了产品、部件、零件的组成结构及相互关系。本文就是要将这些图纸中已经存在的数据,根据它们之间的相互关系,通过ODT 技术提取其中数据,再以产品结构树以及其对应的产品结构关系表的形式表现出来,并将之作为企业产品的重要文档保存到产品数据库中,为企业后续的工作做准备,或者为设计新产品时提供参考。本文将系统分成以下几个功能模块分别完成上述任务。
(1)数据准备模块:该模块为设计部门管理人员提供了信息输入的接口,管理人员根据企业产品的分类,将和该产品相关的所有图纸文件,录入到系统中。
(2)数据提取模块:该模块将处理管理人员录入的所有图纸。利用ODT 技术直接读取CAD 电子图纸中设计BOM 所需要的零部件信息,并将之存储到相应的数据结构中。
(3)建立设计BOM 产品结构树:该模块根据企业对产品零部件组成结构的描述,将已经得到的产品零部件信息组织生成产品结构树,即设计BOM 的产品结构树形式。通过该结构树设计人员可以清楚地查看产品的组成是否正确,如果发现产品结构有问题,那么,此时即可对产品的设计做出调整,此时设计的BOM 视图是以树层次结构展现出来的。
(4)设计BOM产品结构树的展开:设计BOM以产品结构树的形式并不能满足用户的全部需求,很多信息只通过树型结构无法表达出来,因此我们将设计BOM展开成产品结构关系表的形式,该表不仅反映了产品结构的层次关系而且进一步体现了各个层次之间数量、重量以及各个层次零部件的来源(采购、外委、自制)等其它部门所需要的重要信息。
2.1 设计BOM 数据的准备
这个阶段是设计BOM形成的最初阶段,也是关系到设计BOM 数据是否准确完整的一个关键部分。设计部门必须要能够准确、完整地输入整套产品图纸文件,然后系统接收该套图纸文件,为下一步做准备。在此系统对输入的图纸不做检查,但是在数据提取阶段和产品数据结构树形成后,系统会给设计人员相应的提示,并且在产品结构树构造完成以后,设计人员可以将树展开检查该产品结构是否正确。如果不正确的话可以回溯,并且检查图纸输入是否正确,重新输入。
2.2 设计BOM 数据的提取
数据提取工作在BOM的形成过程中具有关键性的作用,如果数据提取出现错误,那么我们接下来的工作将是毫无意义的。当前我国企业应用CAD 系统已经是非常普遍,基本实现了甩图板,正因为如此,设计BOM 才具有了自动生成的需求。国内目前应用最广泛的CAD系统是Autodesk公司的Auto-CAD系统,它产生的图纸文件格式是DWG格式的文件,这种图纸在我国企业中大量的使用,普遍性很强,但是由于Autodesk公司没有公开该文件的格式,用户无法直接从该文件中提取自己需要的信息。我们虽然可以使用一些二次开发语言如AutoLISP 、ObjectARX、VisualLISP、VBA等,根据自己的需要开发一些特殊功能,但是这些语言运行的环境都离不开Auto-CAD系统,Autodesk 公司也提供了dxf 文件格式作为与其它系统进行数据转换的接口文件,但是这种文件格式有着天然的缺陷,首先它也是必须在AutoCAD系统平台下才可以被操作,其次该文件的格式复杂难懂,普通用户难以正确地读取,而且DWG经过另存转换后得到的DXF 文件,其文件的大小是dwg文件的2 到3 倍,而针对目前最新版的AutoCAD2004 的DWG,该DXF 文件的大小更升为6 到7 倍,这无疑为企业又带来了一个附加的存储费用。
为了不受AutoCAD 系统的约束,保持数据提取功能的独立性,本文采取The Open Design Alliance 即OpenDWG 联盟组织提供的ODT 技术,ODT 是OpenDWG Toolkit 的简称,它不需要AutoCAD 运行环境的支持直接读取DWG 和DXF 文件,并且可以将之转换为它自己的数据格式,而且由于这种格式是对外开放的,无疑将为企业后续的生产管理提供便利。ODT支持Windows 和Unix 操作系统,针对这两种操作系统的各个版本,ODT 又细分了很多版本,用户只需要根据自己的环境,选取不同库文件,将其加入到自己的开发项目中去即可。到目前为止,ODT 已经支持到了AutoCAD2004。ODT 以动态库的方式提供给用户,直接读取DWG 图形文件,对其中数据进行挖掘整理。通过使用ODT 大大地增强了我们应用系统的独立性,缩小了系统的体积,同时必然增强了系统的鲁棒性。本文在对DWG图纸信息提取的实现过程中,没有遇到数据丢失的现象,完整地得到了我们所需要得所有数据。
要使用ODT必须先建立ODT 得应用环境,根据用户操作系统的版本,将必需的动态库、动态库引出文件、头文件、初始化文件加入到项目工程中,然后为ODT 在内存中开辟所需要的空间,接着对ODT 进行初始化,加载DWG 格式文件,然后调用ODT 开发包的功能函数,遍历图纸读取图纸数据,当读取工作完成以后关闭ODT 在内存中所开辟的空间,接着卸载DWG 格式文件。如图1 所示。
在实际当中,我们需要的数据一般都是从图纸的标题栏和明细表中而来,这里详细记录了图纸中组成产品的零部件的信息,如名称、数量、材料等。因此我们主要就是提取标题栏和明细表中的数据。根据实践经验,企业设计部门对图纸一般都有比较严格的规定,譬如对图纸的图幅、标题栏、明细表这些没有涉及到零部件本身形状尺寸的图纸要素,会采用一些标准的格式,将它们的位置、形状尺寸、间距、表中字体等这些属性以确定的方式在图纸中规定下来。这样无形中为我们对图纸数据的挖掘提供了便利,这样就可以通过ODT 在图纸中找到一些关键的位置、尺寸(如标题栏的右下角基点),以及由此而上找到明细表并且通过线条之间构成的包围盒准确找出表中的字段及其对应的字段值。这样得到的数据准确,而且大大提高了数据读取的速度。通过ODT 技术的使用我们得到了需要的所有数据并将之存入到一个名为dwgfileInfoArray的数组中,该数组中每一个元素代表一张图纸信息,并且该元素分别记录了明细细表和标题栏数据,其数据结构如图2 所示。
2.3 设计BOM 产品结构数据模型及产品结构树的建立
2.3.1 设计BOM 产品结构数据模型
数据模型要能充分反映产品结构,能满足用户对数据的处理要求。产品实际的组成往往很复杂,其关系往往是一种网状的关系,如图3 所示。
实际当中一个产品由十几个甚至上百成千个零部件组成,而一个部件又由一个或多个零部件组成,这些关系可以用表或图的形式表述。最终产品处在最高层,它的直接零部件处在第2 层,这些层的每一组件同样又可以连续分解成更低层的零部件直至最基本零件:外购件或原材料,并且存在这样的情况:一个零件被多个零部件引用,这样实际中产品零部件之间就形成了一种除了根节点外的多对多的网状关系。这种结构难以处理,为了清晰地表达产品结构,为了将设计BOM中产品的所有部件能按层次关系全部显示出来,使产品及其构成的父子关系一目了然,而且为了便于计算机的处理,我们必须打破这种结构,本文采取将被多次引用的零件或者部件多次复制的方式, 将图3 转化为图4 的形式,这样复杂的图形结构被解构成为计算机容易处理的树状结构,使用了树型结构数据模型,即所谓的产品结构树,它按照产品、部件、零件的相互依赖关系组成的树形结构,可以按层次进行展开,而且这种结构正好符合我们要读取的零部件图纸的标题栏和明细表之间的关系。一般情况下每一张产品图纸都包含有标题栏或者明细表,或者二者皆有。这两个表非常详细地记录了零部件本身的信息。标题栏中记录了零部件的名称、代号以及表达该零部件图纸的图幅、页数等总体情况。而明细表则记录了该部件的详细组成部分如零件名称、数量、材料、加工单位等。
2.3.2 建立设计BOM产品结构树
在具体实现上,产品结构是一套图纸内部关系的反映。根据企业的不同情况,在产品设计结构中,不论零件还是部件都有一个惟一标识它们的关键属性,如图号。据此我们便可以在产品结构树中惟一确定该零部件,将其插入到结构树中相应层次的节点中。对于复杂的部件它又由子零部件组成,此时在图纸中一般都会有明细表,该表中详细记录了组成该部件的零部件,如零部件的名称、数量、重量、材料技术、采购方式等。这样针对一张图纸,我们完全可以根据标题栏和明细表得到该部件的组成,形成一颗子树,如果我们能进一步将每张图纸通过它们在其它图纸的明细表中的相互引用情况,就可以构造出和我们设计的产品结构数据模型相吻合的整个产品结构树。
利用ODT我们已经得到了组成产品的零部件信息,并且将之存储到了相应的几个数据结构中,在此首先我们需通过访问这些信息,找到输入的图纸中的总装图的信息。我们根据总装图是产品结构树的根节点这个属性可以得到这样一个明显的结论;那就是该图的图号(在此我们以图号惟一标识零部件)在其它图纸的明细表中不会出现,否则它就不是总装图纸。据此我们按以下步骤得到总装图。
(1) 调入一张图纸标题栏数据中的图号,在所有其它图纸的明细表数据中搜索,如果没有找到和它相同的图号名称,那么这个图号就是总装图号,转(2);如果该图号在明细表中被找到,那么终止当前查找过程,转步骤(3);
(2)将其加入到总装图的数组中,转步骤(3);
(3) 如果所有图纸的图号都已被调入过,那么程序终止,否则调入下一张图纸的标题栏图号,在所有其它图纸的明细表数据中搜索,如果没有找到和它相同的图号名称,那么这个图号就是总装图号,转(2);如果该图号在明细表中被找到,那么终止当前的查找过程,转步骤(3)。
这样我们得到了总装图号的数组,然后接以上步骤就要按照深度优先的策略从总装图号开始自顶向下递归构造产品结构树。
将总装图号和根节点位置作为初始值,输入到下面的递归函数中:
ConstructProductTree(Code code, Item item) code 是图号名称,item 是树的节点位置
{ 将当前节点插入到树中,并返回当前节点的父点总装图号返回的是根节点本身
FatherIem = Insert( code , item );
if( HaveChild( code ) ) 判断当前节点是否有子节点即是否有明细表数据
{ 如果有明细表数据记录,那么则循环调用递归函数
for ( k = 0; k < ChildNumber ; k++ )
{ 递归调用该函数将每个子节点插入到该父节点下,构造产品结构树
ConstructProductTree( childnode[k], FatherIem )
}
}
RETUEN ; 没有子节点的情况下返回
}
其中HaveChild( Code code )函数判断是否有子节点的方法是这样的:如果输入的参数,即图号和输入的图纸中的标题栏中的图号有相同的情况,那么那张图纸所具有的明细表中的每条记录所代表的图号就是其子节点。通过以上过程我们将设计BOM产品结构树构造完成,而且还可以在每个节点上附加和图号对应的DWG 文件的详细信息以供后续的调用。
2.4 设计BOM 产品结构树的展开
产品设计结构树的形成,还不能满足用户的需要,用户不仅要看到产品零部件之间的层次结构关系,而且希望得到它们更多的信息,因此我们必须考虑以关系表的形式将结构树展开,并将每个节点对应的零部件信息展现给用户。在构造结构树时,我们可以在每个节点上静态地附加上该节点代表的DWG文件详细信息,这为我们展开结构树,建立设计BOM产品结构关系表做了准备。
首先我们可以按深度优先的顺序遍历结构树,并将节点的记录写入关系表中,初步构造关系表,这一步是比较简单的,只是一个简单的遍历结构树操作。通过这一步我们可以把产品结构从树状的结构转换为关系表的结构形式,但是用户此时看到的关系表没有可以标志产品层次关系的东西,用户无法知道某个零部件的上下级关系是怎样的。这是因为各个节点之间只是局部的上下级关系,因为明细表中的序号是直接相对它的上级而来的,它们在关系表中反复从一开始到某个序号而停止,而不能反映整个产品结构的顺序关系,如表1 左半部分所示。因此我们必须通过某种方式重新体现这种层次关系,我们需要重新构造产品的序号,来表达这种层次关系,最终形成表1 的右半部分。本文采用了产品结构树反向映射的方法来重现这种关系。
(1)我们把关系表中的序号,按照产品结构树深度优先的次序,反向重新附加到每个节点上去。
(2)按深度优先的方式递归读取产品结构树节点的序号,如果节点有下级,那么需要把该节点的序号加上分割符与下级的节点序号合并,赋值给下级节点序号。
(3)重新遍历产品结构树,将新的序号按照深度优先的顺序依次覆盖关系表中的序号记录,最终形成的BOM视图如表1 的右半部分所示。
这样便可以清晰地展现产品的层次及组成结构。同样在我们正确处理了序号以后,就可以将产品零部件的数量、总的重量以及材料消耗等等这些和它们上级有密切关系的字段,通过序号体现出来的上下级关系正确地重新计算出它们在表中的真实值并进行替换。其余的一些要求就是根据企业自身的特殊情况而定,譬如有的企业还需要统计图纸的编号,图纸可以折A4图纸的张数、外购件的数量、标准件的数量、借用件的数量等。
3 应用与实践
根据以上研究,本文设计了一个由一套或多套CAD图纸,自动生成设计BOM系统,并且已经将之成功应用于四川锅炉厂,该厂通过本系统将其所有的产品图纸一次或者分多次输入,为其产品生成了设计BOM清单,并且将之应用于工艺、生产管理各个环节和部门当中,产生了良好的效益。该系统的主要构成模块如图5 所示。
下面图6 和图7 是系统生成的设计BOM 产品结构树和最终展开的设计BOM 产品结构关系表示例。
4 结论
本文以产品结构为核心,以产品零部件信息为基础,利用先进的ODT读取技术,建立设计BOM 产品结构树及相应的设计BOM 产品结构关系表,对BOM 的自动生成方法及关键的技术进行了研究探索,提出了一套行之有效的方法并将之应用于生产实践,为企业的生产管理带来了良好的效益。(end)
文章内容仅供参考
(投稿 )
(如果您是本文作者,请点击此处 )
(5/10/2006)
对 PDM/PLM/CAPP 有何见解?请到 PDM/PLM/CAPP论坛 畅所欲言吧!