第3章智能数控系统的开放式平台 3.1概述 开放式数控系统的概念在20世纪80年代就已出现。在此前,机床厂及最终用户对数控系统的主要需求是功能稳定、使用可靠,并能克服手动机床精度控制困难且效率低的问题,以及能解决组合机床缺乏柔性导致的开发周期长和成本高的问题。至于把数控系统的功能接口开放出来,为特定领域的用户提供二次开发接口的需求在数控系统出现的早期(二十世纪五十年代至七十年代)并不强烈,数控系统体系结构的封闭在那时也就不是一个大的问题。 随着科技的进步和工业的发展,各行业对机床加工精度的要求越来越高,需要数控系统的应用领域也越来越广。数控系统企业为满足车床、铣床、加工中心等市场占比大的机床的通用需求而研制的数控系统,已经难以满足越来越多的细分领域的专业化的需求。于是,开放式数控系统的相关技术逐步成为数控技术的一个重要研究方向,相应的解决方案也成为数控系统产品的一个重要属性。 本书探讨的智能数控系统,不仅应具备现代数控系统开放的特性,遵循具备广泛影响力的工业控制系统的开放接口标准,还应研究随智能化技术的融入而产生的开放接口及工具中的智能元素。 本章通过与传统封闭式数控系统的对比,论述了开放式数控系统的内部属性和外部特征。随后介绍国内外在数控系统开放的统一标准方面所做的工作,并以IEC 611313为重点,介绍了在数控开放方面所做的一些工作。最后结合智能化数控系统的开放性问题,介绍了本书作者在开放式智能数控系统关键技术方面所开展的一些探索工作。 3.2开放式数控系统的概念 3.2.1传统数控系统存在的问题 传统数控系统由数控系统厂商进行系统的开发和维护,不同厂商之间没有统一的开发标准和开发环境,不同厂商的数控系统之间无法实现通信。另外,传统数控系统由于体系结构的封闭性,数控系统产品本身不支持二次开发,用户和机床厂商无法自己在数控系统中添加定制化的功能,或者必须向数控系统厂商支付大量费用才能添加这些功能。为了使不同系统厂商开发的数控系统之间具有通用性和互换性,以及机床厂和用户能在数控系统上进行二次开发,需要进行开放式数控系统方面的研究,克服传统数控系统架构封闭的缺点。 0 0 为了更好地理解开放式数控系统,本节将首先介绍传统数控系统,即封闭式数控系统。就功能方面而言,数控系统一般由NCK功能、HMI功能和PLC功能组成。NCK功能执行工件程序的解释、插补、加减速控制和补偿控制。HMI功能为用户提供操作机器、编辑工件程序、与外部系统通信和监视机器状态的界面。PLC功能提供换刀、主轴控制和输入/输出信号控制等辅助功能。传统数控系统的结构与功能如图31所示。 图31传统数控系统的结构与功能 在传统数控系统中,HMI、NCK、PLC模块架构封闭,无法与第三方系统通信。此外,与典型PC系统的体系结构一样,执行每个模块功能的主CPU单元包括一个主处理器、用于存储系统程序的ROM、用于存储应用程序的RAM以及用于用户的键盘和显示单元的接口,它们通过系统总线连接。 传统数控系统体系结构封闭,其对表31所列出的客户问题及需求是无法满足的。 表31客户问题及需求 需求 内容 可重构性 在对汽车的发动机缸体进行机加工时,仅需进行孔钻削和平面铣削。此类加工所使用的数控系统不需要用户界面中的各种附加功能,而是需要较好的自动化功能。因此,需要具备可以根据用户要求添加或删减数控系统的功能 可扩展性 不能充分反映机床制造厂的生产经验,不具备某些机床或工艺特征需要的性能,用户无法对系统进行重新定义和扩展,也很难满足最终用户的特殊要求 可编程 基于EIA的零件编程和宏编程是非常复杂的,每个数控系统制造商都会提供自己的特殊功能。使用CAD/CAM时,在软件和设备之间交换数据时会存在许多问题。为了解决这些问题,需要一种新的数控编程语言 可通信 传统数控系统缺乏统一有效和高速的通道与其他控制设备和网络设备进行互联,信息被锁在“黑匣子”中,每一台设备都成为自动化的“孤岛”,对企业的网络化和信息化发展是一个障碍 标准化 在车间内使用多种机器时,只有在它们之间制定统一的通信标注,才可以进行通信 界面定制化 传统数控系统人机界面不灵活,系统的培训和维护费用昂贵。许多厂家花巨资购买高档数控设备,面对几本甚至十几本沉甸甸的技术资料不知从何下手。由于缺乏使用和维护知识,购买的设备不能充分发挥其作用,一旦出现故障,面对“黑匣子”束手无策,维修费用十分昂贵 高级功能 在模具铣削加工中,为了避免铣后仍需要研磨操作,需要使用曲面插补功能来加工自由曲面,还需要基于传感器的反馈控制的高精度加工。数控系统应该允许在必要时增加新功能 智能化 加工时的切削工艺需要根据刀具的直径以及工件和刀具的材料来确定,而且对于切削工艺的选择需要大量的专业知识。因此,亟需通过智能化功能实现对切削工艺的自动选择、优化,获得最佳的工艺计划和最佳的刀具路径 3.2.2开放式数控系统的定义及属性 1. 开放式数控系统定义 目前,开放式数控系统还没有公认的统一定义。IEEE对其定义为“开放式数控系统应提供这样的能力: 来自不同厂商的,在不同操作平台上运行的应用程序都能够在系统上实现,并且该系统能够和其他应用系统协调工作。” 本书作者根据自身的研究工作,结合本书内容,对开放式数控系统给出如下定义: 开放式数控系统本质一个具备软件平台化、功能模块化、界面组态化内部属性和可移植性、可伸缩性、互操作性外部特征,支持用户根据需求进行数控系统二次开发,并提供用户应用软件的运行、管理平台。因此,开放式数控系统的核心是支持用户根据需求进行二次开发,增加定制化功能,提升机床的性能。 2. 开放式数控系统的内部属性 要实现数控系统的开放,使其具备良好通用性、互换性,并且使用户无须深入底层硬件集成、操作系统调度等专业性要求很强的开发任务中,数控系统需具备软件层次化、功能模块化、界面组态化的内部属性。这些内部属性是数控系统厂商为实现数控系统的开放而对数控系统体系内部架构的设计,下面对其内部属性进行详细描述。 1) 软件层次化 数控系统软件不仅包含解释、插补及运动控制等功能的实现,还需具备设备驱动、实时内核及进程调度等基础功能。但是,用户进行数控系统二次开发目的是改进现有功能或增加新功能,其工作并不需要涉及硬件读写、内核管理等基础功能。因此,需要对软件进行层次化划分,使用户进行二次开发时只需要关注其所需功能的接口层,不需要了解基础功能的实现和系统调度等任务,在降低用户开发难度的同时,在一定程度上保障系统的可靠和稳定。 为了实现系统软件的分层,首先需要把软件从硬件中分离出来,降低硬件的可靠性受用户加入功能的影响的可能,于是需要建立驱动层。其次,数控系统软件随着功能增多,变得越来越复杂,为了不让用户陷入底层软件的开发中,将软件层次进一步划分出内核层和应用层,用户只需要通过应用层的接口进行二次开发,不需要在内核的层面进行开发。 综上所述,可以将数控系统软件平台从技术层面分为三个层次: 驱动层、内核层和应用层 ,如图32 所示。 图32开放式数控系统软件平台架构 (1) 驱动层 驱动层一般由硬件抽象层(HAL)、板级支持包(BSP)和驱动程序组成,是数控系统软件中不可或缺的重要部分,它的作用是为上层程序提供外部设备的操作接口,并且实现设备的驱动程序。上层程序在进行硬件操作时,不需要了解设备的具体细节,只需要调用驱动的接口即可 。 ① 硬件抽象层(Hardware Abstract Layer,HAL)。 HAL本质上就是一组对硬件进行操作的API接口,是对硬件功能抽象的结果。HAL通过API为操作系统和应用程序提供服务。一般HAL包含相关硬件的初始化、数据的输入/输出操作、硬件设备的配置操作等功能。 ② 板级支持包(Board Support Package,BSP)。 BSP主要功能为屏蔽硬件、提供操作系统及硬件驱动,具体功能包括: 系统启动时,完成对硬件的初始化,如对系统内存、寄存器以及设备的中断设置等; 为操作系统的通用设备驱动程序提供访问硬件的手段,亦即硬件相关的设备驱动。 ③ 设备驱动程序。 设备驱动程序是指操作系统中的驱动程序,为上层软件提供设备的操作接口,必要时使用BSP提供的函数来实现硬件设备操作。驱动程序的好坏直接影响系统的性能。驱动程序主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。 ④ 驱动层工作过程。 在开放式数控系统中,通过驱动层实现数控系统与多种伺服、I/O控制方式之间的兼容。如图33所示 ,利用驱动层的各种设备驱动程序,实现数控系统对底层控制模块的控制,进而实现数控系统与伺服和I/O控制方式动态可重配的效果 。 图33开放式数控系统驱动层的结构 该方法的基本思想就是在驱动层中先定义一套通用的通信接口函数,再通过用户给定的信息将特定控制模块的通信函数绑定到通用接口上,从而实现同一数控系统对多种伺服和I/O控制方式兼容的效果。图33 中,驱动层模块右侧的参数配置模块从系统指定位置读入一个配置文件,该配置文件用以存储控制模块的基本信息,比如是何种控制方式,分别对应的地址是多少,最大转数等性能参数。该文件内容可被用户经人机界面修改并保存; 参数配置模块读取完配置文件之后,使用驱动层模块中定义的结构体初始化一同共享内存; 共享内存初始化完成之后,参数配置模块退出,驱动层模块根据共享内存名获得参数配置模块初始化的结构体,完成和具体控制模块的绑定,建立一张通用接口——特定控制接口函数映射表。上层数控系统不需要知道具体控制模块接口函数名,当它需要向下和执行单元进行通信时,只需调用驱动层提供的通用接口函数,该接口函数会查询其内建的通用接口——特定控制接口函数映射表,获得当前系统所使用的控制口函数并调用该函数,最终实现上层数控系统和底层控制模块的通信功能。 (2) 内核层 内核层即嵌入NC内核的操作系统层,包含实时内核、进程调度、NC内核功能模块、文件系统、图形用户接口和网络系统等。在嵌入式系统中工作的操作系统称为EOS(Embedded Operating System,嵌入式操作系统),EOS在数控系统中主要作用是处理由内部或者外部事件引发的中断、设备驱动层的激活以及执行任务的调度,它并不执行具体的应用功能,如运动控制、界面显示等具体功能是由应用层的应用软件实现的。 按照系统对响应时间的敏感程度,EOS可以分为实时操作系统(Real Time Operating System,RTOS)和非实时操作系统两类。RTOS对响应时间有非常严格的要求,当某个外部事件或请求发生时,相应的任务必须在规定的时间内完成相应的处理。RTOS又可分为硬实时和软实时两种情形。硬实时系统对响应时间有严格的要求,如果响应时间不能够满足,可能会引起系统的崩溃或致命的错误。软实时系统对响应时间没有严格要求,如果响应时间不能够满足,将需要支付能够接受的额外代价。非实时系统对响应时间没有严格的要求,各个进程分享处理器,以获得各自所需的运行时间。 数控系统对于任务的实时性要求很高,是典型的硬实时操作系统。目前,数控系统常用的操作系统为基于Real Time Linux(RTLinux)实时内核平台的操作系统和基于Intime Windows实时内核的操作系统两种。标准的Linux/Windows系统本身不提供任何实时保证,必须通过为其加入实时的支持来解决,即构建一个实时Linux/Windows操作系统。 ① 基于RTLinux实时内核平台的操作系统。 标准的Linux系统不是一个实时的操作系统,不能满足数控系统对实时性的要求。针对标准Linux系统实时性方面的不足,RTLinux的解决方案如图34所示。 图34基于RTLinux的数控系统软件结构 基于RTLinux实时数控操作系统的软件结构如图34所示 。根据数控系统任务的实时性要求,从结构上可以将软件分为实时部分和非实时部分,因此,整个数控系统软件必然分布在实时域和非实时域两个域,两个域通过通信机制联系。实时域由RTLinux实时内核组成,专门处理实时性事务。标准的Linux内核组成非实时域,利用丰富的Linux资源,开发非实时软件。 实时软件部分运行于RTLinux实时内核空间,最大程度地保证了数控任务的实时性。由于各个任务在功能上相对独立,因此,可以采用内核线程形式来实现。RTLinux支持POSIX标准,每一个任务创建一个实时线程。非实时部分软件运行于Linux用户空间,因此可以直接利用Linux中丰富的函数库资源。非实时软件主要包括人机界面,它完成信息显示、程序编辑、参数设置等功能。 ② 基于Intime Windows实时内核的操作系统。 同标准Linux系统一样,标准Windows系统也不是一个实时操作系统。针对标准Windows系统实时性方面的不足,Intime Windows的解决方案如图35所示。 图35基于Intime Windows的数控系统软件结构 如图35 所示,数控系统是一个综合多任务系统,既有实时性要求较高的插补、刀补、位置控制等,又有实时性要求较低的信息显示、参数设置等任务,所以在系统结构设计时,同样把实时任务和非实时任务分开运行。实时任务运行在Intime内核中,根据处理结果实时控制数控机床终端硬件设备。非实时任务运行在Windows内核中,进行人机界面的显示操作等。 (3) 应用层 应用层软件主要指多个相对独立的应用任务,每个应用任务完成特定的工作,如I/O任务、计算任务、通信任务、人机界面等,由操作系统调度各个任务的进行。它由基于操作系统的应用程序组成,用来实现对被控制对象的控制功能。应用层是面向被控制对象和用户的,为了方便用户的操作,往往需要友好的人机界面。应用程序运行在操作系统之上,通过对操作系统接口函数的调用,实现系统如采集诊断、运动控制等具体的应用功能。各种任务以应用程序的形式集合在应用层,服务于不同的功能模块。在操作系统的支持下,每个任务都被分配到一个优先级,根据优先级别的高低,动态切换任务,以保证实时性的要求。此外,操作系统根据每个任务的要求,进行资源管理,合理分配资源,实现消息管理、任务调度和异常处理等任务。 数控系统是一个专用性很强的多任务调度运行系统,按照任务运行实时性强弱的划分方法,一般将数控系统的任务划分为管理任务和控制任务两大类,如图36 所示。其中,控制类任务的工作与数控加工直接相连,对实时性要求高,而管理类任务的工作对实时性的要求相对较低。系统的控制任务又可细分为位置控制、轨迹插补、指令译码、I/O控制、误差控制、状态实时监控与故障诊断等子任务; 系统的管理任务则包括人机交互管理、显示管理、数据管理、通信管理和网络管理等子任务。另外,在实际的开发设计中可根据需要对各个子任务进行进一步细分,形成一个任务集合,该集合中的任务都必须根据外部事件及时被激活运行,同时结合具体的加工情况,由操作系统统一调度,动态地对任务进行优先级控制,以适应不同加工任务的要求。当有高优先级的任务进入任务列表时,内核通过优先级抢占调度方式切换到高优先级的任务; 当同等优先级的多个任务进入任务列表时,内核通过时间片轮转调度法实现多任务的并发控制。操作系统具体的多任务调度机制已在上一小节给出详细解释。 图36数控系统应用层任务划分 通过系统软件的分层可以实现“高内聚”和“低耦合”,每层功能上独立,减少依赖关系,扩展性、可维护性增强。另外,每层之间实现指定功能,与其他层之间通过指定接口建立联系,可移植性大大提升。 2) 功能模块化 对数控系统的功能进行模块化开发,使其基础软件模块具有可重用性,提高系统的可维护性、可扩充性是开放式数控系统实现开放的必要条件。数控系统功能模块化也称软件芯片化,是指采用面向对象的技术,对数控系统的功能划分,把一些通用模块做成独立的可重用的对象类,建立类似于硬件芯片的数控系统软件芯片库。当开发新的数控系统时,只需从软件芯片库中取出相应的模块加以组合即可,必要时加以扩充,而无须从头开发整个系统,这样便改变了数控系统的封闭式设计,提高了整个系统的灵活性,实现了数控系统开放性设计,使资源得到重用 。利用软件芯片构建数控系统的过程如图37所示 。 图37基于软件芯片库的数控系统的构建过程 (1) 软件芯片的特点 软件芯片也可称为软件组件,是运用类属化(参数化)、抽象(包括数据抽象、功能抽象)、封装、继承等现代软件工程技术设计的,完成特定任务、并具有良好接口的自包含实体。它具有以下突出特点 : ① 内部黑箱封装。 设计软件芯片的目的即决定了软件芯片需要具有较强的独立性。为了实现这一要求,软件芯片被封装成一个紧密的整体。将软件芯片内部的具体实现与外在表现分隔开,使软件芯片的内部在生成对象之外不可见,并只能由其自身的方法对其进行操作。用户不必要去了解芯片内部实现的具体细节,可将注意力集中在系统开发和各芯片之间的相互关系等重要问题上。 ② 接口标准规范化。 软件芯片的内部被封装起来,通过预先设计的接口与外界交换信息、协调工作。数控领域中产品众多、厂家众多,其硬件结构、零件程序语法等各方面,以及不同用户的要求都有可能存在着差异,为了使数控软件芯片具有较强的适应能力和可重用性,必须使有连接关系的芯片共同遵守统一的接口标准。 ③ 多态性及继承性。 多态性即相同的操作可以作用于多种类型的生成对象上,并获得不同的结果,这是保证芯片间灵活通用的一个重要特性。它允许芯片的每个生成对象以适合自身的方式去响应不同的消息,增强操作的透明性、可理解性和可维护性。继承性是指在实际应用中,当用户的需求发生变化时,软件芯片要有适应用户需求变化的能力,用户可以在共享软件芯片原有的结构、操作和约束等特性的基础上,增加新特性或删除不需要的特性,使软件芯片具有灵活的可扩展性、可裁减性和可重用性。 (2) 功能模块的划分 目前,尽管数控系统从系统的设计方法到系统的实现方式千差万别,但是其基本原理和软件基本组成都是相似的,通过对数控系统及用户需求进行全面分析,总结现有系统控制结构的共同特征,对其进行适当的归类和抽象,可以将数控系统划分成各个小的功能模块,进而将其封装为软件芯片。一个系统的软件芯片划分原则和方法,以及软件芯片功能范围的界定,根据具体的情况,可以有所不同。通常按照功能独立、完整、功能内聚性原则,可将数控系统划分为以下几个功能模块 。 ① 人机交互界面模块。 此模块主要完成在系统运行前和运行后中系统参数的修改和设定,如设定系统工作模式(自动、手动、点动等)、图形显示模式、系统初始化设定、坐偏置设定、G