嵌入式开放型数控系统研究

  • 格式:pdf
  • 大小:184.39 KB
  • 文档页数:3

第25卷第1期 计算机应用与软件Vol125No.1

2008年1月 ComputerApplicationsandSoftwareJan.2008

收稿日期:2005-12-21。李诚人,教授,主研领域:计算机数控系统。

嵌入式开放型数控系统研究李诚人(西京学院数控中心 陕西西安710123)

摘 要 在构建的开放式数控系统中,把μC/OS2Ⅱ实时操作系统移植到MCS251上,在其内核上创建自己的任务,开发出实时运动控制系统。该数控系统具有通信和网络功能。将该系统用在模拟加工平台上,验证了系统的可行性。

关键词 开放式数控 μC/OS2Ⅱ 实时操作系统

RESEARCHONEMBEDDEDOPENNUMERICALCONTROLSYSTEMLiChengren(XijingCollege,NumericalControlCenter,Xiπan710123,Shaanxi,China)

Abstract Intheconstructionofopennumericalcontrolsystem,theRTOSμC/OS2ⅡistransplantedintheMCS251system,andthentasksaredevelopedonthecoreofμC/OS2Ⅱtodesignthereal2timecontrolsystem.TheONChasRS232communicationandLANability.Asimula2tiveexperimentispovidedtotestitsavailability.

Keywords ONC μC/OS2Ⅱ RTOS

1 开放式数控开放式数控是数控技术的发展趋势。前几年国内外对于PC2based开放式数控讨论较多,并取得了一定成果。最近一段时间,由于嵌入式技术的发展,采用嵌入式实时操作系统的开放式数控逐渐引起业界的关注。其主要原因是基于PC技术的数控系统在实时性方面有其先天不足之处。而这一方面嵌入式技术刚好发挥了它的优势,逐渐显示出其强大的生命力。目前采用嵌入式技术的开放型数控研究主要是指包含实时操作系统的控制器。本文研究的是关于采用μC/OS2Ⅱ实时内核的数控系统的软、硬件结构以及实验系统开发。和PC技术无关。2 基本体系结构和工作原理硬件结构以Windows78E58(51系列)为核心,扩展了RAM,显示、键盘接口8279,MAX232串口,8255并口以及RTL8019AS网络芯片。去步进电机输出直接由78E58进行。如图1所示。图1 嵌入式开放型数控硬件框图Winbond78E58内核32kB的FlashROM,包含μC/OS2Ⅱ实时内核在内的系统软件(即实时操作系统)约25kB左右。覆盖了该实验系统的全部数控功能,包括输入、译码、插补、伺服输出、显示、通讯等功能。图1中8279主要用于管理自行设计的小键盘和LED显示器。零件加工程序可以从小键盘输入。也可以从MAX232串行口输入。并口8255主要用于机床I/O信号的输入、输出以及调试时使用。8019AS是网络接口芯片,使得本嵌入式系统能和采用TCP/IP协议的以太网连接,实现上网功能。78E58中包含一个精简的TCP/IP协议栈。实时时钟是嵌入式系统的一个显著特征,μC/OS2Ⅱ要求时钟周期为10~100ms,刚好符合数控系统工作周期的需要。本实验系统采用10ms的工作周期,复杂系统可以适当增大。μC/OS2Ⅱ是一个源代码公开的实时占先式内核,它可以管

理64个任务,有8个留给系统,用户可以使用56个任务,每个任务的优先级必须是不同的(对于数控系统而言这56个任务已绰绰有余)。GB/T187591122002开放式数控系统国家标准中,开放程度分为三个层次。其中第二层次为“控制装置在明确固定的拓扑结构下允许替换、增加NC核心中的特定模块以满足用户的特殊要求”。只要在μC/OS2Ⅱ开放式内核下“挂”上不同功能的任务,比如译码、插补、输出等模块就可以基本达到第二层次的要求,实现开放式数控的目标。

3 开放式数控的软件实现311 软件接口整个软件系统以μC/OS2Ⅱ作为平台,并在创建的各个任务中

© 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

228 计算机应用与软件2008年

调用相应的应用软件模块,结合实时中断服务程序,共同完成系统功能。为了实现开放式数控系统的模块化,提高应用软件模块的互换性和可移植性,给各应用软件模块定义了相应的程序接口。只要软件接口一致的应用软件模块则可以替代和互换。下面是插补程序的部分接口定义(C语言),其中包括插补数据的数据结构和一些相关的函数接口。structinp_buf//插补数据的数据结构{intcmd;//命令类型:直线插补、圆弧插补和延时等intflag;//插补标志intm;//M码值intt;//刀具代码intb;//B码值ints;//主轴转速unsignedintcmd_axes;//命令轴unsignedintout_enable;//输出使能longpinc[9];//各轴增量(最多九轴)longplong;//各轴合成增量union{//插补参数struct{//直线或圆弧的插补参数longflong;//进给速度longi,k;//圆弧圆心相对插补起点的偏移量}noumal;struct{//延时longtime;//延时时间}dwell;}data;unsignedintaxis1,axis2;//确定圆弧所在平面的2根轴structinp_buf3prev,3next;//插补数据链的前后指针}(structinp_buf3)inp_allocate_buf();//申请分配插补数据块

boolinp_add_in((structinp_buf3)buf);//向插补器送入插补数据进行插补voidinp_start();//开始插补voidinp_stop();//停止插补312 任务实现整个软件除了μC/OS2Ⅱ以外,建立了9个任务外加一个系统初始化例程。9个任务分别是。InputTask 零件加工程序输入任务TranslateTask译码任务InterpolateTask插补任务KeyAnalyseTask键盘命令解析任务MonitorTask监控任务I/OTask机床信号输入/输出任务SerialTask串行通信任务EthernetTask网络任务OSIdleTask空闲任务9个任务被分配在一个前后台结构中,前台程序是实时性较强的任务,包括插补任务,监控任务,机床信号输入/输出任务。其余为后台任务,零件加工程序输入任务主要是从键盘输入加工程序,放在存储器中。串行通信是从外部输入零件加工程序。网络任务是和局域网交换信息。显示放在空闲任务之中。系统初始化在启动时只运行一次,以启动多任务OSStart

()

结束,见图2。

图2 系统初始化为实现各个任务之间的通信以及数据共享,μC/OS2Ⅱ提供了三种方法:信号量、邮箱和消息队列。下面以信号量为例说明任务间通信的方法。用户任务形式如下:

VoidYourTask(void3pdata){

for(;;

)

 {

 /3用户代码3/

 OSSemPend();/3系统调用等待信号量3/

 /3用户代码3/

 OSTimeDly(TIMELAG);/3系统调用延时程序3/

 }

}这样,任务就是一个无限循环的C语言函数。函数中任务通过OSSemPend()函数等待相应信号量的到来,触发任务的执行;并利用系统延时函数OSTimeDly()延时。如图2所示,系统初始化完成的工作为μC/OS2Ⅱ初始化,创建信号量,创建任务,

接口初始化等。在启动多任务OSStart();后,就处于μC/OS2Ⅱ的调度下运行。首先,在键盘命令没有下达之前,系统处于等待状态,各用户任务都在等待信号量的到来。在此期间,系统执行的是优先级最低的任务OSTaskIdle,进行一些显示等工作。实时中断定时发生,只是没有键盘命令,只进行一些例外监控等,

不会出现插补等加工状态。一等加工的键盘命令按下,经过键盘解析任务KeyAnalyseTask对任务的解析,向译码任务Trans2lateTask发出信号量,进入译码过程,译码任务从存储器中取出零件加工程序进行编译处理,同时给插补程序发出信号量,等到实时中断发生后,插补任务接收到信号量后,即开始插补加工。本次实验系统采用步进电机伺服系统,一边插补,一边就向外输出。译码任务在没有遇见M02、M30之前,则不断进行编译,一直到零件加工程序结束。零件加工程序输入任务InputTask是

© 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net