最新新闻
我要投稿
联系电话:027-87592219/20/21转188
投稿邮箱:tb@e-works.net.cn
您所在的位置:首页 > 智库 > 智能装备

Windows环境下数控软件实时控制的实现

发布时间:2014-05-12 作者:文清华 吴来杰 杨代华 江进国  来源:万方数据
关键字:数控软件 实时控制 CNC 
本文探讨了在Windows 环境下精确时间实现数控软件实时控制的方法,并以实现M0I 功能为例,介绍了在VisuaIC + + 中用多线程和事件同步的方法解决实时控制中存在的问题。

 引言

  自1952 年第一台数控机床诞生以来,数控系统已经历了两个阶段和六代的发展。进入90 年代后,基于个人计算机(PC)的数控系统(简称PCNC)成为第六代数控系统的代表。作为CNC 发展的主要方向,PCNC 有成本低、开放性强、软件开发环境完备、软件资源丰富和良好的通讯功能等特点。从组成类型来看,目前“软件NC”和“NC 嵌入PC”是PCNC的主流形式。所谓“软件NC”,就是“CNC 的功能处理全产由PC 进行,并通过装在PC 扩展插槽中的接口卡对伺服驱动进行控制。其优点是编程处理相当灵活,数控软件的通用性强。缺点是实时处理比较困难,可靠性待进一步研究。目前,实时处理能力是制约PCNC 展的重要因素。在PC 的操作系统中,MS - DOS 是一个非实时单任务内核,Windows95 并不实时能系统的数控实时性能只能依赖系统设计和程序设计来保证。

1 数控软件的实时性

  PCNC 软件系统一般都包括:读取处理后的NC文件→译码→轨迹插补计算→伺服控制这样一个基本的加工循环,在未运行完最后一条NC 语句前,该循环将一直进行。显然,丙次循环之间总存在一定的时间间隔,而时间间隔的长短需要根据实际加工对实时性的要求来确定。

  对于控制精度要求不高的情况可以直接用Windows的计时器计时,在达到设定的时间后,计时器发出WM-TIMER 消息到应用程序的消息对列中,如果将上述循环程序放在WM-TIMER 消息的处理函数中,就可以方便地实现定时。但这种方法存在两个问题:一是WM-TIMER 消息的优先级比较低,只有当系统处理完消息队列中优先级较高的消息后,才会处理WM-TIMER 消息;二是计时器是以PC 硬件的时间中断次数来确定计时的长短,而时间中断的周期是以系统电子钏的时间为基准,固定54.95ms。由此可见,计时器的实际地精度大于55ms,只能用于实时性求不高的场合。

  大多数情况下,计时器都不能满足要求。为了增强控制程序的实时性,可以采用软件延时的方法,即在上述循环中放一段延时语句。对于毫秒级的延时精度,可通过调用Windows 的API 函数timeGetTime来实现,该函数采用了基于BIOS 的时间基准。以下是VC + + 中实现毫秒级延时的例子。

  void deIaytime(int timdeIay)
  {DWORD m-timerI;
  m-timerI = timeGetTime()
  whiIe((timeGetTime() - m-timerI) < timdeIay
  }

  timeGetTime 函数能实现毫秒级的延时,与计时器相比,时间精度得到了一定的提高。但毫秒级的时间精度并不能完全满足数控加工的要求。为了进一步提高时间精度,可以通过执行循环程序来实现(如用for 语句)。但这种情况下,循环次数不仅与延时的时间长短有关,还与计算机的硬件配置(如主频等)有直接联系。所以这种方法的最大弊端就是程序的移植性很差。

  如前所述,从时间精度的角度来看,计时器只能用于控制精度不高的场合,多数情况下需要用timeGetTime 函数或执行循环程序的方法。从获得精确时间的方式来看,计时器以硬件中断为基础,不“独占CPU”,而timeGetTime 函数和执行循环程序采用了延时的方法,程序在执行的过程中将“独占CPU”。如果应用程序仅有一个线程,即用户界面线程,一旦CPU 被“独占”,程序将无法接收、处理用户输入的消息和事件,这显然不能满足设计要求,所以必须考虑引入多线程。(注:由于Windows 是基于消息的多任务操作系统,这里的“独占CPU”并不表示一直完全占有CPU,而是表示在执行该线程的时间片内独占CPU,而其它时间片CPU 并非由该线程占有。)

2 多线程

  VisuaiC + + 中的线程分为用户界面线程(UserImterface Thread)和工作者线程Worker Thread)。用户界面线程的特点是拥有单独的消息队列,具有自已的窗口界面,能够对用户输入的事件和消息做出响应。工作者线程一般用于处理后台任务,仅由一个函数体实现,不处理窗口。

  在拥有多个线程的应用程序中,当两个或更我的线程同时访问同一数据时,就会导致不可预知的结果,因此必须保持线程间的同点。Visuaic + + 中有四种同步方法:临界段、信号灯、互斥量和事件。事件同步是通过将事件本身设置为有信号或无信号来通知其他线程某一操作已完成或尚未完成。下面以实现M01功能为例,介绍在数控软件中使用多线程和事件同步的方法。

2
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。