3.1 基于Windows CE的数控系统软件的总体结构
在已有的同类数控系统中,大多数系统是基于DOS环境的,其综合性能相对于Windows环境就弱一些,尤其是人机交互界面、多任务以及开放性方面比较差。主从计算机间的实时信息交换通讯是实现上下位机间协调工作的关键。本数控系统在实时性要求方面与机器人控制相似,如果使用Windows中专用的定时器控件Timer,虽然使用很方便,可以实现一定的定时功能,但最小计时精度仅为55ms,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响应,无法满足实时控制环境下的应用。所以考虑使用精度更高的多媒体定时器,它可以实现精度为1ms的高精度定时,可以满足本系统的实时性要求。多媒体定时器不依赖于消息机制,而是由函数TimerSetEvent ( )产生一个独立的线程,在一定的中断次数到达后,直接调用预先设置好的回调函数进行处理,而不必等到应用程序的消息队列为空。因而设置该回调函数来完成周期扫描I/O卡的输入端口,以及向系统定时发送消息,使其及时更新界面和界面中的数据。为提高系统的可靠性,多媒体定时器在整个控制程序初始化时开启,并在系统退出时删除定时器以释放系统资源。每一个Windows应用程序都是一个进程,并由线程来负责执行包含在进程地址空间中的代码。实际上,每个进程可以拥有多个线程,它们在进程的地址空间中“同时地”执行代码。本数控系统软件中,采用了前后台型的多线程结构形式。前台程序由系统主线程和定时器控制,主要完成界面管理、功能控制、系统管理等,并负责响应按键与界面输入的数据,即实现管理层的功能。后台程序放在辅助线程中,负责进行数控代码的编译处理,向PMAC发送命令以及实时数据采集,实现了控制层的功能。
3.2 G代码转换模块的实现
为了使PMAC控制卡兼容G代码指令,专门开发了G代码编译转换模块,大大提高该控制系统的开放性和兼容性,为熟悉G代码编程的用户提供了方便。本编译模块使用了多线程的方法。多线程的应用使程序的并行处理得以实现,多线程使得不同的代码可以“同时”执行。本模块采用了工作者线程,其适用于处理后台任务,而不影响用户对应用程序的使用。工作者线程仅仅由一个函数体实现,其实现简单,便于编程者控制,与事件同步方法相配合能对中止消息做出较快反应。事件同步是通过将事件自身设置为有信号或无信号来通知其它线程的某一操作已完成或尚未完成,其设置可由编程人员手工完成,适合于工控程序应用。
与之相对应,本模块具有一个主线程和两个子线程,其中一个子线程为通信线程,另一个为计算线程。主线程是Windows下每个应用程序都具备的,负责线程间的同步、向计算线程和通信线程传递参数、管理人机界面、接收用户输入等功能。通信线程通过通信端口(本程序涉及的是PCI接口)负责与下端的设备进行通信并交换数据。计算线程负责核心算法的实现,根据系统的不同完成不同的数据处理任务。程序结构如图5。
图5多线程结构示意图
4.结论
Windows CE以其良好的实时性和对多线程的支持,为实现总线式、模块化、开放式的数控系统提供了便利。随着Windows CE. NET系统的不断完善, PC机速度的不断升级,其可以应用的软硬件资源不断发展,开放式数控系统必将受到国内外的普遍关注。