关键词:PMAC;实时数据采集;双端口RAM;多媒体定时器;多线程技术
Abstract: The advantages and faults Data acquisition with multimedia timer are analyzed, and dual ported combined with multimedia timer are adapted in this paper, which experimentation results is effective on the Grinding of Camshaft. Compared with the way of multi-thread technique in data acquisition, this method is simple and the safety is well.
Key words: PMAC; Real Time Data Acquisition; Dual Ported RAM; Multimedia Timer; Multi-thread technique;
多媒体定时器由于定时精度高,因而在数据采集方面应用广泛。采用多媒体定时器对基于PMAC的数控机床进行运动参数采集,如果采集量较多而时间间隔较短,将会发生内存读取错误乃至死机,使加工程序中断,如不及时清除缓冲区内未执行的加工数据,下次启动时,将会造成开环 “飞车”,这是十分危险的。但采用PMAC的双端口RAM进行数据读取,不但有效避免了这一问题,而且还大大简化了数据采集过程,在数控凸轮轴磨床上进行的采集应用过程中,取得了满意的效果。该方法与采用多线程技术进行数据采集相比,优势明显。
1 PMAC卡简介
PMAC(Programmable Multi-Axis Controller,可编程多轴控制器)是美国Delta Tau公司九十年代推出的基于PC平台的开放式多轴运动控制器。它采用了Motorola公司的DSP56系列高性能数字信号处理器作为CPU,是目前世界上功能最强大的运动控制器之一,一个PMAC可以同时控制1~8根轴,多个PMAC级联最多可以控制128根轴,能够精确定位,在包装、装配、医药工业、机床等行业应用广泛。
2 多媒体定时器技术
2.1 多媒体定时器与普通定时器的比较
普通的定时器用函数SetTimer来设定,以毫秒为单位,但由于受到消息队列的处理速度和系统时钟频率的影响,采样周期最少为54.925ms,也就是说SetTimer(1,1,NULL)、SetTimer(1,50,NULL),采样的周期都大概为55ms。但使用Windows的多媒体定时器来代替常规的定时器,通过编程可以获得采集间隔为1ms或更短、分辨率为1µ m的定时,定时精度非常高,并且稳定性特别好[1] 。
2.3多媒体定时器的使用方法
在使用多媒体定时器前,需要确定操作系统多媒体定时器的分辨率范围。可以通过函数timeGetDevCaps来获得本计算机的多媒体定时器分辨率范围。使用多媒体定时器,主要分为以下几步:
1)设置多媒体定时器,采用timeSetEvent函数,该函数可以初始化多媒体定时器,确定采集时间间隔,并设置一个定时回调事件。
2)利用函数TimeProc定义回调函数,可以在该函数中添加代码,实现各种操作。
3) 调用函数timeKillEvent结束多媒体定时器。
3 基于双端口RAM技术的数据实时采集方式
3.1 PMAC数据读取的方式
现在通常采取两种PMAC数据读取的方式:一种方法是通过设置I变量来确定采集源和采集周期,从缓冲区中获得采集数据,这种方法可以采集任何PMAC有效地址中的数据,但比较复杂;另一种方法从I/O及运动寄存器中直接采集数据,通过设置M变量与运动参数在寄存器中的地址相对应,读取M变量的值采集数据,这种方法相对简单一些。
本文采取了另外一种PMAC数据读取方式:启动双端口RAM,利用双端口RAM所带的函数进行数据采集。这种方法更加方便,双端口RAM的函数封装了PMAC数据读取数据的过程,用户只须调用相关的函数即可从双端口RAM中直接读取运动参数,不需要设定采集源和数据地址。双端口RAM提供了许多运动参数采集函数,可以通过这些函数采集各个电机的状态、位置、速度、跟随误差等。例如:Double PmacDPRPosition(DWORD dwDevice,int motor,double units),该函数返回指定电机的实际位置。 参数dwDevice为PMAC卡的卡号,motor指电机号,units表示单位。通过适当的单位换算可以将电机的运动参数转换成相应轴的运动参数。如果PMAC的双端口RAM提供的函数仍不能满足需要,也可采用寄存器采集数据,双端口RAM也支持寄存器读取方式。
3.2双端口RAM技术
PMAC的Option2提供了一个8K×16位的RAM,允许PMAC和PC机之间共享一块快速内存,实现数据的快速传递。在机床的加工过程中需要在实时状态下进行快速的、大量的数据信息下载,同时又需要重复、快速的从PMAC中读取各电机的状态信息。电机的状态信息数据可以不停的更新并被PLC程序或被PMAC自动地写入双端口RAM中,如果不使用双端口RAM,这些数据必须使用PAMC的在线命令通过PC总线来存取。由于使用双端口RAM存取不需要经过通讯口发送命令和等待响应时间,所以要快的多[2]。下面是几个主要的双端口RAM后台定点数据报告功能函数[3]:
· 函数PmacDPRRealTime用于开启或关闭PMAC卡双端口RAM,并规定伺服更新周期 。
· 函数PmacDPRSetMotors用于设置PMAC卡,将电机的相关数据复制到双端口RAM中。
· 函数PmacDPRSetHostBusyBit用于通知PMAC卡,客户端将要 “读”双端口RAM中的数据。
· 函数PmacDPRGetHostBusyBit用于检查是否在进行双端口RAM的“写”操作。
以上四个函数联合使用就可以完成双端口RAM的初始化和数据采集准备工作。
4 应用实例
4.1 数控凸轮轴磨床实验系统简介
该数控凸轮轴磨床实验装置生成凸轮轮廓的运动方式为:X轴砂轮架水平往复移动和C轴工件主轴转动两轴联动,其主要硬件设备有工控机、PMAC卡、松下伺服电机、雷尼绍光栅、CBN砂轮、电主轴等。安装在X轴上的直线光栅分辨率为1µm,安装在C轴上的圆光栅分辨率为20µm。数控系统采用直线光栅采集X轴位移作为反馈,圆光栅采集C轴转角作为反馈,形成全闭环控制,如图1所示。
PMAC支持C++、VB、VC、Delphi等多种高级语,并提供了可供二次开发的动态链接库函数。该实验装置以Visual C++6.0为工具,开发了软件数控系统。在原有的数控系统的基础上,编写了数据采集和显示模块。
图1 数控系统的控制原理图
4.2确定定时精度和采集时间间隔
经过测试发现,软件数控系统所在操作系统的多媒体定时器定时范围是1ms—1000000ms。由于采样周期>=1.28ms,才可精确分析各种位置和速度曲线[5]。因此将定时精度定为1ms,采集时间间隔定为2ms。
4.3 编程思想
首先要进行初始化:开启双端口RAM,将伺服更新周期定为2ms,将所要采集的电机的数据复制到双端口RAM中,打开文件准备写入数据。开始采集时,先同知PMAC,将要“读”双端口RAM中的数据,然后检测双端口RAM是否在进行“写”操作,如果没有进行“写”操作,则启动多媒体定时器,调用回调函数完成数据采集和显示。采集完毕后,删除多媒体定时器、关闭双端口RAM,关闭数据保存文件。程序流程图,如图2所示。
图2 数据采集模块程序流程
回调函数部分核心源代码为:
XAPosition=PmacDPRPosition(0,0,1000); //采集X轴实际位置
sprintf(buf1,"%10.3lf",XAPosition); //将采集结果由double型转换成字符型
::SetDlgItemText(hWnd,IDC_EDIT1, buf1); //显示数据
fprintf(fGather,"%s\n",buf1); //将采集到的数据写入文件保存
……
本文只给出了X轴位置的采集代码,若要采集其他数据,调用双端口RAM中相应的函数即可。需要说明的是,PmacDPRPosition中的motor参数,应为当前轴号减1; PmacDPRPosition函数中的单位与文献[2]中介绍的寄存器读取方式的确定方式不同,如果希望以mm为单位,此处单位的意义应该是编码器发多少个脉冲X轴移动1mm。与由于编码器发一个脉冲X轴移动1µm,则编码器发1000个脉冲X轴移动1mm,因此,该处单位为1000。
4.4 采集结果
采集界面如图3所示
图3 采集界面
下面是加工过程中采集到的部分数据:
4.5 应用结果分析
经过测试发现,如果使用多媒体定时器和寄存器读取方式进行数据采集,当采集间隔为10ms、定时精度为2ms时,采集四个运动参数就会死机。而采用双端口RAM读取方式后,采集间隔为2ms、定时精度为1ms,采集四个运动参数系统仍然正常工作,解决了内存不足的问题,不但提高了采集精度,还提高了安全性,充分发挥了多媒体定时器和双端口RAM的技术优势。
5 与多线程采集方法的比较
多线程技术也是数据实时采集中常用的一种方法。Windows操作系统支多任务调度与处理,每一个进程可以同时执行多个线程,这意味着一个程序可以同时完成多个任务。多线程技术也可与PMAC的双端口RAM技术结合,将每个运动参数或者每个轴的运动参数作为一个线程,分别进行读写,完成快速时采集与显示。
但应该指出的是,多线程技术是一种比较难的技术,因为并发运行线程的并行性增加了代码的额外复杂度,所以多线程应用程序的编写和调试比较困难。在采集过程中,数据要在每个线程内分别写入文件进行保存,而各个线程又是相对独立的,因此要精确获得“同一时刻”的数据,十分困难。而且当涉及线程较多,频繁调用函数,很容易出现致命错误,十分危险。
而多媒体定时器数据采集、数据处理、数据保存,都在回调函数中进行,能够在“同一时刻”采集各种运动参数,方便了参数的对比,而且安全性好。
6 结束语
应用多媒体定时器与PMAC的双端口 RAM技术,对在基于PMAC的系统进行数据采集,定时精度高、采集时间间隔短,能够在“同一时刻”采集各种运动参数,方便了参数的对比,简化了数据采集过程,而且安全性好,是一种基于PMAC系统的数据采集的有效方法。
参考文献:
[1] 侯 明,王东兴.WINDOWS 系统高精度定时方法研究[J].《微计算机信息》(管控一体化).2006(3):262-264.
[2] 北京元贸兴控制设备技术有限责任公司. PMAC用户手册[M].1999:216-217.
[3] DELTA TAU Data System Inc. PMAC USER’S MANUAL[M]. USA:DELTA TAU Data System Inc,1999:60-64.
[4] 申 宇,马伯渊,张金楼. 基于PMAC卡的高速数据采集[J]. 机电工程技术,2006(4):96-97.