最新新闻
我要投稿
联系电话:027-87592219/20/21转188
投稿邮箱:tb@e-works.net.cn
您所在的位置:首页 > 智库 > 智能生产

基于脚本语言的数控系统可定制界面的实现

发布时间:2012-09-29 作者:张建磊 吴文江  来源:万方数据
本文设计的数控系统可定制界面是以QT为平台,采用脚本程序定制界面的功能来实现。包括人机界面的设计与构建,QT界面加载器和脚本引擎的扩展,以及底层接口主程序的实现等;同时在QT图形组件类的基础上构建了数控系统专用的图形组件类库,是实现界面可定制性的基础。该方法充分利用了QT在GUI(GraphicalUser Interface,图形用户界面)设计方面的优势以及新增的支持脚本功能模块,使定制人机界面的过程变得简便快捷。

    2.2.2 脚本引擎的扩展

    在脚本程序的编写过程中,为了实现界面系统的复杂功能,我们需要脚本程序能够访问C++函数和类,有两种方式可以为脚本提供C++类:一是在QOb-ject类中定义一个功能,使用QScriptEngine::newQObject()为脚本提供一个或多个类的实例[3]。在类中定义的属性和槽可以在脚本中使用,这种方法比较简单,但灵活性比较差。另一种方法则是直接编写C++原型类以及构造函数,在脚本中使用new操作符实例化这些类。这种方法比较灵活,用户可以根据自己的需要编写原型和构造函数实现各种复杂的功能,但是其过程较复杂[2]。由此扩展的脚本引擎可以实现将界面加载器加载的界面和相应的脚本程序结合生成具有特定功能的定制界面。脚本引擎生成的定制界面效果如图4所示。

 刀具轨迹界面

图4 刀具轨迹界面

    2.3 底层通信接口主程序

    该层实现定制的界面程序与底层任务控制器的通信,包括命令信息与状态信息数据结构的设计,命令通道和状态通道的建立,命令信息传递与状态信息获取等。由于人机界面模块与任务控制器模块都不涉及实际的加工任务,只是由人机界面模块将用户输入命令传递给任务控制器,以及从任务控制器中得到系统的状态信息,所以它们之间不需要很高的通信效率。我们采用RCS库提供的NML(NeutralMessage Language,中性消息语言)通信机制实现两者之间的通信[4]。模块间的通信关系如图5所示。

 模块间的通信关系

图5 模块间的通信关系

    首先,命令消息和状态消息数据结构的设计是通过对RCS库提供的消息基类:RCS_CMD_MSG(命令消息基类)和RCS_STAT_MSG(状态信息基类)的继承来实现的,我们只需要给每个消息一个唯一的编号NML-TYPE,使程序可以识别是哪个消息类,然后在消息类中加入我们自己的变量即可[5]。

    为了建立命令通道和状态通道,使用RCS库提供的通道基类:RCS_CMD_CHANNEL(命令通道基类)和RCS_STAT_CHANNEL(状态通道基类),它们封装了相关代码,隐藏了繁琐的进程间通信与同步的实现细节,给程序员提供了方便的接口。我们可以通过声明这两个类的实例实现自己的命令和状态信息通道。通过建立的命令通道和状态通道传递消息,是使用RCS提供的读写函数read()和write()实现的。使用NML实现消息传递时,允许一个进程访问多个通道,一个通道对应多个进程,这就需要使用一个配置文件来描述各个进程与通道间的关系,以及进程对通道所进行的操作类型(读/写)、访问方式(远程/本地)、是否负责建立通道;如果有远程访问的话,还要在其中指定服务器进程以及远程访问的通信协议等。所实现的数控系统人机界面的运行结果如图6所示。

结束语

    本文提出了在QT开发平台上,使用脚本程序实现可定制界面的设计与实现方法,为了实现定制专用的数控系统人机界面,封装了各种自定义的图形组件类,对于图形组件类的封装粒度问题提出了自己的方法,并且对QT的界面加载器进行了相应的扩展,以便可以加载自定义的图形组件类;同时对QT的脚本引擎也进行了扩展,使用户可以在脚本程序中操作QT对象,调用C++函数等。而人机界面模块与任务控制器模块间的通信则使用RCS库的NML实现。

 定制界面运行结果

图6 定制界面运行结果

3