Multifunction DAQ

cancel
Showing results for 
Search instead for 
Did you mean: 

NI 9401, Error Code -200022: Resource requested already reserved

Hi,

 

I am trying to use the NI 9401 in an NI cDAQ-9174 to do both digital input and output reads and writes.

 

I am using the following code, and added calls to unreserve the channels after using them - but I still get the -200022 failure.

 

Thanks,

   Wael Hemdan

   MathWorks

 

#include <stdio.h>
#include <NIDAQmx.h>

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

int main(void)
{
	int         error=0;
        TaskHandle  taskHandleDI=0;
        TaskHandle  taskHandleDO=0;
	uInt8       data;
	char        errBuff[2048]={'\0'};

	/*********************************************/
	// DAQmx Configure Code
	/*********************************************/
	DAQmxErrChk (DAQmxCreateTask("",&taskHandleDI));
        DAQmxErrChk (DAQmxCreateTask("",&taskHandleDO));
DAQmxErrChk (DAQmxCreateDIChan(taskHandleDI,"cdaq1mod1/port0/line0","",DAQmx_Val_ChanForAllLines)); DAQmxErrChk (DAQmxCreateDIChan(taskHandleDI,"cdaq1mod1/port0/line1","",DAQmx_Val_ChanForAllLines)); DAQmxErrChk (DAQmxCreateDIChan(taskHandleDI,"cdaq1mod1/port0/line2","",DAQmx_Val_ChanForAllLines)); DAQmxErrChk (DAQmxCreateDIChan(taskHandleDI,"cdaq1mod1/port0/line3","",DAQmx_Val_ChanForAllLines)); DAQmxErrChk (DAQmxCreateDOChan(taskHandleDO,"cdaq1mod1/port0/line4","",DAQmx_Val_ChanForAllLines)); DAQmxErrChk (DAQmxCreateDOChan(taskHandleDO,"cdaq1mod1/port0/line5","",DAQmx_Val_ChanForAllLines)); DAQmxErrChk (DAQmxCreateDOChan(taskHandleDO,"cdaq1mod1/port0/line6","",DAQmx_Val_ChanForAllLines)); DAQmxErrChk (DAQmxCreateDOChan(taskHandleDO,"cdaq1mod1/port0/line7","",DAQmx_Val_ChanForAllLines)); /*********************************************/ // DAQmx Start Code /*********************************************/ DAQmxErrChk (DAQmxStartTask(taskHandleDI)); DAQmxErrChk (DAQmxStartTask(taskHandleDO)); printf("Continuously polling. Press Ctrl+C to interrupt\n"); while( 1 ) { /*********************************************/ // DAQmx Read Code /*********************************************/ DAQmxErrChk (DAQmxTaskControl(taskHandleDI, DAQmx_Val_Task_Commit)); DAQmxErrChk (DAQmxReadDigitalLines(taskHandleDI,1,10,DAQmx_Val_GroupByScanNumber,&data,2048,0,0,0)); DAQmxErrChk (DAQmxTaskControl(taskHandleDI, DAQmx_Val_Task_Unreserve)); DAQmxErrChk (DAQmxTaskControl(taskHandleDO, DAQmx_Val_Task_Commit)); DAQmxErrChk (DAQmxWriteDigitalLines(taskHandleDO,1,1,10,DAQmx_Val_GroupByScanNumber,&data,0,0)); DAQmxErrChk (DAQmxTaskControl(taskHandleDO, DAQmx_Val_Task_Commit)); printf("\rCount: %d",data); fflush(stdout); } Error: puts(""); if( DAQmxFailed(error) ) DAQmxGetExtendedErrorInfo(errBuff,2048); if(( taskHandleDI!=0 ) && (taskHandleDO!=0)) { /*********************************************/ // DAQmx Stop Code /*********************************************/ DAQmxStopTask(taskHandleDI); DAQmxStopTask(taskHandleDO); DAQmxClearTask(taskHandleDI); DAQmxClearTask(taskHandleDO); } if( DAQmxFailed(error) ) printf("DAQmx Error: %s\n",errBuff); printf("End of program, press Enter key to quit\n"); getchar(); return 0; }

 
DAQmx Error: Resource requested by this task has already been reserved by a different task.
Device: cDAQ1Mod1

Task Name: _unnamedTask<0>

Status Code: -200022
End of program, press Enter key to quit

0 Kudos
Message 1 of 2
(3,877 Views)

Hi Wael,

 

Did you check where the code errors?  I bet it's the second start.  The reserves need to happen before any task is started.

 

I think what you're trying to do is something like this:

 

DI reserve

DO reserve

DI start

DO start

while loop

  DI read

  DO write

DI stop

DO stop

DI clear

DO clear

 

 

0 Kudos
Message 2 of 2
(3,851 Views)