怎样通过编程实现0 99999.99NI

请问vs2012 c++如何调用或添加ni visa,也就是使用visa函数库的C函数。_百度知道
请问vs2012 c++如何调用或添加ni visa,也就是使用visa函数库的C函数。
我有更好的答案
据说新的有组件模式,老的是LIB/dll链接库模式,完成计算机与仪器间的命令和数据传输、错误代码的定义首先你需要下载ni visa的驱动和编程库,这个可以到美国国家仪器VISA官网下载。VISA的实质就是一个标准的I/O函数库及其相关规范的总称,一般称这个I&#47、外接组件使用没有什么不同,链接库就是包含、引用;O函数库为VISA库。这些库函数用于编写仪器的驱动程序,以实现对仪器的程控.h”选定编程环境后.h包含VISA库中所有的函数原型及所用常量。对VISA函数的调用一般可分为声明,应在程序的开始包含头文件visa.h。visa.h。visa.h中还包含另一头文件visatype、开启、器件I/O和关闭4部分,#include “visa,visa32.lib,visa, 对于32位应用程序,用到的主要文件是visa,这些在VS上面和其它外接库.h等。对于C或C+ +程序.dll.h以及visatype,首先安装VISA库;组件就是注册、导入,visatype.h头文件定义了VISA数据类型,如例中的ViSession、ViUInt32等。ni新的东西不怎么熟
这个安装过了,就是不知道怎么导入到c++。
驱动安装后,如果是链接库模式,开发文档和例子中应该有介绍,就是包含头文件、导入链接库。这个和其它没有区别,属于基础操作,你参考任何一个教程的都可以。.h文件加入工程,在需要使用的地方(或者在stdafx.h只加一个)加入包含。lib在工程属性里面设置,要求链接库在工程目录文件或者windows的系统目录system32下。
哦,好的,谢谢。
采纳率:85%
来自团队:
为您推荐:
其他类似问题
visa的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。NI的GPIB编程与ADLink的GPIB编程
已有 7209 次阅读
|个人分类:|系统分类:
在NI的编程当中,开始的时候需要包含ni488.h,同时需要在工程当中加入gpib-32.obj,在加入这个obj文件的时候会提示&没有***规则,是否要自定义&不知道是什么意思,但是选择&否&似乎没有影响
而在ADLink的编程当中,如果机器上安装了NI的驱动,那么需要将ADLink提供的gpib-32.dll文件放在生成exe的那个文件夹当中。同时需要的是Adgpib.h,gpib_user.h以及gpib-32.lib这三个文件,在include的时候只要将Adgpib.h包含即可,而对于gpib-32.lib这个文件利用以下语句进行处理:
#pragma comment(lib,&gpib-32.lib&)
其它的不同点在于(测试在一台计算机插有一个GPIB板卡的情况下进行):
在NI的ibfind命令执行之后,返回值是&板卡描述&(board or device descriptor)的一个整型,数字似乎对于某块板卡是固定的,但是似乎不是0,例如我手头这一块是0x7918;但是在ADLink的GPIB卡条件下,如果成功找到,则返回的是0。相同的是,二者在执行失败的情况下返回的都是-1
在NI的ibwrt和ibwrta两个函数中的第二个入口参数貌似是不支持CString的而ADLink的则可以,解决方案是,在这两个函数在NI卡上使用的时候调用CString::GetBuffer()来得到字符串指针
目前仅找到这两个地方不一样,其中也有一些疑问:
为什么使用完要利用ibonl将目标设备置于离线,效果是什么,如果另外还有程序在控制设备会不会造成问题
为什么会有boardID, board index, 和board/device descriptor诸多表示索引和类似索引的东西?ADLink条件下一张卡的时候这些都是零,险些混淆使用
ibclr()的作用是什么?同样在多个程序操作一个设备的时候会否造成影响?
转载本文请联系原作者获取授权,同时请注明本文来自刘佳君科学网博客。链接地址:
上一篇:下一篇:
当前推荐数:0
推荐到博客首页
评论 ( 个评论)
扫一扫,分享此博文
作者的其他最新博文
热门博文导读
Powered by
Copyright &学会NI-DAQmx10个函数,解决80%的数据采集应用问题 - National Instruments
学会NI-DAQmx10个函数,解决80%的数据采集应用问题
NI-DAQmx入门指南系列旨在帮助用户了解NI-DAQmx编程的基础知识。 从使用Measurement & Automation Explorer (MAX)验证设备运行情况到使用LabVIEW编程数据采集应用,本系列将通过视频和文本教程为您逐一介绍。 本系列既适用于希望学习使用DAQ助手的初学者,也适合需要使用NI-DAQmx的高级功能的有经验用户。
1. NI-DAQmx:减少开发时间,提升系统系能
自NI-DAQmx发布以来,NI数据采集(DAQ)硬件用户一直在充分利用软件的诸多特性来节省开发时间,并提高数据采集应用程序的性能。
其中一个能节省大量开发时间的特性是NI-DAQmx应用程序编程接口(API),该接口适用于各种设备功能和设备系列。 也就意味着在一个多功能设备的所有功能都可通过同一功能集(模拟输入、模拟输出、数字I/O和计数器)进行编程。 而且,数字I/O设备和模拟输出设备也可由同一个功能集进行编程。 在LabVIEW中,多态机制使得这些都成为可能。 一个多态VI可接受多种数据类型,用于一个或多个输入和/或输出终端。 NI-DAQmx API对于所有可支持的编程环境都是一样的。 用户只需学习运用一个功能集,便可在多种编程环境下对大部分的NI数据采集硬件进行编程。
另一个能够提升开发体验的NI-DAQmx特性是DAQ助手。 这个工具可帮助用户无需编程,仅通过图形化界面配置各种简单或复杂的数据采集任务,即可创建应用。 此外,因为触发和/或时钟信号必须手动路由,因此通常很难实现同步性。而使用NI-DAQmx,这将变得轻而易举,NI-DAQmx可以在一个设备上不同的功能区域间以及在多个设备上自动进行信号路由。
使用NI-DAQmx搭建的数据采集应用将受益于NI-DAQmx这一专门针对最优化系统性能而设计的架构。 该架构以一个高效的状态模型为基础,去除了不必要的重复配置。 将这些系统占用去除后,配置和采集过程都得到了优化。 另外,由于内存映射寄存器的存在,单点I/O采样率可达到50 kS/s以上。
NI-DAQmx构架的另一个重要特性是。 NI-DAQmx的多线程性可实现同时进行多个数据采集操作,从而大大提高了多操作应用的性能, 同时极大地简化此类应用的编程。
用户只需学习几个函数,即可开始享受这些特性所带来的好处。 事实上, NI-DAQmx的10个函数提供了解决80%的数据采集应用问题的功能。 下面将详细介绍这些函数,帮助用户理解其功能及其所适用的应用类型。
注:本文档中引用的范例可在该中找到。
2. DAQ助手
Tools>>Create/Edit DAQmx Tasks [CVI]
Project>>Add New Item>>DAQmx Task [.NET]
DAQ助手可通过图形化界面让用户交互式地创建、编辑、运行NI-DAQmx虚拟通道和任务。 NI-DAQmx虚拟通道包含DAQ设备上的一个物理通道以及该物理通道的配置信息,比如输入范围和自定义缩放。 NI-DAQmx任务就是一个包含虚拟通道、定时、触发信息、以及其他与采集和生成相关的属性的集合。 下图显示了如何配置DAQ助手来实现有限应变测量。
下列文档描述了DAQ助手在LabVIEW、LabWindows/CVI以及.NET中的应用:
DAQ助手还可生成代码,用于配置和/或执行指定的采集或生成。 DAQ助手帮助和文档均描述了在LabVIEW中实现该操作的步骤。 下图显示的是DAQ助手一个实例及其自动生成的配置和LabVIEW代码范例。
DAQ助手提供的灵活性和/或性能有时无法满足某些数据采集应用。 这些应用可能需要以下简单但强大的NI-DAQmx函数。
3. NI-DAQmx创建虚拟通道
Library>>NI-DAQmx>>Channel Creation/Configuration [CVI]
Task.Channel.CreateChannel Property [.NET]
“NI-DAQmx创建虚拟通道”函数可创建一个虚拟通道并将其添加至任务, 也可用于创建多个虚拟通道并将其全部添加至任务。 如未指定任务,该函数将自动创建一个任务。 “NI-DAQmx创建虚拟通道”函数包含多个实例, 这些实例对应虚拟通道执行的具体测量或生成类型。
在LabVIEW中创建通道
下图显示的是“NI-DAQmx创建虚拟通道”VI四个不同实例的范例。
“NI-DAQmx创建虚拟通道”函数不同实例的输入端各不相同, 但某些输入对于大部分(即使不是全部)函数实例都是通用的。 例如,指定虚拟通道使用的物理通道(模拟输入和模拟输出)、线路(数字)或计数器需要同一个输入。 此外,模拟输入、模拟输出和计数器操作根据信号的最小和最大预估值使用最小值和最大值输入来配置和优化测量和生成。 此外,多种类型的虚拟通道可进行自定义扩展。 下列LabVIEW程序框图中,“NI-DAQmx创建虚拟通道”VI用于创建热电偶虚拟通道。
在.NET中创建通道
大部分NI-DAQmx .NET库中的类无法直接被初始化, 这些类被用作任务类的子对象。
这些类包含了某个特定通道类型的专用属性。 例如:计数器等属性只适用于计数器,且只能在CIChannel和CIChannel类中找到。 用户可在NI-DAQmx .NET类库中将下列通道类型与某个任务关联起来:
模拟输入通道—AIChannel类
模拟输出通道—AOChannel类
数字输入通道—DIChannel类
数字输出通道—DOChannel类
计数器输入通道—CIChannel类
计数器输出通道—COChannel类
任务类包含一个适用于六种通道类型的通道集合属性:AIChannels、AOChannels、DIChannels、DOChannels、CIChannels和COChannels。 用户可使用通道集合中任意一种创建通道的方法创建通道。
建立了一个新的“任务”对象后,通过调用“通道”类中相应的成员函数即可创建和分配AIChannel对象。 以下程序片段用于创建一个简单的模拟输入电压通道:
analogInTask = new Task();
AIChannel myC
myChannel = analogInTask.AIChannels.CreateVoltageChannel(
    "dev1/ai1", //The physical name of the channel
    "myChannel", //The name to associate with this channel
    AITerminalConfiguration.Differential, //Differential wiring
    -10, //-10v minimum
    10, //10v maximum
    AIVoltageUnits.Volts //Use volts
在C/C++中创建任务
DAQmxCreateTask()函数可用于创建任务,DAQmxCreateAIVoltageChan()函数则用于创建模拟输入电压通道。 关于创建不同测试类型的通道的信息,请查看NI-DAQmx C Reference Help。 以下程序片段是这两个函数的应用范例。
TaskHandle  taskHandle=0;
char        chan[256] = "Dev1/ai0";
float64     min = -10, max = 10;
DAQmxCreateTask("",&taskHandle);
DAQmxCreateAIVoltageChan(taskHandle, chan, "", DAQmx_Val_Cfg_Default, min, max, DAQmx_Val_Volts, NULL);
练习范例:
Digital - Finite Output.vi
Thermocouple - Continuous Input.vi
Write Dig Port
Cont Thrmcpl Samples-Int Clk
WriteDigPort
ContAcqThermocoupleSamples_IntClk
4. NI-DAQmx触发
Library>>NI-DAQmx>>Triggering [CVI]
Task.Triggers Property [.NET]
“NI-DAQmx触发”函数可用于对触发进行配置来执行指定操作。 常用的操作是开始触发和参考触发。 开始触发用于启动采集或生成, 参考触发则用于在一组采集样本中创建预触发数据结束后和后触发数据开始前的位置。 可对这两个触发进行配置,使其发生在数字边沿、模拟边沿、或模拟信号进入或离开窗口时。
在LabVIEW中创建触发
在下面的LabVIEW程序框图中,开始触发和参考触发均已通过“NI-DAQmx触发”VI进行配置,可发生在数字边沿上来进行模拟输入操作。
许多数据采集应用程序需要在一个设备上实现不同功能区域的同步(例如,模拟输出和计数器), 而其他的程序也需要在多个设备之间实现同步。 为了实现这些同步,触发信号必须在单个设备的不同功能区域间或在不同的设备间进行路由。 NI-DAQmx则可自动执行这些路由。 使用“NI-DAQmx触发”函数时,所有有效的触发信号均可作为源输入到函数中。 例如,在下面的“NI-DAQmx触发”VI中,设备2的开始触发信号可用作设备1的开始触发源,而无需进行任何显式路由。
在.NET中创建触发
创建“任务”对象和“通道”后,用户可以调用“任务.触发”集合中的方法将触发添加至任务中。 以下程序代码显示了创建“数字边沿开始触发”:
analogInTask = new Task();
DigitalEdgeStartTriggerEdge triggerEdge = DigitalEdgeStartTriggerEdge.R
analogInTask.AIChannels.CreateVoltageChannel( ... );
analogInTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger("PFI0", triggerEdge);
基于发送至ConfigureDigitalEdgeTrigger函数的参数,设备会根据内部或外部的触发线判断是否存在上升或下降数字边沿,然后再开始采集数据。 上面的程序代码用于将设备配置为根据PFI 0判断上升数字边沿触发。
在C/C++中创建触发
DAQmxCfgDigEdgeStartTrig()函数可用于创建数字边沿开始触发。 关于创建其他不同的触发,请查看NI-DAQmx C Reference Help。 以下程序代码显示了如何使用该函数从PFI0接收数字开始触发信号并在该线路中寻找上升边沿。
char        startTrigger[256] = "Dev1/PFI0";
int         startEdge = 0; // rising edge
DAQmxCreateTask("",&taskHandle));
DAQmxCreateAIVoltageChan(taskHandle, chan, "", DAQmx_Val_Cfg_Default, min, max, DAQmx_Val_Volts, NULL);
DAQmxCfgDigEdgeStartTrig(taskHandle, startTrigger, startEdge);  
文档中介绍了更多关于借助NI-DAQmx使用“NI-DAQmx触发”函数来实现同步的信息。
练习范例:
Voltage - Finite Input.vi
Voltage - Continuous Input.vi
Acq-Int Clk-Dig Start&Ref
Cont Acq-Int Clk-Anlg Start
AcqVoltageSamples_IntClkDigStartAndRef
ContAcqVoltageSamples_IntClkAnalogStart
5. NI-DAQmx定时
Library>>NI-DAQmx>>Timing [CVI]
Task.Timing Property [.NET]
“NI-DAQmx定时”函数用于对硬件定时的数据采集操作进行定时配置, 包括指定操作是连续执行还是有限执行、选择采集或生成的样本数量以进行有限操作、以及需要时创建缓冲区。
对于需要采样定时(模拟输入、模拟输出和计数器)的操作,“NI-DAQmx定时”函数的采样时钟实例可用于设置采样时钟源和采样速率,采样时钟源可以是内部也可以是外部的信号源。 采样时钟能够控制采集或生成样本的速率。 每个时钟脉冲将启动任务中每个虚拟通道的样本采集或生成。
在LabVIEW中配置任务定时
下面的LabVIEW程序框图显示的是如何使用“NI-DAQmx定时”VI的“采样时钟”实例来配置使用外部采样时钟的连续模拟输出生成。
为了实现数据采集程序间的同步,定时信号必须以与触发信号同样的方式在一个设备的不同功能区域间或在多个设备间进行路由。 NI-DAQmx可自动完成这些路由。 所有有效的定时信号都可作为“NI-DAQmx定时”函数的源输入。 例如,在以下“DAQmx定时”VI中,设备的模拟输出采样时钟信号可用作模拟输入通道采样时钟的信号源,而无需进行任何显式路由。
文档中介绍了更多关于借助NI-DAQmx使用“NI-DAQmx定时”函数来实现同步的信息。
由于所测信号可提供定时,因此大多数计数器操作都不需要采样定时。 这些应用应使用“NI-DAQmx定时”函数的隐式实例。 在以下LabVIEW程序框图中,“NI-DAQmx定时”VI的隐式实例用于以指定的采样数量将缓冲脉冲宽度采集配置为有限值。
在.NET中配置任务定时
Channel.Timing.ConfigureSampleClock()函数用于配置采样时钟源、采样时钟速率,以及待采集或生成的采样数。 以下程序代码显示了根据连接至设备PFI 0的外部采样时钟创建一个连续采样。
analogInTask = new Task();
analogInTask.AIChannels.CreateVoltageChannel( ... );
analogInTask.Timing.ConfigureSampleClock(
"/Dev1/PFI0", // external clock source line or use "" for internal clock
10000, // expected rate of external clock or actual rate of internal clock
SampleClockActiveEdge.Rising, // acquire on rising or falling edge of ticks
SampleQuantityMode.ContinuousSamples, // continuous or finite samples
1000 // number of finite samples to acquire or used for buffer size if continuous
在C/C++中配置任务定时
DAQmxCfgSampClkTiming函数用于配置C或C++中的任务定时。 以下程序代码显示了该函数应用于一个10000赫兹的内部时钟的范例。
char        clockSource[256] = "";
float64     rate = 10000;
DAQmxCfgSampClkTiming(taskHandle, clockSource, rate, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000);
某些数据采集设备针对数字I/O操作采用的是握手定时模式。 握手协议通过与外部设备进行定时信号的请求和确认交互来传输样本。 “NI-DAQmx定时”函数的握手实例可用于为数字I/O操作配置握手定时模式。
练习范例:
Voltage - Continuous Output.vi
Counter - Read Pulse Width and Frequency (Finite).vi
Cont Gen Volt Wfm-Ext Clk
Buff Semi-Period-Finite
ContGenVoltageWfm_ExtClk
MeasBuffered_SemiPeriodFinite
6. NI-DAQmx开始任务
Library>>NI-DAQmx>>Task Configuration/Control>>Start Task [CVI]
Task.Start Method [.NET]
在引言中我们提过,NI-DAQmx使用的状态模型已去除了不必要的重复配置,可实现更高的效率和最佳的性能。 该状态模型包含一个任务的五个状态。 关于每一个状态的详细信息可在NI-DAQmx帮助下的NI-DAQmx重要概念>>NI-DAQmx通道和任务>>NI-DAQmx任务>>任务状态模型中找到。
“NI-DAQmx开始任务”函数可以将一个任务显式转换成运行状态。 运行状态下,任务进行指定的采集和生成。 当“NI-DAQmx读取”函数运行而“NI-DAQmx开始任务”函数未运行时,任务将隐式转换成运行状态并自动启动。 这种隐式转换也会发生在“NI-DAQmx写入”函数在指定的自动开始输入驱动下运行但“NI-DAQmx开始任务”函数未运行时。
虽然不一定需要,但包含硬件定时的采集或生成的任务最好使用“NI-DAQmx开始任务”函数来显式启动。 而且,如果需要多次执行“NI-DAQmx读取”函数或“NI-DAQmx写入”函数(比如在一个循环中),则应使用“NI-DAQmx开始任务”函数。 否则任务会由于不断重复开始和停止而影响执行性能。 关于使用何时“NI-DAQmx开始任务”函数的详细信息,请查看。
在LabVIEW中开始任务
以下LabVIEW程序框图显示的是模拟输出生成仅包含单个软件定时的采样而无需使用“NI-DAQmx开始”函数的情况。
相反,下面的LabVIEW程序框图显示的是多次执行“NI-DAQmx读取”函数从计数器读取数据而必须使用“NI-DAQmx开始”函数的情况。
在.NET中开始任务
Start()函数用于在“任务”对象中开始任务。 下面的代码是Start()函数的一个使用范例。
analogInTask = new Task();
analogInTask.AIChannels.CreateVoltageChannel( ... );
analogInTask.Timing.ConfigureSampleClock( ... );
analogInTask.Start();
在C/C++中开始任务
DAQmxStartTask()函数可用于开始任务, 该函数的一个应用代码范例如下。
DAQmxStartTask(taskHandle);
练习范例:
Counter - Continuous Output.vi
Current - Continuous Input.vi
Dig Pulse Train-Cont
Cont 0-20mA Samps-Int Clk
GenDigPulseTrain_Continuous
ContAcq0_20mACurrentSamples_IntClk
7. NI-DAQmx读取
Library>>NI-DAQmx>>Read Functions [CVI]
ChannelReader Class [.NET]
“NI-DAQmx读取”函数可从指定的采集任务中读取样本。 针对不同的函数实例可选择不同的采集类型(模拟、数字、或计数器)、虚拟通道数量、采样数量和数据类型。 指定的采样数量从DAQ板卡上的FIFO传输到RAM中的PC缓存后,“NI-DAQmx读取”函数再将样本从PC缓存转移到应用程序开发环境(ADE)内存中。
在LabVIEW中读取数据
下图显示的是四个不同 “NI-DAQmx读取”VI实例的范例。
可读取多个采样的“NI-DAQmx读取”函数实例包括一个用于指定函数执行时每通道采样数的输入。 对于有限采集,将每通道采样数指定为-1,函数将等待所有请求的样本采集完毕,然后再对这些样本进行读取。 对于连续采集,如果将每通道采样数指定为-1,则函数执行时将读取当前缓存区中的所有样本。 在以下LabVIEW程序框图中,“NI-DAQmx读取”VI已进行配置,可从多个模拟输入虚拟通道读取多个采样,然后将数据以波形的方式返回。 而且,由于每通道采样数输入已设置为常数10,每次执行VI时将从每个虚拟通道读取10个样本。
在.NET中读取数据
读取NI-DAQmx .NET库需要使用读取器和流对象。 该编程模式与.NET Framework读取文件和网络I/O的方式相似。
DaqStream类包含与I/O相关的属性(如CurrentReadPosition)和获取原始I/O的方法。流属性用于获取某个指定任务相对应的DaqStream类实例。 用户无法直接获得DaqStream类的例程。
为了在NI-DAQmx库中进行读取,需要创建一个读取器实例,并在构造器中传递DaqStream类的实例。 然后调用读取器类上的方法来读取数据,代码如下所示:
analogInTask = new Task();
analogInTask.AIChannels.CreateVoltageChannel( ... );
//Create the reader and attach it to the stream
AnalogSingleChannelReader reader = new AnalogSingleChannelReader(analogInTask.Stream);
//Perform the read
double[] data = reader.ReadMultiSample(100);
在C/C++中读取数据
DAQmxReadAnalogF64()函数用于读取C或C++中的模拟输入任务的模拟数据。 更多有关读取函数的信息,请查看NI-DAQmx C Reference Help。 以下是使用该函数从单个通道中读取1000个采样的代码范例。
int numRead = 0;
DAQmxReadAnalogF64(taskHandle, , DAQmx_Val_GroupByScanNumber, data, 1000, &numRead, NULL);
练习范例:
Voltage - SW-Timed Input.vi
Digital - Finite Input.vi
One Sample
Read Dig Chan
AcqOneVoltageSample
ReadDigChan
8. NI-DAQmx写入
Library>>NI-DAQmx>>Write Functions [CVI]
ChannelWriter Class [.NET]
“NI-DAQmx写入”函数用于将样本写入指定的生成任务中。 针对不同的函数例程可选择不同的生成类型(模拟或数字)、虚拟通道数量、采样数量和数据类型。 “NI-DAQmx写入”函数将样本从应用程序开发环境(ADE)写入到PC缓存中。 然后这些样本从PC缓存传输到DAQ板卡FIFO以进行生成。
每个“NI-DAQmx写入”函数的实例包含一个自动开始输入,用于在任务没有显式启动时判定该函数是否隐式启动任务。 本文“NI-DAQmx开始任务”一节已介绍过,显式启动硬件定时的生成任务时应使用“NI-DAQmx开始任务”函数。 如果需要多次执行“NI-DAQmx写入”函数,则还应使用该函数来使性能最优化。
在LabVIEW中写入数据
下图显示的是四个不同 “NI-DAQmx写入”VI实例的范例。
下面的LabVIEW程序框图用于实现有限模拟输出生成,其中一个"False"布尔常量连接至“NI-DAQmx写入”VI的自动开始输出,这是由于该生成是硬件定时的。 “NI-DAQmx写入”VI已进行配置,可将一个通道的多个模拟输入数据样本以模拟波形的形式写入任务。
在.NET中写入数据
写入NI-DAQmx .NET库需要使用写入器和流对象。 该过程与上述数据读取过程相似。
执行写入操作需要创建一个写入器实例,并在构造器中传递DaqStream类的实例。 然后调用写入器类上的方法来写入数据,代码如下所示:
analogOutTask = new Task();
analogOutTask.AOChannels.CreateVoltageChannel( ... );
//Create the writer and attach it to the stream
AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(analogOutTask.Stream);
//Perform the write
double[] data = writer.WriteMultiSample(100);
在C/C++中写入数据
DAQmxReadAnalogF64()函数用于写入模拟数据。 更多关于写入其他数据形式的信息,请查看NI-DAQmx C Reference Help。 以下是写入1000个模拟数据样本的代码片段。
int written = 0;
DAQmxWriteAnalogF64(taskHandle, .0, DAQmx_Val_GroupByChannel, data, &written, NULL);
练习范例:
Voltage - Finite Output.vi
Digital - Finite Output.vi
Volt Update
Write Dig Chan
GenVoltageUpdate
WriteDigChan
9. NI-DAQmx结束前等待
Library>>NI-DAQmx>>Task Configuration/Control>>Wait Until Task Done [CVI]
Task.WaitUntilDone Method [.NET]
“NI-DAQmx结束前等待”函数用于等待数据采集完毕后结束任务。 该函数可用于确保停止任务前已完成指定的采集或生成。 一般情况下,“NI-DAQmx结束前等待”函数用于有限操作。 一旦该函数执行完毕,则表示有限采集或生成已完成,任务可在不影响操作的情况下停止。 此外,超时输入可用于指定最长等待时间。 如果采集或生成没有在该时间内完成,则函数将退出并生成一个相应错误。
在LabVIEW结束前等待
以下LabVIEW程序框图中的“NI-DAQmx结束前等待”VI用于确认有限数字输出完成后才将任务清除。
在.NET中结束前等待
更多关于在.NET中使用该函数的信息,请查看随附的GenMultVoltUpdates_IntClk范例。
在C/C++中结束前等待
DAQmxWaitUntilTaskDone()函数用于等待直至缓存区的所有样本均生成完毕。 该函数在写入或开始函数之后调用。
练习范例:
Digital - Finite Output.vi
Voltage - Finite Output.vi
Mult Volt Updates-Int Clk
GenDigPulse
GenMultVoltUpdates_IntClk
10. NI-DAQmx清除任务
Library>>NI-DAQmx>>Task Configuration/Control>>Clear Task [CVI]
Task.Dispose Method [.NET]
“NI-DAQmx清除任务”函数用于清除指定的任务。 如果任务正在运行,则函数将先停止任务,然后释放任务所有的资源。 一旦任务被清除后,除非再次创建,否者该任务无法再使用。 因此,如果需要再次使用任务,则应使用“NI-DAQmx停止任务”函数来停止任务,而不是将其清除。
对于连续操作,应使用“NI-DAQmx清除任务”函数来停止实际的采集或生成。
在LabVIEW中清除任务
在下面的LabVIEW程序框图中,连续脉冲序列通过计数器来生成。 脉冲序列将连续输出直至退出While循环,然后开始执行“NI-DAQmx清除任务”VI。
在.NET中清除任务
任务完成读取或写入后,调用Task.Dispose方法即可清除任务。
在C/C++中清除任务
任务完成读取或写入后,使用DAQmxClearTask()函数即可清除任务。
练习范例:
Voltage - Continuous Output.vi
Counter - Count Edges (Continuous Clock).vi
Cont Gen Volt Wfm-Int Clk
Cnt Dig Events
ContGenVoltageWfm_IntClk
CountDigEvents
11. NI-DAQmx属性
Attribute [CVI]
Property [.NET]
通过“NI-DAQmx属性”可以访问与数据采集操作相关的的所有属性。 这些属性可通过“NI-DAQmx属性”写入来进行设置,当前的属性值也可以通过“NI-DAQmx属性”读取。
前面我们已讨论过,许多属性可使用NI-DAQmx函数进行设置。 比如,采样时钟源和采样时钟有效边沿属性可通过“NI-DAQmx定时”函数进行设置。 然而,一些较少使用的属性只能通过“NI-DAQmx属性”来进行设置。
在LabVIEW中使用属性(属性节点)
在LabVIEW中,一个“NI-DAQmx属性节点”可用于写入和/读取多个属性。 例如,下面的“LabVIEW NI-DAQmx定时属性节点”先设置了采样时钟源, 然后读取采样时钟源, 最后设置采样时钟的有效边沿。
在下面的LabVIEW程序框图中,“NI-DAQmx通道属性节点”用于启用硬件低通滤波器,然后设置滤波器的截止频率以便进行应变计测量。
在.NET中使用属性
我们在“定时”部分已介绍过,许多属性是通过“任务”对象内部的子类和集合进行设置。 以下代码片段是NI-DAQmx属性使用的一个常见范例:
//Create a new NI-DAQmx Task
Task t = new Task();
//Access the subobject properties of the Task class
t.Timing.SamplesPerChannel = 1000;
在C/C++中使用属性
为了获取或设置任务的不同属性,每一个属性都有其相应的获取和设置函数。 如需了解更多信息,可在NI-DAQmx C Reference Help 下的NI-DAQmx C Reference Help中查看属性列表及其功能。
练习范例:
Strain - Continuous Input.vi
Thermocouple (with OTCD) - Continuous Input.vi
Cont Strain Samples
Cont Accel Samps-Int Clk-Anlg Start
AcqStrainSamples
ContAcqAccelSamp_IntClk_AnalogStart
NI-DAQmx可通过多种方式来帮助用户节省开发时间并提高数据采集应用的性能, 其中一种方式是提供仅需使用少量函数却可实现大部分功能的API。 事实上,用户只需学习本文介绍的10个函数,便可解决80%的数据采集应用问题。
书签收藏和分享
本网站使用cookies来为您提供更好的浏览体验。

我要回帖

更多关于 编程语言实现模式 pdf 的文章

 

随机推荐