刘雄,李蔚洋,刘杰
(1.江钻股份有限公司,湖北潜江433124;2.江汉油田勘探开发研究院,湖北武汉430223)
在数控机床加工过程中,实时采集加工数据对加工过程进行控制与补偿是十分必要的。但对成熟的数控系统如西门子、FUNUC等而言,加工数据采集是十分困难的,用户无法进行进一步的监测与控制。基于PC的开放式数控系统,是对传统封闭式数控系统的根本突破,是当今数控技术的发展主流和研究热点[1]。因此,采用NC嵌入PC型结构对开放式数控系统进行了开发研究。
在数控机床系统的应用过程中,为了了解机床性能或进行一步控制,有许多数据参数需要采集,如机床各轴的运动参数、机床正在执行的命令、在线测量尺寸等[2]。在基于PMAC卡数控机床的数据实时采集过程中,采取了多线程技术与PMAC option2提供双端口技术相结合的采集方式,取得了满意的效果。
可编程多轴控制器(programmablemulti-axis controller,PMAC)是美国DeltaTau公司20世纪90年代推出的基于PC平台的开放式多轴运动控制器。它采用了Motorola公司的DSP56系列高性能数字信号处理器作为CPU,是目前世界上功能最强大的运动控制器之一,一个PMAC可以同时控制1~8根轴,多个PMAC级联最多可以控制128根轴,能够精确定位,在包装、装配、医药工业、机床等行业应用广泛。
该数控机床为非圆磨床,运动方式为:x轴砂轮架水平往复移动和c轴工件主轴转动两轴联动,其主要硬件设备有工控机、PMAC卡、松下伺服电动机、雷尼绍光栅、CBN砂轮、电主轴等。安装在x轴上的直线光栅分辨率为1μm,安装在c轴上的圆光栅分辨率为20μm。数控系统采用直线光栅采集x轴位移作为反馈,圆光栅采集c轴转角作为反馈,形成全闭环控制(图1)。
PMAC 支持 C++,VB,VC,Delphi等多种高级语,并提供了可共二次开发的的动态链接库函数。该实验装置以Visual C++6.0为工具,开发了软件控制系统,并开发了用于数据采集与显示的CStShow类,用于数据采集和显示及绘图。
图1 数控系统的控制原理图
文献[4]介绍了两种PMAC数据读取的方式:
1)从缓冲区中获得采集数据:在这种采集方式中,需要设定采集周期(变量I19)来决定在每个伺服中断周期内执行多少个数据采集周期,设定采集源选择标志(变量I20)来决定采集哪一个或多个数据源,以及设定采集源地址(变量I20~I44)。这种数据采集方式比较复杂,但应用灵活,用户可以通过设定采集源,采集任何PMAC有效地址中的数据。
2)从I/O及运动寄存器中直接采集数据:在这种采集方式中,用户只需要读取各个I/O及运动寄存器中的值就能得到需要的数据。由于PMAC将运行过程中各个电动机、编码器的各种数据自动的存放在相应的I/O及运动寄存器中,用户不需额外指定采集源,不必关心数据是如何存入、如何译码的,大大简化了数据采集的难度。
本文采取了另外一种PMAC数据读取方式:启动双端口RAM,利用双端口RAM所带的函数进行数据采集。这种方法更加方便,双端口RAM的函数封装了PMAC数据读取数据的过程,用户采集运动参数,只须调用相关的函数即可。例如:
Double PmacDPRPosition(DWORD dwDevice,int motor,double units)
该函数返回指定电动机的实际位置。参数dwDevice为PMAC卡的卡号,motor指电动机号减1,units表示单位。
PMAC的Option2提供了一个8K×16位的RAM,允许PMAC和PC机之间共享一块快速内存,实现数据的快速传递。在凸轮轴的加工过程中需要在实时状态下快速的大量的位置数据信息的下载,同时又需要重复的快速的从PMAC中读取各电动机的状态信息。电动机的状态信息数据可以不停的更新并被PLC程序或自动的写入双端口RAM中,如果不使用双端口 RAM,这些数据必须使用PAMC的在线命令通过PC总线来存取,由于使用双端口RAM存取不需要经过通讯口发送命令和等待响应时间。下面介绍几个主要的双端口RAM后台定点数据报告功能函数[5]。
1)BOOLPmacDPRRealTime(DWORD dwDevice,UINT period,int on_off)
该函数开启或关闭PMAC卡自动将定点数据写入双端口RAM功能;
2)voidPmacDPRSetMotors(DWORD dwDevice,UINT n)
该函数设置PMAC卡向双端口RAM中写入几个电动机的相关数据,参数n表示将1-n个电动机的相关数据写入双端口RAM中;
3)voidPmacDPRSetHostBusyBit(DWORD dwDevice,int on_off)
该函数通知PMAC卡,客护端将要进行读双端口RAM中的数据;
4)int PmacDPRGetHostBusyBit(DWORD dwDevice)
检查该函数是否正在进行双端口RAM的写操作。
参数说明:参数中period参数设置双端口RAM中数据的刷新周期,开启或关闭PMAC卡,将on_off设置为1或0。
Windows操作系统之多任务调度与处理,每一个进程可以同时执行多个线程,这意味着一个程序可以同时完成多个任务。在VC++6.0中,MFC类库提供了对多线程编程的支持,它把线程区分为两类:工作者线程和用户界面线程.工作者线程主要用来执行费时的后台计算任务,用户界面线程则一般用来处理用户的输入,响应用户产生的事件和消息。在MFC类库中,类CWinThread是用户界面线程的基本类。用MFC创建线程,只需编写一个与应用程序中的其余部分并行运行的函数,然后调用全局函数AfxBeginThread()启动线程,线程启动后调用辅助线程的回调函数,可以在回调函数中编写想要实现功能的程序代码。当然也可以设定线程之间的优先级,也可以保持线程间的同步。这对应用多线程进行数据采集来说,是很有用的。
要终止线程,可以在线程内部调用MFC的AfxEndThread()函数或ExitProcess()或SetEvent()进行有条件地结束线程,如果想从该线程外部结束该线程,可以使用Win32API函数TerminateThread()。等,但使用时一定要释放该进程所占的系统资源,否则这样会引起系统的不稳定。
在编写程序时为了避免显示过快而无法观察,在数据采集后立刻写入文件保存,而采用了间隔时间为55ms的定时器,用于慢速显示。用一个线程采集一个变量,以增加采集速度,并防止由于线程的相可以通过修改Sleep()函数中的参数,改变采集时间间隔。本文给出了采集C轴速度的代码,如果要采集更多的数据,再增加线程即可。
主要程序代码如下:
利用Visual C++,编写采集程序,采集加工过程中x轴实际位置、x轴实际速度、c轴实际位置、c轴实际速度。采集界面如图2所示。
如果将采集的变量写入到同一个文件,将会由于线程的独立性而导致乱码。因此编程中将每个变量分别写入单独的文件。下面是采集到的部分数据:
图2 数据采集界面
由采集结果可知,多线程采集具有很高的采样频率,而且与PMAC的双端口技术相结合,也简化了程序,加快了采集速度,这是一种很好的采集方法。
应该指出的是,多线程技术是一种比较难的技术,多线程应用程序的编写和调试比较困难,因为并发运行线程的并行性增加了代码的额外复杂度,在实验过程中就发生过多次调试问题。但是如果使用得当,多线程可以极大地改善一个应用程序的响应性能。
[1]韩军,史文浩.卧式车铣复合机床开放式数控系统的研究[J].装备制造技术,2009(5):26-27.
[2]彭宝营,韩秋实,孙志永.基于PMAC的数控机床数据实时采集的研究[J].微计算机信息,2007(7):237-239.
[3]申宇,马伯渊,张金楼.基于PMAC卡的高速数据采集[J].机电工程技术,2006(4):96-97.
[4]兰光明.VC环境下的PMAC数据实时采集与显示[J].北京机械工业学院学报2004(3):45-47.
[5]DELTA TAU Data System Inc.PMAC USER’S MANUAL[S].USA:DELTA TAU Data System Inc,1999.
[6]李秀敏凌宇欣.Visual C++6.0机范例入门与提高[M].北京:清华大学出版社.