SolidWorks异地协同设计系统的实现
2013-05-21 by:广州有限元分析、培训中心-1CAE.COM 来源:仿真在线
为实现SolidWorks的异地协同设计,提出利用Windows消息捕捉机制来实现系统协同模型。介绍了如何利用钩子函数实现对操作信息的提取,以及主拉端维护模型一致性的方法,同时讨论了操作信息捕捉、信息处理、模型生成等系统应用的关键技术。最后对该系统的优点与不足进行了简要的说明。
作者: 侯晓林*颜涛*李婕*宁纪翠*彭作珍 来源: 万方数据
关键字: SolidWorks 协同设计 操作信息 捕捉
近年来,企业中普遍采用三维CAD行设计,特别是中端CAD系统SolidWorks在企业中的大量应用,极大地提高了企业的创新能力。但企业仍然面临着如何充分利用企业的人力资源,提高设计效率,从而缩短产品开发周期的问题。对于异地协同设计一系统的实现最直接的思想是将三维模型直接传给处在异地的计算机,但这种方法由于传输数据量太大,在实时交互方面总不尽人意,为此采用基于Windows消息机制实现协同的方法,并在此基础上结合SolidWorks的特点,实现SolidWorks的异地协同。
1系统构架
1.1系统实现思想
SolidWorks是一套具有特征的变量式实体模型机械设计软件,它具有Windows界面,是真正基于Windows开发的软件。Windows是一种面向对象的体系结构,W indows环境和应用程序都是通过消息来交互的。所谓消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。应用程序要实现的功能由消息来触发,并靠对消息的响应和处理来完成闭。
Windows系统提供了一组功能强大的被称作钩子的API函数,利用这组函数可以轻松地截获系统的各种消息。使用者可以用在系统注册钩子函数的方法来截获发往本地SolidWorks的消息,实现对操作信息的判断和识别。因此,本文提出系统的实现思想:利用Windows消息机制,通过截获驱动本地SolidWorks的操作信息,并将其进行格式化,通过网络传递到其他参与协同的成员,其他成员在接收到信息后,经解析驱动异地的SolidWorks作出相应的反应,其效果就如同在本地对SolidWorks中的模型进行操作一样。因为在网络中传递的是格式化后的操作信息,而不是模型数据,网络的传输量变得很小,从而达到实时的目的。该系统由客户端和服务器端两大部分组成,其协作模型如图1所示。
1.2客户端
客户端是用户实现异地SolidWorks互操作的主要模块,它又分为主控客户端和被控客户端。客户端主要是由以下几部分组成:(1)操作信息捕捉;(2)信息处理;(3)网络通信;(4)模型生成。其中主控客户端实现对系统模型的维护。
1.3服务器端
对系统的控制主要在服务器端完成。服务器端主要实现用户角色管理、用户发言权控制、共享冲突消解功能。用户角色管理主要是实现对用户权限的管理,防止非法用户的登录。对于用户发言权控制,本文采用基于令牌和集中控制相结合的用户发言权控制模式,当需要发言的协同用户提出请求,在当前发言者主动释放令牌之后,即可获得发言权,同时管理员在服务器端可以直接中断当前发言者的发言权,并将发一言权授予另一个协同用户。共享冲突消解主要是通过对主控用户加锁的机制减少冲突的产生。
2关键技术
该系统的关键部分是对SolidWorks有用操作信息的捕捉、处理以及模型的重生成、维护部分。
2.1操作信息的捕捉、处理技术
2.1.1信息捕捉
操作信息的捕捉是通过钩子函数来实现的。在Windows操作系统中,是一种能在事件(消息、鼠标点击、键盘响应等)到达应用程序前中途截获事件的机制,它可以通过修改、丢弃等手段来对事件起作用。Windows系统提供了API函数Set Windows HookEx()实现钩子的安装,并通过UnhookWindowsHookEx() 函数实现钩子的释放。Windows有2种钩子,一种是特定线程钩子,一种是全局系统钩子。特定线程钩子只是监视指定的线程,而全局系统钩子则可以监视系统中所有的线程。全局系统钩子因为要对整个系统所有线程进行监视,会严重降低系统性能。为提高系统的响应速度,本系统采用特定线程钩子。
对于一般操作信息,只需要捕捉鼠标、键盘以及菜单发出的WM_COMMAND消息。对一些特定的窗口,比如绘图区,则需要设置窗口过程钩子监视所有从系统消息队列发往该窗口的消息。因此,设置WH_MOUSE HOOK监视输入到消息队列中的鼠标消息,设置WH_KEYBOARD HOOK监视输人到消息队列中的键盘消息,二者主要是实现操作在异地CAD系统的复现。因为WMCOM_MAND消息有2种类型:一种是通过SendMessage发送的;一种是由PeekMessage或PostMessage发送的。前者是需要系统返回值的,后者是不需要的。对于前者,采用WH_ CALLWNDYROCHOOK来捕捉,后者通过WH_GETMESSAGEHOOK来捕捉。利用WM_COMMAND消息主要是对用户操作进行识别,比如,用户点击"文件"菜单,就可以通过WM_COMMAND消息判断出用户是在点击"文件"菜单。在判断出用户的操作,在异地的CAD会根据WH_MOUSE捕捉到的鼠标信息移动鼠标到"文件"菜单,然后向主窗口发送WM_COMMAND消息,系统就会产生鼠标单击"文件"菜单的事件。
2.1.2信息处理
信息处理主要是格式化和解析捕捉到的操作信息,本系统采用XML语言对操作信息进行格式化。
例如:用户ABC在机器111.111.111.5上点击了某个菜单,产生消息WM_COMMAND,对其进行格式化后为:
为了保证信息的安全,可以对传输信息进行加密。为保证系统的实时性,不采用经服务器转发的办法,格式化后的信息向所有的被控客户端发送。
2.2模型的重生成
异地机在收到发送过来的信息并解析后,并不能直接传送给本地CAD系统。因为Windows消息都是由各窗口接受的,而各窗口是由句柄(Handle)来标识的,不同机器上的CAD系统,Windows分配给其各窗口的句柄是不同的,因此要对窗口的标题进行识别,从而保证窗口的惟一性。在Windows系统中,应用程序的窗口是按Z Order顺序在Desktop窗口(桌面窗口)上放置(Z轴是垂直显示器向外的假想轴),因此可以对当前所有的窗口标题进行查找,找到相符的窗口后,就可以得到它的句柄,然后将解析的消息与窗口的句柄组合,发往CAD系统,从而驱动CAD系统做出与本地CAD系统一致的动作,实现模型的重生成以及操作的再现。
2.3模型的维护
为了提高系统的实时性,减少传输模型数据的次数,将模型的维护放在主控客户端实现。在被控客户端出现模型无法生成或由于各种原因生成模型出现延迟时,我们采用对主控客户端模型进行复制的办法维持一致性。首先,被控客户端向主控客户端发送请求,主控客户端在接收到请求后,向被控客户端发送一份标准的模型,该模型是由SolidWorks标准格式记录的。客户端在收到该模型数据后将其重生成,从而维持模型的一致。
3系统的实现
根据本文介绍的系统框架,在SolidWorks2005上用VC++2005开发了异地协同设计系统,成功实现了SolidWork、的异地协同设计。图2为本地机上生成的模型,图3为异地机在接收本地机的操作信息,并对其进行处理后重生成的模型。从图中可以看出二者的模型保持了高度的一致性。图4为客户端在用户获得发言权后开始协同时的界面。图5是服务器端的界面,服务器端可以自动生成系统日志,以便于发生问题时分析问题产生的原因。目前该系统在lOM带宽的网络上运行正常。
4结束语.
本文所介绍的系统具有实时、快速、简便的特点,很适合于使用SolidWorks的企业进行协同设计,可极大地利用企业的人力资源,解决一些企业资源分散的问题。但该系统的实现需要对Windows消息机制比较熟悉,以保证将有用的操作信息都捕捉到,而且捕捉到的消息向异地系统的转换也是一个复杂的过程。此外在协同设计中共享冲突的消解本系统没有过多涉及,也是该系统今后需要完善的地方。
相关标签搜索:SolidWorks异地协同设计系统的实现 SolidWorks培训课程 SolidWorks设计教程 SolidWorks视频教程 SolidWorks软件下载 SolidWorks在建筑室内设计工业设计的应用 SolidWorks基础知识 SolidWorks代做 Fluent、CFX流体分析 HFSS电磁分析 Ansys培训 Abaqus培训 Autoform培训