当今,PC数控系统结构主要利用Pc机作为软硬件平台,以通用操作系统实现弱实时任务,在总线上连接专用运动控制卡实现数控强实时任务,这种PC+运动控制卡为体系结构组件的数控系统其开放性在于运动控制器有适合PC机开发的软件包,但运动控制器的生产并没有国际统一的标准,开放程度仍然有局限性。随着PC机性能的提高和数控技术的不断发展,PC+I/O软件化体系结构将是未来数控系统发展方向,利用PC机本身的开放性,将数控装置的处理任务全部纳入Pc机中,通过软件算法实现数控系统多任务实时控制。
文献[1]分析过Windows系统内核结构及其实时性方面的局限性。本文利用RTX6.0(试用版)实时扩展来解决Windows XP系统在开发数控软件中实时性不足这一难题,将强实时性的插补计算、位置控制等工作在RTSS进程中;将实时性不强的代码显示、图形仿真、系统状态等工作在Win32进程中,开发出一种基于Windows XP+RTX为软件平台的原型PC数控软件,全部通过软件算法实现了数控系统中主要功能,可以大大地提高系统的开放性和可扩展性。
1 软件体系结构设计
为了充分发挥WindowsXP弱实时性能和界面方面的强大优势,以及利用实时扩展作为底层实时控制开发,设计的软件体系结构如图1所示。
采用VC++6.0为开发工具,首先建立一个MFCAppWizard工程来作为Win32进程环境,然后建立一个RTX AppWizard工程来作为RTSS进程环境,按照文献[2]进行相关设置,在Win32工程下利用Cre—ateProcess()进行调用RTSS进程编译生成的.rtss文件,此时完成两个进程的建立,进程间采用共享内存机制进行通信。
整个软件采用模块化设计,各模块间通过接口建立通信,信息流程如图2所示。
2 定时器线程任务调度方法
在RTSS进程中,创建的定时器本质上是一个隐含的线程,在RTSS主线程,创建插补定时器线程,插补周期为2 m8,优先级设定为RT—PRIORITY—MAX一2;创建位置控制定时器,位置周期为100炉,优先级设定为RT—PRIORITY—MAX;创建任务协调定时器,主要是数据交换刷新工作,周期为20 ms,优先级设定为RT_PRIORITY—MAX一10。创建好定时器线程后,RTSS进程会严格按照抢占式优先级调用策略进行运行,但是在数控软件中,插补和位置控制都是强实时任务,其中插补计算结果是供位控使用,算法复杂,运行时间长;位置控制运算简单,其实时性要求最高,当位控定时器产生中断时,CPU将立即放弃现有的任务,转入执行位控任务,这就需要上一个插补周期数据必须在本位控周期到来前计算完成,为了解决这一问题,本文在RTSS进程下设计了插补线程超前位控线程启动,采用共享内存建立插补缓冲区旧。进行两者数据传递。
图3所示为其调用过程,定义指向缓冲区的指针pInterpbuf,每次插补计算结果通过pInterpbuf一>interpbuf[pInterpbuf->interpline]存人数据缓冲区中。当执行几个周期后才启动位控例程,此时位控线程启动,将通过pInterpbuf->interpbuf[pInterpbuf->posline]进入缓冲区读取数据。为了减少缓冲区空间大小,位控读走首行数据后将通过循环将interpbuf数组中的数据前移一个地址。本文算法中设定插补计算10个周期后启动位控周期,可以保证缓冲区始终存有插补数据。
3 控制算法及信息流程
开发的原型数控软件包含:人机界面模块、译码模块、插补模块、位置控制模块、数据交换模块。
人机界面模块实现了坐标及系统状态显示、图形仿真、代码显示、软操作面板功能。译码模块完成了负责根据用户的系统配置,提供语法上正确的运动程序中间代码。插补模块是数控软件的核心,采用数据采样法原理进行粗插补计算,并利用直线加减速对瞬时速度进行平滑处理,在转接点处进行了转接点速度的约束计算,提高了系统的加工效率,其流程如图4所示。