2010年8月11日 星期三

使用VB2010控制NI的AD卡(2)

每一個資料擷取卡的專案最少都要有一個以上的Task物件,以便可以建立虛擬波道,執行資料擷取或輸出的作業。NI採用了DAQ-mx .NET Library來涵蓋操作所需的類別,我們需要先在專案中引入此命名空間參考(reference),才能繼續後續的類別引用及操作,如下所示,需要引入NationalInstruments.CommonNationalInstruments.DAQmx二個組件。


引入組件後,可以開始使用其中的Task類別來建立任務物件。NITask類別中的常見屬性如下表

屬性
說明
AIChannels
取得在Task物件中的類比輸入波道的集合
取得在Task物件中的類比輸出波道的集合
取得在Task物件中的計數輸入波道的集合
取得在Task物件中的計數輸出波道的集合
取得在Task物件中的數位輸入波道的集合
取得在Task物件中的數位輸出波道的集合
取得Task中的Stream物件
取得TaskTiming物件組態
取得TaskTrigger物件組態
Task物件在建立之後一定會使用AIChannelsAOChannelsCIChannelsCOChannelsDIChannelsDOChannels這六個集合物件中的一個來建立Task物件的工作虛擬波道,所有的資料取得就透過這六個集合物件中的一個;建立類比輸入時,下圖表示出流程
宣告Task後,以Task物件呼叫AIChannels集合,同時以此集合物件所提供的方法(Method)建立虛擬的類比輸入波道,並且設定目前的虛擬波道所對應的實體波道號碼、電壓範圍、數值單位…等等的內容;圖中的虛線部份就是對應到實際的卡片所要擷取的訊號設定內容。
以下是一段讀取AD的程式碼,它放在一個是按鈕的Click事件程序中:


   1:      Dim ADTask As Task  '宣告一個任務
   2:      Dim reader As AnalogSingleChannelReader
   3:      ADTask = New Task()  '建立任務
   4:      '建立該任務的工作波道
   5:      ADTask.AIChannels.CreateVoltageChannel(cmbChannel.Text, 
   6:                            "", 
   7:                            AITerminalConfiguration.Rse, 
   8:                            nudMin.Value, 
   9:                            nudMax.Value, 
  10:                            AIVoltageUnits.Volts)
  11:      '建立讀取物件
  12:      reader = New AnalogSingleChannelReader(ADTask.Stream)
  13:      '讀取波道數值,並存入data變數中
  14:      Dim data As Double = reader.ReadSingleSample()
  15:      '將變數值顯示到文字框
  16:      txtADValue.Text = data.ToString("0.00000")
  17:      '消滅物件
  18:      reader = Nothing
  19:      ADTask = Nothing
這樣就可以取得該波道的讀值嘍~~
這是一個簡單的取單值的作法,下圖是執行的狀況,0.17522就是讀到的波道電壓值。

沒有留言:

張貼留言