張 朋,張振東
(上海理工大學(xué) 機(jī)械工程學(xué)院,上海 200090)
在工業(yè)迅速發(fā)展的今天,計(jì)算機(jī)技術(shù)的發(fā)展也越來(lái)越快速,其中一個(gè)重要的方面就是在工業(yè)生產(chǎn)過(guò)程中需要對(duì)生產(chǎn)數(shù)據(jù)進(jìn)行采集、分析和保存?,F(xiàn)在的計(jì)算機(jī)中一般都預(yù)留有一個(gè)或者幾個(gè)PCI插槽,這樣就為PCI總線設(shè)備的快速發(fā)展提供了良好的基礎(chǔ)。本文介紹的PCI-1718數(shù)據(jù)采集卡就是這樣一款基于PCI總線的設(shè)備,當(dāng)然它也兼容其他總線。它是由世界工業(yè)電腦和自動(dòng)化市場(chǎng)開(kāi)發(fā)的領(lǐng)軍企業(yè)——研華公司開(kāi)發(fā)的一款高效能、多功能數(shù)據(jù)采集卡。現(xiàn)在,VB開(kāi)發(fā)已經(jīng)進(jìn)入了一個(gè)相對(duì)成熟的時(shí)期,采用PCI-1718采集卡在VB編程環(huán)境下可以較容易的進(jìn)行數(shù)據(jù)采集系統(tǒng)的開(kāi)發(fā)。
本文介紹的研華PCI-1718數(shù)據(jù)采集卡不但具有測(cè)量功能,還具有控制功能。通過(guò)數(shù)據(jù)采集卡可以將外圍器件的電信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),并能將計(jì)算機(jī)輸出的數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)送給外圍器件。它的數(shù)據(jù)流程如圖1所示。
圖1 數(shù)據(jù)流程圖
生產(chǎn)工程中測(cè)量的信號(hào)有時(shí)候也不是電壓信號(hào),這時(shí)候就需要用到變送器這些標(biāo)準(zhǔn)化的設(shè)備將非電信號(hào)變成電信號(hào),然后輸入到PCI-1718中,比如壓力信號(hào)和溫度信號(hào),然后板卡將模擬信號(hào)變成計(jì)算機(jī)能識(shí)別的數(shù)字信號(hào),計(jì)算機(jī)收到這些信號(hào)后就能對(duì)這些數(shù)據(jù)進(jìn)行分析或者保存。如果計(jì)算機(jī)要對(duì)外圍的設(shè)備輸出指令時(shí),PCI-1718也可以將指令輸出給外圍設(shè)備,比如繼電器或者步進(jìn)電機(jī)。PCI-1718的特點(diǎn)主要如下:16路單端或者8路差分模擬量信號(hào)輸入,12位A/D轉(zhuǎn)換器,自動(dòng)通道掃描,用于AI的板載FIFO,1路12位模擬量輸出,16路數(shù)字量輸入及輸出,PCI總線數(shù)據(jù)傳輸,還具有定時(shí)、計(jì)數(shù)器功能。
在Active DAQ技術(shù)(研華公司)沒(méi)有出現(xiàn)之前,在VB環(huán)境下用戶(hù)訪問(wèn)數(shù)據(jù)采集卡一般來(lái)說(shuō)有兩種途徑:1)用VB直接編寫(xiě)訪問(wèn)PCI設(shè)備的函數(shù);2)調(diào)用其他語(yǔ)言編寫(xiě)的底層驅(qū)動(dòng)模塊來(lái)實(shí)現(xiàn),比如用c或者c++編寫(xiě)的動(dòng)態(tài)鏈接庫(kù)函數(shù)。但這兩種途徑都很困難,特別是對(duì)于非計(jì)算機(jī)專(zhuān)業(yè)的人員來(lái)說(shuō),編寫(xiě)這些函數(shù)非常地困難。研華公司提供的Active DAQ控件是一套高效的數(shù)據(jù)采集控件,它可以方便的應(yīng)用于一些支持ActiveX控件的軟件中,比如VB、VC、Delphi等。在VB中可以通過(guò)設(shè)置Active DAQ控件的屬性、事件及方法等來(lái)方便的進(jìn)行編程,從而進(jìn)行數(shù)據(jù)采集,主要包括模擬量的輸入輸出,數(shù)字量的輸入輸出及脈沖輸入輸出等。
本部分的硬件設(shè)置主要是PCI-1718數(shù)據(jù)采集卡的安裝、設(shè)置,Active DAQ控件的安裝。
首先運(yùn)行研華公司PCI-1718驅(qū)動(dòng)光盤(pán)里的DevMgr.exe程序,然后運(yùn)行PCI-1718.exe程序,按照步驟安裝程序。隨后關(guān)閉電腦,將PCI-1718插在計(jì)算機(jī)的一個(gè)插槽里,這時(shí)計(jì)算機(jī)就會(huì)自動(dòng)安裝板卡。注意,在安裝板卡前,要將板卡的SW1開(kāi)關(guān)設(shè)置為全部是ON,將SW2開(kāi)關(guān)設(shè)置為S/E,這是將板卡的Device Number設(shè)置為0,將模擬量信號(hào)的輸入模式定為16路的單端輸入模式(這些設(shè)置主要是在以后的數(shù)據(jù)采集過(guò)程中程序能認(rèn)識(shí)板卡,且能正確地采集到需要的數(shù)據(jù))。完成這些設(shè)置后,就可以在Advantech Device Manager中對(duì)板卡的性能進(jìn)行測(cè)試了,主要包括模擬量輸入功能測(cè)試、模擬量輸出功能測(cè)試、數(shù)字量輸入功能測(cè)試、數(shù)字量輸出功能測(cè)試和計(jì)數(shù)器功能測(cè)試。
接著運(yùn)行ActiveDAQ.exe,然后指定Active DAQ的安裝路徑,將Active DAQ安裝在計(jì)算機(jī)硬盤(pán)中。安裝完成該文件后,就會(huì)在VB的部件控件選項(xiàng)卡中出現(xiàn)Active DAQ控件集,主要包括 Advantech Active DAQ AI control、Advantech Active DAQ DI control、Advantech Active DAQ AO control、Advantech ActiveDAQ DO control等。 下面的數(shù)據(jù)采集軟件主要是用到的Advantech Active DAQ AI control和Advantech Active DAQ DO control,兩者的作用分別是采集模擬量(壓力值和電壓值)和輸出數(shù)字量(控制繼電器的閉合)。
在VB的部件選項(xiàng)卡中將Advantech Active DAQ AI control、Advantech Active DAQ DO control添加到工具箱中,然后放到程序中。首先在右邊的屬性欄中將這兩個(gè)控件的DeviceNumber屬性設(shè)置為1,這時(shí)程序就會(huì)自動(dòng)識(shí)別板卡。因?yàn)楸敬螖?shù)據(jù)采集的信號(hào)為壓力信號(hào)和電信號(hào),所以主要的程序代碼如下。
在form_load中寫(xiě)入以下程序:
DAQAI1.CyclicMode = True '采用循環(huán)方式采集數(shù)據(jù)
DAQAI1.SampleRate = 100000 '設(shè)置采樣頻率
DAQAI1.DataType = adReal '模擬量輸入返回值為實(shí)型
DAQAI1.StartChannel = 0 '打開(kāi)通道號(hào)0,用來(lái)采集壓力信號(hào)
DAQAI1.StartChannel = 1 '打開(kāi)通道號(hào)1,用來(lái)采集電壓信號(hào)
DAQAI1.OpenDevice '打開(kāi)模擬量輸入端口
DAQDO1.OpenDevice '打開(kāi)數(shù)字量輸出端口
因?yàn)樾枰煌5牟杉瘮?shù)據(jù),所以需要添加一個(gè)timer控件,然后在timer控件的timer屬性中寫(xiě)入以下程序:
u = DAQAI1.RealInput(0) '獲 取AI0通道數(shù)據(jù)(電壓值)
stapre = (Val(u) - c) * diff '標(biāo)度變換(變成壓力值)
press1 = Format(stapre, "0.0000")
press(num) = press1
m1 = DAQAI1.RealInput(1) '獲取AI1(1)通道數(shù)據(jù)(電壓值)
其中u為數(shù)據(jù)采集卡采集到的電壓值,此電壓值為壓力值經(jīng)壓力變送器轉(zhuǎn)變而來(lái)(壓力變送器的接法在此就不介紹了,關(guān)鍵是輸入輸出端得正確連接及如何正確連入數(shù)據(jù)采集卡);c和diff分別為壓力變送器的參數(shù):壓力下限值和輸出線性比,比如:一個(gè)壓力變送器的輸入壓力為0—4MPa,輸出為4-20mA,在輸出上串聯(lián)一個(gè)250Ω的電阻,輸出變?yōu)?—5V,則此時(shí)電壓值P和壓力值U的關(guān)系為:
Stapre是壓力的中間值,是為了后面將保留了四位小數(shù)的壓力值能保存在DataGrid中。press(num)的作用是想保留許多壓力值,然后從中選出需要的壓力值。m1是指采集到的被測(cè)件的電壓值,如果被采集件數(shù)量多,則可以用m2、m3等,原則上PCI-1718可以采集16路的電壓值。
這時(shí)候就可以將采集到的數(shù)據(jù)放到電腦里了,為了能顯示這些數(shù)據(jù),在它的初始化中寫(xiě)入[1,3]:
1)如果測(cè)試的物理量有兩種類(lèi)型(壓力和電壓),為了顯示的有規(guī)律且對(duì)比正常,可以將他們用下面的方法顯示在計(jì)算機(jī)上:
在窗體中添加一個(gè)DataGrid控件,在其初始化中寫(xiě)入[2,4]:
Grid(1).ColWidth(0) = 600
Grid(1).ColWidth(1) = 1000
Grid(1).ColWidth(2) = 1000
Grid(1).Col = 0
For i = 1 To 10
Grid(1).row = i
Grid(1).Text = Str$(i)
Next i
Grid(1).row = 0
Grid(1).Col = 0: Grid(1).Text = "序號(hào) "
Grid(1).Col = 1: Grid(1).Text = "壓力值 "
Grid(1).Col = 2: Grid(1).Text = "電壓值
以上的程序主要是設(shè)置數(shù)據(jù)表格的列寬和表頭名稱(chēng)。為了將數(shù)據(jù)放入DataGrid中,寫(xiě)以下程序:
Grid(1).Col = 1: Grid(1).row = 1
Grid(1).Text = press1
Grid(1).Col = 1: Grid(1).row = 2
Grid(1).Text = m1
2)如果測(cè)試的物理量只有一種類(lèi)型,則可以用下面的方法顯示數(shù)據(jù):
加入兩個(gè)text控件,然后將其text屬性設(shè)置為press1。測(cè)量到物理量則加幾個(gè)text控件。
圖2 程序上位機(jī)界面
程序到此為止就已經(jīng)可以將測(cè)量值顯示在電腦上了,利用VB和PCI-1718數(shù)據(jù)采集卡以及壓力傳感器,筆者成功的為上海天惠汽車(chē)零部件有限公司開(kāi)發(fā)了一套汽車(chē)空調(diào)壓力開(kāi)關(guān)實(shí)驗(yàn)測(cè)試軟件,并起到了良好的效果。程序的上位機(jī)界面如圖2所示。
剩下的就是調(diào)用Adodc控件來(lái)將這些數(shù)據(jù)存到計(jì)算機(jī)里面,這里沒(méi)有用PCI-1718方面的知識(shí),所以在此不介紹了。
PCI-1718在VB中利用的優(yōu)勢(shì)之處是ActiveDAQ控件的利用,它可以省去許多編程中的麻煩的代碼編寫(xiě),取而代之的是方便的控件引用和屬性的設(shè)置。利用它來(lái)控制繼電器等也很方便。VB的優(yōu)勢(shì)是容易上手,開(kāi)發(fā)快。利用VB和PCI-1718數(shù)據(jù)采集卡,可以方便的進(jìn)行數(shù)據(jù)的采集。
[1] 李江全, 等. Visual Basic數(shù)據(jù)采集與串口通信測(cè)控應(yīng)用實(shí)戰(zhàn)[M]. 北京:人民郵電出版社. 2010.
[2] 胡小江, 等. 21天學(xué)通visual basic[M]. 北京: 電子工業(yè)出版社. 2009.
[3] 李長(zhǎng)林. Visual Basic串口通信技術(shù)與典型實(shí)例[M]. 北京: 清華大學(xué)出版社. 2006.
[4] 高春燕, 等. Visual Basic 控件參考大全[M]. 北京: 人民郵電出版社. 2006.