Hello. I have NI USB 6361 board and I want to write C program (I use Embarcadero C++ Builder) for acquiring analog data from this board (a0 channel). I connect signal generator to ao channel.
I read documentation and examples for my board. My program allows to acquire data, but I have one problem.
I can see waveform, but values of data are differs from data, that I acquired from board with Measurement Studio. I acquired data and export this to Excel, and find min and max values. Signal acquired with Measurement Studio have stable values for max and min. But my program give me different values and I dont know why.
Can anybody expect my C code and help me? I attached my code below. Excuse me for my Enlgish and thanks for help.
float64 max,min,value; int32 points,written,error; char errBuff[2048]={'\0'}; char *channel; wchar_t *ch; int i=0; TVarRec args[1] = {0}; max = StrToFloat(EditAOMaxValue->Text); if (max>10.0) { max = 10.0; EditAOMaxValue->Text = "10,0"; } min = StrToFloat(EditAOMinValue->Text); if (min<-10.0) { min = -10.0; EditAOMinValue->Text = "-10,0"; } value = StrToFloat(EditAOValue->Text); if (value>10.0) value = 10.0; if (value<-10.0) value = -10.0; args[0] = value; EditAOValue->Text = Format("%1.1f",args,0); points = StrToInt(EditAOPoints->Text); for(;i<points;i++) data[i] = value; //5.0*(double)i/points; ch = ("Dev1/"+ ComboBoxAOChan->Items->Strings[ComboBoxAOChan->ItemIndex]).t_str(); channel = AnsiString(ch).c_str(); // DAQmx Configure Code DAQmxErrChk (DAQmxCreateTask("",&taskHandle)); DAQmxErrChk (DAQmxCreateAOVoltageChan(taskHandle,channel,"",min,max,DAQmx_Val_Volts,NULL)); DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",1000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,points)); // DAQmx Write Code DAQmxErrChk (DAQmxWriteAnalogF64(taskHandle,points,0,10.0,DAQmx_Val_GroupByChannel,data,&written,NULL)); // DAQmx Start Code DAQmxErrChk (DAQmxStartTask(taskHandle)); // DAQmx Wait Code DAQmxErrChk (DAQmxWaitUntilTaskDone(taskHandle,10.0)); args[0] = written; LblStatus->Caption = Sysutils::Format("Status: written %d points\n",args,0); Error: if( taskHandle!=0 ) { // DAQmx Stop Code DAQmxStopTask(taskHandle); DAQmxClearTask(taskHandle); } if( DAQmxFailed(error) ) { DAQmxGetExtendedErrorInfo(errBuff,2048); args[0] = errBuff; ShowMessage(Sysutils::Format("DAQmx Error: %s\n",args,0)); }