数控软件系统的升级及实时控制性能的测试

来源:互联网

点击:1229

A+ A-

所属频道:新闻中心

关键词:数控软件 数控系统

    0 引言

      华南数控使用的嵌入式操作系统是基于2.4版本内核的Linux操作系统,以RTLinux作为实时微内核,在此基础上运行数控软件。此系统在实时性、稳定性测试中获得了不错的性能。随着Linux的不断发展,2.6版本的内核获得了更加稳定的性能,且对硬件支持更加广泛,更重要的是,内核主体中加入了提高中断性能和调度响虑时间的改进,其中最硅麓的改进为采用可抢占内核和更加有效的调度算法。但是高版本的RTLinux不再开源,之前的RTLinux也没有提供对2.6版本的内核的完好的支持,所以升级Linux内核、更换觚Al实时微内核、同时对数控软件的源代码做一些必要的调整,足升级数控系统所必需的、关键的环节。此项目包括两个主要环节:嵌入式系统的升级以及数控软件的调整。

    1 数控系统的结构

      华南数控的软件系统是一个以实时微内核为底层,操作系统以及数控软件层层铺垫起来的多层次结构。实时微内核在整个嵌入式系统的最底层,与硬件及Linux内核通讯,负责截取及分析中断。LinIlx内核位于实时微内核的上层,其上运行着Linux操作系统本身所需要的程序,提供系统运行的基本功能。严格地说,数控软件中除,一个负责运动控制的内核模块处于与内核同一个层次,其他的部分均属于上层。软件系统的层次结构图如图1所示。

    图1 数控软件系统的层次结构

    2 嵌入式操作系统的升级

      操作系统层面上的更改较少,主要包括为内核打实时补丁、根据嵌入式系统的特点编译内核、安装RTAl实时微内核、升级系统库文件、调整嵌入式系统的启动脚本等。

      2.1 编译内核

      把刚下载的“洁净”的内核打上RTAI补丁,按照硬件的要求以及实施性的要求配置内核选项。例如,USB、FrameBuffer、ext2/ext3,vfat文件系统、是否需要模块版本支持、是否是多CPU,本地语言支持等。这里需要注意的是,为了获得更好的实时性能,APM BIOS Support支持需要关掉。配置完成之后执行编译安装生成内核与内核模块,用新编译的内核替换原有内核,再将启动时需要加载的内核模块放置到镜像文件illi仃d.img中的合适的位置。

      2.2 编译安装RTAI实时微内核

      RTAI的编译安装和Linux内核的编译类似,也需要经过配置、编泽、安装3步。由于RTAI的共享内存和实时FIFO需要一些特殊的字符设备,因此在安装了RTAI之后还需要自己动手写一个shell脚本程序,当程序中要用到共享内存和实时FIFO的时候就是用此脚本在/dev目录下创建相应的字符设备。

      2.3 升级系统库文件

      由于数控软件在编译时,大部分应用程序对库文件的操作是采用动态链接的,因此在运行时仍然需要这些库文件的支持,否则在运行时会提示找不到某些共享目标文件的错误。要升级的库文件主要有:标准C++的共享库文件(1ibstdc抖.so.6),GCC的共享库文件(1ibgcc s.so.1),数学库库文件(1ibm.so.6),c库的库文件(1ibc舯.6),ld.1inIlx.so.2,图形界面正常运行所需要的libdl.so.2,以及线程库libpthread.so.0。以一卜提到的大部分是一些共享库文件的符号链接,在升级的时候需要将原文件替换之后再创建同名的符号链接。

      2.4 启动脚本的修改

      2.6版本的Linux内核相对于2.4的做了一些调整和修改,例如内核模块、文件系统等,系统启动时可能要加载某些内核模块或者某些文件系统,例如2.6的内核新增了对usb2.O的支持,增加了一些有关于USB的模块,文件系统方面用tmpfs替换了shmfs等,这就要根据实际情况修改启动脚本。

    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 实时控制性能的测试

      以上升级系统以及调整数控软件,对所得到的整个系统最基本的要求是对电机的控制能保持原有的实时性能,甚至获得更好的实时性。所谓实时性,是指能够在事先指定或确定的时间内完成系统功能和对外部或内部、同步或异步事件做出相应。实时性分为软实时和硬实时两种。软实时是指统计意义上的实时,一般指整体吞吐量大或整体响应时间快,但不能保证特定的任务在特定的时间内完成,若偶尔超过时限不会对实际应用造成损害。硬实时则是指时问要求必须严格保证的实时,否则会产生不可预料的后果,这才是真正意义上的实时例。

      电机的控制信号由GUI部分的加工代码发送,通过任务模块下达给运动控制模块,在此需要经过粗插补和精插补以及其他一些运算,发送到PID,再经过限幅、比例放大得到信号rawoutput,再经过输出补偿运算发送到伺服器,从而控制电机运行。在电机运行的过程中,系统从码盘读取出电机转角洲一Input,经过输入补偿传送给输入比例环节,再作为反馈加到PID调节器的输入端。

      rawInput=K+rawolltpllt。然而在实际的系统中,由于硬件和软件两方面的原因,这样严格的比例关系并不存在,只能在某一个可允许的范围内保持一种近似的线性关系。如果不考虑硬件的因素,那么影响实时控制性能的主要闪素就是系统的实时性能,即在某个特定时刻,系统是否能够准时完成某项工作。

      考察以上系统,假如MoTl0N部分的调度周期为T,那么就会每隔T读取一次码盘读数,即刷新一次rawInput的值,随后通过各种计算得出rawoutput,发送到伺服器。如果在某一个周期由于某种原因调度延迟了△t,则码盘读数会相应增加△θ。经过计算,rawOutput的值会相应减少△θ,令下一个岗期转角减少。这样就出现了一种抖动的现象,而这种抖动在软件层面上,与实时调度器有直接关系。这种抖动可以通过对运动控制部分死循环相邻两个周期的时间差测得结果:如果时

      间差的波动比较大,说明调度器在调度实时任务时存在延迟或提前的状况,实时控制性能比较差,相反则比较好。在硬件条件相同的情况下,对两个不同的软件系统进行测试,通过比较得到的结果,就可以看出哪一个实时性能比较好。

      ,经过升级、调整之后的新系统在实时控制方面有了以下两方面的提高:小幅抖动方面,相邻两次计时的抖动很小,看起来近似一条直线;而大抖动也得到了较好的抑制。综合以上两方面,新系统的实时性能完全可以满足生产加工的需要。

    5 结束语

      经过以上步骤升级、调整后的系统,不仅保持了原系统的各种功能,而且通过两个系统在同样的硬件条件下的采样数据的分析与比较,证实了新系统在实时控制性能方面取得了进一步的提高,同时也验证了2.6内核+RTA1的系统实时性能要优于2.4内核+I盯Linux的系统。由此,可以在高版本的Linux内核下继续使用开源的实时微内核,并得到更好的实时性能。

    (审核编辑: 智汇胡妮)

    声明:除特别说明之外,新闻内容及图片均来自网络及各大主流媒体。版权归原作者所有。如认为内容侵权,请联系我们删除。