04-07-2009 10:57 AM
Hi:
I am programming a data acquisition application in C using the libreary Nidaqmx.h. The hardware used is a PCI-6534. Thes aplication is used for to adquire digital input signals (32 bits). To start this adquisition i must write '1' logic in the line 3 from port 5 (ACK2). Thererefore i create two task. The problem is that i have a error when in the second task - DAQmxErrChk(DAQmxStartTask(taskHandleWritten));- , "DAQmx ERROR End the program, press ENTER key to quit".
But if i adquiere only 16 bits Run is correct, but i need adquire 32 bits ¿how i do this?
int main(void)
{
/*********************************************/
//CREATE TASK BurstMode
/*********************************************/
DAQmxErrChk (DAQmxCreateTask("",&taskHandle));DAQmxErrChk (DAQmxCreateDIChan(taskHandle,channel,"",DAQmx_Val_ChanForAllLines));DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,
"/Dev1/PFI4",200000000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,SizeOfData));DAQmxErrChk (DAQmxCfgBurstHandshakingTimingExportClock(taskHandle,DAQmx_Val_ContSamps,SizeOfData,20000000.0,"/Dev1/PFI4",DAQmx_Val_ActiveHigh,DAQmx_Val_Low,DAQmx_Val_ActiveHigh));DAQmxErrChk (DAQmxGetTaskAttribute(taskHandle,DAQmx_Task_NumChans,&numChannels));
DAQmxErrChk (DAQmxRegisterEveryNSamplesEvent(taskHandle,DAQmx_Val_Acquired_Into_Buffer,SizeOfData,0,NIDAQEvent,NULL));
DAQmxSetBufInputBufSize(taskHandle, SizeOfData);
data=malloc(SizeOfData*numChannels*sizeof(uInt32));if( data==NULL ) {printf (
"Error","Not enough memory\n"); goto Error2;}
/*********************************************/
//CREATE TASK WRITE
/*********************************************/
DAQmxErrChk (DAQmxCreateTask("",&taskHandleWritten));DAQmxErrChk (DAQmxCreateDOChan(taskHandleWritten,"/Dev1/PFI5","",DAQmx_Val_ChanForAllLines));
/*/ Start BurstMode/*********************************************/
DAQmxErrChk(DAQmxStartTask(taskHandle));
Sleep(100);
/*/ Start TaskWrite/*********************************************/
DAQmxErrChk(DAQmxStartTask(taskHandleWritten));
DAQmxErrChk(DAQmxWriteDigitalLines(taskHandleWritten,1,1,10.0,DAQmx_Val_GroupByChannel,&DataACK2_1,NULL,NULL));
DAQmxStopTask(taskHandleWritten);
printf("Generating digital output continuously. Press any key to interrupt\n"); while( !_kbhit() ) {
Sleep(100);
}
_getch();
Error2:
{ if( DAQmxFailed(error) )DAQmxGetExtendedErrorInfo(errBuff,2048); // informa el tipo de error
if( taskHandle!=0 ) {/*********************************************/
/*/ DAQmx Stop Code/*********************************************/
DAQmxStopTask(taskHandle);
DAQmxClearTask(taskHandle);
DAQmxClearTask(taskHandleWritten);
}
if (data)free (data);
if( DAQmxFailed(error) )printf("DAQmx Error: %s\n",errBuff);printf(
"End of program, press Enter key to quit\n");}getchar();
return 0;}