<strike id="ca4is"><em id="ca4is"></em></strike>
  • <sup id="ca4is"></sup>
    • <s id="ca4is"><em id="ca4is"></em></s>
      <option id="ca4is"><cite id="ca4is"></cite></option>
    • 二維碼
      企資網

      掃一掃關注

      當前位置: 首頁 » 企資快報 » 體驗 » 正文

      使用NI-DAQmx進行數據采集和顯示,十幾行

      放大字體  縮小字體 發布日期:2021-08-18 18:40:41    作者:QIZIW    瀏覽次數:2
      導讀

      1.概述NI-DAQmx是National Instruments現階段的數據采集驅動,NI-DAQmx集成了全新的驅動架構和API,用于控制National Instruments DAQ設備。本文演示如何通過NI-DAQmx提供的API來控制National Instruments DAQ設備,

      1.概述

      NI-DAQmx是National Instruments現階段的數據采集驅動,NI-DAQmx集成了全新的驅動架構和API,用于控制National Instruments DAQ設備。

      本文演示如何通過NI-DAQmx提供的API來控制National Instruments DAQ設備,實現數據采集任務。

      為了方便大家學習,我們使用模擬的NI-DAQmx設備來演示。她是使用NI Measurement and Automation Explorer(MAX)中的NI-DAQmx模擬設備選項創建的,其行為與真實設備相似。某些NI-DAQmx設備無法在MAX中進行仿真。在許多情況下,可以模擬相似的設備來代替無法模擬的設備。

      1.1安裝NI-DAQmx和新建仿真設備

      1)從National Instruments官網www.ni.com下載NI-DAQmx 20.0版本軟件并安裝;安裝完畢NI-DAQmx軟件驅動包,在目錄C:\Users\Public\documents\National Instruments\NI-DAQ\Examples\DotNET4.5下,存放NI-DAQmx的常用例子,本例子項目的腳本基本上是參考這些例子編寫的。

      2)運行NI MAX設備管理軟件,通過設備和接口節點,可以新建仿真設備。本演示使用“SimDev1”仿真設備,采集電壓數據。

      1.2采集電壓的代碼框架

      NI-DAQmx對于Microsoft .Netframework平臺,提供了NationalInstruments.Common.dll和NationalInstruments.DAQmx.dll兩個動態鏈接庫,作為第三方使用NI-DAQmx控制National Instruments DAQ設備的應用程序接口。

      其中NationalInstruments.Common.dll動態庫位于C:\Program Files (x86)\National Instruments\Measurement Studio\DotNET\v4.0\AnyCPU\NationalInstruments.Common 19.0.40\NationalInstruments.Common.dll

      NationalInstruments.DAQmx.dll動態庫位于C:\Program Files (x86)\National Instruments\MeasurementStudioVS2012\DotNET\Assemblies (64-bit)\Current\NationalInstruments.DAQmx.dll。

      代碼框架是C#版本的。

      // 創建采集任務
      using(Task myTask= new Task())
      {
      // 創建虛擬通道
      myTask.AIChannels.CreateVoltageChannel("SimDev1/ai0", // 物理通道

      "",//物理通道的名稱
      (AITerminalConfiguration)(-1), // -1表示使用缺省值

      -10, // 最小值

      10, // 最大值
      AIVoltageUnits.Volts);

      // 配置時域參數
      myTask.Timing.ConfigureSampleClock("",//外部時鐘源線或使用“”作為內部時鐘

      1000, // 外部時鐘的預期速率或內部時鐘的實際速率

      SampleClockActiveEdge.Rising, //上升或下降邊緣獲取
      SampleQuantityMode.FiniteSamples, // 連續或有限樣本

      1000 // 要獲取或用于緩沖區大?。ㄈ绻B續)的有限樣本數

      );

      // 校驗任務
      myTask.Control(TaskAction.Verify);
      //多通道讀取器,從任務中的一個或多個模擬輸入通道讀取樣本
      AnalogMultiChannelReader myAnalogReader = newAnalogMultiChannelReader(myTask.Stream);

      // 讀取數據
      for(int i=0; i<1000; i++)
      {
      //從通道讀取數據
      double [] data = myAnalogReader.ReadSingleSample();
      // TODO:賦值給相應的變量

      }
      }

      2.構建采集項目

      NI-DAQmx軟件安裝后,在目錄C:\Users\Public\documents\National Instruments\NI-DAQ\Examples\DotNET4.5下,存放NI-DAQmx的使用例子。本文采用格西測控大師來構建,該軟件可以快速構建用戶界面,方便把采集到的數據用圖表顯示,類似LabView軟件。

      本例子最終的效果圖如下。

      2.1新建項目和創建變量

      第一步,通過測控大師軟件新建項目,在項目屬性對話框中引用NI-DAQmx的庫NationalInstruments.Common.dll和NationalInstruments.DAQmx.dll;

      第二步,建立變量容器“電壓測量”,并把緩存Capacity屬性設置為10000;其下建立“電壓”變量。

      2.2設計用戶界面

      本例子用戶界面用到的控件:LineChart(曲線圖)、TableGrid(數據表),ComboBox(通道列表),SpinEditBox(數字參數設置),Button(按鈕)。

      關鍵配置:

      LineChart:ChartSeries屬性(格式為“<系列名稱 1>,<X變量名>,<Y變量名>;<系列名稱 2>,<X變量名>,<Y變量名>;…“ ;本例子設置為:電壓曲線圖,序號,電壓)

      DataProvider屬性:綁定“電壓測量”

      TableGrid:DataSeries屬性(格式為“<變量1名>,<列1名稱1>; <變量2名>,<列2名稱>;…“ ;本例子設置為:電壓,電壓)

      DataSource屬性:綁定“電壓測量”變量容器

      2.3編寫采集腳本

      “采集電壓畫面”設計完畢后,新建兩個事件,分別是采集電壓畫面的Loaded事件和BtnStart按鈕的Click事件。

      采集電壓畫面的Loaded事件函數中初始化通道列表,BtnStart按鈕的Click事件函數中執行數據采集。

      腳本引用NI庫的命名空間NationalInstruments和NationalInstruments.DAQmx,即可直接使用動態庫中的類。

      主界面代碼

      using System;using System.Linq;using System.Windows;using System.Windows.Controls;using Genesis;using Genesis.scripting;using Genesis.Workbench;using Genesis.Workbench.Schema;using Genesis.Windows.Controls;// 使用DAQmx的命名空間,以便可以訪問提供的軟件模塊using NationalInstruments;using NationalInstruments.DAQmx;public class Schema_FDA16E3EDD1843278B9C31574BF2A0A7{    public ProjectContext Context { get; set; }    // 開始采集按鈕單擊事件    public void BtnStart_Click(Object sender, System.Windows.RoutedEventArgs e)    {        try        {            // 清除變量歷史緩存,保證每次采集前界面控件沒有數據            this.Context.Variants["電壓測量"].Purge();            this.Context.GetSchemaElement<Chart>(sender,"ChartCurve").Clear();            this.Context.GetSchemaElement<TableGrid>(sender,"TgData").Clear();                        // 從界面控件獲取填寫的參數               double minValue = (double)this.Context.GetSchemaElement<SpinEditBox>(sender,"SbMinValue").Value;            double maxValue = (double)this.Context.GetSchemaElement<SpinEditBox>(sender,"SbMaxValue").Value;            string channel = this.Context.GetSchemaElement<ComboBox>(sender,"CmbChannels").SelectedItem.ToString();                        double sampleRate = (double)this.Context.GetSchemaElement<SpinEditBox>(sender,"SbSampleRate").Value;            int samplesPerChannel = (int)this.Context.GetSchemaElement<SpinEditBox>(sender,"SbSamplesPerChannel").Value;                                    // 創建采集任務            using(Task myTask= new Task())            {                // 創建虛擬通道                myTask.AIChannels.CreateVoltageChannel(channel,"",                    (AITerminalConfiguration)(-1),minValue, maxValue,                    AIVoltageUnits.Volts);                // 配置時域參數                    myTask.Timing.ConfigureSampleClock("", sampleRate, SampleClockActiveEdge.Rising,                    SampleQuantityMode.FiniteSamples, samplesPerChannel);                // 校驗任務                myTask.Control(TaskAction.Verify);                 // 使用多通道讀取數據                AnalogMultiChannelReader myAnalogReader = new AnalogMultiChannelReader(myTask.Stream);                                // 讀取數據                for(int i=0; i<samplesPerChannel; i++)                {                    //從通道讀取數據                    double [] data = myAnalogReader.ReadSingleSample();                     this.Context.Variants["電壓測量/電壓"].Value = data.Length > 0 ? data[0] : 0;                }            }        }        catch(DaqException exception)        {            // Display Errors            SystemContext.ShowMessageBox("DAQmx",exception.Message,System.Windows.MessageBoxButton.OK,System.Windows.MessageBoxImage.Error);        }    }    // 畫面加載事件,初始化控件數據    public void 采集電壓畫面_Loaded(Object sender, RoutedEventArgs e)    {        ComboBox cmb = this.Context.GetSchemaElement<ComboBox>(sender,"CmbChannels");                string[] channels = DaqSystem.Local.GetPhysicalChannels(PhysicalChannelTypes.AI, PhysicalChannelAccess.External);        cmb.ItemsSource = channels;        cmb.SelectedIndex = channels.ToList().IndexOf("SimDev1/ai0");    }}

      3.總結

      儀器廠商都會針對自己的儀器設備提供動態鏈接庫,供第三方軟件控制自家的儀器設備,類似NI這樣的大廠更是有一整套完善的驅動庫,NI-DAQmx即是NI的全新的驅動架構和API,已經能夠把復雜的底層邏輯隱藏起來,提供一組易于使用的面向對象類庫供開發者使用,讓開發者在短短的十幾行代碼即可完成數據的采集。

      另外,格西測控大師軟件也是一個開放的測控軟件開發平臺,該軟件能夠對測試流程進行組態,能夠自定義任意通信協議進行設備通信,能夠開發漂亮的用戶操作界面等,比較適合用于數據采集和監控、設備仿真、通信協議監聽和分析、通信協議一致性測試等領域。

       
      (文/QIZIW)
      免責聲明
      本文僅代表作發布者:QIZIW個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
       

      Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

      粵ICP備16078936號

      微信

      關注
      微信

      微信二維碼

      WAP二維碼

      客服

      聯系
      客服

      聯系客服:

      在線QQ: 303377504

      客服電話: 020-82301567

      E_mail郵箱: weilaitui@qq.com

      微信公眾號: weishitui

      客服001 客服002 客服003

      工作時間:

      周一至周五: 09:00 - 18:00

      反饋

      用戶
      反饋

      午夜久久久久久网站,99久久www免费,欧美日本日韩aⅴ在线视频,东京干手机福利视频
        <strike id="ca4is"><em id="ca4is"></em></strike>
      • <sup id="ca4is"></sup>
        • <s id="ca4is"><em id="ca4is"></em></s>
          <option id="ca4is"><cite id="ca4is"></cite></option>
        • 主站蜘蛛池模板: 久久天天躁狠狠躁夜夜网站| 国产va免费精品高清在线观看| 亚洲欧美乱综合图片区小说区 | 国产污视频在线观看| 亚洲婷婷综合色高清在线| 91欧美精品激情在线观看最新| 欧美黄色免费在线观看| 在线免费观看一级片| 亚洲欧美精品伊人久久| 5g影院欧美成人免费| 欧美人与zoxxxx另类| 国产真实乱子伦精品| 久久精品道一区二区三区| 香港aa三级久久三级老师| 日本一区二区三区四区视频| 国产AV一区二区精品凹凸| 东京一本一道一二三区| 白嫩光屁股bbbbbbbbb| 在线观看国产成人av片| 亚洲欧美日韩精品久久奇米色影视 | 国产亚洲福利精品一区二区| 久久久久久亚洲精品| 美女内射无套日韩免费播放| 好男人看视频免费2019中文| 亚洲视频手机在线| 2021国内精品久久久久影院| 本子库全彩无遮挡无翼乌触手| 国产对白精品刺激一区二区| 久久久久久久亚洲AV无码| 精品国产黑色丝袜高跟鞋| 天堂mv免费mv在线mv观看| 亚洲欧美一区二区三区在线 | 在线观看成人网站| 亚洲伊人久久大香线蕉AV| 黄色三级免费电影| 成年人在线免费观看视频网站| 全彩里番acg里番| 91传媒蜜桃香蕉在线观看| 杨钰莹欲乱小说| 国产一区二区精品久久岳| igao在线观看|