学会NI-DAQmx10函数,解决80%数据采集应用问题

内容

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%的数据采集应用问题的功能。 下面将详细介绍这些函数,帮助用户理解其功能及其所适用的应用类型。

注意: 本文档所引用的范例可通过下列文档的位置介绍找到: Windows中适用于LabVIEW及文本编程语言的NI-DAQmx范例位置

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中的应用:

NI-DAQmx Express VI指南
在LabWindows/CVI中使用DAQ助手
在Measurement Studio中使用DAQ助手

DAQ助手还可生成代码,用于配置和/或执行指定的采集或生成。 DAQ助手帮助使用DAQ助手自动生成LabVIEW代码文档均描述了在LabVIEW中实现该操作的步骤。 下图显示的是DAQ助手一个实例及其自动生成的配置和LabVIEW代码范例。


DAQ助手提供的灵活性和/或性能有时无法满足某些数据采集应用。 这些应用可能需要以下简单但强大的NI-DAQmx函数。

 

 

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库中的类无法直接被初始化, 这些类被用作 类的子对象。

这些类包含了某个特定通道类型的专用属性。 例如:计数器等属性只适用于计数器,且只能在CIChannelCIChannel类中找到。 用户可在NI-DAQmx .NET类库中将下列通道类型与某个 关联起来:

模拟输入通道— 类

模拟输出通道— 类

数字输入通道— 类

数字输出通道— 类

计数器输入通道— 类

计数器输出通道— 类

任务类包含一个适用于六种通道类型的通道集合属性: 、 、 、 、 和 。 用户可使用通道集合中任意一种创建通道的方法创建通道。

建立了一个新的“任务”对象后,通过调用“通道”类中相应的成员函数即可创建和分配AIChannel对象。 以下程序片段用于创建一个简单的模拟输入电压通道:

analogInTask = new Task();

AIChannel myChannel;

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);

 

练习范例:

LabVIEWDigital - Finite Output.vi
Thermocouple - Continuous Input.vi
CVIWrite Dig Port
Cont Thrmcpl Samples-Int Clk
.NETWriteDigPort
ContAcqThermocoupleSamples_IntClk

 

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.Rising;

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使用“NI-DAQmx触发”函数来实现同步的信息。

练习范例:

LabVIEWVoltage - Finite Input.vi
Voltage - Continuous Input.vi
CVIAcq-Int Clk-Dig Start&Ref
Cont Acq-Int Clk-Anlg Start
.NETAcqVoltageSamples_IntClkDigStartAndRef
ContAcqVoltageSamples_IntClkAnalogStart

 

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定时”函数来实现同步的信息。

由于所测信号可提供定时,因此大多数计数器操作都不需要采样定时。 这些应用应使用“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操作配置握手定时模式。

练习范例:

LabVIEWVoltage - Continuous Output.vi
Counter - Read Pulse Width and Frequency (Finite).vi
CVICont Gen Volt Wfm-Ext Clk
Buff Semi-Period-Finite
.NETContGenVoltageWfm_ExtClk
MeasBuffered_SemiPeriodFinite

 

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开始任务”函数的详细信息,请查看何时使用“DAQmx开始任务”和“DAQmx停止任务”VI

 

在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);

 

练习范例:

LabVIEWCounter - Continuous Output.vi
Current - Continuous Input.vi
CVIDig Pulse Train-Cont
Cont 0-20mA Samps-Int Clk
.NETGenDigPulseTrain_Continuous
ContAcq0_20mACurrentSamples_IntClk

 

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的方式相似。

类包含与I/O相关的属性(如 )和获取原始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, 1000, 10.0, DAQmx_Val_GroupByScanNumber, data, 1000, &numRead, NULL);

 

练习范例:

LabVIEWVoltage - SW-Timed Input.vi
Digital - Finite Input.vi
CVIOne Sample
Read Dig Chan
.NETAcqOneVoltageSample
ReadDigChan

 

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, 1000, 0, 10.0, DAQmx_Val_GroupByChannel, data, &written, NULL);

 

练习范例:

LabVIEWVoltage - Finite Output.vi
Digital - Finite Output.vi
CVIVolt Update
Write Dig Chan
.NETGenVoltageUpdate
WriteDigChan

 

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()函数用于等待直至缓存区的所有样本均生成完毕。 该函数在写入或开始函数之后调用。

 

练习范例:

LabVIEWDigital - Finite Output.vi
Voltage - Finite Output.vi
CVIDig Pulse
Mult Volt Updates-Int Clk
.NETGenDigPulse
GenMultVoltUpdates_IntClk

 

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()函数即可清除任务。

练习范例:

LabVIEWVoltage - Continuous Output.vi
Counter - Count Edges (Continuous Clock).vi
CVICont Gen Volt Wfm-Int Clk
Cnt Dig Events
.NETContGenVoltageWfm_IntClk
CountDigEvents

 

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中查看属性列表及其功能。

练习范例:

LabVIEWStrain - Continuous Input.vi
Thermocouple (with OTCD) - Continuous Input.vi
CVICont Strain Samples
Cont Accel Samps-Int Clk-Anlg Start
.NETAcqStrainSamples
ContAcqAccelSamp_IntClk_AnalogStart

 

结语

NI-DAQmx可通过多种方式来帮助用户节省开发时间并提高数据采集应用的性能, 其中一种方式是提供仅需使用少量函数却可实现大部分功能的API。 事实上,用户只需学习本文介绍的10个函数,便可解决80%的数据采集应用问题。

了解​详情

Was this information helpful?

Yes

No