您的位置:网站首页 > Solidworks

SolidWorks异地协同设计系统的实现

时间:2010-11-13 09:20:09 来源:

  近年来,企业中普遍采用三维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带宽的网络上运行正常。

  

  本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。

  4结束语.

  本文所介绍的系统具有实时、快速、简便的特点,很适合于使用SolidWorks的企业进行协同设计,可极大地利用企业的人力资源,解决一些企业资源分散的问题。但该系统的实现需要对Windows消息机制比较熟悉,以保证将有用的操作信息都捕捉到,而且捕捉到的消息向异地系统的转换也是一个复杂的过程。此外在协同设计中共享冲突的消解本系统没有过多涉及,也是该系统今后需要完善的地方。