From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
10-02-2018 07:38 AM
Hi all,
Thanks to NIDAQmx.h library and the related samples, I’ve developed a simple C++ program which was working perfectly until I was forced to reinstall the same Operating System, particularly Centos 7 as the first time.
I installed all the drivers and packages just like before and checked “nilsdev —verbose” command which returns the device name correctly. Unfortunately, now my code just runs till “DAQmxErrChk (DAQmxStartTask(taskHandle));” and after that just will stick in an infinite loop without any trying to run callbackFunction. Finally, I should stop the whole C++ program to exit.
How can I solve the problem?
Best regards
int main(void) { int32 error=0; char errBuff[2048]={'\0'}; /*********************************************/ // DAQmx Configure Code /*********************************************/ DAQmxErrChk (DAQmxCreateTask("",&taskHandle)); DAQmxErrChk (DAQmxCreateDIChan(taskHandle,"Dev1/port0/line0:7","",DAQmx_Val_ChanPerLine)); DAQmxErrChk (DAQmxCfgChangeDetectionTiming(taskHandle,"Dev1/port0/line0:7","Dev1/port0/line0:7",DAQmx_Val_ContSamps,1)); DAQmxErrChk (DAQmxRegisterSignalEvent(taskHandle,DAQmx_Val_ChangeDetectionEvent,0,ChangeDetectionCallback,NULL)); DAQmxErrChk (DAQmxGetTaskNumChans(taskHandle,&numLines)); /*********************************************/ // DAQmx Start Code /*********************************************/ DAQmxErrChk (DAQmxStartTask(taskHandle)); puts("Continuously reading. Press Enter key to interrupt\n"); puts("Timestamp Data read Changed Lines"); getchar(); Error: if( DAQmxFailed(error) ) { DAQmxGetExtendedErrorInfo(errBuff,2048); Cleanup(); printf("DAQmx Error: %s\n",errBuff); } printf("End of program, press Enter key to quit\n"); getchar(); return 0; } int32 CVICALLBACK ChangeDetectionCallback(TaskHandle taskHandle, int32 signalID, void *callbackData) { int32 error=0; uInt8 data[200]={0}; int32 numRead; uInt32 i=0; char buff[512], *buffPtr; char errBuff[2048]={'\0'}; char *timeStr; time_t currTime; if( taskHandle ) { time (&currTime); timeStr = ctime(&currTime); timeStr[strlen(timeStr)-1]='\0'; // Remove trailing newline. /*********************************************/ // DAQmx Read Code /*********************************************/ DAQmxErrChk (DAQmxReadDigitalLines(taskHandle,1,10.0,DAQmx_Val_GroupByScanNumber,data,8,&numRead,NULL,NULL)); if( numRead ) { buffPtr = buff; strcpy(buff, timeStr); strcat(buff," "); buffPtr = buff + strlen(buff); for(;i<numLines;++i) { sprintf(buffPtr,"%d",data[i]); buffPtr++; } strcat(buff," "); buffPtr = buff + strlen(buff); for(i=0;i<numLines;++i) { sprintf(buffPtr,"%c",data[i]==cachedData[i]?'-':'X'); buffPtr++; cachedData[i] = data[i]; } puts(buff); fflush(stdout); } } return 0; Error: if( DAQmxFailed(error) ) { DAQmxGetExtendedErrorInfo(errBuff,2048); Cleanup(); printf("DAQmx Error: %s\n",errBuff); } return 0; } void Cleanup (void) { if( taskHandle!=0 ) { /*********************************************/ // DAQmx Stop Code /*********************************************/ DAQmxStopTask(taskHandle); DAQmxClearTask(taskHandle); taskHandle = 0; } }