3 数控软件的升级
数控软件大致可以分为4个部分,分别是运动控制部分(MOT)、输入输出部分(IO)、任务管理部分(1ASK)和图形用户接口部分(GUl),层次关系如图2所示。
图2 数控系统软件结构
GUI部分负责与用户交互,在其上使用tcl/tk搭建了图形用户界面;TASK部分负责处理任务:MOTION部分是整个软件的核心部分,负责电机的运动控制;10部分负责读写IO口等操作删。
源代码的修改是整个工程的亮点,这一部分的工作直接关系到数控软件对电机控制的性能与用户操作时界面的响应性能。修改的主要工作是增加R1籼所提供的API、使软件同时支持RTLinux和RTAI,增加宏定义,以及修改一些与内核升级有关彳日与实时无关的代码。其中主要是RTAI的API,这些API包括开启实时时钟、设定时钟频率、开启实时线程、开辟共享内存和信号量等。这里实时线程的周期是不能变的,要和伺服周期要尽量保持一致,而实时时钟的周期可以改变。如果时钟中断周期设置太短,线程周期可能比较精确,但是以牺牲系统响心为代价,这样用户使用起来会感觉很吃力;相反,如果时钟周期设置得太长,线程周期的精度就会降低。因此设置这个参数的时候应该综合上述两方面取一个折中值。除了这砦框架式的修改,还需要针对宿主系统和目标系统的特点对源代码进行修改。新版本的GCC将C++的许多标准纳入了其中,这会使得一些以前编写的代码编译时出错,这就要根据新的标准修改源代码。有的Linux发行版由于安伞原因而不允许用户随便使用自己编写的库文件,这会导致程序连接或者运行时出错。这一类问题需要从实际问题出发,根据实际需要修改源代码。
除了对源代码的修改,还要对Makefile进行修改。2.6版本的内核在编译内核模块时使用了Kbuild编译环境,Makefile的编写也做了相应的修改,此时的Makefile已经不再是传统意义上的Malcefile,其目标、规则以及编译器、连接器、汇编器的旗标都有所变化,而凡编译时需要进入到Linllx内核源码包下读取Kbuild编译环境。MOTl0N部分最后将生成一个内核模块,因此这部分的Makefile需要按照Kbuild编译环境提供的Makefile规则进行修改,其他几部分都是町执行程序,可以保持不变。
4 实时控制性能的测试
以上升级系统以及调整数控软件,对所得到的整个系统最基本的要求是对电机的控制能保持原有的实时性能,甚至获得更好的实时性。所谓实时性,是指能够在事先指定或确定的时间内完成系统功能和对外部或内部、同步或异步事件做出相应。实时性分为软实时和硬实时两种。软实时是指统计意义上的实时,一般指整体吞吐量大或整体响应时间快,但不能保证特定的任务在特定的时间内完成,若偶尔超过时限不会对实际应用造成损害。硬实时则是指时问要求必须严格保证的实时,否则会产生不可预料的后果,这才是真正意义上的实时例。
本系统对电机的控制只有运动控制部分,其软件的结构图如图3所示。
电机的控制信号由GUI部分的加工代码发送,通过任务模块下达给运动控制模块,在此需要经过粗插补和精插补以及其他一些运算,发送到PID,再经过限幅、比例放大得到信号rawoutput,再经过输出补偿运算发送到伺服器,从而控制电机运行。在电机运行的过程中,系统从码盘读取出电机转角洲一Input,经过输入补偿传送给输入比例环节,再作为反馈加到PID调节器的输入端。
图3中的输入补偿inputo凰et和输出补偿outputoffet相对于码盘读数rawJnput和系统输出船woutput来说足很小的值,在检测整个系统的实时控制性能是可以忽略。那么,在理想状态下,rawoutput应该和rawlnput成正比或者相等,即电机在某一个时间段之内的转角应该与伺服器接收到的信号有一个严格的比例关系甚至吻合:rawInput=K+rawolltpllt。然而在实际的系统中,由于硬件和软件两方面的原因,这样严格的比例关系并不存在,只能在某一个可允许的范围内保持一种近似的线性关系。如果不考虑硬件的因素,那么影响实时控制性能的主要闪素就是系统的实时性能,即在某个特定时刻,系统是否能够准时完成某项工作。
考察以上系统,假如MoTl0N部分的调度周期为T,那么就会每隔T读取一次码盘读数,即刷新一次rawInput的值,随后通过各种计算得出rawoutput,发送到伺服器。如果在某一个周期由于某种原因调度延迟了△t,则码盘读数会相应增加△θ。经过计算,rawOutput的值会相应减少△θ,令下一个岗期转角减少。这样就出现了一种抖动的现象,而这种抖动在软件层面上,与实时调度器有直接关系。这种抖动可以通过对运动控制部分死循环相邻两个周期的时间差测得结果:如果时
间差的波动比较大,说明调度器在调度实时任务时存在延迟或提前的状况,实时控制性能比较差,相反则比较好。在硬件条件相同的情况下,对两个不同的软件系统进行测试,通过比较得到的结果,就可以看出哪一个实时性能比较好。图4和图5是对基于kemel-2.4+rtlinux和kemel-2.6+rtai的两种数控系统进行测试得到的数据。
由图4和图5可见,经过升级、调整之后的新系统在实时控制方面有了以下两方面的提高:小幅抖动方面,相邻两次计时的抖动很小,看起来近似一条直线;而大抖动也得到了较好的抑制。综合以上两方面,新系统的实时性能完全可以满足生产加工的需要。
5 结束语
经过以上步骤升级、调整后的系统,不仅保持了原系统的各种功能,而且通过两个系统在同样的硬件条件下的采样数据的分析与比较,证实了新系统在实时控制性能方面取得了进一步的提高,同时也验证了2.6内核+RTA1的系统实时性能要优于2.4内核+I盯Linux的系统。由此,可以在高版本的Linux内核下继续使用开源的实时微内核,并得到更好的实时性能。