由于工业控制计算机IPC (Industrial Personal Computer) 强大而完善的功能,基于PC标准总线的运动控制器已经在数控系统控制领域得到了广泛的应用。但是,基于PC标准总线的运动控制器由于在硬件设计上采用板卡设计,这种结构的运动控制器不宜长期工作在环境恶劣的工业现场 (有振动、粉尘、油污等)。因此近年来,开放式运动控制器成为数控机床工业控制领域研究的热点。Linux是一个遵循POSIX (Portable Operating System Interface of Unix) 标准的多用户、多任务且具有先进的网络特性开源操作系统,可以方便地进行自主知识产权的软件开发。但Linux不是一个“硬”实时操作系统,其内核为非抢占式的 (no-preemptive),实时任务不能够得到保证,而运动控制器本身是综合性很强的技术,具有明显的实时控制、实时交互和实时监测特性。
1. 实时Linux的实现
运动控制器作为一个嵌入式系统,除了具备一个高性能的嵌入式微处理器外,还应该拥有一个与处理器配合的嵌入式操作系统。嵌入式操作系统除了具备一般操作系统的基本功能 (如任务调度、同步机制、中断处理和文件功能) 外,还应该具有以下特点: 可移植性、可裁减性、实时性、强稳定性和良好的图形支持。Linux是全面多任务的32位开放式操作系统,可以使运动控制器具有可扩充、可移植、可靠性高和兼容性好等优点,非常适合作为开放式运动控制器的开发平台。到目前为止,全球在Linux平台下开发的具有硬实时功能的系统主要有两个: RTLinux和RTAI。RTLinux最早是美国新墨西哥理工大学的一个研究项目,它是由Victor Yodaiken提出设计思想,由MichaelBambanov实现的硬实时操作系统。RTAI (Real Time Application Inter-face) 是由意大利米兰理工大学航天工程系发起开发的一个遵循GNU的开源项目,RTAI可支持I386、PowerPC、ARM、MIPS等处理器,是目前支持处理器最多的Linux实时解决方案之一。RTAI的实现机制与RTLinux非常相似,唯一不同的是RTAI在Linux上定义了一个实时硬件抽象层RTHAL (Real Time Hardware Abstraction Layer),并针对RTAI开发了LXRT (Linux-RT),让RTAI可以调用Linux本身的系统调用功能。
RTAI修改了Linux/Arch/I386中与体系结构相关的代码而形成了RTHAL层,RTHAL的作用是使RTAI能够在实时任务需要运行的任何时刻中断Linux。引入RTAI后,Linux的功能没有改变,但是作为优先级最低的任务运行,并且只有在没有实时任务的时候它才能执行。这样做的好处在于将直接修改Linux核心的代码减到最少,这使得将RTAI移植到Linux内核的工作量减至最低。RTAI实现的主要模块有RTAI模块、SCHED模块、FIFO模块、SHM模块、LXRT模块,它们能动态装入和卸载。用户自己的实时任务是在RTAI装入后再载入。可以通过编辑/etc/rc.sysinit文件,在系统启动时将RTAI模块和用户实时模块加载到Linux内核中,当实时模块加入到内核后,实时模块中创建的线程和函数就可以访问系统的底层资源。
2. 运动控制器系统设计
运动控制器由硬件系统和软件系统两大部分组成。按照模块化设计思路,将运动控制器的体系结构划分为用户层、内核层和设备层。其中内核层和设备层两部分组成了运动控制器的开放式平台。这种独立的层次结构使得运动控制器易于实现数控系统上的开放式应用。
用户层就是开放式运动控制器的用户程序空间,运动控制器的用户软件是根据应用对象进行特殊化设计的,可以灵活更换。开放式运动控制器的设计思路是: 无须更改底层软/硬件模块,根据被控对象的特征设计不同的模块化用户软件就能够满足不同的运动控制任务,体现出运动控制器开放式的特性。“用户软件模块化”是开放式运动控制器最大的特征,而“用户软件模块化”恰好也是Linux提供的一种机制: Linux的内核和用户程序是完全分离的,用户程序通过调用设备操作接口就能够实现对硬件设备的操作。
内核层的设计按照两条相互独立的线路展开: 移植Linux操作系统和开发设备驱动程序。运动控制器的内核层设计最为复杂,这部分的设计是与Linux内核机制紧密相关的。运动控制器大量的硬件设备是由Linux设备驱动程序提供用户软件设备操作接口的,内核层的“运动控制接口”和“现场通信接口”是开放式运动控制器最主要的设备接口。设备驱动程序由于处于Linux内核的最底层,因此相对于上层用户软件,故又称为底层软件。
设备层是运动控制器的硬件层,在这部分设计过程中需要完成运动控制器的硬件设计、电路设计。嵌入式运动控制器的硬件设计与传统的基于PC的运动控制器设计有很大不同。考虑到面向特殊领域的应用特性,嵌入式系统不能使用桌面系统那样的硬件资源,因此标准的PC硬件无法直接应用到嵌入式运动控制器中去,这些决定了开放式运动控制器的硬件设计具有其特殊性。
(1) 硬件结构设计
运动控制器微处理器采用的是摩托罗拉公司于2003年下半年推出的新型且具有广泛发展前景的PowerPC MPC5200,其内部采用了双处理器结构,有一个专门负责通信的协处理器,体现了数据通信的专业构架,并通过双端口内存 (这是一种极快的数据交换方式) 与主处理器通信,从而使主处理器的负担大幅度下降,其芯片内部含有丰富的实用型外设。基于PowerPC内核的“MPC5200”是一种低功耗、处理速度达760 MIPS (Million Instructions Per Second,单定点指令平均执行速度) 的嵌入式处理器。它支持以太网、USB、PCI、ATA、12S、12C、SPI、串行接口、J1850和控制区域网 (CAN),同时,它还支持DDR存储器,并集成了一个双精度的浮点单元 (FPU)。MPC5200运动控制器是一款非常适合于工业控制领域应用的运动控制器,开放化的特点使其能够应用于多种机械设备上,而通过CAN总线互连组建的现场总线运动控制系统是一种全新的分布式控制系统。因此MPC5200运动控制器完全可以满足现代数控系统高速化、智能化、网络化、集成化、开放化的需求。
(2) 软件结构设计
在实时Linux下,为了保证数控系统的实时任务能及时响应,所有和实时相关的任务都必须放在内核层下,每个任务用一个独立的内核进程来执行,实时进程是通过调用RTAI的rt_ task_ init() 函数来实现的。而非实时任务则放在用户层下,它们在任何时候都不会打断实时任务的运行,只有在实时任务结束后才会执行。嵌入式数控的基本功能由各种功能模块共同实现,在以Linux为操作系统的开放式平台上集成RTAI的实时内核,通过模块化的设计思想,可以将整个控制系统按照实时性的要求分为用户层模块、内核层实时模块两个大的模块,同时在两个大的模块下又根据不同的子功能分为代码解释模块、人机交互及刀具仿真图形模块、文件管理模块、位置控制模块、插补运算模块、状态监测模块等。
内核层和用户层之间进程的通信主要是依靠RTAI提供的实时n Fo,通过调用函数rlf_ create() 来创建管道实现数据传输。fifo的通信是单向的,因此用户层和内核层的信息交互至少创建两条管道才能实现。
3. 实时控制的软件实现
根据对开放式运动控制器的运行机制分析,将各实时任务模块分别设置相应的定时器工作方式、优先级及通信队列等。
实时功能模块实现方式如下: 位置控制任务moor() 决定电动机控制精度,计算下一周期的实际坐标增量,输出到伺服单元驱动步进电动机工作。因此,将其设计成周期性RTAI线程,运行周期为4ms,优先权为1级。功能控制任务control() 是利用fifo从用户层向内核层传递控制命令,并实现对I/O口的控制。此任务采用实时中断策略,在接收到控制命令时,内核挂起位置控制任务,状态检测任务monitor() 要对状态进行实时监控。因此设置此任务运行周期为10ms,优先级为3级。运动控制器软件的所有实时任务和函数包含在实时模块main-program.o中。编 {t}/etc/rc.sysinit文件,在系统启动时将其加载到Linux内核中。当实时模块加入内核中时,实时模块中创建的线程和函数就可以访问系统的底层资源。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。