PC機及兼容機內存通常包括基本內存(640K)和擴展內存(XMS),擴展內存(XMS)可以通過EMM386.EXE仿真為擴充內存(EMS),擴展內存通常是指1M尋址之外內存,在擴展內存規范中。擴展內存也包括高端內存區(HMA)和上位內存塊(UMB)。基于DOS下應用程序開發,通常是在實模式下運行,只能使用基本內存640K范圍以內,有些數控軟件,如工程計算,設計分析,圖形信息處理等都涉及到大量數據計算及中間過程,如果只有640K內存無法滿足需要;如果將文件保存到硬盤,再從硬盤調用,顯然速度太慢,效率低。由于數控系統要求實時控制,所以,一般在DoS實模式下開發。如果只用常規內存,除了DOS操作系統,數控系統數控軟件本身等以外,剩下的內存只有500K左右,一次可以容納的數控加工代碼非常有限,而在數控加工中心上加工三維曲面,其加工代碼一般為幾兆基至幾十兆字節,目前解決的辦法是用一臺PC機作主機和數控系統之間通過RS-232串行口相連,做DNC傳輸控制。數控系統一邊接收PC機傳來的NC代碼存入內存緩沖區,一邊控制機床運動,通過內存緩沖區的不斷刷新來實現大程序量的NC代碼的加工。這樣,需要有另外一臺PC機專門為它服務,浪費資源,同時,傳輸過程中容易產生錯誤或傳輸中斷,使得加工過程不可靠。為此本文開發了一個完整的在DOS實模式下調用擴展內存(XMS)進行存取數據的程序模塊,同時提供了調用接口,該模塊使用C語言和嵌套匯編語言混合編程,將此模塊加入到數控系統數控軟件中。這樣在數控系統數控軟件中就可以直接處理大程序量的NC代碼了。另外,在系統數控軟件界面設計、圖形顯示、屏幕保護、內存緩沖等方面都可以使用擴展內存,以提高運行速度,特別是多屏幕之間切換需要占用大內存時,Ⅺ瞞的使用尤為重要。
1 數控軟件功能模塊分析
擴展內存是通過專用XMS驅動程序實現,它是HIMEM.SYS程序中一個子模塊,它的使用要求計算機在啟動配置文件config.sys中有device=himem.sys這一句oXMS驅動程序提供五組功能:驅動程序信息,HMA管理,A20線管理,擴展內存管理和上位存儲區管理,另外兩個功能是檢查XMS驅動程序是否存在和XMS驅動程序控制地址。后面的源程序主要完成以下幾個功能:
(1)int XMS-test(void)測試擴展內存是否存在,如不存在則退出;如存在調用int 2fh中斷并取得XMS驅動程序入口偏移地址,并存入函數變量XMS-control中,以供數據移動時調用。
(2)int XMS-avail(void)返回擴展內存中最大自由塊大小,并存入變量TotalFreeMemory中。
(3)int XMS-anoc(int KSize)申請擴展內存,申請大小為KSize。單位為K字節,如果申請成功。返回句柄為handle。
(4)int INIT(void)用戶開發程序在使用擴展內存之前,只要調用這一個模塊進行初始化就可,它實際上是連續調用上面(1),(2),(3)三個模塊。
(5)int MoveXMS(10ng int source-addr,long int dest-addr,int source-handle,int desthandle,long int sk)
本功能不僅可把數據塊在常規內存區和擴展內存問移動,也可把塊在常規內存內部或擴展內存內部移動。用戶開發程序使用擴展內存存取數據主要使用這一個模塊就可。80urce-addr為32位源偏移地址值。dest-addr為32位目的偏移地址值。source-handle為源塊句柄。dest.handle為目的塊旬柄,Count為需傳送的32位字節長度,但長度必須為偶數,否則會出錯。如果為常規內存,貝0對應的句柄值為O,對應的偏移值為緩沖區內數據塊頭指針值。
(6)int FreeXMS(int handle)釋放句柄為handle部分擴展內存。
2 返回錯誤代碼
所有調用返回寄存器相同,AX為狀態寄存器,如果AX等于0000H,調用失敗;如果AX等于o001H,調用成功。3 各模塊源程序清單
4 結束語
該源程序全部上機調試通過。并應用在數控系統軟件和某建筑工程結構設計數控軟件中,都取得良好效果,由于突破了DOs實模式下常規640K內存的限制。使得軟件性能大大提高。
(審核編輯: 智匯胡妮)
分享