基于工控机的数控系统的实时控制设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于工控机的数控系统的实时控制设计

发表时间:2009-1-26 许燕萍杨代华来源:万方数据

关键字:工控机数控系统实时控制

信息化应用调查在线投稿加入收藏发表评论好文推荐打印文本

分析了Windows的定时器原理,设计了一种在Windows平台下执行的实时控制程序,实现了系统微秒级的定时,可满足数控系统运动时对实时性的要求。

0 概述

计算机数控机床(CNC)是20世纪70年代发展起来的机床控制新技术,它综合了计算机、自动控制、测量技术、机械制造等领域的最新成就,使机器工具的生产效率和加工精度得到了极大提高。数控技术的先进与否直接代表了一个国家的机械工业水平,数控产业对于国家的工业现代化,乃至于国家经济安全和国防安全都具有超越其巨大经济价值的战略意义。

数控系统是先进制造装备实现控制功能的核心部件。国内对数控系统的研究由于起步较晚,在技术上还落后于国外一到两代。目前数控产业的高端市场主要由西门子、发那克、GE等大公司主导,我国每年会进口上万台高档数控机床。因此,加强数控技术的研发,发展自主知识产权的数控系统势在必行。

实时控制是数控系统开发的关键技术之一,数控机床的精度一般可达到微米级,本设计主要用作教学实践用,对精度的要求不用太高,设计时可定为0.01 mm,此级精度对于普通的零件加工也是可以满足的。数控机床的速度一般为(2~20)m/min,若要达到0.01姗的定位,系统的响应需达到(0.03~0.3)脚,即需要微秒级的响应。不光是定位,在基于PC机的数控软件中,为了保证对控制对象的实时性处理,包括数据采集、速度处理、插补及位置伺服控制、事件处理等,每一项任务都要在规定的时间内完成。因此,对于底层控制程序的设计是非常重要的。

1 Windows的定时器原理

Windows是一个消息驱动式的操作系统,Windows消息提供了应用程序与应用程序之间、应用程序与Windows系统之间进行通讯的手段。应用程序要实现的功能由消息来触发,并靠对消息的响应和处理来完成。但由于消息传递是非抢先性的,不论事件消息的急与缓,总是按到达的先后顺序排队,这就使得一些外部实时事件可能得不到及时的处理,容易造成实时系统性能不稳定。对实时控制系统而言,在精确的时间段内及时响应消息是实时系统的根本,如果不能保证系统的实时性,实时控制系统也就失去了实际意义。在计算机数控系统开发中,数据插补是一件实时性很强的工作,它要求在给定的时间段内,必须进行插补工作。插补的品质直接决定了系统的加工速度和加工精度。在Windows环境下如何实现实时中断和控制是计算机数控系统开发中的难点之一。

2 实时控制解决方案

在各种实时控制系统中,实时时钟的控制都是关键技术。因为各种控制过程、控制任务都由实时时钟来推进。在Windows环境下,常用的实时时钟获取方法有下面几种:

a)设置Win32定时器并响应WM_TIMER消息来进行实时处理:这种方法是最简单的一类方法,在Windows环境下,各种可视化开发工具如VC,Delphi,C++ Builder等,都提供定时器控件Timer。通过设定控件的属性,并响应WM_TMER消息,可以实现一定的定时功能。但是由于Windows提供的定时器是建立在D0sICH中断的基础上,该中断每秒钟发生18.2次,即定时周期为54.945ms,该定时精度远不能满足数控系统对实时性的要求。另外,函数SetTimer ()中指定的计时周期虽以ms为单位,但这个值要转化为54.945ms的整数倍;定时器发送的WM_TIMER消息的优先级相当低,在应用程序的消息队列里要等高优先级的消息处理完后才能被处理。而且Windows在应用程序的消息队

列里只为一个定时器保存一条WM_TIMER消息。因此,WM_TIMER消息的处理带有很大的不确定性和非实时性,在多任务操作系统中,定时器消息往往不能得到及时响应,容易造成系统实时处理的不稳定,不能满足实时控制环境下的应用。因此这种方法只适合实时性要求不高的应用场合。

b)采用Windows多媒体定时器,通过设置回调函数进行实时处理:Win32函数提供的实时多媒体定时器,在多媒体扩展库MMSYSTEM.DLL中提供了高精度的定时服务。定时器的定时精度由多媒体时钟函数TimeBeginPeriod()设置,SetTimeEvent()函数设置定时器定时间隔并启动定时器。但资料表明,定时间隔在20ms以上的定时任务中,精度可保持在1ms左右;定时间隔在(7~20)ms之间,精度要视Windows系统的整体工作量和应用程序的任务而定,误差在(1~3)ms;7ms以下的软件定时一般难以实现,因为Windows系统本身的刷新任务及其消息循环等系统开销需要占用时间。并且这种方法占用了系统大量宝贵的资源,随着程序的运行,系统速度会变慢,而且当定时信号由用户提供或需要更高的中断频率时,这种方法就无能为力了。所以多媒体定时器只可满足一般数控系统对定时精度的要求,而不能满足高精度定时的要求。

c)使用QueryPerformanceCounter()函数结合多线程来实现:QueryPerformanceFrequency()和QueryPerformaneeCounter()函数是VC提供的仅供Windows 95及其后续版本使用的精确时间函数,并要求计算机从硬件上支持精确定时器。

QueryPerformaneeFrequency()函数和QueryPerformanceCounter()函数的原型如下:

BOOL QueryPerfonnanceFrequency(LARGE_INTEGER * lpFrequency);

BOOL QueryPerformaneeCounter(LARGE_INTEGER * lpCount);

数据类型ARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:

typedef union_LARGE_INTEGER

{

struet

{

DWORD LowPart;//4字节整型数

LONG HighPart;//4字节整型数

};

LONGLONG QuadPart;//8字节整型数

}LARGE_INTEGER;

在进行定时之前,先调用QueryPerformaneeFrequeney()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformaneeCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。

使用时需要自行编写消息循环程序,下列代码实现1μs的精确定时:

LARGE_INTEGER litmp;

LONGLONG QPartl,QPart2;

double dtMinus,dfFreq,dtTim;

相关文档
最新文档