基于组件技术的计算机数控系统开发

来源:互联网

点击:1321

A+ A-

所属频道:新闻中心

关键词:组件技术 数控系统

      随着现代制造业的进步和计算机集成系统的不断成熟,数控系统融合计算机技术正朝着开放化、网络化、智能化的方向发展。具有层次化结构的开放式数控系统以其可扩展、可移植、可互换和可配置等特点,成为当今数控技术发展的趋势。

      组件技术具有可重用性和良好的语言无关性,可以实现跨进程、跨平台甚至网络范围内的互操作,较好地解决软件复用技术所面临的问题。由组件来组建开放数控软件,可在较高层次上满足开放式数控系统的要求。因此,本文提出了一个基于组件技术的开放式数控系统体系结构,并对系统的设计、实现、封装、部署等过程进行了详细介绍。

    1 系统组件的划分

      本文建立的数控系统从逻辑上划分为人机交互服务器(HMI Server)组件、认证服务(Authentica-tion Service)组件、运动控制核心(Motion ControlKernel,以下简称MCK)组件、PLC组件、运动学(Kinematics)组件和人机交互客户端(HMI Client)5个基本组成部分。

      a) HMI Client是数控系统的客户端,为用户提供一个与数控系统进行交互的图形或命令行形式的界面,并且可以同时存在多个实例,它不与运动控制组件进行直接交互,而是以HMI Server作为中介。

      b) HMI Server组件存在的目的是为HMIClient访问运动控制组件提供一个简单的外观层,降低HMI Client与运动控制组件之间的耦合度,因此,其主要功能是转发请求,并对任何加工数据进行处理,它是Facade设计模式的一个具体应用,满足了软件架构低耦合的要求。

      c) MCK组件是整个系统的功能核心,负责完成系统大部分的任务。根据高内聚原则,将该组件进一步细分成8个子组件,每个子组件独立地实现一个特定的功能,这些子组件包括误差补偿(ErrorCompensation)组件、插补(Interpolation)组件、超前读(Look Ahead)组件、NC代码解释器(NC CodeInterpreter)组件、路径规划(Path Planning)组件、位置控制(Position Control)组件、刀具补偿(ToolCompensation)组件和速度规划(Velocity Control)组件。

      d) Kinematics组件负责正向计算和逆向运动计算、采用几何方法纠错和刀具偏移量、对工件的动态检测、在联合坐标系和笛卡儿坐标系中进行运动学极限检测等。

      e) PLC负责实现机床监控、换刀机构控制、夹具控制、润滑和冷却系统控制、传感器检测等数控系统的辅助控制功能。

    2 系统的部署架构

      基于CCM的分布式系统,可以通过网络将若干处理器资源组织起来,并通过将系统任务合理地分布于各处理节点上来实现系统功能。相对于运行于单机的系统而言,运行在分布式环境下的系统的运行能力可以随网络结构的扩展而进一步增强,并且可以避免单个节点过载的情况。

      对于建立在分布式环境下的系统,系统组件之间的消息传递路径大体分为2种:位于同一节点内的组件之间的消息传递路径通常为PC总线;位于不同节点的组件之间的消息传递路径通常为网络总线。前者的响应延迟较低,因此,可以将有交互并且对交互响应时间要求较为严格的组件放置于同一节点,对交互响应时间并无明确要求的组件则可分布于不同的节点。

      由于实现运动控制是系统的主要任务,并且运动控制过程对实时性有一定的要求,因此出于对效率的考虑,将与运动控制相关的组件即MCK、PLC和Kinematics安排在同一节点,称为运动控制节点。运动控制节点上安装了实时操作系统,这就使得数控系统可以根据各项任务对实时性要求的不同,为每个任务分配不同的优先级,从而保证了对关键任务的及时处理。系统的部署架构如图1。

    图1 系统的部署架构

    3 组件的IDL/CIDL定义

      以HMI Server为例,对定义过程进行描述。

      HMI Server的IDL定义如下:  component HMIServer supports  SystemService  {  provides RegisterService RegSrv;  provides NCCodeManager NCCodeMgr;  uses AuthenticationService AuthSrv;  publishes StartMotionControl StartMC;  publishes StopMotionControl StopMC;  publishes PauseMotionControl  PauseMC;  publishes NCCodeReady NCCodeRD;  publishes SystemInitiation SysInit;  };  home HMIServerHome manages  HMIServer{}。

      其中,系统服务面向系统外部的HMI Client注册服务面向所有运动控制组件;NC代码管理器则面向MCK中的NC代码解释器组件;Home则是用于创建组件实例的工厂(Factory)。

      允许系统使用者开发适合自身需要的HMIClient也是本系统的一个目标,所以应该让系统使用者自主选择HMI Client的开发技术,而不应该使HMI Client仅基于CCM,因此HMI Client只要遵循系统接口规范,可以使用任何技术实现。由于Provides/uses方式仅能用于组件之间连接的建立,因此HMI Server以支持(supports)的方式对外提供系统服务,而注册服务和NC代码管理器则以提供(provides)的方式与相应的使用者建立连接。

      由于系统服务中的登录和注销功能只是对HMI Client提供了一个访问认证服务的接口,因此HMI Server需要与认证服务组件建立连接,以使用其提供的认证功能。对于HMI Server组件,由于其状态不需要在生存期以外进行保存,所以没有必要将组件定义为Entity或Process类型,并且一个组件的生存期需要超过一次客户请求,所以Service类型也不合适。因此,要使组件在整个系统运行期间保持激活状态,Session类型是最合适的选择。

      HMI Server的CIDL定义如下:  composition session HMIServer_impl  {  home executor HMIServerHome_Exec  {   implements   CNC::HMISERVER_MODULE::H  MIServerHome;  manages HMIServer_Exec;  };  }。

    4 IDL/CIDL到C++的映射

      完成IDL和CIDL的定义后,首先,使用TAO/CIAO开发包中的Perl脚本来生成工程描述文件;然后,建立空白的实现文件,这样可以使整个工程通过编译,而具体的实现代码则可在随后逐步完善。编译完成后,将会在各组件的工程目录中生成映射到C++的客户端stub、服务器端skeleton、服务器端servant等文件。在生成了组件的C++框架文件后,就可以以此为基础进行组件的具体实现过程。

    5 组件的实现

      以HMI Server为例,对组件的实现进行说明。

      a) 定义每个组件executor的实现类,它们都位于单独的名称空间下,例如,HMIServer_exec_i是HMI Server组件executor的实现类,它定义了executor接口,规定了executor所必需实现的方法,包括HMI Server组件使用supports关键字明确支持的接口中的方法。

      由于HMIServer_Exec是一个Session类型的组件,因此HMIServer_exec_i需要对SessionComponent中的一些容器回调函数进行重置(override)。例如,set_session_context,其具体实现如下:

      void  HMIServer_exec_i::set_session_context(Com  ponents::SessionContext_ptr ctx)  {  ,,  this->m_context=HMIServer_Exec_Con  text::_narrow(ctx);  }。

      b) 组件所提供的facet也需要单独实现,通常在facet的实现中保存了对相应executor的引用,以实现其向exector的导航,在相应的executor中则必须为receptacle提供获取关联的facet的/get_<facet_name>0方法。

      HMI Client这类非组件的客户端是通过调用/provide_<facet_name>0来得到组件相应的fac-et,而/get_<facet_name>0实际上是/provide_<facet_name>0在组件executor端的映射。

      c) 使用supports关键字声明的接口是通过继承的方式在组件executor中实现的,例如,HMIServer组件通过继承的方式支持SystemService接口。

      HMI Server组件在IDL中声明了对认证服务组件的Authentication Service接口的使用。在具体实现中,HMI Server组件executor通过其上下文(Context)得到指向Authentication Service接口实现类的指针,从而调用其中相应的方法,HMI Server组件的上下文在组件部署期间被创建,并由组件的容器在组件激活前通过容器的回调函数set_ses-sion_context进行设置。

      对事件的发布也是通过组件上下文,例如,HMI Server作为系统初始化事件的事件源,其具体发布方法为:

      ::CNC::SystemInitiation_var  evt1=new ::OBV_CNC::SystemInitiation  ;  m_context->push_SysInit(evt1)。

      该事件的响应方法,则由各接收者独立实现。

      d) 定义组件home executor的实现类以及组件executor在DLL中的入口点(Entry Point),入口点的主要作用是创建组件home实例。HMIServer组件入口点的具体实现如下:

      extern  "C" ::Components::HomeExecutorBase_ptr  createHMIServerHome_Impl()  {  return new  CIDL_HMIServer_Impl::HMIServerHo  me_exec_i();  }。

    6 组件的封装组装及部署

      在得到了各组件的DLL实现后,需要对其进行封装与组装,以便使系统能够在分布式环境下进行部署,系统使用者可以根据需要,制定不同的部署方案。

      组装的具体工作就是为系统中相关的facet和receptacle,event source和event sink建立连接描述文件,这是一个递归的过程,最终形成完整的系统。本系统由HMI Server,MCK,PLC,运动学、认证服务组件组装而成,其中MCK由8个子组件组装而成。

      封装过程的目标是制作一个包括组件实现和组件描述的可部署的组件包,组件包是用于部署的最小单元。对于单独的组件,需要将该组件的XML描述文件和组件的DLL文件封装为zip格式的组件包;对于组装而来的组件,由于它没有独立的组件实现,因此,只需要为其组件描述和组件包建立关系。

      在部署阶段,首先,需要建立目标环境(TargetEnvironment)的模型,该模型描述了作为组件载体的物理资源及其拓扑结构;然后,参照预先设计的部署架构建立相应的部署计划。

      整个过程通过使用CosMIC工具完成,这样能有效地避免手工编辑XML文件时容易出现的错误,从而提高开发效率。

    7 组件的运行

      在CORBA体系结构中,分布环境中的节点监控进程被称作节点管理器(Node Manager),分布在某一节点上的一个组件的运行,被称作节点应用程序(Node Application)。解析部署计划,判断计划是否可行,并且将计划转换为合适的数据结构,以作为执行管理器输入的进程被称作部署计划执行器(Plan Launcher);根据部署计划的解析结果,负责将系统各组件分布到相应的节点上的进程被称作执行管理器(Execution Manager)。

      部署计划执行器在完成解析后,会将结果发送到执行管理器,然后执行管理器按照计划将系统各组件分布到域中各节点。计划成功执行后,各系统组件被激活待命,可以通过生成的IOR文件直接获取其引用,也可以使用CORBA名称服务进行定位。另外,可以编写脚本以方便整个启动过程的进行,系统启动后,用户就可以通过HMI Client对系统进行操作和监控。HMI Client的图形界面如图2。

    图2 HMI Client的图形界面

    8 结语

      提出了一个基于CCM技术的开放式数控系统,并介绍了数控组件的设计、实现、封装、组装、部署及运行的全过程。该系统可以更好地满足系统模块化、可重构、可扩展、可移植等开放性要求,对于推动组件技术在开放式数控系统领域中的应用具有重要意义。

    (审核编辑: 智汇张瑜)

    声明:除特别说明之外,新闻内容及图片均来自网络及各大主流媒体。版权归原作者所有。如认为内容侵权,请联系我们删除。