前言
随着数控技术的不断发展,开放式、模块化和可重构等是当前数控系统开发的热点研究内容。实现技术也由硬件逐步转向软件,特别随着PC功能的日益强大、软件技术的标准化,中间件技术等不断发展、完善,基于软件的系统实现更易于满足数控系统开放式发展的需要。
目前数控系统结构常见的构造方式有PC+NC集成、PC+运动控制卡等,其中NC或运动控制卡完成插补、加减速控制等功能,PC完成代码解释、界面控制、仿真模拟等非强实时功能。软件数控的核心思想是使绝大部分的数控处理功能集中于软件完成,硬件只完成软件无法完成的驱动等基本功能。数控系统是强实时系统,时序要求高、采样周期短,而PC系统的特点是功能强大、多任务控制、实时性弱。如何解决两者在时序上的矛盾是基于软件数控开发技术的关键之一。目前主要采用在主流操作系统中扩展实时子系统的方法,使得主流操作系统能够实现短周期的精确定时,如陈宗雨等在Windows 2000/NT系统中扩展RTX实时子系统提高系统的实时性,朱达宇在Linux平台上采用RTLinux实时扩展来构建全软件的数控系统。
本文中数控系统结构采用基于PC无扩展全软件方式,插补和加减速控制等实时功能全部放在软件中实现。为了满足数控系统实时性要求,我们给出了基于通信定时触发的软件实时调度框架(Softreal time scheduling framework,SRTSF),通过模糊时间分配和数据资源约束驱动的方式,在满足整体实时前提下,可开放配置软件功能模块。
1 软件数控系统结构模型
如图1所示,数控系统体系架构分为两层:上层软件层和下层控制层。异于传统数控系统,软件层承担了几乎所有的数值计算与优化处理功能。然后通过通信模块与下位控制层运动控制模块进行数据传输,由运动控制模块根据控制数据完成对机床的驱动,实现位置、主轴的精确控制。上位系统主要完成加工程序解释、图形处理、插补、仿真、上下位机通信和界面控制等功能。软件层包括系统初始化和配置、任务服务、数据服务、实时功能组和非实时功能组等模块。
图1 软件数控开放式结构模型
在系统初始化时各模块被系统配置模块调用,声明自身的优先级、所属任务组以及调用机制,系统配置模块赋予各模块相应的优先级,并把对应的信息根据实时功能分类写入到任务服务。系统打开加工程序代码后,主要完成加工程序解释、图形显示、系统参数设置和轨迹、速度前处理等非实时功能。各功能模块根据需要可以向数据服务模块申请数据空间,也可以获取或存储其他模块开辟的数据内容,但需要给出获取数据或添加数据的约束机制,不能够任意的对数据进行无限制操作。开始加工后,系统运行两种状态——实时状态和非实时状态,实时状态下运行的模块具有高优先级,而非实时状态下运行的模块只能在所有实时运行模块空闲时,由任务服务启动。非实时模块没有优先级关系调度方式,只能根据先进先出的调度申请链表位置依次启动。
2 SIHSF总体架构和描述
2.1微机操作系统实时调度分析
以Windows系统为例,Windows系统为非实时运行系统,内核的调度周期是20 ms左右,无法满足数控系统所需的插补时钟周期的运行要求。但是Windows提供了抢占式多线程的调度方式,可以通过通信模块根据下位运动控制模块的反馈信号定时触发相应的处理模块,实现较为精确的定时控制(只提供10 ms以上的多媒体定时方式),但是其调度(包括软件和硬件中断)的触发响应却很快,完全能够满足数控插补时钟周期(一般可设为2 ms左右)。Windows系统设计时,为了保证系统的稳健性,线程状态包括待调度就绪状态、就绪状态、备用状态运行状态和等待状态等多种状态。Windows仍然不能精确保证通信所触发的模块能够马上运行(特别是相同或较低优先级状况下)。并且通信的触发信号只能保证所触发模块的运行,当多模块进行调度时,无法实现所有模块在准确时序下的运行调度。所以在Window系统中,如果不采用在操作系统上扩展子系统的策略,必须提供一套有效的调度机制和应用框架以解决上述问题。下面给出具体的调度框架描述。
2.2 SRTSF总体架构
如图2所示,SRTSF调度框架由任务服务、实时模块、数据服务和参数管理等模块组成。在实时功能模块中,与实时调度相关的为模块运行、状态设定、模块阻塞、请求调度、优先级动态设定和调度失败条件控制部分。模块运行是在数据充分、可运行状态下该模块的计算、绘图、通信等动作。实时模块在运行过程中,数据的充分性,也就是模块运行所需的数据资源约束状况会不断变化。当达到约束条件时,对模块的运行状态变量进行设定。当模块的运行状态变量设为不可运行时,模块处于阻塞状态,经过有限的阻塞时间后,模块发出请求调用的请求。当然由于windows定时的不精确,我们只有在模拟加工中采用有限时间阻塞。在实时加工中设为0。
图2 SRTSF调度框架模型
任务服务接受该模块的任务调度请求,然后调用模块状态管理操作,任务状态管理操作根据参数管理模块和数据模块的判定状态参数和约束机制进行评判,决定所请求调度模块是否满足被调度最低要求,如果满足则把该模块放入任务运行模块链表中。任务状态管理操作查询所调度模块是否满足被运行的设定条件。如果允许运行,则返回申请模块请求成功,设定所调度模块有激活信号,否则返回请求失败。申请模块根据返回信息和自身模块调度机制决定升高或降低本身的优先级以及是否重新启动模块运行。