基于开放式数控系统的数控机床多线程数据实时采集研究
刘雄;李蔚洋;刘杰
【摘 要】在数控机床加工过程中,实时采集加工数据对加工过程进行控制与补偿是十分必要的.利用开放式数控系统的优势,采用开放式运动控制系统PMAC卡搭建的一台数控机床.PMAC具有大量数据存储的双端口RAM区域,并提供可专用开发函数.而Visual C++的多线程技术是上位机大量数据读取的有效技术,将数控系统的双端口技术与上位机的多线程技术相结合,开发了加工数据实时采集系统.经过数据采集实验,取得了满意的效果.
【期刊名称】《机械制造与自动化》
【年(卷),期】2013(042)005
【总页数】3页(P176-178)
【关键词】数控机床;实时数据采集;PMAC;双端口RAM;多线程技术
【作 者】刘雄;李蔚洋;刘杰
【作者单位】江钻股份有限公司,湖北潜江433124;江汉油田勘探开发研究院,湖北武汉430223;江汉油田勘探开发研究院,湖北武汉430223路由器设置进不去
【正文语种】中 文
【中图分类】TP274
在数控机床加工过程中,实时采集加工数据对加工过程进行控制与补偿是十分必要的。但对成熟的数控系统如西门子、FUNUC等而言,加工数据采集是十分困难的,用户无法进行进一步的监测与控制。基于PC的开放式数控系统,是对传统封闭式数控系统的根本突破,是当今数控技术的发展主流和研究热点[1]。因此,采用NC嵌入PC型结构对开放式数控系统进行了开发研究。
在数控机床系统的应用过程中,为了了解机床性能或进行一步控制,有许多数据参数需要采集,如机床各轴的运动参数、机床正在执行的命令、在线测量尺寸等[2]。在基于PMAC卡数控机床的数据实时采集过程中,采取了多线程技术与PMAC option2提供双端口技术相结合的采集方式,取得了满意的效果。
1 基于PMAC卡数控机床软硬件系统
1.1 PMAC 开放式运动系统[3]顿号怎么打出来
可编程多轴控制器(programmablemulti-axis controller,PMAC)是美国DeltaTau公司20世纪90年代推出的基于PC平台的开放式多轴运动控制器。它采用了Motorola公司的DSP56系列高性能数字信号处理器作为CPU,是目前世界上功能最强大的运动控制器之一,一个PMAC可以同时控制1~8根轴,多个PMAC级联最多可以控制128根轴,能够精确定位,在包装、装配、医药工业、机床等行业应用广泛。
1.2 基于开放式数控系统数控机床
乐扑该数控机床为非圆磨床,运动方式为:x轴砂轮架水平往复移动和c轴工件主轴转动两轴联动,其主要硬件设备有工控机、PMAC卡、松下伺服电动机、雷尼绍光栅、CBN砂轮、电主轴等。安装在x轴上的直线光栅分辨率为1μm,安装在c轴上的圆光栅分辨率为20μm。数控系统采用直线光栅采集x轴位移作为反馈,圆光栅采集c轴转角作为反馈,形成全闭环控制(图1)。
1.3 软件系统
PMAC 支持 C++,VB,VC,Delphi等多种高级语,并提供了可共二次开发的的动态链接库函数。该实验装置以Visual C++6.0为工具,开发了软件控制系统,并开发了用于数据采集与显示的CStShow类,用于数据采集和显示及绘图。
图1 数控系统的控制原理图
2 开放式数控系统加工数据采集关键技术
2.1 PMAC数据读取的方式
文献[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表示单位。
2.2 双端口RAM技术
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。
2.3 多线程技术[6]
Windows操作系统之多任务调度与处理,每一个进程可以同时执行多个线程,这意味着一个程序可以同时完成多个任务。在VC++6.0中,MFC类库提供了对多线程编程的支持,它把线程区分为两类:工作者线程和用户界面线程.工作者线程主要用来执行费时的后台计算任务,用户界面线程则一般用来处理用户的输入,响应用户产生的事件和消息。在MFC类库中,类CWinThread是用户界面线程的基本类。用MFC创建线程,只需编写一个与应用程序中的其余部分并行运行的函数,然后调用全局函数AfxBeginThread()启动线程,线程启动后调用辅助线程的回调函数,可以在回调函数中编写想要实现功能的程序代码。当然也可以设定线程之间的优先级,也可以保持线程间的同步。这对应用多线程进行数据采集来说,是很有用的。
要终止线程,可以在线程内部调用MFC的AfxEndThread()函数或ExitProcess()或SetEvent()进行有条件地结束线程,如果想从该线程外部结束该线程,可以使用Win32API函数TerminateThread()。等,但使用时一定要释放该进程所占的系统资源,否则这样会引起系统的不稳定。
3 加工数据采集实验
满江红原文3.1 加工数据采集程序编写
在编写程序时为了避免显示过快而无法观察,在数据采集后立刻写入文件保存,而采用了间隔时间为55ms的定时器,用于慢速显示。用一个线程采集一个变量,以增加采集速度,并防止由于线程的相可以通过修改Sleep()函数中的参数,改变采集时间间隔。本文给出了采集C轴速度的代码,如果要采集更多的数据,再增加线程即可。
中秋节老师祝福语简单主要程序代码如下:
3.2 加工数据采集结果
利用Visual C++,编写采集程序,采集加工过程中x轴实际位置、x轴实际速度、c轴实际位置、c轴实际速度。采集界面如图2所示。
如果将采集的变量写入到同一个文件,将会由于线程的独立性而导致乱码。因此编程中将每个变量分别写入单独的文件。下面是采集到的部分数据:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论