崔貝貝++趙川


摘 要:實時信號處理是機床主軸運行監測的重要內容,對數據采集卡提出高速高精度要求。文章介紹了利用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.