崔贝贝++赵川
摘 要:实时信号处理是机床主轴运行监测的重要内容,对数据采集卡提出高速高精度要求。文章介绍了利用VC++6.0对PCI8510同步数据采集卡进行控制的方法,实现采集卡的参数设置,采用多线程技术实现数据的多通道实时显示,创建文件保存数据,完成测控系统开发。
关键词:机床主轴;VC++6.0;同步数据采集;多线程技术
中图分类号:TH162;TP391 文献标识码:A 文章编号:2095-1302(2016)11-00-02
0 引 言
随着社会的发展与进步,企业间的经济竞争日趋激烈,这也迫使生产领域对零部件的制造提出更高的要求。高档数控机床是主要的制造设备,主轴系统是其关键部件。主轴系统的运行状态与产品质量、精度以及人身安全等息息相关,因而对主轴系统进行有效测控十分必要。采用不同类型的传感器对主轴系统进行多方位多角度观测能够提高其测控效率和准确度[1]。数据的高速采集、实时显示与保存是主轴测控程序的关键内容。本文采用VC++6.0作为软件系统的开发工具,结合阿尔泰PCI8510同步数据采集卡,设计主轴测控程序,从板卡设置与驱动、多通道数据实时显示、数据采集与保存等方面阐述了相关技术[2]。
1 系统结构
将主轴系统作为测控对象,系统的整体构成如图1所示。为了实现对多类型传感器高速高精度的数据采集、实时显示与保存,本文利用VC++6.0开发工具结合PCI8510同步数据采集卡设计了一套主轴系统测控程序,通过友好的人机交互界面完成采集卡多参数设置和驱动,实现有效的数据采集。整个系统的工作原理为传感器对主轴系统进行多角度测量,信号经调理电路传至采集卡,采集模块完成模数转换后传至计算机,由VC++6.0编译的程序对信号进行读取、显示和保存[2]。
2 系统硬件简介
2.1 阿尔泰PCI8510
本系统采用阿尔泰PCI8510采集卡,该卡是一种基于PCI总线的数据采集卡,可直接插在IBM-PC/AT或与之兼容的计算机内的任一PCI插槽中,构成实验室、产品质量检测中心等各领域的数据采集、波形分析和处理系统[3]。也可构成工业生产过程监控系统。A/D转换器类型为AD7612,PCI8510采用8通道8芯片独立工作的通道切换方法,支持非空查询、半满查询、DMA三种数据读取方式,设定触发源DTR输入范围为标准TTL电平,程控放大器默认为AD8251。其主要技术指标有转换精度16 B,采样频率1 Hz~500 kHz,8通道同步,AD转换时间≤1.45,可选软件内部触发。在使用时只需调用PCI8510.dll即可。
2.2 非空方式AD采集过程
PCI8510采集卡的数据读取分为非空、半满和DMA三种方式。
(1)非空方式适用于批量读取、高速连续的信号采集;
(2)半满方式需要调用相应的函数查询存储器的半满状态,查询状态读取AD数据;
(3)DMA方式不经CPU,直接将数据从设备读到用户缓冲区中。但DMA方式采用了多缓冲级链的方式,需要密切关注缓冲区状态,实现过程较为麻烦。
为满足对主轴状态的监测和大量数据的采集与保存,实现高速连续采集与方便编程,本文选择非空方式进行数据读取。使用非空方式读取AD数据的流程如图2所示[4]。
3 系统软件设计
3.1 程序流程图及采集卡设置
程序开发采用VC++6.0 MFC技术,主要包括采集卡设置、数据采集、实时显示与保存等模块。程序运行流程如图3所示。图4所示为采集卡参数设置界面。
3.2 PCI8510动态链接库调用及数据采集
阿尔泰公司提供了有关PCI8510采集卡的相关数据文件,包括PCI8510.dll,PCI8510.h,PCI8510.lib。将上述三种文件拷贝到工程目录下,在Header Files中添加PCI8510.h,在工程属性里选择配置属性,设置linker中的Input项Addtional Dependencies为PCI8510.lib,完成设置并保存。此时已完成PCI8510动态链接库的调用设置。启动程序后,在设置界面完成相应的参数设置。在实际程序中,需创建设备对象Device=PCI8510_CreateDevice(0)保存在App中,并判断PCI8510采集卡的安装状态。
if (hDevice == INVALID_HANDLE_VALUE)
{if (hDevice == INVALID_HANDLE_VALUE)
{AfxMessageBox("对不起,无PCI设备存在...", MB_ICONERROR);
return;}
}
调用或定义如下函数:
PCI8510_InitDeviceProAD(hDevice,&ADPara); //初始化设备
PCI8510_StartDeviceProAD(hDevice); //启动设备
PCI8510_ReleaseDevice(hDevice ); //释放设备对象
UINT ReadDataThread_Npt(PVOID hWnd) //数据采集函数
PCI8510_ReadDeviceProAD_Npt
(hDevice, ADBuffer[nReadIndex], nReadSizeWords, (LONG*)ReadSizeWords) //数据读取函数
UINT ProcessDataThread1(PVOID pThreadPara1) //数据处理函数
3.3 多线程及多通道数据实时显示
在32位Windows系统中,可以进行多任务处理,也可多进程同时运行。每个应用程序的运行实例即为一个进程。线程是组成进程的基本单元,每个进程都必须有一个主线程,主线程可以建立其他线程。一个进程中的线程是并行执行的,每个线程的CPU时间由系统分配[5]。PCI8510采集卡是多通道同步采集卡,在进行多通道数据实时显示操作时,需要为每个通道建立相应的线程。由于数据采集具有高速的特点,需要先建立数据采集线程及处理线程并悬挂。单通道函数定义如下:
m_hReadThread = AfxBeginThread(ReadDataThread_Npt, NULL, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED ); //创建数据采集线程
m_hProcThread1= AfxBeginThread(ProcessDataThread1, this, THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
//创建数据处理线程
在数据第一阶段采集结束后激活悬挂的线程,获取数据显示对话框界面:
CDzzDlg*pDzzDlg =(CDzzDlg*)pThreadPara1;//获取对话框
单通道数据在编辑框中实时显示:
pDzzDlg->m_Edit1.SetWindowText(str1);
3.4 数据保存
为了方便数据的移植和进一步处理,选择创建文档文件保存多通道数据。定义CFileDialog dlg(FALSE, NULL, filename, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "All Files(*.txt)|*.txt||", AfxGetMainWnd())创建文件对象,采用fopen()打开文件,利用fprintf()进行文件的写操作,完成后通
过fclose()关闭文件。
4 结 语
本文介绍了利用VC++6.0结合PCI8510多通道同步数据采集卡主轴系统测控程序的设计,重点阐述了PCI8510动态链接库的调用,板卡的初始化及启动与控制,多线程实现多通道数据的实时显示,创建数据文件保存数据等技术能够对主轴系统进行有效监测。利用高级语言控制特定的数据采集卡实现对外部设备的监控,在工程应用方面具有重要意义。
参考文献
[1]岳宇宾,韩秋实,李启光,等.基于Visual C++6.0的数控凸轮轴磨床工艺数据库开发[J].组合机床与自动化加工技术,2014(7):117-119.
[2]陈功,张,高喻,等.基于VC++的数据采集系统的设计[J].机电产品开发与创新,2007,20(6):114-115,122.
[3]PCI8510同步采集卡使用说明书(版本6.021)[Z].
[4]PCI8510同步采集卡WIN2000/XP驱动程序使用说明书(版本V6.000)[Z].
[5]苏岳龙,李贻斌,宋锐.基于VC++6.0的高速串口通信数据采集系统[J].微计算机信息,2005(5):147-148.