1数控系统实时性的现有解决方案
针对上述问题,当前主要有以下2种解决方法。
a.采用Windows系统的多媒体库MM SYT EM . LIB提供的多媒体定时函数。这种方法实际上也是通过挂接定时时钟中断回调函数来实现。
回调函数必须放在一个规定的段中,除简单的API以外,多数的Windows API不能使用。在Win dows系统本身所带的函数说明中,通过Time SetEvent设置的定时器定时时间可达1 ms的精度,但在M icrosoft公司出版的书中指出,该函数对于Intel芯片的精度为16 ms,对于M IPS芯片的精度为10 ms。总的说来,这种方法比Windows定时器精度要高许多,但仍然无法满足数控系统的实时控制要求。
b.对硬件直接编程。在计算机系统进入Win dows前对8253重新编程,将18. 2次/ s修改为所希望的周期。修改INT 8中断服务程序,每次定时时间到就调用另一个新中断号,并累计计时,若为55 ms则转入旧INT8中断服务程序入口,进入Windows以后挂接新的时钟中断即可实现所希望的定时时钟。使用这种方法可以满足很高的精度要求,但要求对Windows内核很清楚,在Windows内核资料非常少的情况下使用这种方法有相当的难度,而且这种方法易给系统带来隐患,导致Win dows系统本身的不稳定。
2新的数控系统实时性解决方案
为了在Windows平台上能完成实时控制,从硬件和软件2个方面来解决。
硬件方面,配比时钟电路。在制作接口卡上,利用一块型号为XC95108的CPLD芯片编程发送脉冲而得到时间信号,采用中断的方式来进行实时系统中各种任务的处理。它能够保证纳秒级的定时精度,且可随任务的不同而通过编程的方式将它的定时周期进行修改。
软件方面,则通过编写设备驱动程序来实现对中断信号的响应。设备驱动程序的编写采用Win dows DDK和Windows Platform SDK开发工具包。由于设备驱动程序运行于ring0层,它具有许多ring3层应用程序所不具有的能力,所以它能够很好的解决实时控制的问题。
采用驱动程序开发包开发实时控制引擎子系统,开发出了实时硬件抽象层( HAL) ,这个抽象层实现了实时控制引擎子系统与Windows之间中断的绝缘性。Windows不能屏蔽由实时控制引擎子系统管理的中断。
3在Windows中对中断的处理方案
在DOS环境开发程序时,用户可以直接修改中断向量,挂接自己的中断服务程序ISR ( interrupt service routine) ,从而实现对硬件I/ O接口板产生的中断请求进行响应。但是在Windows环境,操作系统将系统内核和应用程序进行隔离,不再允许用户层程序修改设备的ISR.基于此,采用驱动程序独辟蹊径,提供一种联系用户程序和设备ISR的中断处理机制,称为事件同步机制。事件同步机制适用于事件中断和时间中断的处理。
事件同步机制其原理是,能够让设备ISR和上层用户程序共享一事件,实现用户程序和设备ISR同步,从而让用户程序感知硬件设备的中断请求。
具体实现方法是这样的,在用户程序中创建一同步事件,利用驱动程序提供的API函数GT _Se tIntSyncEvent ( HEVEN T hIntEvent)向设备ISR设置同步事件。此后,用户程序和设备ISR就是两个共享同步事件的普通进程,一般情况用户程序为了不阻塞自己,会启动一个新的线程,在该新线程中调用WaitForSingleObject( )等待事件有效。一旦设备产生中断,设备ISR激活中断同步事件。此时用户线程从WaitForSingleObject处被激活,开始执行线程的后续部分。