PDM/PLM/CAPP
按行业筛选
请选择行业
----------------------
-全部行业
------------------
-机床与金属加工设备
-刀具/量具/夹具/磨具
-模具设计与制造
-塑料机械/橡胶机械
-通用机械/化工机械
-工程机械/建材机械
-交通运输/海工装备
-农业机械
-食品机械/烟草机械
-包装机械
-印刷机械/广告设备
-纺织机械
-木工/造纸/环保/医疗设备
-物流设备
-智能楼宇/安防设备
-炉窑/热处理设备
-五金工具
------------------
-工业自动化
-佳工激光网
-仪器/仪表/衡器
-电力设备
-电子/通讯/办公文具
-家电/照明/健康设备
------------------
-基础件/通用件
-标准件
-工业原材料
-电子元器件及材料
-包装材料
------------------
-CAD/CAM/PDM/PLM
-ERP/制造业信息化
-管理咨询/认证
-服务/培训/工业设计
按产品筛选
----------------------
-本行业全部文章
--------------------
-CAD/CAM软件
-CAE/模拟仿真
-PDM/PLM/C
-EDA/专用CAD
-三维打印机
-三坐标测量机
-三维扫描仪
-CAD硬件/先进制
查看本类全部文章
基于UG的产品信息集成管理研究
作者:唐新姿 马秋成 彭锐涛
1 前言
计算机集成制造(CIM)的实质是产品设计、工艺规划、生产制造等应用阶段信息流的传递作用过程。信息是与设计、制造等过程有着本质联系的基本元素,其集成管理是整个过程都予以关注的核心任务。产品设计信息的获取是CIMS系统的首要环节,是当前遏制制造业信息化 进程的“瓶颈”之一。特征造型技术将产品的几何信息和非几何信息汇集到产品定义中,不仅能表达产品的几何形状,而且同时表达了产品的制造要求,在较高层次上体现了设计者的意图[1]。但是在CAD 环境下图形数据为非结构化数据,无法被后续系统直接使用。国内外学者对零件信息模型的定义和信息集成进行了大量的研究。基于中性文件STEP、IGES、PDES标准的信息集成方法[2~7],在异构三维CAD系统的信息流通上,以其较好的通用性占有一定的优势。但中性文件在信息传输过程中必须进行语法分析和语义检查,数据段的提取和预处理方式较为麻烦。根据PDES标准从设计领域进行特征定义,其设计特征库的定义存在一定局限性,且系统开发难度大。本文提出在UG CAD环境下,综合应用UG/Open API函数和Oracle网络数据库技术,实现产品设计信息的提取、数据统一集成管理。
2 系统总体结构
随着网络制造技术的发展,企业不仅要考虑自身内部信息共享,还要考虑与外部环境集成,企业与企业之间实现信息交流与共享,从而实现制造资源的重组,获得更大效益。支持分布式网络制造和网络企业联盟的产品信息管理系统将成为重要的发展趋势。企业内部的产品设计、工艺设计、加工制造、生产管理等多个环节、多个部门要求协同工作,共享信息。应用网络技术构建一个分布式操作和数据库管理为一体的企业内部网,有利于企业各部门之间实现数据和资源共享。
Oracle是企业级的关系型数据库系统[8],具有很强的联机事务处理能力,包括分布式查询、多点更新、远程调用等,非常适合联盟企业生产信息数据库的分布式处理,支持用户自定义数据类型的存储,具有较好的数据安全管理能力。Oracle支持客户机/服务器工作方式,客户端负责处理用户界面和企业应用逻辑;服务器端负责处理数据存储、检索和管理数据库等。本系统的客户端将UG设计环境中的产品信息通过API函数提取,经数据库开发接口和网络传输,存储到服务器统一数据库中。系统总体结构如图1。
3 关键技术实现
3.1 零件信息的E-R模型与数据存储
计算机抽象表达客观事物首先必须进行数据模型化处理,映射在模型中的信息是对真实零件信息的一种收集和抽象,以便于计算机处理的形式存储。从客观世界到计算机形式语言的过渡需要建立概念模型。对零件进行概念设计得到零件信息模型的典型方法是实体属性联系方法(Entity-Attribute-Relationship)(或E-R模型)[8]。E-R模型包括实体、属性和联系三大要素,是研究零件组成要素及其关系的有效方法。
零件由许多形面要素构成,一个零件与多个特征形成1:n的构成关系,特征与特征之间形成不确定的位置和基准关系。划分实体和属性,确定实体间的关系是建立E-R模型的核心问题。根据E-R方法,将零件图号,零件名称、零件类型、毛坯类型、零件材料、最大径向尺寸和最大轴向尺寸,生产批量等作为实体零件的总体属性。而特征实体要素的属性主要有尺寸及公差,表面粗糙度,形状公差、位置公差等,如图2。
E-R模型属于概念结构,为了在关系数据库管理系统中进行零件信息存储和管理,还必须将概念结构转变为关系数据模型的逻辑结构。关系数据模型的基本思想是在二维表中表示实体、实体属性以及实体与实体之间的关系。对于实体,转化为一个关系模式,即一个二维表,实体属性转化为二维表中的列字段。
3.2 动态链接库的加载
UG/ Open API所开发的应用程序可以在两种不同的环境下运行:Internal和External[9]。对于在Internal环境下的程序只能在UG Session下运行,其入口函数是ufusr或ufsta。所以只要在用户应用程序中加入任何一个入口函数就可以实现与UG进程交互。同时UG OPEN MenuScript提供修改UG菜单的脚本语言,比如添加、删除、定制菜单等,开发者可以使用该语言修改菜单响应行为,ACTIONS可以是宏(.macro)、C或C++程序(.so,.sl,.dll)、GRIP程序(.grx)和UTD(.utd)。通过加载不同的动态链接库来修改响应行为,即实现了不同用户应用的加载。
创建编辑UG主菜单和下拉菜单以及工具条的方法有两种:一是通过编辑Menu文件添加和修改菜单项;二是开发C应用程序调用MenuScript API函数和子程序开发定制菜单选项。其不同之处在于:前者是通过语法“ACTIONS”指定菜单响应行为,可为API程序、GRIP程序、UTD文件,使用简单灵活;后者是通过API函数UF_MB_add_actions注册回调函数,适合相应模块应用功能扩展。
本文在Internal环境下将入口函数ufusr加入VC++工程,开发了信息提取应用程序,建立了动态链接库。并借助于文本编辑器,编辑菜单脚本文件,以(*.men)格式存放于$UGII_USER_DIR\application目录下,从而实现了动态链接库的加载过程。
3.3 设计信息获取界面的开发
一般情况下,UG/Open API使用界面开发工具UIStyler来开发应用程序界面[9]。UIStyler是一种可视化开发工具,提供Label、Bitmap、String、Option Menu、Button等控件,可与Menuscript菜单脚本文件结合定制用户菜单和界面。它直接通过actions的方式被UG调用,从而将用户应用和UG应用完全融合。与流行的Windows应用程序开发工具相比,UIStyler提供的控件较少,功能有限,如树型控件、列表控件、视图类窗口等在UIStyler中无法实现。要创建复杂的应用程序界面,需在VC++环境下使用基础类库MFC来实现。
基础类库MFC是C++的编程接口,而UG/Open API所使用的是标准C,因此在UG/Open API应用中不能直接使用MFC类库。但是如果在基于MFC的VC++用户应用工程中加入UG/Open API所使用的库函数和头文件则能正确通过编译,生成动态链接库。例如,在用户工程中加入UG的两个库文件libufun.lib libugopenint.lib(这两个文件位于UG安装目录的UG OPEN子目录中),并加入以下语句即可调用基于MFC的非模态用户对话框(对话框的属性必须为Visible)。
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CgetinforDlg * dlg = new CgetinforDlg();
dlg->Create(IDD_DIALOG1);
用这种方法显示的对话框可按用户要求保留在UG界面层,并且采用加锁和解锁机制可与UG进程交互。
3.4 数据库开发技术
ADO(ActiveX Data Object)是基于OLE DB的数据库应用程序开发接口,可以访问Access、SQL Server、Oracle等数据库。使用ADO技术开发数据库应用程序有两种途径: ActiveX控件,ADO对象。使用ActiveX控件访问数据库,对程序控制相对较弱,效率比较低;直接使用ADO对象来访问,则可以灵活地控制应用程序。ADO保留了MFC/ODBC、DAO的特性,其类的定义是作为一种资源存储在ADO DLL中,使用ADO前必须引入ADO库文件,其引入方法是在MFC AppWizard工程模版生成的标准文件stdafx.h头文件里加入以下语句(其中msado15.dll的具体位置根据系统路径确定)。
#import "c:\program files\commonfiles\system\ado\msado15.dll" \
no_namespace \
rename("EOF","adoEOF")
由于ADO是一组COM动态库,所以程序在调用ADO前必须初始化OLE/COM库环境,在应用最后应该关闭连接,释放对象。ADO库包含3个接口指针:_ConnectPtr,_RecordsetPtr和_CommandPtr。在需要使用多个记录集时,最好使用已经创建数据连接的全局_ConnectPtr接口指针,提高数据库连接创建的效率,然后使用_RecordsetPtr或_CommandPtr接口指针执行存储过程和SQL语句。使用该方法可以灵活实现对异构数据库的处理,程序中可以使用多种数据库,如ACCESS、Microsoft SQL、Oracle等任何支持ODBC的数据源。在oracle中,配置好ODBC数据源和驱动程序后,通过创建_ConnectPtr实例,可指向并打开该数据源。其连接语句为:
m_pConnection->Open("DSN=ORADB;UID=system;PWD=manager;","","",adModeUnknown)
其中ORADB为在oracle中以用户名system和密码manager创建的数据源名称。
在建立与Oracle的连接之后,创建记录集,利用SQL语句将产品信息存储到统一数据库。
3.5 产品装配结构的遍历
树型结构是产品数据在界面上的表现形式,这种产品数据结构来源于产品结构的遍历。在UG的装配模型中以树型结构组织装配组件和零件,该模型对应的是造型设计信息。一个部件文件中只有一个装配树根,是遍历的起点。装配中,组件和子组件之间的关系是利用实例Instance标记的,且是唯一的,所以访问每个实例Instance就能得到对应的一次关联。在进行产品结构遍历前先进行产品结构分析。
产品结构根据产品开发不同而具有不确定性,深度层次和同一层次的数量都是未知的。具有这样的层次特点:与产品平行的节点是其他产品,产品的子节点可是零件或者部件,零件的子节点是特征,而部件的子节点还可以是零件或者部件,同一个零件或者部件可以同时出现在同一产品的不同部件下,不同产品也可以有完全相同的零部件(如图3)。可见产品结构是非线性结构,不能以简单的数据链来表示,且具有递归特性。
搜索常见的方法有广度优先搜索和深度优先搜索。广度优先搜索从某一顶点(假设为M)出发,在访问顶点M后再访问M的各个未曾被访问过的领接顶点(假设为N1,N2,…,Nk),然后再依次访问N1,N2,…,Nk的所有的还未曾被访问过的领接顶点。再从这些访问过的顶点出发,访问它们的所有还未被访问过的领接顶点,……,如此循环,直到所有的顶点都被访问完为止。广度优先搜索是一种分层搜索,不是一个递归的过程,其算法也不是递归的。深度优先搜索是从某一顶点(假设为M)出发,在访问顶点M后,再依次从M的任一还没有被访问过的领接顶点(假设为N)出发进行深度优先搜索,直到所有的顶点都被访问完为止。这是个递归定义,其算法可以用递归算法来实现。
以下利用API函数和递归调用的方法遍历装配中的组件和零件。
先用UF_ASSEM_ask_root_part_occ获得装配树根,然后用UF_ASSEM_ask_part_occ_children获得根的子部件。并对每个子组件递归调用UF_ASSEM_ask_part_occ_children,直到组件只由一个零件组成。
void CycleAllParts(tag_t child_tag)
{
tag_t *child_part_occs;
int partNum=UF_ASSEM_ask_part_occ_children(child_tag,&child_part_occs);//获得子组件数
for(int i=0;i {
char part_name[MAX_FSPEC_SIZE+1];
char refset_name[MAX_ENTITY_NAME_SIZE+1] ;
char instance_name[MAX_ENTITY_NAME_SIZE+1];
double origin[3];
double csys_matrix[9];
double transform[4][4];
UF_ASSEM_ask_component_data(child_part_occs[i],part_name,refset_name,instance_name,origin,csys_matrix,transform);//获得组件属性
Saveinfo();//保存组件属性
CycleAllParts(child_part_occs[i]);
}
UF_free(child_part_occs);
}
3.6 产品信息管理系统开发
产品结构来源于CAD环境,可以用二维明细表来表示,也可以用树型结构表示。树型数据结构可以清晰的表达数据元素之间的分支关系和层次关系,便于理解,逻辑性强。为合理组织和管理产品数据,本系统以产品结构树作为产品信息管理的起始界面,如图4。这种方式让产品结构的层次关系一目了然,用户通过对产品结构树的简单操作就可以按不同分支展开,直观的得到所需要的信息,而不需要考虑数据存放的物理位置。
以产品的部件图号作为树的根节点,各组成零部件代号作为下级节点,树主干表示层次分支关系,树节点表示零部件实体,树的枝叶表示零部件相关的属性数据(包括该零件的工艺数据和图形文件)。需要特征信息时,展开零件节点,下级特征信息就自动追加到该零件节点上。
信息管理系统主界面用VC++开发,采用基于视图和文档类型结构;用CsplitterWnd 类将窗口切分成两部分,定义多个视图类和视图指针,在响应函数里执行该视图生成函数,实现视图灵活变换;模态和非模态对话框交互;在要触发的菜单类中添加右键菜单响应函数,并在该类的消息处理循环message_map中添加宏:ON_COMMAND(菜单ID,响应函数),以实现系统功能菜单和各视图右键功能菜单相结合,方便用户操作。
4 结论
本文综合应用UG/Open API和oracle数据库技术,采用面向对象编程语言C++,以DLL方式将应用程序无缝嵌入UG 环境,实现用户与UG交互,并用深度搜索递归调用法遍历产品零部件模型,获得产品结构信息和零部件设计信息,通过网络将获得的信息存储到服务器数据库,给企业其他部门和CIMS其他技术单元提供了统一的信息来源,保证了异地协同设计与数据集成管理,有利于企业信息化的实现。(end)
文章内容仅供参考
(投稿 )
(如果您是本文作者,请点击此处 )
(6/18/2006)
对 PDM/PLM/CAPP 有何见解?请到 PDM/PLM/CAPP论坛 畅所欲言吧!