如今,在儀器制造、移動通信、航海等工業領域,以個人電腦為平臺的信號采集和數據處理系統得到了廣泛應用。其中,數據采集依靠硬件板卡,數據分析則要借助于軟件技術。
在數據采集、處理的應用中,使用最為廣泛,基礎最為牢固的是PC_Based Control 技術,它是融合PC 技術、信號測量和分析技術、控制技術、通信技術于一體的高性能測量與控制技術,用于信號量測、工業過程數據采集和控制、運動控制、通信控制等。包括工業電腦平臺、功能卡和應用軟件。通過插入各種功能卡和編寫軟件,形成功能強大的數據采集系統、通信控制器和運動控制系統。
近年來,PC_Based Control 技術向更快速、更精確的測控方向發展,其中數據采集與控制是其核心技術之一,其基本任務是物理信號(電壓/電流)的產生或測量。但是要使計算機系統能夠測量物理信號,必須要使用傳感器把物理信號轉換成電信號(電壓或者電流信號)。有時不能把被測信號直接連接到數據采集卡,而必須使用信號調理輔助電路,先將信號進行一定的處理??傊?,數據采集與控制系統是在硬件板卡/遠程采集模塊的基礎上借助軟件來控制整個系統的工作,包括采集原始數據、分析數據、給出結果等,其中的硬件板卡就是現在廣為使用的數據采集卡。而要對數據進行分析并產生結果,就需要利用軟件編程技術來實現了。
這里,筆者以PCI-8319 光電隔離模入接口卡為例,介紹如何利用VC++ 6.0實現數據的采集、控制和分析。
PCI-8319 光電隔離模入接口卡
本文所要介紹的PCI-8319 光電隔離模入接口卡就是一款滿足PC_Based Control 技術要求的硬件板卡。它提供了PCI 總線插槽的PC系列微機,具有即插即用(PnP)的功能。操作系統可選用Windows、Unix等多種操作系統,以及專業數據采集分析系統LabVIEW 等軟件環境。在硬件的安裝上也非常簡單,使用時只需將接口卡插入機內任何一個PCI總線插槽中并用螺絲固定,信號電纜從機箱外部直接接入。
PCI-8319 光電隔離模入接口卡主要由多路模擬開關電路、高性能放大器電路、模數轉換電路、開關量輸入輸出電路、接口控制邏輯電路、光電隔離電路及DC/DC電源電路組成,采用三總線光電隔離技術,使被測量信號系統同計算機之間完全電氣隔離,適用于惡劣環境的工業現場數據采集以及必須保證人身安全的人體信號采集系統。該模入接口卡采用了高性能的儀用放大器,具有極高的輸入阻抗和共模抑制比,并具有最高可達 1000 倍的放大增益,可直接配接各種傳感器,以完成對不同信號的放大處理,同時,本卡自帶 DC/DC隔離電源模塊,無需用戶外接電源。
PCI-8319 模入接口卡允許采用32路單端輸入方式或16路雙端輸入方式。用戶可根據需要選擇測量單極性信號或雙極性信號。其輸入的模擬信號由卡前端的37芯D型插頭直接接入。本卡還提供了非隔離的TTL電平的16路輸入和16路輸出信號通道,這些信號通道由卡后端的40芯扁平電纜轉換為37芯D型插頭提供給用戶。
其多路模擬開關電路以及高性能放大器電路和模數轉換電路均采用了AD公司的芯片作為使用器件,可以滿足不同用戶的不同需求。
開關量輸入輸出電路,接口控制邏輯電路及光隔電路DC/DC電源電路均可達到較好的使用效果。
相關函數
PCI8KP.dll是為PCI8000 系列數據采集卡配制的工作在中西文Windows 95/98/2000/NT環境下的一個動態鏈接庫,它所封裝的函數可以被其他應用程序在運行時直接調用。用戶可以用任何一種可以使用 DLL鏈接庫的編程工具來編寫。表中所列函數的說明格式為C++ 應用程序中調用 DLL 庫函數時的常用格式,無論使用哪一種開發工具,務必請注意數據格式的匹配及函數的返回類型。
點擊看大圖
為了將對PCI-8319卡的操作簡單化。動態鏈接庫 \\(PCI8KP.dll\\)中所有的函數的參數均通過一個結構體(ZT_PCIBOARD)來傳遞。該結構體及PCI8000的有關函數如表所示。
struct ZT_PCIBOARD
{
long lIndex; /* PCI卡索引值,該值在安裝時被系統分配*/
HANDLE hHandle; /* PCI卡的操作句柄(只有涉及中斷時才用)*/
short nCh; /* 通道號*/
long lData; /*輸入輸出數據變量*/
long* plData; /*輸入輸出數據指針*/
long lCode; /*設備控制字,具體含義見函數說明*/
};
實現數據采集
第一步,啟動VC++6.0,建立一個工程文件;第二步,在工程文件中加入driver.h和Os.h兩個頭文件,并在工程設置中添加庫文件ADSAPI32.lib;第三步,在需要數據采集的文件中添加相關的程序代碼,具體步驟如下。
首先,在文件頭部第一條注釋行前加入如下常數變量及全局變量說明:
int time_sam;
SetTem dlg1;
int diff_tt;
CPoint end_tem;
CPoint start_tem;
ZT_PCIBOARD pci8319_tep;
其次,在相應的數據處理函數中加入下列代碼打開采集板,把輸入的模擬量轉化為數字量:
if\\(OpenDevicePlx\\(&pci8319\\) != 0\\)
{
AfxMessageBox\\("Open device failed!"\\);
}
if\\(OpenDevicePlx\\(&pci8319_tep\\) != 0\\)
{
AfxMessageBox\\("Open device failed!"\\);
}
pci8319.lIndex = 0;
pci8319_tep.lIndex = 0;
pci8319_tep.nCh = 2;//選擇通道1
pci8319_tep.lCode = 3;//0 = 原碼值, 1 = 0 -- 10000mV , 2= -5000 --- 5000mV, 3= -10000 -- 10000mV
ZT8319Init\\(&pci8319_tep\\);//啟動AD轉換
pci8319.nCh = 1;//選擇通道1
pci8319.lCode = 3;//0 = 原碼值, 1 = 0 -- 10000mV , 2= -5000 --- 5000mV, 3= -10000 -- 10000mV
ZT8319Init\\(&pci8319\\);//啟動AD轉換
long retVal,retVal1;
retVal = ZT8319AI\\(&pci8319\\);
retVal1 = ZT8319AI\\(&pci8319_tep\\);
中間開始進行數據采集及實時曲線的繪制,在這個過程中,采集過程與曲線繪制過程是同時進行的,每采集十個數據就按照曲線的要求取這十個數據的平均值在圖中繪出其數據值點,在采集過程中的某一時刻起曲線繪制如圖所示。
圖 數據采集中繪制的實時曲線
該界面主要用來,對模擬量數據進行更為直觀的圖形顯示,相當于一個“軟”示波器。點擊“曲線顯示”按鈕,圖形區域將顯示A/D轉換數據的變化曲線。為了穩定地顯示曲線,滑動“同步點調整”滑塊,可掃描同步點,同步點的原碼值(十進制),在跟隨滑塊一起滑動的標簽中顯示。點擊“選擇通道”組合框,可進行通道切換,圖形區域的曲線將自動作相應的更新。點擊“退出顯示”按鈕,返回到主界面。最后,當采集結束后,退出顯示,結束此次數據采集過程,得到所需要的曲線繪制圖,完成測試流程,回到原始程序中。