基于Xenomai的嵌入式数控系统实时性研究*

2011-10-18 14:32曹玉华游有鹏
制造技术与机床 2011年6期
关键词:任务调度实时性数控系统

曹玉华 游有鹏

(南京航空航天大学机电学院,江苏南京210016)

新一代数控系统的模块化、集成化、小型化要求,使得嵌入式数控系统成为一个重要的发展和研究方向。所谓的嵌入式系统是以应用为中心,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能严格要求的计算机系统,而嵌入式数控系统则兼备了嵌入式技术和数控技术的优势。一种典型的嵌入式数控系统是以“嵌入式处理器+运动控制器”的结构形式。嵌入式处理器完成对整个系统总体控制,是数控系统软件运行的平台;运动控制器完成对机床的直接控制,并接收机床的反馈信息。

随着数控系统功能的日益强大以及高性能嵌入式处理器的不断推出,对系统所需的任务管理平台和底层驱动平台的要求逐渐提高,这就使得将操作系统引入到嵌入式系统中成为必然的趋势。利用操作系统不但可以提高嵌入式系统的稳定性,同时也能够充分发挥32位CPU的多任务处理能力。嵌入式数控系统的应用决定了其很高的实时性要求,采用了操作系统的嵌入式数控系统,系统的实时性主要取决于处理器和操作系统本身。目前,嵌入式处理器的运算速度通常都能达到百兆级以上,处理器对于嵌入式系统实时性要求的限制很小,因此整个嵌入式数控系统的实时性很大程度上取决于操作系统。所以,选择和构建一种合适的实时操作系统就成为开发嵌入式数控系统的关键环节。本文选择Linux系统作为嵌入式数控系统的操作系统,并在此基础上研究其实时性。

1 Linux+Xenomai构架的实时性改造

1.1 数控系统实时性要求

所谓实时,就是一个特定任务的执行时间必须是确定的,可预测的,并且在任何情况下都能保证任务的时限(最大执行时间限制)。嵌入式数控系统是一个典型的强实时性系统,系统要求具有可确定性,即可确保条件出现到由此引起的动作开始(或者结束)的时间在一个准确的时段内[1]。在数控系统中,条件是由指令(如急停,G代码的轴进给要求等)或是机床的状态(如超程等)引起的。在机床运行时,需要满足时间约束的情况主要是和系统安全(如对突发事件的反应等)以及切削精度有关。比如数控机床的进给控制系统,在规定时间进给系统必须达到预定的位置,否则无法保证加工零件的精度甚至无法完成加工。数控系统中的插补运算和位置控制等轨迹控制功能都是实时性很强的任务。以FANUC 7M系统为例,插补周期设置为8 ms,位置反馈采样周期为4 ms,当前的高速高精度控制甚至已经把采样周期和插补周期减小到1 ms以下,因此其运行必须满足最后期限的限制。为了达到快速响应和及时运算处理的实时性要求,在嵌入式数控系统软件模块设计时需充分考虑数控系统的实时性要求,合理规划不同实时性要求的软件模块。而软件模块的设计与嵌入式操作系统的性能极度相关,因此一个实时性能优秀的操作系统对整个嵌入式数控系统开发至关重要。

1.2 现有Linux系统的不足

Linux以其开源、可裁剪、易移植、多架构支持、稳定等特性使得它在嵌入式系统中得到了广泛应用。然而Linux在设计之初没有对实时性进行考虑,标准Linux有几个机制严重地影响了实时性[2]。

(1)内核限制。在Linux 2.4和以前的版本,内核是不可抢占的,紧急任务必须等到当前任务执行完成后,或者当前任务因需要等待某些条件满足而主动让出CPU才能被考虑执行,从而造成很严重的抢占延迟。在Linux 2.6中,虽然内核已经可以抢占,但内核中仍有大量的不可抢占区域。

(2)自旋锁(spinlock)。自旋锁是对共享资源的一种同步机制,用来解决共享资源冲突的问题,但是在保持自旋锁期间抢占将失效,这意味抢占延迟非常不确定。

(3)时间粒度。时间粒度是指操作系统所能提供的最小时间间隔。时间粒度越小,系统开销越大。时间粒度越大,进程的响应延迟越大。Linux的时钟中断的周期设为10 ms,这足以满足一般Linux进程对于时间粒度的要求,但对于高性能要求的嵌入式数控系统(如插补周期只有几毫秒甚至更小的情况),则时间粒度过大。

(4)调度算法和调度点。在Linux 2.4及以前的版本,所有的CPU共享一个任务链表,任何时刻只能有一个调度器运行。抢占延迟很大程度上取决于当前系统的任务数,具有非常大的不确定性和不可预测性。此外,即使内核是可抢占的,也不是在任何地方可以发生调度。

综上可见,Linux任务调度和中断处理的延迟较大,几乎不能满足嵌入式数控系统实时任务的要求,因此必须对Linux内核进行实时改造。

1.3 基于Xenomai的实时性改造

针对Linux实时性不足的问题,目前的实时改造方案都基于两种原理[3]:(1)对Linux内核进行实时改造。即直接修改Linux内核的数据结构、调度方式以及中断方式(主要是定时器中断)。这种实时改造后的系统实时性较好,但是改造工作量大,并可能会造成系统的不稳定。典型代表有Kurt-Linux;(2)对Linux内核的外部实时扩展,即所谓双内核的办法。具体是在Linux内核和硬件之间加入一个硬件抽象层(HardwareAbstractLayer,HAL),系统所有的硬件中断由这个抽象层控制。新创建一个内核专门用来调度实时进程,而普通进程通过原来的Linux内核进行调度。采用此方法的最大好处在于对Linux的内核改动很小,而且原Linux上的设备驱动程序和应用程序都能顺利在此实时系统上运行。典型代表有RTLinux、RTAI和Xenomai。

本文采用基于第二种改造原理的Xenomai进行实时化改造。Xenomai是一个自由软件项目,它可以提供工业级的RTOS的性能,完全遵守GNU/Linux自由软件协议,与其他实时性改造项目相比,Xenomai更关注可扩展、轻便和可维护性,代码的移植工作量较小,尤其适合嵌入式系统的改造与移植。Linux+Xenomai基本构架如图1所示[4]。

Xenomai是充分利用Adeos原理来实现的,图中Adeos实现的功能主要包括中断管道机制(I-Pipe)、域调度模块功能和域管理模块功能,它可以将硬件中断定向到指定的域[5]。Linux内核和Xenomai分别作为Adeos中的一个域存在。Linux内核负责非实时任务的调度,而Xenomai采用不同于Linux的精度更高的定时中断来调度实时任务,实现更小的调度延时。另外,Xenomai域的优先级高于Linux域,每当中断到来,Adeos会先将中断交给Xenomai处理,如果Xenomai没有需要处理的中断,才会将中断交给Linux内核处理,保证了Xenomai的中断响应和任务调度的实时性。作为和Linux核同等地位的Xenomai,除了提供最基本的Native API,还提供与传统的工业级实时操作系统(包括 VxWorks、pSOS+、VRTX和 uITRON)相同功能的API(RTOS skins),这样可以让这些操作系统下的应用程序只需极少的改动,就能方便地移植到GNU/Linux环境中,并能保持良好的实时性。

基于Linux+Xenomai构架的嵌入式系统构造了从用户空间到内核空间的实时开发环境,为嵌入式数控系统软件模块的合理规划提供强有力的保证。

2 Linux+Xenomai构架下CNC软件模块规划

嵌入式数控系统的另一个显著特点是多任务性,在上文构建的Linux+Xenomai实时构架的基础上,充分考虑数控系统不同模块的实时性能,合理规划数控系统的软件模块,也具有非常重要的意义。遵循不同模块的实时性要求以及模块规划需符合软件工程学的科学原理且易于扩展和维护的原则[6]。本文对数控系统软件模块的规划如图2所示。

根据任务的实时性强弱,将嵌入式数控系统软件结构层次分为:非实时层和实时层,两个层次的应用软件都涉及到用户空间和内核空间。

非实时层主要包括:任务管理部分、人机交互部分和PLC管理部分。其中任务管理模块是本层的核心,负责调度其他模块,对非实时层和实时层之间的数据传递进行管理。人机交互模块提供与用户交互相关的功能,主要包括人机界面、文件管理、参数管理、状态显示、图形仿真等功能。PLC管理和译码模块则负责将PLC文件译码并提供给实时层。非实时层对实时性基本没有要求,可采用普通的Linux任务调度。实时层主要包括:译码、刀补、速度预处理、插补、手动、软PLC执行模块、位控和状态检测等模块。这部分对实时性要求较高,所以采用Xenomai进行实时的任务调度。实时层的实现涉及用户和内核空间。运动控制部分的刀补、速度预处理、插补等模块运算复杂,对实时要求相对较低,基本不与硬件交互,可以在实时层的用户空间运行;而状态检测、位置控制等运算相对少,对实时要求最高,并且需要与硬件交互,另外软PLC运行模块也需要直接与硬件进行交互,所以将它们规划在实时层的内核空间。

非实时和实时层中的任务模块以进程或线程的形式独立并发的运行,各层、各模块之间通过通信协作来实现数控功能。

3 Linux+Xenomai架构的实时性测试

Linux实时化改造完成后,需要对其做一定的测试来确定系统是否符合实际应用的实时性要求。本文的硬件平台是研华PCM-3350/PC104卡,PC104是一种基于PC/104总线规范的嵌入式板卡,与传统PC系统兼容,它不仅基本具备普通PC系统的一切功能,还具有小尺寸、低功耗、开放的和高可靠性的工业规范等优点。在PC104上移植安装经裁剪过的嵌入式Linux内核,将Xenomai作为目标内核的一部分进行编译安装,使其成为一个与Linux无缝结合的实时子系统。基本测试环境:处理器主频300 MHz,128 M内存,Linux内核版本为2.6.20,Xenomai版本为2.4.8。

3.1 定时器抖动的测量

定时器抖动是系统实时性的一个重要指标,它能够很好地反映系统周期性执行任务时间上的准确性。其测试原理是创建一个周期线程,测量实际的和期望的周期结束时间之间的偏差[7]。定时器抖动的概念如图3所示。周期线程从T1时刻开始运行,并在该周期预期时间结束后,在T2时刻重新开始运行。但实际情况是在T3时刻线程才开始新的周期。T3时刻和T2时刻之间的时间间隔就是所谓的定时器抖动。

基于此原理,使用周期性的线程,在每次线程运行开始,将上一次读取的时间存放到一个变量中,再读取当前的时间。然后将当前时间和存放到变量中的时间求差,得到线程实际的周期,再减去期望的定时周期时间,得到一个定时器的抖动值。编程中使用posix标准提供的clock_gettime函数获取当前时间,其时间读取精度达10个纳秒级。测试程序利用Xenomai的N-ative API进行编写,使用Xenomai实时内核的调度,调度采用Xenomai的定时器,因此完全可以测试Xenomai的实时性。关键代码如下:

线程周期为5 ms,程序每1 s打印一次平均抖动、最大最小抖动和当前抖动。在Linux+Xenomai构架下,将测试程序编译为内核模块,使用insmod工具将模块加入Linux内核后运行。采用同样的原理,测试未经Xenomai实时改造的2.6.20版的Linux内核,在条件相同时,测试结果如表1。可以看出,在Linux+Xenomai构架下定时器抖动的绝大部分集中在10 μs以内,极少出现的抖动峰值不超过100 μs。而在未经实时化改造的平台下,100 μs以上的抖动出现频率较高,而且抖动峰值可以超过1 ms。测试表明,经实时化改造后的系统实时性有了很大提高。

表1 定时器抖动对比 μs

3.2 实时任务调度及内核定时器中断的测量

Xenomai安装成功后,在目录/usr/xenomai/bin/下提供了一系列实时性能测试程序,其中测试程序latency可以用来测试内核层、用户层的实时任务调度延迟以及内核定时器中断延迟。下面在重载情况下对内核层实时任务的调度延迟和定时器中断延迟进行测试。测试采样周期150 μs,在测试目录下输入:

在后台模拟重载情况,此时 CPU使用率接近100%。再输入:

对内核实时任务调度延迟进行测试。测试结束后再输入:

对定时器中断延迟进行测试。测试界面如图4。

测试时间5 min,提取10 000个采样点,作出平均延时时间直方图如图5、6所示。可见,在重载情况下,内核层实时任务调度延迟和定时器中断延迟是非常小的,绝大部分集中在10 μs以下。内核层任务调度平均延迟不超过10 μs,定时器中断平均延迟不超过6 μs。测试表明,基于Xenomai的系统实时性能非常好。

4 结语

随着现代数控技术的发展要求,采用高性能的嵌入式处理器和实时操作系统构建嵌入式工业控制系统平台已经成为一种发展趋势。Linux+Xenomai实时化方案,结合了Linux强大的多任务能力与Xenomai良好的实时性和可移植性特点,简单方便,代码改动量小,是开发嵌入式数控系统比较理想的软件平台。经过实际的实时性测试表明,基于Xenomai的Linux实时化改造,其性能完全可以满足数控加工对系统的高实时性要求。本文对嵌入式数控系统实时性研究也为下一步数控系统的开发奠定了基础。

[1]刘淼,王田苗,魏洪兴,等.基于uCOS-Ⅱ的嵌入式数控系统实时性分析[J].计算机工程,2006,32(22):222-226.

[2]杨燚.Linux实时技术与典型实析.http://www.ibm.com/developerworks/cn/linux/l-lrt/part1,2010,4.

[3]阮鸿芳,钟家骐.Linux与硬实时扩展系统—RTAI的分析与研究[J].嵌入式操作系统应用,2007,23(2):44-45.

[4]Barbalace A,Luchetta A,Manduchi G,et al.Performance comparison of VxWorks,Linux,RTAI and Xenomai in a hard real-time application[J].IEEE Transactions On Nuclear Science,2008,55(1):435-439.

[5]Xenomai API.http://www.xenomai.org/documentation/trunk/html/api/,2010,4.

[6]刘晓梅.基于RTLinux的开放式数控系统的研究[D].大连:大连理工大学,2005.

[7]陈路远.嵌入式Linux实时化及其测试方法的研究[D].哈尔滨:哈尔滨工程大学,2006.

猜你喜欢
任务调度实时性数控系统
基于PEPA的云计算任务调度性能分析
基于改进NSGA-Ⅱ算法的协同制造任务调度研究
基于FANUC 32i A数控系统的外部测量设计
西门子840D sl数控系统在SC125大型车铣镗床技术改造中的应用
基于FANUC Oi mate TD数控系统的手动功能开发
数控系统中GUI软件平台设计和实现
航空电子AFDX与AVB传输实时性抗干扰对比
计算机控制系统实时性的提高策略
基于小生境遗传算法的相控阵雷达任务调度
基于混合粒子群算法的云计算任务调度研究