|
|
如何实现SmarTeam与SolidWorks的高度集成
北京ABB高压开关设备有限公司 工程部
高磊
|
 |
|
当今世界最重要的、最迅猛的、最影响人类生活的变革是什么?可能90%的人都会 回答--是信息时代的到来。的确,从计算机技术开始介入我们的生活,到今天进入千家万户,影响到每个人的生活和工作,只用了短短十几年的时间。随着计算机应用的日益普及,我们处理的电子数据量正在成几何级数的快速增长,摆在人类面前最重要的问题就是--如何轻松地、有效地、及时地、准确地以及安全地处理这越来越多的信息,而不是沦为信息的奴隶。
对于广大制造业用户,这种矛盾就集中地体现在如何轻松应对庞大的、来自于各种软件的、不同格式的、不同版本的电子图纸、表格、文档、BOM等信息,于是PLM应运而生。可以说PLM的本质就是帮助人们规范有效、准确安全地管理庞大的电子数据的一种工具。面对来自不同软件、不同格式、不同版本的电子数据,PLM的核心问题就是要在它们之间搭起一座座桥梁,所以说PLM的核心就是集成。
虽然广大制造业用户的基本需求是相似的,但是每家企业、公司的具体情况又各不相同,都有各自不同的产品特点、工作方式、管理规范,以及不同的应用软件、文档格式等等。所以没有一种PLM可以放之四海而皆准,必须根据用户的具体需求做客户化的工作。SmarTeam是一种开放性极好、二次开发功能强大的PLM系统,它提供了非常基本的但非常全的集成模块,包括与各种CAD、ERP、Office等的集成,而与CAD的集成则是其中最核心的集成。
下面将具体介绍北京ABB高压开关设备有限公司是如何实现SmarTeam与SolidWorks之间的高度集成。
1、企业背景
我公司成立于一九九五年,是ABB集团控股的一家合资企业,主要生产先进的高、中压开关设备。我公司于2002年底开始实施SmarTeam,实施方为“新科益系统与咨询(上海)有限公司”,在PLM实施期间,及实施后的应用提高、集成开发中均得到了新科益非常有力的支持与帮助。今天的PLM成功应用得益于两大方面:企业方的全面参与;实施方的有力支持。
2、PLM与SolidWorks的集成
2.1、首先分析用户的需求 这一点非常重要,一定要非常清楚的了解用户真正的需求,也就是知道他到底想要什么;了解用户需求后,还要根据SmarTeam软件的特点分析,如何才能在系统允许的情况下实现甚至超出用户的期望值;然后粗略的勾勒一个集成的方案,反复思考对比该方案的可实现性、可操作性、关键点等。只有这样你做出来的东西才会有人喜欢用,才会真正的帮到用户,才有意义。
2.2、SolidWorks与SmarTeam集成方案 过去,普通用户对于电子数据管理方面遇到的问题主要有:信息无法共享、数据保存不安全、查询困难、信息重复录入、图号及版本混乱、审批过程费时费力并造成纸张浪费等等。其中前几个问题,SmarTeam本身的功能就可以解决;针对另外几个问题,则需要做一定的开发工作,我们主要从以下几方面入手:减少重复录入(保证数据源唯一)、版本实现自动控制、图号实现自动申请、图纸电子审签等。
具体实现如下:
按照公司标准图框及用户需求分析将图纸信息做如下分类:A. 一般图纸信息;B. 版本信息;C. 签名及日期信息
A类信息包括图号、描述、材料、比例、页码等,主要是从SolidWorks映射到SmarTeam;
B类信息主要用于版本控制,保证图纸上的版本与SmarTeam中的版本完全对应,是从SmarTeam映射到SolidWorks;
C类信息包括设计者、审核者、批准者及其日期,是将SmarTeam图纸审批流程中各相关节点的用户信息捕捉下来,并映射到SolidWorks图纸中。
如下图所示:

2.4、API程序开发
由于SmarTeam提供了与SolidWorks的整合模块,经过上一步整合设置后,A类图纸信息可以自动地从SolidWorks映射到SmarTeam,此步不需要任何程序。API程序的主要功用有二:一是B类信息的反映射;二是C类信息的捕捉及映射。只用了二个小程序,都非常简单,但推出后因其极大的益处而得到工程师的颇多好评。
第一个程序是用于捕捉流程中的用户信息,程序的代码如下(部分源代码):
| Function AddAttrAfterSend(FlowSession As Object,
FlowProcess As Object, Node As Object, Response As Object) As
Integer |
| Dim ObjectId As String |
| Dim ClassId As String |
| Dim SmClass As ISmClass |
| Set Session = FlowSession.FlowStore.Session |
| Set UserClass = Session.MetaInfo.SmClassByName("Users")
|
| Set SmUser = Session.UserMetaInfo Set CurrentUser
= SmUser.GetUserObject(UserClass.ClassId, SmUser.UserId) |
| CurrentUser.Retrieve |
| On Error Resume Next |
| Set swApp = GetObject(, "SldWorks.Application")
|
| If Err Then |
| |
Err.Clear |
| |
Set swApp = CreateObject("SldWorks.Application")
|
| |
|
If Err Then |
| |
|
|
MsgBox Err.Description |
| |
|
|
Exit |
| Sub End |
If End If Set Model = swApp.ActiveDoc ………..
由此获得SOLIDWORKS模型,并调用其内部函数将SMARTEAM中的属性输入到SOLIDWORKS中。
第二个程序是用于将捕捉到的用户信息及版本信息映射到SolidWorks Drawing上,代码如下(部分源代码):
Function InfoMapping(ApplHndl As Long, Sstr As String, FirstPar
As Long, SecondPar As Long, ThirdPar As Long) As Integer
Set SmSession = SCREXT_ObjectForInterface(ApplHndl) CONV_RecListToComRecordList
FirstPar,FirstRec If FirstRec Is Nothing Then
Exit Function
End If
ClassId=FirstRec.value("CLASS_ID",0)
ObjectId=FirstRec.value("OBJECT_ID",0)
Set SmObject = SmSession.ObjectStore.RetrieveObject(CInt(ClassId),CLng(ObjectId))
SmObject.Retrieve
同上
………
………
2.5、运行及调试
经过短暂的试运行阶段,只出现了很少的问题,经修改调试后开始正式使用,至今已使用近一年,未出现任何问题,其间经历一次SolidWorks
2001Plus到SolidWorks 2004的升级,对原程序代码及用户使用未造成任何影响。 2.6、提高及改进 虽然到目前为止未对此功能进行任何改进及提高,但经过近一年的使用,我们已经觉察到了许多可提高及改进的空间,计划待问题积累一段时间后,做一次大的提高及改进,让工程师彻底地从繁琐单调的重复性工作中解脱出来,从而将全部精力投入到产品设计开发中。
总之,做SolidWorks与PDM的集成,最重要的是充分了解用户的需求并将之与PDM结合制订出高度客户化的集成框架。有了好的框架,一步一步做出好的集成效果就不难了。笔者认为CAD与PDM的集成应该是PDM的核心功能,做好了这个集成,之后再一步一步实现更多的集成功能,最终做大做深整个PDM系统就是自然而然的事了。 |