在Windows平臺上進(jìn)行數(shù)控系統(tǒng)開發(fā)是數(shù)控產(chǎn)品更新的標(biāo)志和趨勢。Windows是消息驅(qū)動的多任務(wù)環(huán)境,各種消息都按它們到達(dá)的先后順序排隊處理,即消息機制是不分任務(wù)的輕重急緩的,若無中斷設(shè)置,僅憑消息調(diào)度機制,則不能保證數(shù)控前臺控制任務(wù)在準(zhǔn)確的時間間隔內(nèi)執(zhí)行,這正是利用Windows平臺進(jìn)行數(shù)控系統(tǒng)開發(fā)所要解決的關(guān)鍵問題。由于介紹這方面的資料甚少,所 以困擾著Windows平臺下的數(shù)控軟件開發(fā),我們在仿形數(shù)控系統(tǒng)開發(fā)的實踐中總結(jié)出以下原理、方法和思路。
1 Windows下攔截硬件中斷的方法
實際上,Windows是在DOS內(nèi)核上發(fā)展起來的,DOS的許多中斷在Windows下仍然可用,所不同的是Wind ows運行于保護(hù)模式下,從而打破了實模式的IM可尋地址屏障。在實模式DOS下,中斷通過中斷 向量 表(WT)進(jìn)行,其內(nèi)存放著中斷服務(wù)子程序的人口地址(段地址:偏移量)。Wind ows另外再產(chǎn)生一種新表,稱為中斷描述表(IDT),它包含了中斷服務(wù)子程序的實際地址,即24位或32位的地址。
Windows下中斷調(diào)用分為兩種情況:一種是原來的BIOS或D OS中斷,如計時器或鍵盤等硬件中斷,通過Windows的IDT指向一個特殊的句柄,這個句柄將CPU轉(zhuǎn)為實模式,然后查IV T獲得實模式中斷服務(wù)子程序。另一種是運行于保護(hù)模式的,它們查IDT后即可直接轉(zhuǎn)人相應(yīng)中斷程序,如州121H中AH=25H/35H調(diào)用就屬于這種情況,需要注意的是,Windows雖支持DOS的全部硬件中斷和大部分軟件中斷,但與實模式DOS下的版本有所不同,且有些軟件中斷不再適用,故應(yīng)用時應(yīng)先查有關(guān)手冊。
WindowS下IN121H中AH=25H/3SH這兩個功能為設(shè)置和取得保護(hù)模式下中斷向量,它們可以用來攔截硬件中斷,使之觸發(fā)所取代的中斷服務(wù)程序在保護(hù)模式下運行。在數(shù)控后臺主程序中利用這兩個功能來攔截CPU的8253通道o計數(shù)器的硬件中斷IRQ()所產(chǎn)生的INIUSH,從而實現(xiàn)數(shù)控前臺中斷控制服務(wù)程序定時執(zhí)行。主程序在Windows的Borland C+ +3.1下開發(fā),主程序初始化時,首先用SaveVector保存中斷 向量,然后 用Se tVector設(shè)置新的中斷向量,主程序退出時,用Setvector恢復(fù)原有的中斷向量,下面給出自編的這兩個函數(shù)。
2 數(shù)控仿形系統(tǒng)軟件基本結(jié)構(gòu)
在Windows平臺下開發(fā)的數(shù)控仿形系統(tǒng)可利用WindowS多任務(wù)的優(yōu)勢。此系統(tǒng)的任務(wù)有:系統(tǒng)參數(shù)輸人及修改,在線數(shù)控指令編程,圖形仿真,數(shù)控加工屏幕顯示,仿形和仿形加工顯示,數(shù)字化處理,在線監(jiān)測診斷等等。進(jìn)入系統(tǒng)后,對各軸伺服的控制是最重要的,如必須每sms進(jìn)行一次中斷服務(wù)控制,因為CPU中的定時器8253的O通道優(yōu)先級最高,故采用該定時器產(chǎn)生的INT08H中斷源,這樣無論Wind~在執(zhí)行何種任務(wù),對各軸伺服控制始終進(jìn)行著。對于系統(tǒng)的各種任務(wù),按Windows消息管理機制運行,其中對于機床坐標(biāo)顯示和在線監(jiān)控診斷又利用我們?nèi)〈腎NT08H中斷服務(wù)程序定時發(fā)出執(zhí)行消息,即中斷服務(wù)程序每執(zhí)行12次(12*8ms=96ms)發(fā)一次消息給Windows,以啟動機床坐標(biāo)屏幕動態(tài)顯示,每執(zhí)行125次(125*8ms=1s)發(fā)一次消息給Windows,以啟動在線監(jiān)測和診斷任務(wù),整個系統(tǒng)的關(guān)系結(jié)構(gòu)如圖1所示。
3 中斷服務(wù)程序框架與連接要點
為了最大限度的節(jié)省中斷處理時間,前臺中斷服務(wù)控制程序INTSUB.ASM采用80386匯編語言編程,中斷服務(wù)程序是整個控制系統(tǒng)的核心部分,該程序的框架如下
在Windows的內(nèi)存管理中,各應(yīng)用程序在內(nèi)存中是可移動的,為了防止中斷服務(wù)子程序在調(diào)用時被移出或切換出內(nèi)存,所以應(yīng)將它放人動態(tài)連接庫(.DLL)中,并在該動態(tài)連接庫的模塊定義文件(.DLL)中將其定義為固定的(FLXED)。對于主程序模塊MAIN.CPP,系統(tǒng)參數(shù)輸人及修改模塊MAIN.CPP,圖形仿真模塊CRA PH.CPP,數(shù)控加工模塊NCWORHK.CPP,仿形或仿形加工模塊COPYWORK.CPP,數(shù)字化處理模塊DIGTP.CPP,在線監(jiān)測診 斷模塊DIAG-NOSE.CPP等,均采用c++面向?qū)ο蟮木幊谭椒āF渲兄饕肳indows的各種類庫和資源,方便地生成各窗口和下拉菜單,并建立了自己的類庫,進(jìn)行函數(shù)和數(shù)據(jù)的封裝。以上程序的連接方法是,將中斷服務(wù)控制程序IMSUB.ASM及其模塊 定義文件州飛UB.DEF生成動態(tài)連接庫IN玲UB.DLL,再將該動態(tài)連接庫的輸人庫IN巧U B.llB及以上各功能模塊文件共同編人NCSYS,CPP工程文件中,生成我們的數(shù)控仿形軟件系統(tǒng)。
4 結(jié)束語
隨著工控機硬件的升級發(fā)展,在軟件方面可利用Windows的多任務(wù)、運行于保護(hù)模式的強大功能和豐富資源,進(jìn)行數(shù)控產(chǎn)品的更新?lián)Q代。本文探討了Windows的中斷機制,在此基礎(chǔ)上給出了前后臺式數(shù)控程序的核心部分,為Windows下開發(fā)數(shù)控系統(tǒng)打下了基礎(chǔ)。
(審核編輯: 智匯胡妮)
分享