技术中心
 
 

面向数控设备的实Linux系统构建与应用

   日期:2007-06-19     作者:管理员    


  随着嵌入式系统的迅速发展和广泛应用,嵌入式Linux以其强大的性能和开放性,越来越被开发人员所推崇。以CAI、IBM等公司和组织所建立的Embedded Linux Consortium(ELC)的成立更标志着嵌入式Linux已经走向标准化阶段。现在,各种基于Linux的嵌入式系统已被用于各行各业中。基于源代码完全开放的优势和可以与商业操作系统相媲美的良好性能,人们对基于嵌入式实时Linux平台的开放性的数控系统展开了很多的研究和探讨。国际上一些组织和研究机构在利用嵌入式Linux方面构建中高档数控方面已经取得了一些实质上的突破和进展[6]。

  系统构建方法与策略

  目前,作为世界上最大的开源项目,Linux技术取得了飞速的发展,在桌面应用、海量运算、消费类电子及工控产品等领域都有着广泛的应用。由于具有非常重要的实际价值,微型Linux系统构建一直被当作嵌入式领域的一个研究热点,也取得了一些研究成果,如基于软盘的小型Linux系统(floppy disk Linux project)、自启动U盘Linux项目(tiny Linux system with flash

card)等等[1]。

  基于实际系统开发的需要,在借鉴国际上一些优秀的开源项目的基础上,本文作者给出了一整套构建专用实时数控系统平台(Real time numerical control system platform -RCNCP)的方案和策略。

  构建该实时数控系统平台的两个主要目标分别是:为达到验证应用程序接口的目的,研发一整套能实现所有数控模块功能的软件;建立一个媒介平台,在此基础上进行二次开发,可以方便的实现对机床、机器人、坐标测量机等自动化设备的实时控制[2]。

  基于RCNCP作为一个控制系统软件平台特性,笔者着重从是实时内核裁减与构建、Linux系统整合等两个方面。

  实时内核裁减与构建

  考虑到源代码的开放性及实时LINUX系统的迅速发展,笔者采用了REALTIME-LINUX作为 RCNCP控制系统的底层平台。具体适用版本Rtlinux-3.1和Linux核心2.4.16。

  具体实现步骤如下:

  获得需要的源代码文件:

  Linux-2.4.16.tar.gz Linux核心
  Rtlinux-3.1.tar.gz Rtlinux源代码
  patch_rtl-2.4.16、patch_rtlinux-3.1 补丁文件
  解压缩源代码并给打补丁
  tar-zxvf /tmp/rtlinux-3.1.tar.gz
  tar zxvf /tmp/linux-2.4.16.tar.gz
  patch p1patch p1
  编译Linux系统核心

  make menuconfig(或者make xconfig),在相应出现的选择界面上选中rtlinux所需的特性。如Disable APM feature、Disable SMP feature、Enable RTC at the character device section (实时时钟)

  Enable Frame-buffer support。然后执行编译操作
  make dep、make bzImage、make modules、make modules_install。

  最后得到一个可启动的系统核心bzImage。

  编译Rtlinux系统核心

  用刚才得到的系统核心重新引导系统,进入Rtlinux-3.1目录下, 执行以下操作:

  make config、make、make devices、make install
  最后输入rtlinux start脚本文件,就会在屏幕上看到相应的rtlinux 启动信息。

  Linux系统整合

  一个稳定的实时内核是整个系统工作的重要基础。但是仅仅有内核系统是不能工作的,必须配以完整的启动引导程序、文件系统、人机界面等支持。

  考虑到实际工程需要,笔者采用Compact Flash card作为媒介来存储Linux系统和应用程序,采用GRUB为系统引导程序,采用有“瑞士军刀”美誉的BusyBox提供文件系统支持。

  具体实现步骤如下:

  系统分区及格式化

  首先笔者需要一个Compact-Flash Card Reader来连接CF卡和宿主计算机,市场上一般提供USB接口的读卡器。

  首先,通过读卡器将CF卡插入USB接口,使用下面的命令对其进行分区和格式化:

  fdisk/dev/sda

  其中/dev/sda设备指用户的优盘。如果用户的机器中还有其它的SCSI设备,那么可能

是/dev/sdb等。用户使用“fdisk”删除原来的所有分区,并将所有的空间都分成一个Linux基本分区。接下来用户要将其格式化为Ext2文件系统,可以使用以下命令:

  mkfs.ext2/dev/sda1

  通过上述命令我们就得到一个完整Linux分区存储盘。

  引导程序GRUB的编译与安装

  可以采用从源代码方式安装,也可以采由宿主机上直接利用GRUB命令来给CF卡上安装引导程序,为方便起见,采用了后者。

  首先,要将格式化好的优盘上的文件系统挂载到当前的Linux系统中。命令如下:

  mount/dev/sda1/usb

  接着,要建立GRUB所需要的目录,并将当前使用的Linux系统中的GRUB相关文件(/boot/grub/目录下的stage1和stage2)复制到CF卡的/usb/boot/grub下。命令如下:
  mkdir/usb; mkdir/usb/boot; mkdir/usb/boot/;
  cp/boot/grub/stage* /usb/boot/grub;

  然后,使用“grub”命令将GRUB引导程

序安装在优盘上。

  具体可以参考如下:

  grub>root(hd2,0)
  Filesystem type is ext2fs, partition type 0x83
  grub>setup (hd2)
  Checking if“/boot/grub/stage1” exists... yes
  Checking if“/boot/grub/stage2”exists... yes
  Checking if“/boot/grub/e2fs_stage1_5”exists... no
  Install /boot/grub/stage1(hd2)/boot/grub/stage2/boot/grub/grub.conf... succeeded Done.
  grub>quit

  这样就成功的把GRUB引导程序安装到CF卡上了,CF卡也成为可独立启动的媒介了。

  文件系统建立

  作为对嵌入式Linux系统支持的一个重要部分,笔者采用BusyBox来这一小巧工具来完成这一功能。其实现方法也很简单:

  tar-zxf busybox-0.60.5.tar.gz;
  cd busybox-0.60.5;make;make install
  然后把BusyBox安装到Compact Flash:上
  cp-r install/*/mnt/flash;
  安装完成之后,就可以使用BusyBox提供系统支持了。

  具体应用

  考虑到数控设备行业系统软件应用特点,基于分布式控制的思想,在已经构建的实时Linux系统基础上,采用组件化设计方法,整个控制系统软件按其功能分类可以划分为四个部分GUI(Graphical User Interfaces)人机界面、动作控制器Motion Controller(MOT)、输入输出控制器Discrete I/O Controller(IO)和任务指派器Task Executor(TASK),其系统工作流程图如图1所示。

面向数控设备的实Linux系统构建与应用如图

  图1 RCNCP 数控系统软件工作流程图

  下面分别介绍这几部分的工作原理:

  GUI(Graphical User Interfaces)

  人机接口作为数控系统和用户的直接接口,必须能准确反映数控装置目前的状态,如各个坐标轴的位置,加减速设定、可编程IO地址等。同时也必须能及时响应用户的请求,到达指定的目标位置,这些都对GUI程序的编写提出了较高的要求。

  Motion Controller(运动控制)

  运动控制器MOT是数控系统中最重要的组成部分。它肩负起四个主要的实时任务:

  对所控制的轴进行位置采样,如果是伺服电机则从输入端口采样,如果是步进电机则用计数器累计出电机的当前位置;
  计算运动轨迹上的下一个点;
  在现所在点和下一个轨迹点之间进行插补运算;
  计算出对电机的控制输出,对于伺服系统,输出基于PID调节算法,对于步进电机,由于开环,控制脉冲输出与否取决于指定位置与累计位置的差是否大于一步。

  它还实现了许多其他控制功能,包括,可编程软件行程限制,硬行程限制和复位开关的接口,支持FF0、FF1、FF2三次前馈的伺服PID补偿,最大跟随误差的设定,可选择的进给速度和加速度,三种各轴独立的进给方式(连续、增量和绝对),线性和普通圆弧的混和顺序移动,可编程的正向和逆向运动计算等。

  MOT是用C编写的,因此具有很好的移植性。系统参数的设置采用类似w

indows下ini配置文件的方式设定,在程序启动和运行中读取。在配置文件中可以设定轴数量、轴类型、轴单位及其与回馈设备单位的比例,增益大小,调节补偿和轨迹计算的运算周期等大部分软硬件参数。而复杂的运动学算法可以按已规定的函数接口,用C编写好并连接,取代缺省的XYZ笛卡儿坐标的运动学算法。

  与硬件交互的硬件接口部分代码也可以用所提供API方便的重写,驱动不同的硬件设备,而无需改动其它部分。

  I/O Controller(输入输出控制器)

  输入输出控制器是用C++编写的,使用了RCS Library。它基于一个继承自NML_MODULE基础类的层次结构,其所有通讯都使用NML。考虑到输出控制器兼容性低,通常不能通过ini配置文件定制IO系统功能。在输入输出控制器和硬件之间设计了有一个用C语言写的API。通过它可以方便的驱动不同的硬件,而无需重写核心部分代码。

  TASK (任务控制器)

  任务控制器是整个系统的核心部分。任务控制器类似于输入输出控制器,都使用了RCS Library和ML_MODULE。它接受来自GUI或其他外部程序的G和M系列机械代

码,解释成规范的命令,按顺序逻辑向两个控制器发出命令。图1示出了工作流程图。图2为系统运行界面。

面向数控设备的实Linux系统构建与应用如图

  图2 RCNC系统运行界面

  结语

  随着信息产业的迅猛发展,后PC时代已经提前到来。在可以想象到的将来,嵌入式Linux必将在各个领域取得广泛的应用。笔者也在研究目前嵌入式Linux系统基础上,提出了一种新型实时系统架构,并应用于实际数控设备开发。在嵌入式Linux这一极富研究价值的领域,做出了有益的探索。

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢