📄 ai_finite.cpp
字号:
///////////////////////////////////////////////////////////////
#include <iostream.h>
#include <stdio.h>
#include "NIDAQmx.h" // 添加NI-DAQmx C API的头文件
// 定义宏DAQmxErrChk(functionCall),用于检查程序运行过程中是否有错误发// 生,其中DAQmxFailed(error)也是宏,在NIDAQmx.h中有定义语句#define
// DAQmxFailed(error) ((error)< 0)
#define DAQmxErrChk(functionCall) {if( DAQmxFailed (error=(functionCall)) ) {goto Error;}}
int main()
{
// 定义变量
int32 error=0; // 错误代码
TaskHandle taskHandle=0; // 任务句柄
float64 rate; // 采样率
uInt32 sampsPerChanToAcquire; // 每通道要获取数据样本数
uInt32 arraySizeInSamps; // 返回数据样本的长度
int32 sampsPerChanRead; // 实际读取数据样本数
char errBuff[2048]={'\0'}; // 存储错误信息的字符串数组
// 由用户输入变量值
cout<<"输入采样率:";
cin>>rate;
cout<<"输入每通道要获取数据样本数:";
cin>>sampsPerChanToAcquire;
arraySizeInSamps = sampsPerChanToAcquire;
float64* readArray = new float64[arraySizeInSamps]; // 为存储返回数据的数组分配内存空间
DAQmxErrChk(DAQmxCreateTask("",&taskHandle)); // 创建任务
DAQmxErrChk(DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL)); // 创建模拟输入电压测量通道,这里选择Dev1/ai0物理通道作为测量通道
DAQmxErrChk(DAQmxCfgSampClkTiming(taskHandle,"",rate,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,sampsPerChanToAcquire)); // 定时设置,设置为采用内部时钟的有限采样
DAQmxErrChk(DAQmxStartTask(taskHandle)); //启动任务
DAQmxErrChk(DAQmxReadAnalogF64(taskHandle,-1,10.0,DAQmx_Val_GroupByChannel,readArray,arraySizeInSamps,&sampsPerChanRead,NULL)); // 读取数据并存储于readArray数组中
cout<<endl<<"获取了"<<sampsPerChanRead<<"个样本"<<endl;
Error:
if(DAQmxFailed(error)) // 判断是否发生错误
DAQmxGetExtendedErrorInfo(errBuff,2048); // 将出错信息存入errBuff数组
if(taskHandle!=0) // 判断是否创建了任务
{
DAQmxStopTask(taskHandle); // 停止任务
DAQmxClearTask(taskHandle); // 清除任务
}
if(DAQmxFailed(error))
cout<<endl<<"DAQmx 错误: "<<errBuff<<endl; // 输出出错信息
delete [] readArray; //释放分配给数组的内存
cout<<endl<<"按回车键退出程序"<<endl;
getchar();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -