基于Windows驱动程序的实时系统的制作方法

文档序号:6433673阅读:399来源:国知局
专利名称:基于Windows驱动程序的实时系统的制作方法
技术领域
本发明涉及一种Windows系统实时扩展技术,尤其是一种将实时内核直接 嵌入到 Windows驱动程序中,以克服传统的Windows实时软件需修改Windows HAL源代码以及常用的前后台结构驱动程序实时扩展技术存在的实时性与稳定性差、控制系统开发与调试不方便的问题,具体是一种基于Windows驱动程序的实时系统。
背景技术
Windows是微软公司开发的窗口式多任务操作系统,作为目前PC最通用的操作系统,在其平台上进行工业控制系统的设计与开发具有很多的优势与便利。但是Windows系统并不是实时操作系统,为了满足工业控制领域的需求,必须对其进行实时性扩展。目前对 Windows系统进行实时性扩展主要有以下两种方法
一是采用商业的Windows实时扩展系统,如RTX等。RTX是基于Windows的实时控制软件,它通过对HAL的修改,在Windows线程和RTX线程之间增加一个中断间隔,使得 Windows线程不能中断RTX的实时线程,而RTX的实时线程能够随时中断Windows线程,同时Windows管理的设备也不能屏蔽RTX管理的设备,RTX管理的设备可以屏蔽Windows管理的设备,从而实现RTX系统的强实时性。作为成熟的商业实时系统,RTX提供了良好的实时性能和开发环境,但是开发授权费用昂贵,使得系统开发的成本增加。二是编写可以处理实时任务的前后台结构的驱动程序。所谓前后台结构,就是让系统中所有的实时任务放在驱动程序的中断服务程序中作为前台程序,非实时任务放在应用程序以及驱动程序的其它部分作为后台程序。这种方法比较简单,易于实现;但是由于所有的实时任务都集中在中断服务程序中,没有合理的任务管理和调度机制,不仅影响了系统的实时性而且使得复杂的控制系统设计难度大、可维护性差、升级不方便,因此只适用于小型的、对实时性要求不高的系统。此外,由于是在驱动程序的中断服务程序中进行实时任务开发,增加了系统开发与调试的难度,对于开发人员的要求较高。

发明内容
本发明的目的是针对商用实时系统成本高,而自行编写的实时程序不能应用于复杂的、对实时性要求高的控制系统的问题。为克服现有的Windows实时扩展技术的不足,设计一种能充分发挥嵌入式实时系统与Windows驱动程序的特点,成本低、实时性好的基于 Windows驱动程序的实时系统。本发明的技术方案是
一种基于Windows驱动程序的实时系统,它主要由四个部分组成实时系统的驱动程序及其动态链接库,实时系统的应用层模拟程序及其动态链接库,实时任务及其动态链接库和外部接口卡。所述驱动程序及其动态链接库为实时系统提供各种系统服务,如硬件数据读写,实时内核操作等,并且将接口函数封装在DLL中。开发者可以通过调用驱动程序提供的动态链接库进行系统的开发工作。此外,驱动程序还包含管理和运行实时任务的实时内核。实时内核拥有完善的任务管理功能、调度机制、同步机制以及时间管理等功能。实时内核通过直接操作CPU寄存器完成实时任务切换,以及对Windows系统的屏蔽和快速的中断响应实现其强实时性。所述应用层模拟程序及其动态链接库为控制系统提供应用层调试环境。由于实时任务以及各种系统服务都运行在Windows的驱动程序中,不便于系统的调试。因此,为了简化系统的调试工作,本发明在应用层为实时系统设计了模拟程序。模拟程序采用Windows线程模拟实时任务,任务调度由Windows线程调度器负责,采用Windows定时器 模拟实时内核的时钟中断,采用Windows的通信与同步机制模拟实时任务的通信与同步。与驱动程序相同,模拟程序也可为实时系统提供各种系统服务,并且将接口函数封装在 DLL中供应用程序调用。模拟程序虽然无法提供硬实时环境,但是仍然可以对实时控制系统各模块的功能实现以及运行过程的大多问题进行测试与修改,大大减少了在内核层调试的工作量,杜绝了内存访问违规等可能导致操作系统崩溃的错误,显著降低了系统的调试难度。所述实时任务及其动态链接库将实时任务模块本体从实时内核中分离出来,对其进行独立开发、调试。并且,将实时任务模块分别按照实时内核与模拟程序两种不同的运行环境进行编译,生成对应的动态链接库供实时内核与模拟程序进行调用,进行实时控制系统的运行与调试。所述外部接口卡为实时内核提供高精度高分辨率的定时器,同时可以为实时控制系统与外部被控对象提供数据交互与信号转换等功能。高精度高分辨率的定时器是实时系统实时性和稳定性的基础。目前,在Windows系统下可以通过两种方法获得高精度高分辨率的定时器一是修改Windows的HAL,RTX就使用这种方法,但这需要得到微软授权获得HAL的源代码才能进行;二是通过修改8254计数器的计数初值获得高精度的定时中断,但这会涉及到Windows系统工作的定时中断,操作不当会使整个系统不稳定甚至崩溃, 而且中断周期更改不方便。因此,本发明借助于驱动程序对硬件操作的便利,通过外部接口卡引入外部时钟,不仅软硬件开销很小,而且易于实现高精度高分辨率的定时、便于修改定时器的频率。本发明的有益效果是
本发明的基于Windows驱动程序的实时系统不仅解决了采用RTX等商用实时软件价格昂贵、控制系统开发与应用成本高等问题,而且有效克服了现有的采用前后台结构进行 Windows实时扩展存在的实时性与稳定性差、控制系统开发与调试不方便等问题。本发明的实时性与稳定性好。本发明的实时系统的实时内核能够抢占Windows线程,对Windows系统进行屏蔽,并且通过高精度的外部定时器、快速的中断响应以及实时内核独立的任务管理调度机制,使得实时系统具有良好的实时性与稳定性。本发明有利于各种控制系统的快速低成本开发。本实时系统通过实时内核进行实时任务的管理与调度,而且,实时任务在应用层进行开发,并以动态链接库的形式加载到实时内核中运行。此外,本实时系统将驱动程序中的各种服务封装成动态链接库,供开发者调用。这些方案降低了实时控制系统的设计与开发难度,改善了可维护性,提高了实时系统的通用性,使其可以方便应用于各种基于PC的工业控制系统。本发明调试方便。本发明的实时系统设计了应用层模拟程序,可以直接在应用层进行实时控制系统的功能调试,很方便地解决系统的大多数问题,很大程度上降低系统的调试难度,减少调试工作量。


图1是本发明的基于Windows驱动程序的实时系统框架图。图2是本发明的基于Windows驱动程序的实时系统结构图。图3是本发明的实时内核进入与退出的过程图4是本发明实施例全软件数控系统的结构图。图5是本发明实施例全软件数控系统的加工流程及任务时序图。图6是本发明实施例全软件数控系统的应用层与内核层之间数据传输与通信。图7是本发明实施例全软件数控系统的测试用例图形。图8是本发明实施例全软件数控系统的加工工件实物照片。图9是本发明实施例全软件数控系统的加工速度一时间曲线。
具体实施例方式下面结合附图和实施例对本发明进一步说明。如图1-9所示。一种基于Windows驱动程序的实时系统,它主要由四个部分组成(如图1、2所示) 1实时系统的驱动程序及其动态链接库
驱动程序为实时系统提供各种系统服务,如硬件数据读写,实时内核操作等,并且将接口函数封装在DLL中供实时系统的应用程序调用。此外,驱动程序还包含管理和运行实时任务的实时内核。实时内核拥有任务管理功能、调度机制、同步机制以及时间管理等功能。 实时内核通过直接操作CPU寄存器完成实时任务切换,以及对Windows系统的屏蔽和快速的中断响应实现其强实时性。2实时系统的应用层模拟程序及其动态链接库
由于实时任务以及各种系统服务都运行在Windows的驱动程序中,不便于系统的调试。为了简化系统的调试工作,本发明在应用层为实时系统设计了模拟程序。模拟程序采用Windows线程模拟实时任务,任务调度由Windows线程调度器负责,采用Windows定时器模拟实时内核的时钟中断,采用Windows的通信与同步机制模拟实时任务的通信与同步。 与驱动程序相同,模拟程序也可为实时系统提供各种系统服务,并且将接口函数封装在DLL 中供应用程序调用。模拟程序虽然无法提供硬实时环境,但是仍然可以对实时控制系统各模块的功能实现以及运行过程的大多问题进行测试与修改,大大减少了在内核层调试的工作量,杜绝了内存访问违规等可能导致操作系统崩溃的错误,显著降低了系统的调试难度。3实时任务及其动态链接库
为了方便实时控制系统的开发,将实时任务模块本体从实时内核中分离出来,对其进行独立开发、调试。并且,将实时任务模块分别按照实时内核与模拟程序两种不同的运行环境进行编译,生成对应的动态链接库供实时内核与模拟程序进行调用,进行实时控制系统的运行与调试。4外部接口卡
外部接口卡为实时内核提供高精度高分辨率的定时器,同时为实时控制系统与外部被控对象提供数据交互与信号转换等功能。详述如下为了保证实时内核的实时性,从实时系统的总体结构上使实时内核能够对Windows 系统进行屏蔽处理,使得Windows普通任务无法打断实时任务的运行,而实时任务在需要运行时却可以随时得到CPU的使用权。实现屏蔽的主要手段是更改Windows系统的IRQL(Interrupt Request Level,中断请求级别)在进入实时内核时使用内核 函数 KeRaiseIrql将IRQL提升至DISPATCH_LEVEL,由于Windows的线程调度器也运行在这一优先级,这样Windows将无法进行线程调度,从而保证实时任务不会被Windows的其他线程抢占;在退出实时内核时再使用内核函数KeLowerIrql恢复原先的IRQL,使Windows系统可以正常运行。将Windows系统屏蔽后,实时内核与Windows系统处于相互独立运行的状态,需要在驱动程序中处理实时内核的进入和退出操作,其过程如图3所示。从Windows系统进入实时系统有三种情况接收到来自应用程序(用户)的命令、来自被控制设备的中断请求以及实时系统的时钟中断。进入实时内核之前的操作主要由保存CPU寄存器、提升IRQL和修改系统标志位三个步骤组成。系统标志位是一些标志实时系统运行状态的全局变量;提升IRQL可以防止Windows线程打断实时任务的运行;保存CPU寄存器以便实时内核退出时可以恢复Windows的运行环境。相应地,实时内核只有在空闲任务中可以返回到Windows 系统,退出实时内核的过程与进入实时内核相反恢复系统标志位,恢复CPU寄存器和恢复 IRQL0实时内核采用一种基于静态优先级驱动的可剥夺型内核。每个任务都有一个固定的优先级,最高优先级的任务一旦就绪,就能得到处理。若一个比当前运行的任务优先级高的任务进入了就绪态,当前任务则被挂起,那个高优先级的任务开始运行。任务调度由实时内核的调度函数完成,其代码都是临界段代码,执行时需要关闭系统中断。实时内核的任务调度器确定了待运行的任务后,就需要进行任务的切换操作,使新任务得到运行。本发明实时内核的任务切换采用软中断来实现当软中断产生时其预先设定的中断服务例程就会被执行,因此将实时内核的任务切换函数设为软中断的ISR,这样当执行软中断指令“—asm int xx”时,任务切换函数就会作为中断服务例程得到执行,完成任务切换操作,转入待运行的实时任务。
下面以全软件数控系统为例对本发明的实施作更为详细的说明。本实施例在以本发明技术方案为前提下实施,给出了详细的实施方法和具体的操作过程,但本发明的保护范围不限于下述的实施例。本实施例为基于Windows驱动程序实时系统的全软件数控系统,其结构如图4所示,从图中可以看出整个数控系统分为应用层,内核层和多功能接口卡三个模块。应用层以实时系统驱动程序的动态链接库、实时系统模拟程序的动态链接库、微软基本类库和C++运行时库为基础完成全软件数控系统的非实时任务和弱实时任务。其中,非实时任务包括数控系统的人机交互模块与系统管理模块,主要实现用户与数控系统的直接交互与管理功能,包括系统界面、文件管理、参数管理、加工仿真和状态显示等任务。 弱实时任务包括NC代码翻译和刀具补偿任务。它们本身是速度控制、插补和位置控制等内核层功能模块所需数据的生产者,因此对实时性有一定需求。但是,由于在加工过程中这两个任务处理的数据不需要进行实时的改变,而且可以通过加大数据缓冲区的手段降低它们对实时性的要求,因此将它们放在应用层中,运行在具有较高优先级的线程中,以减少任务响应时间。内核层以Windows内核与实时系统的实时内核为基础处理全软件数控系统的系统服务、硬件中断和各种实时任务。其中,实时任务包括速度控制、轨迹插补、位置控制以及软PLC等任务。它们在加工过程中需要随时对外界情况作出响应,实时性要求高,运算相对较少,需要直接与硬件交互,因此运行在内核层的实时内核中,由实时内核进行管理与调度。此外,内核层还包括与应用层进行数据交互的共享内存区。多功能接口卡采用FPGA实现PCI等协议与PC机进行通信。对于数控系统,多功能接口卡采集码盘信号与各种开关量等机床信息并反馈给数控系统,另外它还给基于 Windows驱动程序的实时系统提供高精度的外部定时器。对于机床,多功能接口卡将数控系统发出的位置控制量经过数模转换驱动伺服系统工作,控制机床的主轴、进给轴与各种开关量。
整个全软件数控系统中各功能模块具体说明如下
人机交互与管理模块,处理数控系统与操作人员之间的信息交互工作,包括各种加工、 系统信息的显示、各种加工参数的配置与管理、运动方式控制、刀具管理和文件管理等。程序解释模块将NC代码转换成数控系统加工所需要的模态信息和轨迹几何信息,并按一定的数据结构进行保存。刀具补偿模块从程序解释模块获取加工数据,并使用C刀补对轨迹进行半径补偿与长度补偿,计算好的数据保存至共享内存区。共享内存用于数控系统应用层与内核层的数据交互,为非分页内存,由内核层驱动程序进行内存分配,然后映射到应用层,从而实现应用程序与驱动程序共享同一块物理内存。速度控制模块从共享内存区读取加工信息,根据加工需求采用基于目标速度的前瞻速度控制算法和梯形或S形加减速算法进行加工速度的计算。轨迹插补模块从速度控制模块获取加工信息,采用数据采样法进行空间直线与空间圆弧等轨迹的插补计算。位置控制模块根据插补任务输出的指令进给量和从多功能接口卡上获得各坐标轴的位置反馈量,采用PID等控制算法进行位置控制,并将结果输出给多功能接口卡以控制机床的运动。软PLC模块从多功能接口卡采集各种开关量,根据PLC应用程序进行逻辑运算生成控制命令,并将结果输出给多功能接口卡完成系统的开关量逻辑控制与过程控制。根据上述方案得到的全软件数控系统其具体的运行过程如下
PC机启动并装载Windows系统和基于Windows驱动程序的实时系统,启动本数控系统,进行系统初始化,包括初始化系统变量、创建通信事件和通信线程、创建各应用层模块线程、分配并映射共享内存、完成实时内核的初始化和实时任务的创建等工作。然后进行机床参数的设置,主要包括机床的最大速度、最大加速度和插补周期等参数。数控系统控制机床进行回零和对刀操作。回零使工作台移动到机床零点,建立机床坐标系;对刀则是为了建立工件坐标系,使得编程原点和机床原点建立对应关系。自动加工完成上面的准备工作后,就可以由用户指定加工程序并启动工件的加工,其大致流程为
程序解释与刀具补偿任务进行代码的检查、翻译与刀具补偿计算工作,并保存数据至共享内存区。管理任务启动实时内核,实时内核按照实时任务的周期进行调度,速度控制任务从共享内存区获取加工数据进行瞬时速度计算;插补任务根据速度和插补周期计算出位移并分解到每个轴上;位置控制任务从接口卡采样机床的加工位置再根据插补的输出进行位置控制计算,最后将结果发给接口卡控制机床加工;软PLC任务从接口卡采集各种开关量, 根据PLC应用程序进行逻辑运算生成控制命令,完成数控系统开关量的逻辑控制与过程控制。实时任务执行完成,实时内核将返回到Windows,由Windows线程调度器按照加工的实际情况进行程序解释、刀具补偿等应用层任务的调度。加工过程与任务时序如图5所示,其中实时内核时钟周期为1ms,位控周期为1ms, 速度控制与插补周期为2ms,PLC周期为4ms。全软件数控系统的应用层任务之间采用Windows的消息机制进行通信,并采用 FIFO队列进行数据的传送。为了使队列中数据类型保持一致,使用索引加轨迹信息的模式, 索引结构体保存数控系统的M、S、T等通用数据以及包含具体加工数据的轨迹信息结构体的地址。程序解释与刀具补偿任务分别维持一个队列,并根据队列的状态采用“生产者一消费者”的方式控制任务的同步执行,即当数据生成速度超过了数据的消费速度,则生产者线程进入等待状态;同样的,当数据消费速度超过了数据的生产速度,则消费者线程进入等待状态。对于应用层与内核层任务间的数据交互,为了减少内存复制带来的消耗,提高系统效率,采用在驱动层和应用层之间共享内存的方法。在Windows下共享内存的实现目前主要有两种手段由应用程序分配共享内存然后映射到内核层和由内核程序分配共享内存然后映射到应用层。应用程序将共享内存映射到内核层存在许多固有限制,而且使用不当容易造成系统崩溃。因此,本实施例采用由驱动程序分配共享内存然后映射到应用层的方法。首先在数控系统初始化时使用MmAllocatePagesForMdl函数分配共享内存,然后再调用MmMapLockedPagesSpecifyCache函数将共享内存区映射到用户层,应用程序通过映射内存的基地址就可以对共享内存进行访问。另外,本实施例采用命名事件对象的方法进行应用层与内核层任务的同步由应用程序以一个约定的名称创建一个事件对象,同时创建一个监控线程进行事件状态监控;在内核程序中通过事件名称来打开此事件对象,从而可以通过这个事件对象控制任务的运行。数据传输时,为了提高系统的实时性,将共享内存区划分为两块内核程序在一块内存上进行数据读取时,应用程序填充另一块内存,内核程序读完一块内存上的数据后进行换区读取,同时通过命名事件通知应用程序填充另一块内存,这样实现高效的数据传输工作。其具体过程如图6所示。本实施例使用Visual C++6. 0和Windows驱动程序开发包完成了基于Windows驱动程序实时系统的全软件数控系统的开发工作,并对其进行加工测试。测试平台为PC机一台,采用Windows Xp sp3操作系统,Pentium 2. OGHz的CPU,内存为512MB ;采用PCI总线的多功能接口卡一块;数控雕铣机一台。实验选用的测试用例如图7所示。对测试用例进行加工,得到图8所示的加工工件实物图,并采集三个轴的码盘反馈值,再根据脉冲当量与采集周期可以计算出加工的速度一时间曲线如图9所示。从图8可知,本实施例的基于Windows驱动程序实时系统的全软件数控系统可以完整地完成工件的加工工作,而且加工轮廓光滑,没有毛刺,具有较高的质量。从图9可以看出,在线段的拐点处数控系统进行了合理的减速处理,在勻速进给时速度也较为平稳,表明实时内核很好的完成了数控系统的实时控制任务。

为了进一步验证加工质量,对采集的脉冲进行轮廓度误差分析,发现加工的采样轮廓误差不超过1.5而且大部分分布在_广1区间。考虑到多功能接口卡的模拟量的输出精度和加工中的一些随机因素,可知本实施例的数控系统具有较高的加工精度。测试结果表明,利用本发明的基于Windows驱动程序实时系统开发的全软件数控系统可以很好的完成数控机床的加工控制,并且具有较高的加工精度,达到系统设计目标, 可以满足数控加工的控制需求。以上显示和描述了本发明的基本原理、主要特征和优点。本发明不受上述实施例的限制,上述实施例与说明书中描述的只是本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化与改进,这些变化与改进都落入要求保护的本发明范围内。 本发明要求保护的范围由所附的权利要求书及其等效物界定。
权利要求
1.一种基于Windows驱动程序的实时系统,由驱动程序及其动态链接库,应用层模拟程序及其动态链接库,实时任务及其动态链接库和外部接口卡四个部分组成,其特征在于 驱动程序及其动态链接库为实时系统提供系统服务,并且将接口函数封装在DLL中,此外, 驱动程序还包含管理和运行实时任务的实时内核;应用层模拟程序及其动态链接库为实时控制系统提供应用层调试环境采用Windows线程模拟实时任务,采用Windows定时器模拟实时内核的时钟中断,采用Windows的通信与同步机制模拟实时任务的通信与同步;实时任务及其动态链接库将实时任务模块从实时内核中分离出来,对其进行独立开发、调试;夕卜部接口卡为实时内核提供高精度高分辨率的定时器,同时为实时控制系统与外部被控对象提供数据交互与信号转换。
2.根据权利要求1所述的基于Windows驱动程序的实时系统,其特征在于所述的实时内核嵌入到Windows驱动程序中,拥有完善的任务管理功能、调度机制、同步机制以及时间管理功能,实时内核通过直接操作CPU寄存器完成实时任务切换,以及对Windows系统的屏蔽和快速的中断响应实现其强实时性。
3.根据权利要求1所述的基于Windows驱动程序的实时系统,其特征在于所述的应用层模拟程序为控制系统提供应用层调试环境,采用Windows线程模拟实时任务,采用 Windows定时器模拟实时内核的时钟中断,采用Windows的通信与同步机制模拟实时任务的通信与同步;此外,模拟程序也为实时控制系统提供各种系统服务,并且将接口函数封装在DLL中供应用程序调用。
4.根据权利要求1所述的基于Windows驱动程序的实时系统,其特征在于所述实时任务将实时任务模块从实时内核中分离出来,对其进行独立开发、调试,并且,将实时任务模块分别按照实时内核与模拟程序两种不同的运行环境进行编译,生成对应的动态链接库供实时内核与模拟程序进行调用,进行实时控制系统的运行与调试。
5.根据权利要求1所述的基于Windows驱动程序的实时系统,其特征在于所述外部接口卡为实时内核提供高精度高分辨率的定时器;高精度高分辨率定时器是实时系统实时性和稳定性的基础;而且,借助于驱动程序对硬件操作的便利,通过外部接口卡引入外部时钟,不仅软硬件开销很小,而且易于实现高精度高分辨率的定时、便于修改定时器的频率。
全文摘要
本发明公开了一种基于Windows驱动程序的实时系统,它涉及一种Windows系统实时扩展技术,以解决现有的采用驱动程序进行Windows实时扩展存在的实时性与稳定性差、控制系统开发与调试不方便以及采用RTX等实时软件进行Windows实时扩展成本高等问题。本发明的驱动程序及其动态链接库为实时系统提供各种系统服务,并且将接口函数封装在DLL中,此外,驱动程序还包含管理和运行实时任务的实时内核;应用层模拟程序及其动态链接库为实时控制系统提供应用层调试环境,采用Windows线程模拟实时任务,采用Windows定时器模拟实时内核的时钟中断,采用Windows的通信与同步机制模拟实时任务的通信与同步;实时任务及其动态链接库将实时任务模块从实时内核中分离出来,对其进行独立开发、调试。外部接口卡为实时内核提供高精度高分辨率的定时器,同时可以为实时控制系统与外部被控对象提供数据交互与信号转换等功能。
文档编号G06F9/48GK102346687SQ201110281539
公开日2012年2月8日 申请日期2011年9月21日 优先权日2011年9月21日
发明者游有鹏, 魏明江 申请人:南京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1