崔貝貝++趙川
摘 要:實時信號處理是機(jī)床主軸運(yùn)行監(jiān)測的重要內(nèi)容,對數(shù)據(jù)采集卡提出高速高精度要求。文章介紹了利用VC++6.0對PCI8510同步數(shù)據(jù)采集卡進(jìn)行控制的方法,實現(xiàn)采集卡的參數(shù)設(shè)置,采用多線程技術(shù)實現(xiàn)數(shù)據(jù)的多通道實時顯示,創(chuàng)建文件保存數(shù)據(jù),完成測控系統(tǒng)開發(fā)。
關(guān)鍵詞:機(jī)床主軸;VC++6.0;同步數(shù)據(jù)采集;多線程技術(shù)
中圖分類號:TH162;TP391 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-1302(2016)11-00-02
0 引 言
隨著社會的發(fā)展與進(jìn)步,企業(yè)間的經(jīng)濟(jì)競爭日趨激烈,這也迫使生產(chǎn)領(lǐng)域?qū)α悴考闹圃焯岢龈叩囊?。高檔數(shù)控機(jī)床是主要的制造設(shè)備,主軸系統(tǒng)是其關(guān)鍵部件。主軸系統(tǒng)的運(yùn)行狀態(tài)與產(chǎn)品質(zhì)量、精度以及人身安全等息息相關(guān),因而對主軸系統(tǒng)進(jìn)行有效測控十分必要。采用不同類型的傳感器對主軸系統(tǒng)進(jìn)行多方位多角度觀測能夠提高其測控效率和準(zhǔn)確度[1]。數(shù)據(jù)的高速采集、實時顯示與保存是主軸測控程序的關(guān)鍵內(nèi)容。本文采用VC++6.0作為軟件系統(tǒng)的開發(fā)工具,結(jié)合阿爾泰PCI8510同步數(shù)據(jù)采集卡,設(shè)計主軸測控程序,從板卡設(shè)置與驅(qū)動、多通道數(shù)據(jù)實時顯示、數(shù)據(jù)采集與保存等方面闡述了相關(guān)技術(shù)[2]。
1 系統(tǒng)結(jié)構(gòu)
將主軸系統(tǒng)作為測控對象,系統(tǒng)的整體構(gòu)成如圖1所示。為了實現(xiàn)對多類型傳感器高速高精度的數(shù)據(jù)采集、實時顯示與保存,本文利用VC++6.0開發(fā)工具結(jié)合PCI8510同步數(shù)據(jù)采集卡設(shè)計了一套主軸系統(tǒng)測控程序,通過友好的人機(jī)交互界面完成采集卡多參數(shù)設(shè)置和驅(qū)動,實現(xiàn)有效的數(shù)據(jù)采集。整個系統(tǒng)的工作原理為傳感器對主軸系統(tǒng)進(jìn)行多角度測量,信號經(jīng)調(diào)理電路傳至采集卡,采集模塊完成模數(shù)轉(zhuǎn)換后傳至計算機(jī),由VC++6.0編譯的程序?qū)π盘栠M(jìn)行讀取、顯示和保存[2]。
2 系統(tǒng)硬件簡介
2.1 阿爾泰PCI8510
本系統(tǒng)采用阿爾泰PCI8510采集卡,該卡是一種基于PCI總線的數(shù)據(jù)采集卡,可直接插在IBM-PC/AT或與之兼容的計算機(jī)內(nèi)的任一PCI插槽中,構(gòu)成實驗室、產(chǎn)品質(zhì)量檢測中心等各領(lǐng)域的數(shù)據(jù)采集、波形分析和處理系統(tǒng)[3]。也可構(gòu)成工業(yè)生產(chǎn)過程監(jiān)控系統(tǒng)。A/D轉(zhuǎn)換器類型為AD7612,PCI8510采用8通道8芯片獨立工作的通道切換方法,支持非空查詢、半滿查詢、DMA三種數(shù)據(jù)讀取方式,設(shè)定觸發(fā)源DTR輸入范圍為標(biāo)準(zhǔn)TTL電平,程控放大器默認(rèn)為AD8251。其主要技術(shù)指標(biāo)有轉(zhuǎn)換精度16 B,采樣頻率1 Hz~500 kHz,8通道同步,AD轉(zhuǎn)換時間≤1.45,可選軟件內(nèi)部觸發(fā)。在使用時只需調(diào)用PCI8510.dll即可。
2.2 非空方式AD采集過程
PCI8510采集卡的數(shù)據(jù)讀取分為非空、半滿和DMA三種方式。
(1)非空方式適用于批量讀取、高速連續(xù)的信號采集;
(2)半滿方式需要調(diào)用相應(yīng)的函數(shù)查詢存儲器的半滿狀態(tài),查詢狀態(tài)讀取AD數(shù)據(jù);
(3)DMA方式不經(jīng)CPU,直接將數(shù)據(jù)從設(shè)備讀到用戶緩沖區(qū)中。但DMA方式采用了多緩沖級鏈的方式,需要密切關(guān)注緩沖區(qū)狀態(tài),實現(xiàn)過程較為麻煩。
為滿足對主軸狀態(tài)的監(jiān)測和大量數(shù)據(jù)的采集與保存,實現(xiàn)高速連續(xù)采集與方便編程,本文選擇非空方式進(jìn)行數(shù)據(jù)讀取。使用非空方式讀取AD數(shù)據(jù)的流程如圖2所示[4]。
3 系統(tǒng)軟件設(shè)計
3.1 程序流程圖及采集卡設(shè)置
程序開發(fā)采用VC++6.0 MFC技術(shù),主要包括采集卡設(shè)置、數(shù)據(jù)采集、實時顯示與保存等模塊。程序運(yùn)行流程如圖3所示。圖4所示為采集卡參數(shù)設(shè)置界面。
3.2 PCI8510動態(tài)鏈接庫調(diào)用及數(shù)據(jù)采集
阿爾泰公司提供了有關(guān)PCI8510采集卡的相關(guān)數(shù)據(jù)文件,包括PCI8510.dll,PCI8510.h,PCI8510.lib。將上述三種文件拷貝到工程目錄下,在Header Files中添加PCI8510.h,在工程屬性里選擇配置屬性,設(shè)置linker中的Input項Addtional Dependencies為PCI8510.lib,完成設(shè)置并保存。此時已完成PCI8510動態(tài)鏈接庫的調(diào)用設(shè)置。啟動程序后,在設(shè)置界面完成相應(yīng)的參數(shù)設(shè)置。在實際程序中,需創(chuàng)建設(shè)備對象Device=PCI8510_CreateDevice(0)保存在App中,并判斷PCI8510采集卡的安裝狀態(tài)。
if (hDevice == INVALID_HANDLE_VALUE)
{if (hDevice == INVALID_HANDLE_VALUE)
{AfxMessageBox("對不起,無PCI設(shè)備存在...", MB_ICONERROR);
return;}
}
調(diào)用或定義如下函數(shù):
PCI8510_InitDeviceProAD(hDevice,&ADPara); //初始化設(shè)備
PCI8510_StartDeviceProAD(hDevice); //啟動設(shè)備
PCI8510_ReleaseDevice(hDevice ); //釋放設(shè)備對象
UINT ReadDataThread_Npt(PVOID hWnd) //數(shù)據(jù)采集函數(shù)
PCI8510_ReadDeviceProAD_Npt
(hDevice, ADBuffer[nReadIndex], nReadSizeWords, (LONG*)ReadSizeWords) //數(shù)據(jù)讀取函數(shù)
UINT ProcessDataThread1(PVOID pThreadPara1) //數(shù)據(jù)處理函數(shù)
3.3 多線程及多通道數(shù)據(jù)實時顯示
在32位Windows系統(tǒng)中,可以進(jìn)行多任務(wù)處理,也可多進(jìn)程同時運(yùn)行。每個應(yīng)用程序的運(yùn)行實例即為一個進(jìn)程。線程是組成進(jìn)程的基本單元,每個進(jìn)程都必須有一個主線程,主線程可以建立其他線程。一個進(jìn)程中的線程是并行執(zhí)行的,每個線程的CPU時間由系統(tǒng)分配[5]。PCI8510采集卡是多通道同步采集卡,在進(jìn)行多通道數(shù)據(jù)實時顯示操作時,需要為每個通道建立相應(yīng)的線程。由于數(shù)據(jù)采集具有高速的特點,需要先建立數(shù)據(jù)采集線程及處理線程并懸掛。單通道函數(shù)定義如下:
m_hReadThread = AfxBeginThread(ReadDataThread_Npt, NULL, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED ); //創(chuàng)建數(shù)據(jù)采集線程
m_hProcThread1= AfxBeginThread(ProcessDataThread1, this, THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
//創(chuàng)建數(shù)據(jù)處理線程
在數(shù)據(jù)第一階段采集結(jié)束后激活懸掛的線程,獲取數(shù)據(jù)顯示對話框界面:
CDzzDlg*pDzzDlg =(CDzzDlg*)pThreadPara1;//獲取對話框
單通道數(shù)據(jù)在編輯框中實時顯示:
pDzzDlg->m_Edit1.SetWindowText(str1);
3.4 數(shù)據(jù)保存
為了方便數(shù)據(jù)的移植和進(jìn)一步處理,選擇創(chuàng)建文檔文件保存多通道數(shù)據(jù)。定義CFileDialog dlg(FALSE, NULL, filename, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "All Files(*.txt)|*.txt||", AfxGetMainWnd())創(chuàng)建文件對象,采用fopen()打開文件,利用fprintf()進(jìn)行文件的寫操作,完成后通
過fclose()關(guān)閉文件。
4 結(jié) 語
本文介紹了利用VC++6.0結(jié)合PCI8510多通道同步數(shù)據(jù)采集卡主軸系統(tǒng)測控程序的設(shè)計,重點闡述了PCI8510動態(tài)鏈接庫的調(diào)用,板卡的初始化及啟動與控制,多線程實現(xiàn)多通道數(shù)據(jù)的實時顯示,創(chuàng)建數(shù)據(jù)文件保存數(shù)據(jù)等技術(shù)能夠?qū)χ鬏S系統(tǒng)進(jìn)行有效監(jiān)測。利用高級語言控制特定的數(shù)據(jù)采集卡實現(xiàn)對外部設(shè)備的監(jiān)控,在工程應(yīng)用方面具有重要意義。
參考文獻(xiàn)
[1]岳宇賓,韓秋實,李啟光,等.基于Visual C++6.0的數(shù)控凸輪軸磨床工藝數(shù)據(jù)庫開發(fā)[J].組合機(jī)床與自動化加工技術(shù),2014(7):117-119.
[2]陳功,張,高喻,等.基于VC++的數(shù)據(jù)采集系統(tǒng)的設(shè)計[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2007,20(6):114-115,122.
[3]PCI8510同步采集卡使用說明書(版本6.021)[Z].
[4]PCI8510同步采集卡WIN2000/XP驅(qū)動程序使用說明書(版本V6.000)[Z].
[5]蘇岳龍,李貽斌,宋銳.基于VC++6.0的高速串口通信數(shù)據(jù)采集系統(tǒng)[J].微計算機(jī)信息,2005(5):147-148.