李英辉,王洪庆,张永生
(1.石家庄职业技术学院电气与电子工程系,河北石家庄050081;2.天津电气科学研究院有限公司,天津300180;3.河北传媒学院信息技术学院,河北石家庄050071)
数控机床(CNC)在当今工业控制中的应用领域十分广泛。X-Y 平台是CNC 的试验平台之一。CNC 在工作过程中,各轴要协调地运动,因此各轴的位置状态需要动态实时地显示。
随着自动控制技术的发展,以Windows系统为平台的实时控制系统得到广泛应用[1]。对于以Dos 系统为平台的控制系统,可以对硬件直接中断得到精确的实时控制。而Windows 是抢占式多任务操作系统,硬件资源由系统操作,应用程序不允许对硬件直接中断。在Windows 平台下实现精确实时控制值得研究[2]。
对于实时性要求不高的情况下,可以直接使用Windows提供的普通定时器。首先由函数Set-Timer()设置一定时器,在其参数中设定时间间隔,当达到设定的时间后,定时器发出WM_TIMER 消息到应用程序的消息队列中,将状态显示程序放在WM_TIMER 消息处理函数中,便可实现状态的动态显示。但是WM_TIMER消息优先级较低,且定时精度不高(约为55 ms)[1]。
X-Y 平台是高精度试验平台,因此其状态的实时显示需要有较高的定时精度,即运动控制程序与实时显示控制程序要实现同步,因此考虑采用Windows 下的多线程技术将每个任务放在不同的线程中,操作系统通过线程间快速反复切换来达到并行计算的效果。Windows 系统的多媒体定时服务很好地解决了这一问题,它拥有自己独立的线程,使应用程序可以得到周期性的时间中断。且优先级高,定时精度可以达到1 ms。
对于更高的定时精度要求,可以使用API 函数QueryPerformanceFrequency()和QueryPerformanceCounter(),其精度可以达到ns 级。但对硬件系统资源的要求较高。
综合X-Y 平台对运动状态显示时间精度的要求和系统资源的考虑,多媒体定时器更适于实现X-Y平台运动状态的实时状态显示。
以Visual C++为开发工具的多媒体定时器的使用步骤如下[3]:
1)设定多媒体定时器的有关参数。利用函数TimeGetDevCaps()确定定时器服务提供的最大和最小事件周期;用TimeBeginPeriod()设置最小时钟事件定时精度。精度越高,定时器消耗的系统资源越多。因此,在具体应用中应根据需要考虑精度设置。
2)启动多媒体定时器事件。用TimerSetEvent()函数初始化和启动多媒体定时器事件。函数原型具体如下:
MMRESULT timeSetEvent(UINT uDelay,UINT uResolution,
LPTIMECALLBACK lpTimeProc,DWORD dwUser,UINT fuEvent);
参数具体定义见文献[3]。
3)在回调函数中具体应用。LpTimeProc 表示事件回调函数的入口地址,由用户自己编写。如状态的动态实时显示程序就可以存在于这一步。但需要注意,此函数是全局的Windows API类型的函数,不是某个类具体的成员。
4)删除定时器以释放系统资源。定时器是一种有限的全局资源,创建得越多Windows系统的负担越重。因此,定时器不再使用后要调用TimeKillEvent()函数和TimeEndPeriod()函数来释放定时器资源和消除步骤1)中设定的最小时钟事件精度。
试验采用固高公司提供的X-Y 试验平台,试验设备主要有运动控制卡、伺服驱动系统、X-Y 平台、PC 机和显示器1 台。运动控制卡插入PC 机的扩展PCI 插槽,采用PC 机+运动控制卡的控制方式。固高公司以动态链接库形式(GT400.dll)提供给用户此控制卡的API 函数,用户可以调用这些函数用于X-Y 试验平台的运动控制,同时通过位置检测装置增量式光电编码器实时读取平台位置状态,并将数据信息反馈给PC 机实时显示,PC 机通过显示界面的控制操作向运动控制卡发出命令,实现平台的运动控制。
X-Y平台系统结构如图1所示。
图1 X-Y平台结构图Fig.1 X-Y platform structure chart
X-Y 平台运动控制系统是由控制计算机部分、伺服驱动部分、机械传动部分及检测部分组成,采用闭环控制方式,其结构如图2所示。
图2 X-Y平台运动控制系统结构图Fig.2 Structure chart of X-Y platform motion control system
本软件的编程试验在Visual C++6.0 编译器上实现。其软件控制框图如图3 所示,其中包括主控制界面、轴控制、坐标系控制、输入输出控制、平台操作控制、基本参数设置。
本文利用多媒体定时器主要完成实时轨迹显示部分。轴系和坐标系状态由于实时性要求相对较低,可以采用普通定时器实现。
图3 X-Y平台软件功能模块Fig.3 X-Y platform software modules
X-Y 平台软件编程试验充分利用了C++语言开放式的面向对象的设计思想。运动状态实时显示部分的程序框图如图4所示。
图4 X-Y平台实时状态控制流程图Fig.4 X-Y platform real-time status control flow chart
在工程中为多媒体定时器建立一个新类为CmultimediaTimer,首先在其头文件中定义:
将多媒体定时器封装成类,能在平台的各种控制类中调用多媒体定时器的函数,运动完成后可以通过调用CMultimediaTimer类的析构函数或Stop()函数来关闭多媒体定时器资源,这样可以保证在任意运动时刻只启动1 个多媒体定时器,实现了定时器资源的反复利用,节省了系统资源的消耗。
为了在其它的控制类中访问多媒体定时器类的数据,首先在使用多媒体定时器的类中定义多媒体定时器的对象。例如在坐标系控制类CCoodinateCtrl中:
定时器启动后,每隔设定时间就会执行1 次回调函数。回调函数定义如下:
其中,m_parent 为主控制窗口视类的指针变量;xpos和ypos为轴运动轨迹坐标点,初始化为视类中的坐标原点。
本文将多媒体定时器应用到X-Y 试验平台的运动状态实时显示中,实验证明能实现精确的定时。可以推广到高精度数控机床CNC 的实时中断控制和实时状态显示中。此外本软件采用开放性的设计语言开发,软件开发过程中留有冗余,可以在原有软件基础上进一步开发。
[1] 文清华,吴来杰,杨代华,等.Windows环境下数控软件实时控制的实现[J].机床与液压,2003,31(3):139-141.
[2] 王伟,徐国华.多媒体定时器在工业控制中的应用[J].微型机与应用,2001,20(12):8-10.
[3] 王文武,王诚,郝燕玲,等.多媒体定时器的定制和使用方法[J].计算机应用,2000,20(3):39-40.
[4] 杜诗文,宋建国,闫献国.基于Visual C++的数控软件的设计[J].山西机械,2002,31(1):11-12.
[5]陈德妙,张桂香.基于Windows 2000下开放式数控系统软件的开发[J].组合机床与自动化加工技术,2005,47(4):28-32.
[6] 付永红,熊飞丽,龙佑喜,等.基于Windows下数控软件的设计与实现[J].机电一体化,2001,8(1):28-31.
[7] 王洪刚,傅建中.基于线程技术的PC 数控软件设计[J].组合机床与自动加工技术,2004,46(1):31-34.