使用NI-DAQmx进行数据采集和显示,你来你也行!
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#版本的。
// 创建采集任务 "",//物理通道的名称 -10, // 最小值 10, // 最大值 // 配置时域参数 1000, // 外部时钟的预期速率或内部时钟的实际速率 SampleClockActiveEdge.Rising, //上升或下降边缘获取 1000 // 要获取或用于缓冲区大小(如果连续)的有限样本数 ); // 校验任务 } |
2.构建采集项目
采集项目的开发环境可以用VisualStudio,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;
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 ErrorsSystemContext.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,已经能够把复杂的底层逻辑隐藏起来,提供一组易于使用的面向对象类库供开发者使用,让开发者在短短的十几行代码即可完成数据的采集。
另外,格西测控大师软件也是一个开放的测控软件开发平台,该软件能够对测试流程进行组态,能够自定义任意通信协议进行设备通信,能够开发漂亮的用户操作界面等,比较适合用于数据采集和监控、设备仿真、通信协议监听和分析、通信协议一致性测试等领域。
使用NI-DAQmx进行数据采集和显示,你来你也行!相关推荐
- 盘活NI DAQmx数据采集卡—使用DAQWare for DAQmx工具软件
DAQWare for DAQmx是一个用于NI DAQmx驱动的数据采集卡的数据采集软件,可以帮助用户在没有LabVIEW编程基础的情况下更好的使用NI数据采集卡. DAQWare for DAQm ...
- 怎么用vc采集ni卡数据_利用labview、matlab和c实现非ni接口卡的数据采集及处理
利用LabVIEW .MATLAB 和C 实现非NI 接口卡的数据采集及处理** 周旭欣1 董兵超1 向明礼2 李拥秋1 袁支润1? (1.四川大学生物力学研究所,成都:610065:2.四川大学化工 ...
- 实战QT数据采集与显示
实战QT数据采集与显示 一.QT界面绘制 二.功能实现 1.回调函数不能作为成员函数 2.实时显示相机画面 3.动态分配内存与释放 最近做了一个项目,算是从零开始完整的实现了需求,在此前还是一个局限于 ...
- 物联网-传输课程设计-数据采集与显示
物联网-传输课程设计-数据采集与显示 1.总结 2.效果展示 3.步骤说明 一.环境准备 (1)Arduino.ESP8266 Node MCU的开发环境搭建(没有单片机就略过) (2)JDK.Ecl ...
- 使用Python调用NI DAQmx
一.硬件: 笔记本电脑Windows 10系统 NI USB-6000 二.软件: (1)Python版本3.7如下 (2)NI DAQmx16.0 查看板卡对应的设备名称: (3)安装Python下 ...
- NI Vision简单采集与显示
NI Vision简单采集与显示 这次总结一下这两天学习和使用NI Vision的图像采集.NI Vision的图像采集分为单次采集及连续采集. 单次采集:只采集一帧图片,或指定帧数图片,采集完马上关 ...
- pandas中dataframe默认不显示所有的数据行(中间省略)、使用option_context函数自定义设置单个dataframe允许显示的行的个数、set_option函数全局设置显示行的个数
pandas中dataframe默认不显示所有的数据行(中间省略).使用option_context函数自定义设置单个dataframe允许显示的行的个数.set_option函数全局设置显示行的个数 ...
- CSS之布局方式(内/外部显示及inline-block显示类型)附<行内块空白间隙解决方案>
文章目录 一.布局方式 1. 外部显示类型 a.块级盒子/元素 b.行内盒子/元素 2. 内部显示类型 2.1 flex 流式布局 二.行内块元素inline-block 显示类型 2.1行内块的空白 ...
- html 多行文本显示,html多行文本显示 html中文本怎么显示省略号和多行
html里的input文本框怎样单行变多行 多行的就不能使用Input了.需要使用textarea标签属性: textarea代表html的单多行输入域 html多行输入框 tyle="OV ...
- IOS不兼容超出部分省略号 且页面显示不起作用 行数限定无作用
IOS不兼容超出部分省略号 且页面显示不起作用 行数限定无作用 换成下面的写法 overflow: hidden;text-overflow: ellipsis;display: -webkit-bo ...
最新文章
- JavaScript之Promise实现
- 51nod 1402 最大值 3级算法题 排序后修改限制点 时间复杂度O(m^2)
- 深拷贝、浅拷贝以及引用传递和按值传递的区别与联系
- 递归与非递归法实现链表相加 CC150 V5 2.5题 java版
- 面对焦虑,我们能做什么?
- 程序员看《长安十二时辰》的正确姿势~!
- 微型计算机技术第三版第三章答案,微型计算机原理与接口技术第三章习题及答案...
- log4j.properties配置文件
- 你知道吗?还有比自回归方式更快更好的序列生成!
- 电机与拖动知识点及试题
- mysql查询出现ambiguous的问题
- uniapp + HbuliderX更新日志
- android 流量的统计
- 【MySQL学习】事务管理
- halcon 二值图像处理 区域的细化 skeleton
- 运维知识体系-V3.0
- signature=07da782715954d48aa05e9d49faf92a9,ndls-20201029
- Tableu地图绘制注意事项
- PDF格式分析(五十一)XFA Forms
- 数据建模基础知识——实体关系图
热门文章
- 搜索框输入内容同时搜索
- WKT转换工具terraformers
- linux 文件系统简析
- EPON+EOC设备网管实现方案
- 计算机网页设计学什么软件,想学网页制作,要在电脑中装什么软件啊,哪儿有学习网页制作的知识...
- mac 中 Alfred3 的使用 ..
- 攻防世界-web-simple js
- 中国反渗透膜清洗剂市场发展趋势与投资规划建议报告2022-2028年
- 新阶段金融科技发展规划:数据安全成监管重点
- vue做混合式app_Vue Cordova教程-Vue+Cordova打造跨平台可安装的混合APP视频教程(大地)...