在Windows平台上进行数控系统开发是数控产品更新的标志和趋势。Windows是消息驱动的多任务环境,各种消息都按它们到达的先后顺序排队处理,即消息机制是不分任务的轻重急缓的,若无中断设置,仅凭消息调度机制,则不能保证数控前台控制任务在准确的时间间隔内执行,这正是利用Windows平台进行数控系统开发所要解决的关键问题。由于介绍这方面的资料甚少,所 以困扰着Windows平台下的数控软件开发,我们在仿形数控系统开发的实践中总结出以下原理、方法和思路。
1 Windows下拦截硬件中断的方法
实际上,Windows是在DOS内核上发展起来的,DOS的许多中断在Windows下仍然可用,所不同的是Wind ows运行于保护模式下,从而打破了实模式的IM可寻地址屏障。在实模式DOS下,中断通过中断 向量 表(WT)进行,其内存放着中断服务子程序的人口地址(段地址:偏移量)。Wind ows另外再产生一种新表,称为中断描述表(IDT),它包含了中断服务子程序的实际地址,即24位或32位的地址。
Windows下中断调用分为两种情况:一种是原来的BIOS或D OS中断,如计时器或键盘等硬件中断,通过Windows的IDT指向一个特殊的句柄,这个句柄将CPU转为实模式,然后查IV T获得实模式中断服务子程序。另一种是运行于保护模式的,它们查IDT后即可直接转人相应中断程序,如州121H中AH=25H/35H调用就属于这种情况,需要注意的是,Windows虽支持DOS的全部硬件中断和大部分软件中断,但与实模式DOS下的版本有所不同,且有些软件中断不再适用,故应用时应先查有关手册。
WindowS下IN121H中AH=25H/3SH这两个功能为设置和取得保护模式下中断向量,它们可以用来拦截硬件中断,使之触发所取代的中断服务程序在保护模式下运行。在数控后台主程序中利用这两个功能来拦截CPU的8253通道o计数器的硬件中断IRQ()所产生的INIUSH,从而实现数控前台中断控制服务程序定时执行。主程序在Windows的Borland C+ +3.1下开发,主程序初始化时,首先用SaveVector保存中断 向量,然后 用Se tVector设置新的中断向量,主程序退出时,用Setvector恢复原有的中断向量,下面给出自编的这两个函数。