当前位置:首页>>基于Linux-RTAI的数控软件结构设计与实现

基于Linux-RTAI的数控软件结构设计与实现

发布时间:2017-09-03作者:智汇胡妮

  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计算出下一周期的实际坐标增量,输出到位控数据缓冲区供伺服驱动单元(位控输出模块)使用。

  位控输出模块的优先级别最高,运行过程中不允许其它模块中断。同时,它的运行周期必须匹配于伺服驱单元的运行周期。因此,将其设计成周期性RTAI进程,运行周期为20 ms,l级优先权(级别越小,优先级越高)。预处理模块、插补模块和位置控制模块的运行较之于位控输出模块都要快得多,因此将他们的周期设置为5 ms,优先级别依次为4级、3级和2级。

  采用基于优先级抢占的进程调度策略,实现对数控模块的实时调度。当位控数据缓冲区的数据量小于缓冲区大小一半时,位控输出模块挂起自身,唤醒次高级的模块(位控模块);以此类推,当插补数据缓冲区的数据量小于缓冲区大小一半时,位控模块就挂起自身,唤醒次高优先级模块(插补模块)。

  此外,在数控加工过程中,功能控制任务control()利用FIFO从用户层向内核层传递控制命令,如点动、暂停和自动等,并实现对I/O口的控制。状态检测任务monitor()将传输到I/O口的各个阀门,压力表状态保存在status-fifo中,同时负责对运行时水压和电流等值状态进行判断,实时监控机床运行状态,对机床故障进行实时响应。这些任务采用实时中断策略,由中断信号触发相应的模块。

  实时模块在数控软件启动时就加载到Linux内核中,实时进程和函数就可以访问系统的底层资源。实时任务模块由init-module()和cleanup -module()两个RTAI函数声明实现,并且可以通过这两个函数进行资源分配和回收。

  2.2 模块间的通信

  数控软件各模块之间需要大量的数据通信。归纳起来,主要有三类:

  (1)非实时进程间通信

  这类通信主要存在于人机交互界面中,用于编辑加工代码、设置机床和系统的初始值等,采用管道、消息队列、共享内存、信号等实现。

  (2)实时与非实时进程间通信

  这类通信主要完成插补主程序与系统界面的人机交互,动态模拟刀具轨迹,显示加工状态,采用实时管道FIFO和共享内存。

  (3)实时进程间通信

  这类进程主要完成数控主程序模块之间的通信,采用FIFO和共享内存的方式进行通信。

  数控模块通过调用RTAI接口函数ttf-create ( )来创建实时管道FIFO,实现数据传输,实时管道创建后在目录/dev下生成字符设备文件/devlrkf" oLinux进程通过对这些文件的操作实现对实时管道的操作,调用。pen ( ) , read ( )和write ( )实现管道打开、读和写操作,调用select()和poll()实现异步I/OoFIFO的通信是单向的,因此模块间的信息交互必须至少创建两条管道才能实现。

3 应用实例

  目前,经济型数控系统仅具有直线和圆弧插补功能。针对这一现状,课题组研究了二次曲线(直线、圆、椭圆、抛物线和双曲线)的插补方法,编写了直接插补直线、圆、椭圆、抛物线和双曲线的模块,将软件应用于三坐标数控铣床的控制,进行了轮廓曲线的加工试验,如图2所示。

  对于一条二次曲线(直线、圆、椭圆、抛物线或双曲线),数控软件仅需调用相应的加工模块一次,即可完成加工。而渐开线、摆线等复杂曲线的加工,可以应用直线、圆、椭圆、抛物线或双曲线进行拟合,编写数控加工程序代码进行加工。数控软件首先读取加工程序代码,并根据插补预处理模块的输出信息,自动调用相应的插补模块完成加工。

  实验结果表明,数控软件采用优先级抢占的调度策略实现了对数控加工任务的实时调度,能够流畅地运行在Linux-RTAI强实时性平台上,完成对三坐标铣床的控制。

4 结束语

  本文在实现Linux硬实时性的基础上,完成数控软件模块化设计,并通过实验验证其正确性。在未来研究中,应重点开发其它曲线的插补模块,同时应进一步优化任务周期、优先级以及缓冲区的选择,减少系统对由于参数选择不当引起的异常任务的响应。

公司简介

宜科(天津)电子有限公司是中国工业自动化的领军企业,于2003年在天津投资成立,销售和服务网络覆盖全国。作为中国本土工业自动化产品的提供商和智能制造解决方案的供应商,宜科在汽车、汽车零部件、工程机械、机器人、食品制药、印刷包装、纺织机械、物流设备、电子制造等诸多领域占据领先地位。宜科为智慧工厂的整体规划实施提供自系统层、控制层、网络层到执行层自上而下的全系列服务,产品及解决方案涵盖但不局限于云平台、MES制造执行系统、工业现场总线、工业以太网、工业无线通讯、机器人及智能设备组成的自动化生产线、自动化电气控制系统集成、智能物流仓储系统等,以实现真正智能化的生产制造,从而带来生产力和生产效率的大幅提升,以及对生产灵活性和生产复杂性的管理能力的大幅提升。多年来,宜科以创新的技术、卓越的解决方案和产品坚持不懈地为中国制造业的发展提供全面支持,并以出众的品质和令人信赖的可靠性、领先的技术成就、不懈的创新追求,在业界独树一帜。帮助中国制造业转型升级,加速智能制造进程,成为中国工业4.0智慧工厂解决方案当之无愧的践行者。

更多详情>>

联系我们

  • 联系人:章清涛
  • 热线:18611695135
  • 电话:
  • 传真:
  • 邮箱:18210150532@139.com

Copyright © 2015 ilinki.net Inc. All rights reserved. 智汇工业版权所有

电话:010-62314658 邮箱:service@ilinki.net

主办单位:智汇万联(北京)信息技术有限公司

京ICP备15030148号-1