float64 readAnalog(char eingangNr = '0'){ //Default Eingang = 0 // Task parameters TaskHandle taskHandle = 0; // Channel parameters char chan[8] = "Dev1/ai"; float64 min = 0.0; float64 max = 5.0; // Timing parameters uInt64 samplesPerChan = 1; // Data read parameters float64 data; int32 pointsToRead = 1; int32 pointsRead; float64 timeout = 10.0; chan[7] = eingangNr; DAQmxErrChk (DAQmxBaseCreateTask("",&taskHandle)); DAQmxErrChk (DAQmxBaseCreateAIVoltageChan(taskHandle,chan,"",DAQmx_Val_RSE,min,max,DAQmx_Val_Volts,NULL)); DAQmxErrChk (DAQmxBaseStartTask(taskHandle)); DAQmxErrChk (DAQmxBaseReadAnalogF64(taskHandle,pointsToRead,timeout,DAQmx_Val_GroupByChannel,&data,samplesPerChan,&pointsRead,NULL)); // printf ("Acquired reading: %f\n", data); //Debug DAQmxErrChk (DAQmxBaseStopTask (taskHandle)); return data; }
int main (int argc, char *argv[]) { // Task parameters int32 error = 0; TaskHandle taskHandle = 0; char errBuff[2048]= {'\0'}; int32 i; // Channel parameters char chan[] = "Dev1/ai0"; float64 min = -10.0; float64 max = 10.0; // Timing parameters char source[] = "OnboardClock"; uInt64 samplesPerChan = 100; float64 sampleRate = 1200.0; // Data read parameters #define bufferSize (uInt32)1000 float64 data[bufferSize]; int32 pointsToRead = -1; int32 pointsRead; float64 timeout = 10.0; while(1) { printf("new task\n\n"); DAQmxErrChk (DAQmxBaseCreateTask ("", &taskHandle)); DAQmxErrChk (DAQmxBaseCreateAIVoltageChan (taskHandle, chan, "", DAQmx_Val_NRSE, min, max, DAQmx_Val_Volts, NULL)); DAQmxErrChk (DAQmxBaseCfgSampClkTiming (taskHandle, source, sampleRate, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, samplesPerChan)); DAQmxErrChk (DAQmxBaseStartTask (taskHandle)); DAQmxErrChk (DAQmxBaseReadAnalogF64 (taskHandle, pointsToRead, timeout, 0, data, bufferSize, &pointsRead, NULL)); printf("pointsRead: %d\n",pointsRead); // Just print out the first 10 points for (i = 0; i < 8; ++i) { printf ("%f\n", data[i]); } DAQmxBaseStopTask (taskHandle); DAQmxBaseClearTask (taskHandle); } Error: if (DAQmxFailed (error)) DAQmxBaseGetExtendedErrorInfo (errBuff, 2048); if (taskHandle != 0) { DAQmxBaseStopTask (taskHandle); DAQmxBaseClearTask (taskHandle); } if (error) printf ("DAQmxBase Error %d: %s\n", error, errBuff); return 0; }
DAQManager::DAQManager() { stateCount = 8; states = new uInt32[stateCount]; states[0] = 0x8; states[1] = 0xC; states[2] = 0x4; states[3] = 0x6; states[4] = 0x2; states[5] = 0x3; states[6] = 0x1; states[7] = 0x9; stateNum = 0; dataAcquired = 0; voltageData = new float64[SAMPLE_COUNT]; #ifdef _WIN32 DAQmxCreateTask("", &motorTaskHandle); DAQmxCreateTask("", &adcTaskHandle); DAQmxCreateTask("", &triggerTaskHandle); DAQmxCreateDOChan(motorTaskHandle, "Dev1/port0", "", DAQmx_Val_ChanForAllLines); DAQmxCreateDOChan(triggerTaskHandle, "Dev1/port1", "", DAQmx_Val_ChanForAllLines); DAQmxCreateAIVoltageChan(adcTaskHandle, "Dev1/ai0", "", DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL); DAQmxCfgSampClkTiming(adcTaskHandle, "", SAMPLE_FREQ, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, SAMPLE_COUNT); DAQmxCfgDigEdgeStartTrig(adcTaskHandle, "/Dev1/PFI0", DAQmx_Val_Rising); DAQmxRegisterEveryNSamplesEvent(adcTaskHandle, DAQmx_Val_Acquired_Into_Buffer, 1000, 0, EveryNCallbackWrapper, this); DAQmxStartTask(motorTaskHandle); DAQmxStartTask(triggerTaskHandle); uInt32 data; int32 written; data = states[0]; DAQmxWriteDigitalU32(motorTaskHandle, 1, 1, 10.0, DAQmx_Val_GroupByChannel, &data, &written, NULL); data=0x0; DAQmxWriteDigitalU32(triggerTaskHandle, 1, 1, 10.0, DAQmx_Val_GroupByChannel, &data, &written, NULL); #elif __APPLE__ DAQmxBaseCreateTask("motorTask", &motorTaskHandle); DAQmxBaseCreateDOChan(motorTaskHandle, "Dev1/port0", "", DAQmx_Val_ChanForAllLines); DAQmxBaseStartTask(motorTaskHandle); DAQmxBaseCreateTask("adcTask", &adcTaskHandle); DAQmxBaseCreateAIVoltageChan(adcTaskHandle, "Dev1/ai0", "", DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL); DAQmxBaseCfgSampClkTiming(adcTaskHandle,"OnboardClock", SAMPLE_FREQ, DAQmx_Val_Rising, DAQmx_Val_ContSamps, SAMPLE_COUNT); DAQmxBaseCfgInputBuffer(adcTaskHandle,0); DAQmxBaseStartTask(adcTaskHandle); uInt32 data; int32 written; data = states[0]; DAQmxBaseWriteDigitalU32(motorTaskHandle, 1, 1, 10.0, DAQmx_Val_GroupByChannel, &data, &written, NULL); #endif }