SolidEdge企业通用零件参量化设计二次开发
2013-05-18 by:广州有限元分析、培训中心-1CAE.COM 来源:仿真在线
蔡元军 李春亭 来源:e-works
关键字:ActiveX技术简介 对象的导出 获取活动对象 关闭活动对
随着我们企业的做强做大相应产品的设计周期和新产品的研发周期也随之缩短,这就要求我们在设计的任何阶段都要考虑工作的最大效率。在应用SolidEdge软件进行产品设计时因为没有我们企业的通用零件3D库,这样设计员在设计时需要重新设计企业通用零件从而带来了大量的重复性工作大大的降低了工作效率。为此我们需要在SolidEdge软件上进行开发建立我们的企业通用零件库。本文主要介绍应用VB进行二次开发的过程。
SolidEdge是EDS公司推出的普及型主流CAD系统,是EDS PLM系统的一个分支具有极佳的可展性和很强的易用性。软件本身还为用户提供了采用标准的Windows"对象链接与嵌入"技术和"部件对象模式"技术的应用程序接口。这样运用ActiveX Automation技术的开发工具就可以对SolidEdge进行二次开发来达到客户化需求的目的。
一、ActiveX技术和VisualBasic在SolidEdge中的应用
1、ActiveX技术简介
COM是M$1993年做为通信机制引入的,是OLE2.0的基础。之前的OLE1.0是简单的多进程间通信方法也不是基于COM的,更早还有一种DDE技术那是更简单的通信机制了。为了使对象可以重用,M$在OLE技术的基础上搞出了Automation对象。该技术使得软件包可以将对象导出,供其它程序或脚本使用。
在这里SolidEdge可以理解成为一个服务程序,开发出来的程序可以称为"客户程序"。也就是说客户程序在服务程序的基础上进行二次开发的,客户程序是调用驱动Solidedge完成的,这样的话用户不需要非常全面的掌握SolidEdge。
2、对象的导出
利用VB或VC++等工具对SolidEdge进行开发时都要导出ActiveX对象,都要有一个名为Application的顶级对象,该对象在程序启动时作为Active对象而初始化。Application对象代表应用程序,它给ActiveX客户提供了绑定、浏览程序所导出的对象的方法。应用程序导出的其它对象都是Application对象的下级,它是对象继承树的根。
应用程序导出对象的方式:
使用RegisterActiveObject()注册Application对象,将把该对象加入ROT。这样ActiveX客户就可以获取一个实例而不用重新创建一个。VB提供了GetObject语句访问已经存在的对象。
3、获取活动对象
在面向对象开发时对象的获取是非常关键的,其实开发的过程就是对获取的对象进行各种处理的过程。当我们获取对象时还要知道这个对象是不是我们需要的,针对不同的开发工具查看对象的命令也不一样但是道理是一样的我们只要掌握了方法其它的就触类旁通了。
自动化提供了多种手段以标记、获取对象或应用程序的活动实例。以下是常用的几个命令:
(1)RegisterActiveObject,在应用程序启动时注册活动对象。
(2)RevokeActiveObject,在应用程序退出时停止活动对象。
(3)GetActiveObject,取得活动对象实例。
4、关闭活动对象
我们获取对象对他进行各种处理之后,还要在合适的时机对其进行关闭。关闭对象是有很多技巧的并不是我们任何时候都可以关闭,结合不同的环境针对处理的过程关闭对象的时机都是相对的。这些方法需要我们在日后的开发工作中不断总结。
关闭对象通用的三种方式:
(1) 如果对象所在的应用程序可视,仅当响应用户明确的退出命令(如File|Exit)或ActiveX客户的等价命令时关闭。
(2) 当对象所在的应用程序不可视,当最后一个外部引用消失时关闭。
(3) 如果对象所在的应用程序可视并正被客户控制,则在收到退出命令时应当变成不可视,这样对象仍然可用,直到所有外部引用消失才退出。
对象的导出、获取活动对象、关闭活动对象这里只是简单的介绍一下,这些方法的具体应用需要在不同的环境和工程中结合实际的需求得以实现。
5、怎样调用SolidEdge程序
利用VB来进行二次开发时必须对SolidEdge提供的应用对象(Application)实现通讯。
应用对象是唯一一个允许VB程序直接访问的对象,它位于层次结构树的顶部,通过该对象才能访问其下级的其它对象。我们必须在VB的开发环境中引用SolidEdge的有关类型库。这些库包括:Assembly.tlb(装配类型库)、constant.tlb(常数类型库)、Drdt.tlb(制图类型库)、propauto.dll(文件属性对象库)、framewrk..rlb(框架结构类型库)、geometry.tlb(几何类型库)、part.tlb(零件和钣金类型库)等等。怎样引用这些类库呢?在VB的环境中,通过"工程"菜单中的"引用"命令,将所要用的库选中即可调用(如图1所示)。
二、Solidedge的对象层次结构
在SolidEdge中对象之间就像一个组织结构似的是有层次结构相互联系的。它的结构形式是自上而下的树状结构,最上层即根节点对象就是一个应用(Application)。详细的结构从SolidEdge提供的帮助文件中可以查到(如图2所示)。
在SolidEdge中拥有四种工作环境分别是:Part(零件)、Assembly(装配)、SheetMeta(钣金)、Drdt(工程图)。这里的零件和钣金公用一个对象层次结构,而装配和工程图各自独立拥有层次结构。图3是我根据图2生成的简单的装配层(Assembly)结构组织图。Application指的是Solidedge应用程序,Doucments指的是一个对象集合,类似一个数组似的存放着前面的四个环境。要访问其中的一个环境必须得到Doucments对象才能访问。AssemblyDocument就是进入到了装配环境。根据这样的层次关系就可以找到需要编辑的变量所在的类,然后应用语句获得对应的类做属性定义或者属性编辑。图3两边省略掉的是其它的层次关系不做一一介绍了。
对于程序开发者一定要会利用这个树状结构图,通过它找到相关的属性是很好的捷径否则开发工作很难展开。如果对某些节点不是很清楚可以通过程序将其展开看看这个类或者是属性值到底是怎样的。只有确定好对象才能对其展开工作。
三、结合数据库实现零件的参量化设计
1、建立一个零件的参量化模型
创建一个"带筋板孔形吊耳"如图4所示。中间的孔径是D=80mm、半圆底座的半径是R=135mm、空的中心到底边的距离C=120、两个板厚的拉伸距离分别为S1=28mm、S2=26mm。
2、在变量表里添加变量
如图5所示,在对应的变量表里设定对应的变量及公式。在确定参量化模型时需要企业的资深专家参与设计,譬如零件的关键变量的定义以及参量的取值范围或取值方式的确定都需要专家的讨论和确认,以免对日后的设计造成错误。在讨论的过程中一定要确认变量的变化范围和方式这直接关系到整个零件的参量化设计的正确与否。
3、设计数据库
在这里我们用Microsoft Access数据库。新建一个数据库数据库的名字为"data_Tree",然后建几个表,其中的一个表的名字为"带筋板孔形吊耳"(图6),其中表里有7个关键字分别为:type、D、B、C、R、S1、S2(如图7所示)。其它的表可以仿照以上方法编辑。
数据库是通过数据库控件和程序关联的,当程序触发了事件就会调用数据库里的参数来驱动SolidEdge的参量化模型。在驱动参量化的时候可以通过表的形式来完成但是这样有局限性因为这些参数都是事先指定的不能实现随机任意性。当我们要实现任意输入时还要考虑参数的取值范围,因为参数的值超过范围就不符合设计的要求。那如何实现任意输入呢?其实很简单我们首先要获取对象然后找到对象里对应的参量属性值,然后将其与界面窗口程序对应实现驱动即可。
4、创建工程编写代码
(1)界面及事件触发过程
界面的设计主要是考虑设计员在应用时的方便与否,我做了两个方案分别是下拉式和节点式如图8所示,经过讨论采用了节点式界面。在界面设计时主要用了7个控件分别是:TreeView、TextBox、ListBox、SEPreview、CommandButton、DirlistBox、Adodc这7个控件贯通了整个程序。
整个事件的触发过程是:当点击TreeView的节点时先判断该节点是否是叶节点如果不是叶节点则不激活TextBox反之激活TextBox并且将叶节点的属性值传给TextBox显示名称,点击TextBox激活ListBox将数据库里对应的表里的type的属性值全部传给ListBox并且将其显示,点击ListBox显示的值相对应的参量化动作会在后台进行并且将生成的模型显示在SEPreview上,点击标准件生成位置的浏览按钮弹出对话框在DirlistBox里选择存盘位置最后点击确定生成参量化模型。
图8--下拉式
图8--节点式
(2)编码过程
在开发的过程中可能存在未定义的关键字我们需要对其进行检查:
Option Explicit
同时还要定义一些数据库联接等例如:
Dim myCN As New ADODB.Connection
Dim myRS As New ADODB.Recordset
在NodeClick事件里要清空list选项List1.Clear,判断节点是否有节点有则不激活代码如下所示:
If Node.Children Then
Text1.Enabled = False
Else
Text1.Enabled = True
Text1.Text = Node.Text
End If
在Tree_change事件里将数据库里的数据调出形成树状结构,设置表的路径将其传递给数据库控件"Adodc"。
Adodc2.RecordSource = "select * from 表1 "
Adodc1.RecordSource = "select * from 表2 where 类别编="+Adodc2.Recordset.Fields("类别编号") + " "
激活了Text之后首先得清空选项,否则每次都会列出前一次的选项然后打开数据库的表如下所示:
TableName = Text1.Text
myRS.Open TableName, myCN, adOpenStatic, adLockReadOnly, -1
同时在listbox中加入所有的type字段中的内容,如下所示:
myRS.MoveFirst
Do Until myRS.EOF
List1.AddItem myRS("type").Value
myRS.MoveNext
Loop
myRS.MoveFirst
还要关闭myRS否则会导致组合框无法重新选取。
在参量化建模时有零件和钣金件两种,这样在程序里需要加以判断并且在SEPreview中显示如下所示:
If TableName = "止动垫A" Or TableName = "止动垫B" Or TableName = "止动垫C" Then
SEPreview1.FileName = App.Path & "\DATA\" & TableName & ".psm"
Else
SEPreview1.FileName = App.Path & "\DATA\" & TableName & ".par"
编码完成之后的结果如图9所示:
图9
四、结论
在应用开发工具进行SolidEdge开发时最关键的是要非常了解SolidEdge的树状结构要准确的找到开发点。开发点就像一把钥匙只有正确的找到钥匙才能打开所需要开发的特征。在SolidEdge的帮助文档里有很详细的介绍对开发人员有很大的帮助。我们要善于总结,在看文档的时候将其繁杂的文档按类归纳结合实际工作将其应用到开发工作中,开始可能是一头雾水但是当其总结出它的规律之后你就会得心应手。
其次是对开发工具的熟悉程度,在制定开发计划及流程时需要考虑到开发工具是不是能够很好的提供支持以及在实现时是否有困难如果能解决还要考虑工作效率。在解决一个问题时最好用最简洁的代码解决不要把问题复杂化这就需要我们有很好的编程经验。而编程经验的取得只有做大量的开发工作才能积累经验在错误中成长错误的积累换来你的成功。俗话说"十年磨一剑"特别是做开发工作就是在错误中茁壮成长。我们要做好与错误做斗争的心里准备要知难而上。
[参考文献]
[1]续丹 陶唐飞 黄胜,SolidEdge基础与实践教程,清华大学出版社,2005年9月第1版
[2]曾琦,VisualBasic6.0编程实例与技巧,中国水利水电出版社,1998年10月第1版
[3]张建澄 黄胜 王天翔,SolidEdge高级篇,机械工业出版社,2004年1月第1版
相关标签搜索:SolidEdge企业通用零件参量化设计二次开发 AutoCAD培训 AutoCAD培训课程 AutoCAD图纸设计 AutoCAD在线视频 AutoCAD技术学习教程 AutoCAD软件教程 AutoCAD资料下载 Fluent、CFX流体分析 HFSS电磁分析 Ansys培训 Abaqus培训 Autoform培训