Linux是一个遵循可移植操作系统接口(POSIX, Portable Operating System Interface)标准的多用户、多任务且具有先进的网络特性开源操作系统。基于模块化设计思想在开放的软硬件平台上开发适合一定需求的专用数控系统,已成为数控领域的一个研究热点。虽然2.6以后的内核版本是可抢占的,但实时性仍比较弱,而数控系统本身要求有明显的实时控制、实时交互和实时监测等特性。本文首先将RTAI移植到Linux OS,使系统达到了强实时的要求,而后在此平台上完成了数控软件的体系结构设计。
1 实时Linux的实现
提高Linux实时性,目前有两种方法:1)直接修改Lint内核,如:Montavista; 2 )在Linux内核之上增加实时模块,采用双内核结构,如:RTAI。
前一种方案对开发人员的技术要求较高,需要修改大量的代码,开发效率低。RTAI是一个遵循GNU的开源项目。RTAI采用双内核方法,不直接使用Lint的任何功能,而是把实时任务写成一个驱动程序的形式,然后直接用PC时序芯片所产生的中断调用这个驱动程序。RTAI在Lint上定义了一个实时硬件抽象层(RTHAL, Real Tirne Hardware Abstraction Layer),并针对RTAI开发了LXPT,让RTAI可以调用Lint本身的系统调用功能。RTHAL的作’用是使RTAI能够在实时任务需要运行的任何时刻中断。引入RTAI后,Linux仅作为优先级最低的任务运行,并且只有在没有实时任务时它才能执行。这样做的好处在于将直接修改Linux核心的代码减到最小,这使得将RTAI移植到Linux内核的工作量减至最低。
本文以PIV 2.0GHz, S12MB RAM的通用PC机作为硬件开发平台,以Red Hat 9为操作系统平台,将3.5版本的RTAI移植到版本为2.6.15.2的Linux内核中测试操作系统实时性能,测试结果显示,无论是内核层还是用户层都能够满足数控系统实时性的要求。需要特别指出的是,许多不可测因素会导致调度器的运行时间变的不确定,继而使接下来的任务的开始时间发生相应的变化,即产生了调度抖动。调度抖动对于基于通用处理器的实时系统来说是不可避免的。经试验测定,上述开发平台的调度抖动时间在50 ms左右,能够满足数控系统的需要。
2 系统的软件结构设计
以集成RTAI实时内核的Linux操作系统为开发平台,基于模块化思想将数控软件按照实时性的要求分为用户层模块和内核层实时模块两部分。所有与实时相关的任务都运行在内核层下,且用一个独立的内核进程来执行;所有非实时进程运行于用户层下,它们不能打断实时进程的运行。同时两大模块又划分为不同的子模块。采用这种模块化结构,实质是将功能分配给组件,这有利于软件测试、系统维护以及增加新功能。该软件体系结构如图1所示。
图1数控软件体系结构
2.1 系统实时模块的实现
数控软件的主程序由插补预处理任务、插补任务、位置控制任务、I/O控制任务和状态监测任务(图1中未全部给出)等组成。本文将以上任务分别作为一个内核进程,每个进程编译成后缀为.0的模块。数控加工过程中,G代码是顺序执行的,每一个模块读取前一模块的数据,而将处理得到的数据输出给后一模块使用。首先,插补预处理任Pre-inter-polate ( )从I/O缓冲区中读人G代码,将代码解释为插补模块可识别的数据结构,送入到预处理数据缓冲区prepare-fifo。而后,插补任务interpolate ( )从预处理数据缓冲区prepare-fifo中取出数据,然后进行插补运算,将结果送interpolate-fifo()。最后,位置控制任务motor( )周期性地从插补缓冲区interpolated-fifo计算出下一周期的实际坐标增量,输出到位控数据缓冲区供伺服驱动单元(位控输出模块)使用。