首页 > 其他分享 >NI DAQmx

NI DAQmx

时间:2024-01-23 11:01:08浏览次数:17  
标签:NI 函数 taskHandle DAQmx 任务 通道

一、什么是NI-DAQmx

NI ---National Instruments

DAQ --- Data AcQuisition

mx ---Measurement eXperience 

二、如何使用NI DAQ

DAQ----NI数据采集卡物理通道的概念和语法-面包板社区 (eet-china.com)

2.1、物理通道:

NI把物理通道号分成六个类别:

AI/AO:模拟量输入/输出

DI/DO:数字量输入/输出

CI/CO:计数器输入/输出

数字量输入/输出(DI/DO)比较特殊,有端口(PORT)和线(LINE)的概念,所谓端口,一般是8位的,读写端口就是同时对端口的8个位(线)同时操作,如果只操作相应端口的某一条线(实际就是某一位),可以通道物理通道控件选择线操作。

                   物理通道:设备号/通道号

1、物理通道由设备号(DEV1)和通道号(AI,AO等)两部分组成,中间是斜杠分隔符号。

2、物理通道号是在MAX配置板卡后自动分配的,第一块板卡是DEV0,第二块是DEV1。

3、对于AI,AO,CI,CO,通道号由通道形式(AI,AO)加上通道编号组成,比如AI0,AI5,AO1等等。

4、对于数字IO,通道号是端口(PORT0,PORT1。。)或者端口+线号组成(PORT0/LINE1等)

 

2.2、语法:

多通道的表示方法(可以混合):

连续方式:(用:分隔)

Dev0/ai0:4 或者 Dev0/ai0:Dev0/ai4 表示选择0--4五个AI通道。

列表方式:(用 ,分隔)

Dev0/ai1,Dev0/ai4 表示同时选择AI1和AI4两个物理通道。

2.3、8个主要流程函数

         正常调用流程:

 

 

2.3.1、创建任务

DAQmxCreateTask()函数可用于创建任务

TaskHandle  taskHandle=0;

DAQmxCreateTask("",&taskHandle);

 

2.3.2、创建虚拟通道

“NI-DAQmx创建虚拟通道”函数可创建一个虚拟通道并将其添加至任务, 也可用于创建多个虚拟通道并将其全部添加至任务。 如未指定任务,该函数将自动创建一个任务。 “NI-DAQmx创建虚拟通道”函数包含多个实例, 这些实例对应虚拟通道执行的具体测量或生成类型。

例如:DAQmxCreateAIVoltageChan()函数则用于创建模拟输入电压通道:

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

 

2.3.3、触发/定时

“NI-DAQmx触发”函数可用于对触发进行配置来执行指定操作。 常用的操作是开始触发和参考触发。 开始触发用于启动采集或生成, 参考触发则用于在一组采集样本中创建预触发数据结束后和后触发数据开始前的位置。 可对这两个触发进行配置,使其发生在数字边沿、模拟边沿、或模拟信号进入或离开窗口时。

“NI-DAQmx定时”函数用于对硬件定时的数据采集操作进行定时配置, 包括指定操作是连续执行还是有限执行、选择采集或生成的样本数量以进行有限操作、以及需要时创建缓冲区。
对于需要采样定时(模拟输入、模拟输出和计数器)的操作,“NI-DAQmx定时”函数的采样时钟实例可用于设置采样时钟源和采样速率,采样时钟源可以是内部也可以是外部的信号源。 采样时钟能够控制采集或生成样本的速率。 每个时钟脉冲将启动任务中每个虚拟通道的样本采集或生成。

例如:DAQmxCfgSampClkTiming函数用于配置C或C++中的任务定时

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

char        clockSource[256] = "";
float64     rate = 10000;
DAQmxCfgSampClkTiming(taskHandle, clockSource, rate, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000);

 

2.3.4、开始任务

“NI-DAQmx开始任务”函数可以将一个任务显式转换成运行状态。 运行状态下,任务进行指定的采集和生成。 当“NI-DAQmx读取”函数运行而“NI-DAQmx开始任务”函数未运行时,任务将隐式转换成运行状态并自动启动。 这种隐式转换也会发生在“NI-DAQmx写入”函数在指定的自动开始输入驱动下运行但“NI-DAQmx开始任务”函数未运行时。

虽然不一定需要,但包含硬件定时的采集或生成的任务最好使用“NI-DAQmx开始任务”函数来显式启动。 而且,如果需要多次执行“NI-DAQmx读取”函数或“NI-DAQmx写入”函数(比如在一个循环中),则应使用“NI-DAQmx开始任务”函数。 否则任务会由于不断重复开始和停止而影响执行性能。

 例如:DAQmxStartTask()函数可用于开始任务:

DAQmxStartTask(taskHandle);

 

2.3.5、读/写

“NI-DAQmx读取”函数可从指定的采集任务中读取样本。 针对不同的函数实例可选择不同的采集类型(模拟、数字、或计数器)、虚拟通道数量、采样数量和数据类型。 指定的采样数量从DAQ板卡上的FIFO传输到RAM中的PC缓存后,“NI-DAQmx读取”函数再将样本从PC缓存转移到应用程序开发环境(ADE)内存中。

“NI-DAQmx写入”函数用于将样本写入指定的生成任务中。 针对不同的函数例程可选择不同的生成类型(模拟或数字)、虚拟通道数量、采样数量和数据类型。 “NI-DAQmx写入”函数将样本从应用程序开发环境(ADE)写入到PC缓存中。 然后这些样本从PC缓存传输到DAQ板卡FIFO以进行生成。

例如:DAQmxReadAnalogF64()函数用于读取C或C++中的模拟输入任务的模拟数据:

int numRead = 0;

//int32 DAQmxReadAnalogF64(TaskHandle taskHandle, int32 numSampsPerChan, float64 timeout, bool32 fillMode, float64 readArray[], uInt32 arraySizeInSamps, int32 *sampsPerChanRead, bool32 *reserved);
DAQmxReadAnalogF64(taskHandle, 1000, 10.0, DAQmx_Val_GroupByScanNumber, data, 1000, &numRead, NULL);

例如:DAQmxReadAnalogF64()函数用于写入模拟数据

int written = 0;

DAQmxWriteAnalogF64(taskHandle, 1000, 0, 10.0, DAQmx_Val_GroupByChannel, data, &written, NULL);

 

2.3.6、结束前等待

 “NI-DAQmx结束前等待”函数用于等待数据采集完毕后结束任务。 该函数可用于确保停止任务前已完成指定的采集或生成。 一般情况下,“NI-DAQmx结束前等待”函数用于有限操作。 一旦该函数执行完毕,则表示有限采集或生成已完成,任务可在不影响操作的情况下停止。 此外,超时输入可用于指定最长等待时间。 如果采集或生成没有在该时间内完成,则函数将退出并生成一个相应错误。

例如:DAQmxWaitUntilTaskDone()函数用于等待直至缓存区的所有样本均生成完毕。 该函数在写入或开始函数之后调用。

//int32 DAQmxWaitUntilTaskDone (TaskHandle taskHandle, float64 timeToWait);

//timeToWait:-1:无限期地等待,单位:秒
DAQmxWaitUntilTaskDone(taskHandle, -1);

 

2.3.7、结束任务

 例如:DAQmxStopTask()函数即可结束任务

DAQmxStopTask(taskHandle);

 

2.3.8、清理任务

 “NI-DAQmx清除任务”函数用于清除指定的任务。 如果任务正在运行,则函数将先停止任务,然后释放任务所有的资源。 一旦任务被清除后,除非再次创建,否者该任务无法再使用。 因此,如果需要再次使用任务,则应使用“NI-DAQmx停止任务”函数来停止任务,而不是将其清除。

对于连续操作,应使用“NI-DAQmx清除任务”函数来停止实际的采集或生成。

例如:DAQmxClearTask()函数即可清除任务

DAQmxClearTask(taskHandle);

 

标签:NI,函数,taskHandle,DAQmx,任务,通道
From: https://www.cnblogs.com/wxzhrj/p/17981628

相关文章

  • academy和college "University"
    一文告诉你academy和college区别FFF看世界2024-01-2221:41上海哈利波特中的学院就是Academy"Academy"和"College"在一些语境中可能有交叉使用,但它们通常表示不同类型的教育机构。这里是它们的一般区别:Academy(学院):"Academy"一词通常指的是一所高中或中......
  • ILRuntime是如何与Unity互相调用的
    ILRuntime是一个跨平台CLR实现,它可以在多个平台上运行C#代码,包括Android、iOS、Windows、Linux等等。ILRuntime的实现方式是将C#代码编译成IL代码,然后在运行时通过JIT或AOT的方式将IL代码转换为机器代码,从而实现跨平台的效果。ILRuntime的主要功能包括热更新、动态加载、代码加密......
  • Unity 如何基于addressable来做资源管理
    一、什么是Addressable系统Addressable系统是Unity2018.3版本中推出的一种资源管理方案,它可以帮助我们更好地管理游戏中的资源。在以往的游戏开发中,我们通常使用Resources来进行资源加载,但是这种方式存在很多问题,比如加载速度慢、内存占用高等。Addressable系统可以解决这些问题......
  • Unity如何设计一个技能系统
    一、技能系统的设计思路技能系统是游戏中非常重要的一部分,因此在设计技能系统时需要考虑以下几个方面:对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。1.技能类型不同的游戏有不同的技能类型,例如魔......
  • getOpenId
     Page({/***页面的初始数据*/data:{showUploadTip:false,haveGetOpenId:false,envId:'',openId:''},onLoad(options){this.setData({envId:options.envId});},getOpenId(){w......
  • 无涯教程-CodeIgniter - 国际化
    CodeIgniter中的语言类提供了一种支持多种国际化语言的简便方法。在某种程度上,无涯教程可以使用不同的语言文件以多种不同的语言显示文本。可以将不同的语言文件放在application/language目录中。可以在system/language目录中找到系统语言文件,但是要将自己的语言添加到应用程序......
  • 无涯教程-CodeIgniter - 性能压测
    如果要测量执行一组行或内存使用所花费的时间,则可以使用CodeIgniter中的基准测试点进行计算。为此,在CodeIgniter中有一个单独的"Benchmarking"类。此类会自动加载;它可以在控制器,视图和模型类中的任何位置使用。您所需要做的就是标签一个起点和终点,然后在这两个标签的点之间执行......
  • 搭建RAC时报错Cannot verify the shared state for device /dev/asm-diskd due to Uni
    问题描述:搭建RAC时报错Cannotverifythesharedstatefordevice/dev/asm-diskdduetoUniversallyUniqueIdentifiers(UUIDs)notbeingfound......,如下所示:系统:rhel7.964位数据库:19c1、异常重现详细告警日志:ASMdevicesharednesscheck-Thischeckverifiesthe......
  • 无涯教程-CodeIgniter - 页面重定向
    在构建Web应用程序时,无涯教程经常需要将用户从一个页面重定向到另一页面。redirect()函数用于此目的。语法redirect($uri='',$method='auto',$code=NULL)参数$uri(string)     -URI字符串$method(string)-重定向方法("auto","location"或"refresh")$......
  • 命令行窗口排列 https://share.weiyun.com/EykMqNix 密码:ydvrx5
    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788......