Windows95平台下数控系统实时控制的研究

2023-10-09 20:10

本文主要是介绍Windows95平台下数控系统实时控制的研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Windows95平台下数控系统实时控制的研究

付永忠 殷苏民

摘 要:Windows95是目前最流行的PC机操作系统,开发基于Windows95下的数控系统具有重要意义.通过分析Windows95中断机制和内核结构,提出了利用Windows95的中断调用、多媒体定时器或虚拟设备驱动程序等实现实时控制功能的几种方法,并分别进行了较详细的阐述.
关键词:数控机床;实时控制/ Windows95
中图分类号:TG659  文献标识码:A  文章编号:1007-1741(2000)01-0049-04

A Research on Real-Time Control of CNC Based Windows95 Platform

FU Yong-zhong , YIN Su-min
(School of Machanical Engineering , Jiangsu University of Science and Technology ,Zhenjiang ,Jiangsu 212013,China)

  Abstract:Windows95 is the most popular operating system used by PC, so it is very significant to develop CNC based Windows95.By analyzing the interruption architecture and kernel structure of Windows95,the authors put forward and expatiate upon several methods in which interruption architecture of Windows95 ,multimedia timer or virtual device driver are utilized to realize real-time control.
  Key wordsnumerically controlled machine tools;real-time control systems/Windows95

  基于PC机的数控系统是数控系统发展的必然趋势,其中的一个重要原因就是PC机能运行通用的操作系统(如:DOS,Windows),并且有大量的相关应用软件可供使用.基于DOS操作系统的数控系统经过十几年的发展,技术已经比较成熟.Windows操作系统特别是Windows95的推出,使PC机的操作系统发生了革命性的变化,与DOS相比Windows95主要具有以下优点:
  (1) 友好的图形界面和丰富的资源;
  (2) 操作、配置方便;
  (3) 支持基于线程的抢先式多任务机制;
  (4) 运行机制更加安全,一个应用程序崩溃不会影响其他程序的运行.
  也正是以上这些优点,使Windows成为最流行的PC操作系统,而在Windows平台上开发数控系统也就成为一个热点.开发数控系统最关键的问题就是如何实现实时控制,笔者针对Windows95的体系结构和自身特点提出三种实现实时控制功能的方法.

1 实时控制功能的实现

1.1 利用Windows95中断机制实现实时控制
  在DOS操作系统上实现实时控制的主要方法是利用PC机主板上的8253定时器的CNT0通道提供的定时脉冲作为INT 08H的中断源,通过调用INT 08H对中断服务程序进行周期性处理,由此实现实时控制.由于Windows95兼容DOS模式,所以能提供类似于DOS的中断调用,但有所不同的是Windows95运行于保护模式,因此与实模式DOS下中断有所区别.
  Windows95的中断机制根据处理方式不同,可分为两种:一种是利用IDT(不是DOS下的IVT)中的特殊句柄,通过虚拟8086将CPU转为实模式来获得原来BIOS或DOS中断调用,因此,根据这种方式实现实时控制的方法与在DOS下的方法基本相同,本文不再论述;另一种中断方式完全运行于保护模式下,这种中断直接查IDT表即可.Windows95在这种方式下支持DOS全部硬件中断和大部分软件中断,只是实现方法与DOS下不同.Windows95的虚拟机器管理器(VMM——Virtual Machine Manager)提供一种DOS保护方式接口(DPMI),利用这种接口既可用于DOS又可用于Windows调用,既可访问保护模式扩展内存又可访问实模式扩展内存.这种接口服务由一些INT 2FH和INT 31H中断功能组成,而不再是实模式DOS下的INT 21H,其中INT 31H中的0204H功能用于保存当前中断向量,0205H功能用于设置新的中断向量,这两种功能类似INT 21H中的35H和25H.因此,利用这两个功能调用INT08H中断,同样能实现实时控制,只是中断调用运行于保护模式.下面给出用VC以保护模式实现中断的程序清单,由于Visual C5.0不支持setvect(),enable(),disable()等函数,这里只能用汇编语言实现.

#include <stdafx.h>
/*保存原来中断向量*/
void FARPROC (*Old Isr)(void);
/*实现实时控制的函数*/
void FARPROC LpIntSub(void)
{  _asm CLI   //禁止中断
  {//在这里实现实时控制的全部功能,如插补}
   _asm STI //开中断
};
/*用于保存中断向量的地址*/
FARPROC Save Vect(unsigned vector//中
         // 断号)
{ FARPROC Lp; //回调指针
_asm
{ CLI  //禁止中断       };
PUSH AX  PUSH BX
PUSH CX  PUSH DX
MOV BX, vector //保存中断向量
MOV AX,0205H //取得功能号
INT 31H  //调用INT 31H
/*将中断程序偏移地址赋给DX*/
MOV WORD PTR Lp, DX
/*CX处理程序选择子*/
MOV WORD PTR Lp+2,CX
POP DX  POP CX
POP BX  POP AX
STI//开中断
}
return Lp;//返回中断函数地址指针
};
/*安装中断服务程序*/
void Set Vect(unsigned vector,
FARPROC LpIntSub)
{_asm{ CLI
PUSH AX PUSH BX
PUSH CX PUSH DX
/*CX处理程序选择子*/
MOV CX,SEG LpIntSub
    /*偏移地址赋给DX*/
MOV DX,OFFSET LpIntSub
/*获取中断向量*/
MOV BX, Vector
/*获取中断向量*/
MOV AX,0204H
INT 31H //调用INT 31H
POP DX  POP CX
POP BX  POP AX
STI
  }
void InitializeInt(void)
{ //保存原中断向量
  Old Isr=Save Vect(0x08);
  _asm CLI  //禁止中断
  _outp(0x43,0x36);//设置中断
  /*为16位的低8位写入数字*/
  _outp(0x40,0x4B);
  /*为16位的高8位写入数字*/
  _outp(0x40,0x17);
  _asm STI  //开中断
  /*安装新的中断服务程序*/
  Set _Vect(0x08H,LpIntSub);
  /*还原原来的中断服务*/
  Set_Vect(0x08H,Old Str);
};

1.2 利用多媒体定时器进行实时控制
  消息驱动机制是Windows95的运行机制,也是它的核心.在Windows消息中有一个WM TIMER,它触发一个定时器,每隔一定时间处理程序一次.但是由于WM TIMER被认为是不重要的消息,因此容易造成消息阻塞,不可能具有实时响应能力.为了弥补这一缺陷,微软公司在多媒体Windows中提供了高精度定时器的低层API支持,这一定时器称为多媒体定时器,它不但可以提供最小1ms的周期,而且实时性很强,可以满足数控加工的需要.表1给出了用多媒体定时器实现实时控制有关的Win32 API函数.

表1 多媒体定时器函数
Tab.1 Multimedia timer functions

函  数说  明
TimeBeginPeriod()建立最小的定时器精度
TimeEndPeriod()消除所设置的定时器精度
TimeGetDevCaps()返回有关定时器性能信息
TimeKillEvent()取消一个定时器事件
TimeSetEvent()创建一个定时器事件
  在程序开始启动一个定时器之前,必须用TimeBeginPeriod()函数建立应用程序希望使用的最小定时器精度,当定时器服务完成时,必须调用timeEndPeriod()函数来清除最小定时器精度.下面给出一段在VC5.0平台上实现的多媒体定时器服务程序的部分程序清单.

#include “StdAfx.h” //标准头文件
/*多媒体API包含文件*/
#include<mmsystem.h>
/*系统能支持的最小周期分辨率*/
UINT timerRes; //定时器分辨率
UINT timerID; //多媒体定时器标志号
UINT resolution;//给定的周期分辨率
DWORD User=0; //用户提供的回调数据
/*响应多媒体定时器的回调函数*/
extern “C” void CALLBACK TimerProc(UINT id, UINT msg, DWORD dwUser,DWORD dw1,
DWORD dw2)
{
  //在此实现实时控制功能
};
/*安装多媒体定时器*/
bool startTimer(UINT period/*定时器周期*/)
{ bool res = false;
  MMRESULT result;
  /*定时器分辨率结构对象*/
  TIMECAPS tc;
  if (TIMERR NOERROR==
  timeGetDevCaps(&tc,sizeof(TIMECAPS)))
  {
  timerRes=max(tc.wPeriodMin,
  resolution); //获取最小分辨率
  timeBeginPeriod(timerRes);
  //设置定时器最小精度
  }
  /*启动定时器事件*/
  result=timeSetEvent(period,
  timerRes, TimerProc, User,
  TIME_PERIODIC);
  /*判断定时器是否安装成功*/
  if (NULL != result)
  { timerId=(UINT) result;
   res=true;
  }
  return res;
};
/*删除多媒体定时器*/
bool stopTimer()
{ MMRESULT result;
  /*取消多媒体定时器事件*/
  result=timeKillEvent(timerId);
  if (TIMERR_NOERROR == result)
  timerId=0;
  if (0 != timerRes)
  {/*清除设置的最小定时器精度*/
   timeEndPeriod(timerRes);
  timerRes=0;
  }
  return TIMERR_NOERROR==result;
};

  多媒体定时器函数的形式参数的详细含义请查阅文献[4].
1.3 利用Vxd实现实时控制
  Windows95操作系统的核心是虚拟机器管理器(VMM),整个系统分为4个特权级,其中VMM处于最高级别0级,应用程序处于最低级3级(见图1).

t5101.gif (1849 bytes)

图1 特权级分配图
Fig.1 Privilege class assign

  VMM主要实现任务调度,虚拟内存操作,程序装入及终止等功能,处理来自定时器、鼠标器、COM端口中断以及出错和例外等情况.因此,考虑采用某种方法使应用程序获得特权级为0的VMM的中断功能,即可实现很强的实时功能,而实现这一功能的最好媒介就是虚拟设备驱动程序(Vxd).在Windows95的Windows\System目录下有一Vtdi.386程序,它可以提供虚拟定时器编程接口(VTDAPI),利用这个接口,可以编制一Vxd实现高精度的定时.下面给出用Windows95 DDK编写的Vxd的程序片断.

;获得VTADAPI入口 地址
INCLUDE VTDAPI. INC
;调用INT2FH的1684H进入Windows应用
MOV AX ,1684H  ;获取功能号
MOV BX, 05H;VTD设备号
XOR DI, DI;初始化
XOR ES, ES;初始化
INT 2FH;调用中断
;获取VTDAPI入口地址
MOV [VTDAPI_ADDR], DI
MOV [VTDAPI_ADDR+2], ES
;启动定时器,注册回调函数
VTDAPI_ADDR
LES DI, TimerParams ;定时器结构参数
MOV BX, OFFSET TimerParams
MOV VTDAPI_ Start_User_Timer
;调用VTDAPI_Start_User_Timer
CALL VTDAPI_ADDR ;开始使用定时器
;获取定时器句柄
MOV WORD PTR [Timer_ID+2], DX
MOV WORD PTR [Timer_ID], AX
;定时器使用完,必须删除定时器
VTDAPI ADDR
LES BX, [Timer_ID];删除定时器句柄
;调用VTDAPI_Stop_User_Timer
MOV AX, VTDAPI_Stop_User_Timer
CALL VTDAPI_ADDR

  虚拟定时器结构请查阅Windows95 DDK的有关资料.

2 结 束 语

  利用Windows95的中断机制实现实时控制,实时能力较强,但是由于这种方法没有脱离DOS模式,不能发挥Windows的优势,所以一般不宜采用.使用多媒体定时器,需要占用很多CPU资源,影响其他程序的运行,同时也容易受其他程序的干扰,但是,由于现在的CPU运行速度越来越快,所以如果选用高性能的计算机,并对多媒体定时器精度进行适当修正,完全能满足数控系统的实时控制要求.对于第三种方法,虽然编制Vxd必须使用Windows95 DDK,而且基本上使用汇编语言,开发起来比较麻烦,不过由于使用Vxd实现实时控制的精度高且系统稳定性好,所以也不失为一种好的方法.

(责任编辑 陈持平)

作者简介:付永忠,男,江苏理工大学硕士生.
付永忠(江苏理工大学机械工程学院,江苏 镇江 212013)
殷苏民(江苏理工大学机械工程学院,江苏 镇江 212013)

[参 考 文 献]

[1]  魏晋鹏,等. Windows深入剖析—初始化篇[M]. 北京:清华大学出版社,1997.
[2] Jeffrey Richter.Windows95&Windows NT3.5高级编程技术[M]. 北京:清华大学出版社,1996.
[3] 王 敏.基于Windows的开放式数控系统研究[D]:[博士学位论文]. 北京:北京航空航天大学,1998.
[4] Microsoft Corporation. Microsoft Win32程序员参考大全(四)—函数(H-Z)[M]. 北京:清华大学出版社, 1995.

收稿日期:1999-06-17

这篇关于Windows95平台下数控系统实时控制的研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/175267

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle