首页 > 系统相关 >LabWindows/CVI数据采集-DAQ相关函数介绍

LabWindows/CVI数据采集-DAQ相关函数介绍

时间:2023-02-20 10:22:16浏览次数:49  
标签:采样 int32 const 函数 TaskHandle LabWindows 任务 DAQ CVI

1.如果函数状态出现错误,就用goto语句跳转到错误Error函数块去执行。Error需要自己定义

#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else

2.创建任务函数------DAQmxCreateTask

1)函数原型

int32 DAQmxCreateTask (const char taskName[], TaskHandle *taskHandle);

2)函数作用

创建一个任务,且创建任务之后必须要清除这个任务(DAQmxClearTask)

如果这个函数在循环体内,则必须把清除任务函数也放在函数体内,以避免浪费太多内存

3)关键点

DAQmxErrChk (DAQmxCreateTask("",&gAItaskHandle));//输入任务

DAQmxErrChk (DAQmxCreateTask("",&gAOtaskHandle)); //输出任务

第一个是名字,第二个是句柄。名字可以不用,用空格也可以。

3.输入通道配置函数-------DAQmxCreateAIVoltageChan

1)函数原型

int32 DAQmxCreateAIVoltageChan (TaskHandle taskHandle, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal, int32 units, const char customScaleName[]);

2)函数作用

创建测量电压的通道,并将通道添加到使用taskHandle指定的任务中。可以不止一个通道

3)关键点

taskHandle--------任务句柄。gAItaskHandle
physicalChannel[]------物理通道名,例:"Dev1/ai0:1",去labwindows查看

nameToAssignToChannel-------起一个别名,可以不用

terminalConfig-----------终端配置,可以选择下列四种

 

 

minVal,maxVal-------测量电压的上下限制

units------单位,可以指定是伏特,或者是自定义比例值。

customScaleName--------自定义比例值时调用,不用的时候写null

4.DAQmxCreateAOVoltageChan-------创建电压输出通道

1)函数原型

int32 DAQmxCreateAOVoltageChan (TaskHandle taskHandle, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, const char customScaleName[]);

2)函数作用

与上面那个函数类似,创建输出通道,可以不止一个通道。

3)关键点

与上面类似

5.DAQmxCfgSampClkTiming-----配置采样时钟

1)函数原型

int32 DAQmxCfgSampClkTiming (TaskHandle taskHandle, const char source[], float64 rate, int32 activeEdge, int32 sampleMode, uInt64 sampsPerChanToAcquire);

2)函数作用

设置采样时钟的源、采样时钟的速率以及要获取或生成的采样数。

3)关键点

source[]------样本时钟的源端。要使用设备的内部时钟,请使用NULL或OnboardClock。

rate------采样频率;

activeEdge-----指定在时钟的哪个边缘上获取或生成样本。在采样时钟的上升沿上采集或生成采样,或者在样本时钟的下降沿上采集或生成样本

sampleMode----采样模式,是连续采样还是有限采样

sampsPerChanToAcquire-----每个通道的采样点。如果sampleMode为DAQmx Val_FiniteSamps,则为任务中的每个通道采集或生成的样本数。如果sampleMode是DAQmx_Val_ContSamps,则NI DAQmx使用此值确定缓冲区大小。

我自己需要注意的点:我的电压输出是优点,采样是连续的。

6.此外还有触发设置函数,但是我不想改动了,可以参考示例DAQmxCfgDigEdgeStartTrig

7.往设备中写数据DAQmxWriteAnalogF64

8从设备中读数据DAQmxReadAnalogF64

9.DAQmxRegisterDoneEvent-------注册回调函数

1)函数原型

int32 DAQmxRegisterDoneEvent (TaskHandle taskHandle, uInt32 options, DAQmxDoneEventCallbackPtr callbackFunction, void *callbackData);

2)函数作用

注册回调函数,以便在任务因错误而停止或有限获取任务或有限生成任务完成执行时接收事件。当任务显式停止(例如通过调用DAQmxStopTask)时,不会发生Done事件。(因为标红的部分,害我调试了一下午)

3)关键点

callbackFunction----自定义一个函数,事件发生时希望DAQmx调用的函数。

传入此参数的函数必须具有以下原型:

int32 CVICALLBACK callbackFunction(TaskHandle TaskHandle,int32 status,void*callbackData);

进入回调后,task handle参数包含发生事件的任务的句柄。status参数包含事件发生时任务的状态。如果状态值为负,则表示有错误。如果状态值为零,则表示没有错误。如果状态值为正,则表示警告。callbackData参数包含您在此函数的callbackData参数中传递的值。参数传递NULL将注销事件回调函数。

10.DAQmxRegisterEveryNSamplesEvent----值满传输事件

1)函数原型

int32 DAQmxRegisterEveryNSamplesEvent (TaskHandle taskHandle, int32 everyNsamplesEventType, uInt32 nSamples, uInt32 options, DAQmxEveryNSamplesEventCallbackPtr callbackFunction, void *callbackData);

2)函数作用

注册一个回调函数。将设定数量的数据从PC缓冲区传输到设备,或者将设定数量的数据从设备传输到缓冲区。

当您显式停止任务时,将丢弃任何挂起的事件。例如,如果调用DAQmxStopTask,则不会收到任何挂起的事件。

3)关键点

事件发生时希望DAQmx调用的函数。传入此参数的函数必须具有以下原型:

int32 CVICALLBACK回调(TaskHandle TaskHandle,int32 everyNsamplesEventType,uInt32 nSamples,void*callbackData);进入回调后,task handle参数包含发生事件的任务的句柄。everySamplesEventType参数包含您在此函数的everySamplesEventType参数中传递的值。nSamples参数包含您在此函数的nSamples参数中传递的值。callbackData参数包含您在此函数的callbackData参数中传递的值。

标签:采样,int32,const,函数,TaskHandle,LabWindows,任务,DAQ,CVI
From: https://www.cnblogs.com/ybqjymy/p/17136449.html

相关文章

  • MybatisPlus之LambdaQueryWrapper简单用法
    简单查询(推荐)LambdaQueryWrapper<User>wrapper=newLambdaQueryWrapper<>();wrapper.eq(User::getUserId,id);wrapper.like(User::getUserName,userName);List......
  • ReactNative Tried to register two views with the same name RNCViewPager
    因为有两个包用到了一个库,但是使用的版本不同改过来就好了......
  • LambdaQueryWrapper
    LambdaQueryWrapper解决拼接条件表达式时候,数据库字段名写错导致异常的问题代码范例LambdaQueryWrapper<AlarmRuleNew>alarmRuleNewLambdaQueryWrapper=newLambdaQ......
  • UnityXR Pico和HTCVive判断手柄连没连接上
        方法一:用InputDevices.GetDevices(),PICO中使用的此方法           此方法获取当前连接的设备:           1.在Pico中连上哪个手柄就......
  • mybatis-plus的LambdaQueryWrapper
    LambdaQueryWrapper与QueryWrapper类似,只不过QueryWrapper的列名使用的是字符串,而LambdaQueryWrapper使用的是Lambda语法,个人更推荐使用LambdaQueryWrapper,因为它增加了一......
  • MFC,VC++中,CView类意外消失
    (1)在我们写MFC程序的时候,可能CView类可能会意外的消失,现在我用的是Win7操作系统,VC6.0和WindowsXP是完全兼容的,可能是系统兼容的问题,所以在Win7系统下编写程序总会出现一些莫......
  • 013.实现RBACView层
    1.在窗口中保存数据(login.html)sessionStorage.uid=json.data.user.userId;sessionStorage.eid=json.data.user.employeeId; <!DOCT......
  • Mac开发利器之程序员编辑器MacVim学习总结
    Emacs和Vim都是程序员专用编辑器,Emacs被称为神的编辑器,Vim则是编辑器之神。至于两者到底哪个更好用,网络上两大派系至今还争论不休。不过,相比之下,Emacs更加复杂,已经不能算是......
  • UnityXR 在PC端HTCVive或者其它头盔设备中左右眼一个正常一个不正常解决办法
    一个眼正常一个不正常一般是shader的原因,球形材质容易出现此问题。方法一:换掉球形材质的shader是一个解决办法;方法二:OpenXR的RenderMode设置为MultiPass,如下图:  ......
  • Ubuntu安装vncviewer
    目录​​1.下载:​​​​2.安装:​​​​3.测试:​​1.下载:首先去官网下载:​​https://www.realvnc.com/en/connect/download/viewer/​​如下图:2.安装:可以看到已经下载好了安......