基于实时Linux的模块化EDM数控系统设计

发布时间:18-06-13

基于实时Linux的模块化EDM数控系统设计

    介绍了RT-Linux的特点,采用模块化的方法研究基于RT-Linux的EDM数控系统,设计了基于RT-Linux的EDM数控系统总体结构,分别讨论了EDM数控系统的管理模块、核心模块和驱动模块的设计和实现方法。
    Linux具有健壮性、稳定性和开放性等特点,它的诞生给开放式数控技术注入了新的生命力,带来了新的希望。Linux作为通用操作系统应用到工业上必须要经过实时扩展,RT-Linux是实时扩展中最著名的一种方案,目前RT-Linux已经在工业控制中得到广泛的应用。
 
1总体结构
    图1为本文设计的基于RT-Linux的EDM数控系统总体结构。根据RT-Linux的特点,基于RTLinux的EDM数控系统首先要划分为两个域:实时域和非实时域。在总体结构中,将具有实时性要求的任务放入实时域,实时域中的任务可以满足应用系统的实时性要求,但是因为可用资源受限所以它们必须保持简捷性;另一方面,将没有实时性要求或实时性要求不强的任务放到非实时域中,非实时域中的任务可以访问Linux的全部资源。这两个域以之间可以通过多种通信方式交换数据,如实时管道方式和共享内存方式。

1.jpg

    如图1所示,电火花加工数控系统可以划分为多个彼此独立而又相互联系的功能模块。对功能模块的划分要做到两点:模块本身的聚合性要强,模块之间的耦合性要弱。这样做,既有利于软件的开发与调试,又可以减少各部分之间的依赖。就功能而言,电火花加工数控系统总体上可以分为EDM管理模块和EDM机床模块。直接参与数控机床控制的任务被划分到EDM机床模块中,其它的任务被划分到EDM管理模块中,EDM管理模块负责数控代码的准备以及其它一些程序的管理功能。
 
    EDM机床模块中的任务要求系统能够在一定的截止时间内做出响应,这类任务是数控加工中的关键任务,必须保证它的优先处理,所以EDM机床模块中的任务属于实时任务;EDM管理模块中的任务对于实时性能的要求一般比较弱,这类任务要求系统在一定时间间隔内能够处理即可,这类任务不直接参与加工控制,它们属于非实时任务。
 
    从模块化设计角度出发,EDM机床模块进一步细分又分为两个组成部分:EDM核心模块和EDM驱动模块。EDM核心模块主要实现EDM数控系统的任务和算法功能,它通过驱动模块与机床进行交互;EDM驱动模块是直接对EDM机床硬件产生输出控制和输入采集的模块,它是EDM数控机床驱动程序的集合。
 
2EDM数控系统核心模块
    如图1所示,EDM核心模块由处于RT-Linux空间的对实时性要求比较苛刻的实时任务组成,在EDM核心模块结构中本文设计了如下几类任务:自动运行任务、接触感知任务、快速移动任务、点动任务、AJC任务、检测任务和PLC任务。核心模块的主要功能之一就是实现软件插补的功能,软件插补算法在本文被设计成一个单独的模块,当机床运行有插补要求的时候,相应的任务就调用插补模块实现EDM数控系统轨迹生成的控制。此外本文设计的核心模块还包括各种控制策略,如接触感知策略(在线测量策略)、自动运行策略、点动策略和快速移动策略等。EDM核心模块以软件实现了EDM数控机床CNC控制器的功能。
 
    在EDM数控系统的核心模块中,每一个任务对应RT-Linux的一个线程,这样核心模块的任务模型就影射到RT-Linux的线程模型中。EDM数控系统实质上是轨迹控制系统,在这类系统中最重要的功能就是轨迹插补,本文把轨迹插补类的任务统称为轨迹插补任务,在RT-Linux的线程模型中用插补线程表示。这样RT-Linux的线程表示模型得到大大的简化,其简化了的表示模型如图2所示,它由四个周期性实时线程组成。
 
    依据EDM机床控制的逻辑关系和各线程实时性要求的强弱来安排RTLinux实时线程的优先级和运行周期。检测线程实时检测加工的放电状态;AJC线程根据管理模块的设定,周期性的输出AJC控制信息;PLC线程模拟硬件PLC,主要处理机床的开关量控制;在一个伺服周期内,插补线程依据插补缓冲区中的加工信息和各种检测、控制信息,判断加工状态,按轨迹进行正逆插补运算,并向驱动模块输出轨迹控制信息,驱动伺服电机带动各个机床轴按着轨迹插补控制要求实时进退。

2.jpg

3EDM数控系统驱动模块
    基于RT-Linux的应用系统其外围硬件分为两类,一类是PC通用硬件,另一类是EDM数控系统专用硬件。在这里数控系统专用硬件的定义是为实现EDM数控机床的功能而添加的硬件接口卡,一般的说PC通用硬件的驱动程序由Linux直接提供,但是如果EDM在实时任务的运行中使用了PC的通用硬件,那么就需要在实时中提供相应的驱动程序。
 
    Linux操作系统中的设备通常分为字符设备、块设备和网络设备三种,根据EDM机床的硬件特点,EDM机床的设备全被抽象成字符设备。图3表示了驱动模块的内部结构及其与外部模块的关系,EDM数控系统的驱动模块相当于设备驱动层,由EDM数控机床的各种驱动程序组成,主要包括了伺服控制卡驱动、脉冲电源驱动、机床I/O和检测驱动。

3.jpg

    在驱动程序之上本文设计了EDM抽象硬件层,抽象硬件层屏蔽了EDM机床的具体硬件,使得驱动模块用统一的接口来进行封装和调用,EDM数控机床实际上就作为计算机的外设来看待,抽象硬件层维护的是驱动模块统一接口,针对不同的机床只要提供特定的驱动即可,而其它部分不需做任何变动。
    EDM数控系统的驱动程序必须要在RTLinux实时域中运行。根据RT-Linux的特点,在RT-Linux中设备的中断有两种类型:非实时中断是Linux内核中断,不能提供实时性能,但是可以利用Linux内核资源;实时中断是RT-Linux为需要实时中断的硬件提供的硬中断,但是它能够使用的Linux系统资源受到限制。本文对EDM数控系统中有中断要求的硬件设备驱动均设计成使用硬中断的形式来保证数控系统的实时性。
 
4EDM数控系统管理模块
    EDM数控系统的管理模块是运行于用户态的用户管理程序,主要包括:各种图形用户界面(GUI)模块和代码管理模块。
    GUI是集合概念它包括加工监测模块、定位校正模块、点动模块和接触感知等模块的GUI,GUI模块的作用就是为人机交互提供一致无二义性的接口。本文采用QT库来实现GUI,设计了GUI隔离层,作为GUI与其它部分的接口,把GUI作为系统外挂壳,方便实现针对不同的应用选择不同的图形库来制定GUI。用户通过各种GUI管理界面实现人机交互,进行加工管理。
 
    本文的代码管理模块由两部分组成,基于Lex&Yacc的译码模块和数控代码的集成管理模块。如图4所示,基于Lex&Yacc的EDM译码模块由两部分组成:EDM词法分析源文件和EDM语法分析源文件,它们分别包括EDM数控代码文件的词法分析规则和语法分析规则。这两个源文件分别经过Lex编译系统和Yacc编译系统生成相应的C/C++程序,再由C/C++编译系统生成EDM译码器。
 
    Lex词法分析完成的是译码第一阶段的工作,它的主要任务是从左至右逐个字符地对数控程序进行扫描,产生一个个单词序列;Yacc语法分析完成译码第二阶段的工作,它将Lex词法分析程序当成一个子程序,调用词法分析程序的入口函数yylex()去自动扫描输入流,语法分析程序根据词法分析程序提供的单词序列进行语法分析和语义判断。用户编写的程序代码经过EDM译码器生成所需的目标代码格式,这种目标格式是广义的,在本文目标代码是指经过译码系统处理后放入插补缓冲区供插补程序使用的中间代码。

4.jpg

    数控代码的集成管理模块以GUI外挂壳的形式实现了数控代码的集成管理环境,提供了代码编辑、译码、检验、管理等功能。本文采用分离设计的原则分别设计代码管理模块的两个组成部分,数控代码的集成管理模块作为译码的主控模块通过译码模块提供的抽象命令层与译码模块进行交互。这样做的好处就是便于模块化的设计,数控代码的集成管理模和译码模块在功能上减少耦合,可以独立的进行功能扩展以满足用户需要。
 
    数控代码的集成管理模块以GUI外挂壳的形式实现了数控代码的集成管理环境,提供了代码编辑、译码、检验、管理等功能。本文采用分离设计的原则分别设计代码管理模块的两个组成部分,数控代码的集成管理模块作为译码的主控模块通过译码模块提供的抽象命令层与译码模块进行交互。这样做的好处就是便于模块化的设计,数控代码的集成管理模和译码模块在功能上减少耦合,可以独立的进行功能扩展以满足用户需要。