最新新闻
我要投稿
联系电话:027-87592219/20/21转188
投稿邮箱:tb@e-works.net.cn
您所在的位置:首页 > 智库 > 智能装备

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

发布时间:2014-06-21 作者:高立营 单东日 陈向东  来源:万方数据
关键字:数控软件 数控系统 
本文移植RTAI改善了Linux系统的硬实时性能,给出了数控软件模块化体系结构,各个功能模块分配了不同的优先级,采用优先级抢占的调度策略实现了模块的实时调度。在数控铣床上进行相关实验,给出的加工实例验证了方案的正确性。

  位控输出模块的优先级别最高,运行过程中不允许其它模块中断。同时,它的运行周期必须匹配于伺服驱单元的运行周期。因此,将其设计成周期性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硬实时性的基础上,完成数控软件模块化设计,并通过实验验证其正确性。在未来研究中,应重点开发其它曲线的插补模块,同时应进一步优化任务周期、优先级以及缓冲区的选择,减少系统对由于参数选择不当引起的异常任务的响应。 

2
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。