12-11-2012 01:45 PM - edited 12-11-2012 01:48 PM
HI,
I'm having an issue creating two analog interfaces. I keep receiving an error when I try to address a range "Dev1/ao0:1". I can address "Dev1/ao0" and create an nice sinusoid. The issue is I want to utilize both an0 and an1 analog interfaces to output signals. I'm developing in C++. Any ideas why I can not address both analog outputs? I have tried to use ao1 and the port works just fine.
Code:
#include <QtGui/QApplication> #include "mainwindow.h" #include "ni_usb_6361.h" #include "math.h" #include <QDebug> #define DAQmxErrChk(functionCall) { if( DAQmxFailed(error=(functionCall)) ) { goto Error; } } #define PI 3.1415926535 int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); int error=0; TaskHandle taskHandle=0, taskHandle2=0; float64 data[4000], data2[36000]; char errBuff[2048]={'\0'}; int i=0; int32 written; int32 read; for(i=0;i<4000;i++) data[i] = 1*sin(2*PI*100*i/1000); /*********************************************/ /*/ DAQmx Configure Code /*********************************************/ DAQmxErrChk (DAQmxCreateTask("",&taskHandle)); DAQmxErrChk (DAQmxCreateAOVoltageChan(taskHandle,"Dev1/ao0:1","",-5.0,5.0,DAQmx_Val_Volts,NULL)); DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",1000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,4000)); DAQmxErrChk (DAQmxCreateTask("",&taskHandle2)); DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle2,"Dev1/ai0","",DAQmx_Val_Diff,-5.0,5.0,DAQmx_Val_Volts,NULL)); DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle2,"",1000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,4000)); /*********************************************/ /*/ DAQmx Write Code /*********************************************/ DAQmxErrChk (DAQmxWriteAnalogF64(taskHandle,4000,0,10.0,DAQmx_Val_GroupByChannel,data,&written,NULL)); /*********************************************/ /*/ DAQmx Start Code /*********************************************/ DAQmxErrChk (DAQmxStartTask(taskHandle)); DAQmxErrChk (DAQmxStartTask(taskHandle2)); /*********************************************/ /*/ DAQmx Wait Code /*********************************************/ DAQmxErrChk (DAQmxReadAnalogF64(taskHandle2,4000,10.0,DAQmx_Val_GroupByChannel,data2,36000,&read,NULL)); DAQmxErrChk (DAQmxWaitUntilTaskDone(taskHandle,10.0)); qDebug("Acquired %d points\n",read); qDebug()<<data2[0]; Error: if( DAQmxFailed(error) ) DAQmxGetExtendedErrorInfo(errBuff,2048); if( taskHandle!=0 ) { /*********************************************/ /*/ DAQmx Stop Code /*********************************************/ DAQmxStopTask(taskHandle); DAQmxClearTask(taskHandle); } if( taskHandle2!=0 ) { /*********************************************/ /*/ DAQmx Stop Code /*********************************************/ DAQmxStopTask(taskHandle2); DAQmxClearTask(taskHandle2); } if( DAQmxFailed(error) ) qDebug("DAQmx Error: %s\n",errBuff); qDebug("End of program, press Enter key to quit\n"); return a.exec(); }
Thank you
12-12-2012 09:13 AM
Hi DSTEG,
Can you post the error that you're getting?
Regards,
Carmen C.
Application Engineer
National Instruments
12-12-2012 11:57 AM
I figured out the issue. The issue was with:
DAQmxWriteAnalogF64(Analog0,4000,0,10.0,DAQmx_Val_GroupByChannel,data,&written,NULL);
It was unclear that the output write is per channel. If we are using two channels then the output write samples must be half of the total buffer. I had to change the write to:
DAQmxWriteAnalogF64(Analog0,2000,0,10.0,DAQmx_Val_GroupByChannel,data,&written,NULL);
and then it worked.
Thank you.