Masakikun
2008-05-08 06:10:07 UTC
Hi, I'm trying to control input (16 line) and output (16 line) from a NI6518 card with visual C++. For that, I would like to read/write single line by single line. I tried the following code but that does'nt seem to operate.I wrote a class with to hereunder method: ReadLine and Write. Maybe, I confuse with the meaning channel/line,uInt8..Can somebody explain me my mistake? Thank you very much!READ INPUT:bool CTORInterface::ReadLine(int number,bool& value)//number 0 to 7{ TaskHandle hTask = NULL;CString szNameBoard = "IOBOARD1"CString szLineID;szLineID.Format("IOBOARD1/port0/line%d",number);//channel with 1 line//retrieve handle on taskDAQmxCreateTask("IOBOARD1",&hTask);//create input lineDAQmxCreateDIChan(hTask,szLineID,"",DAQmx_Val_ChanPerLine);//start taskDAQmxStartTask(hTask);//readinguInt8 data[8];int32 read,bytesPerSamp;DAQmxReadDigitalLines(hTask,1,10.0,DAQmx_Val_ChanPerLine,data,8,&read,&bytesPerSamp,NULL);//stop taskDAQmxStopTask(hTask);//release handleDAQmxClearTask(hTask);//extraction value from number bits datavalue = (bool)data[number];return true;} WRITE OUPUTbool CTORInterface::WriteLine(int number, bool value){ TaskHandle hTask = NULL;CString szNameBoard = "IOBOARD1"CString szLineID;szLineID.Format("IOBOARD1/port2/line%d",number);//channel with 1 line//retrieve handle on taskDAQmxCreateTask(szNameBoard,&hTask);//create output lineDAQmxCreateDOChan(hTask,szLineID,"",DAQmx_Val_ChanPerLine);//start taskDAQmxStartTask(hTask);//write value on lineuInt8 data[1];int32 numWritten = 0, regenMode;uInt32 bytesPerChan;data[1] = value?1:0;DAQmxWriteDigitalLines(hTask,1,1,10.0,DAQmx_Val_ChanPerLine,data,&numWritten,0);//stop taskDAQmxStopTask(hTask);//handle releaseDAQmxClearTask(hTask);return true;}