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,调用成功。BL为返回错误代码寄存器,主要错误类型如下: