Beispiel #1
0
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
}
Beispiel #3
0
int main(int argc, char **argv)
{
	ros::init(argc, argv, "GalvoScanner");
	ros::NodeHandle n;

	//ros::Publisher pubGalvoScanner = n.advertise<std_msgs::String>("GalvoScanner", 1000);
	ros::Subscriber subGalvoScanner = n.subscribe("ScannerPoints", 1000, GalvoPointListCallback);
	ros::Rate loop_rate(10);

	char 		szTask[]="OutputPointList";
	char		szPhysicalChannel[]="Dev1/ao0:1";
	float64		 ratePoint = 100.0; //rateFrame * gnPoints;
	float64		 ratePointActual = 0.0;


	//DAQmxCreateTask (szTask, &ghTask);
	//DAQmxCreateAOVoltageChan (ghTask, szPhysicalChannel, NULL, -10.0, +10.0, DAQmx_Val_Volts, NULL);
	//DAQmxSetWriteRegenMode(ghTask, DAQmx_Val_AllowRegen);
	//DAQmxCfgSampClkTiming (ghTask, "OnboardClock", ratePoint, DAQmx_Val_Rising, DAQmx_Val_ContSamps, gnPoints);
	//DAQmxGetSampClkRate(ghTask, &ratePointActual);
	//WriteFlyLogo();
	//DAQmxStartTask (ghTask);
	//ros::spin();
	//DAQmxClearTask (ghTask);

	DAQmxBaseCreateTask (szTask, &ghTask);
	DAQmxBaseCreateAOVoltageChan (ghTask, szPhysicalChannel, NULL, -10.0, +10.0, DAQmx_Val_Volts, NULL);
	DAQmxBaseCfgSampClkTiming (ghTask, "OnboardClock", ratePoint, DAQmx_Val_Rising, DAQmx_Val_ContSamps, gnPoints);
	WriteFlyLogo();
	DAQmxBaseStartTask (ghTask);
	ros::spin();
	DAQmxBaseClearTask (ghTask);

	//while (ros::ok())
	//{
	//	ros::spinOnce();
	//	loop_rate.sleep();
	//}


	return 0;
}
Beispiel #4
0
int main(int argc, char *argv[])
{
    // Task parameters
	FILE		*stimfile;
	int32       error = 0;
    TaskHandle  taskHandle = 0;
    int32       i = 0;
    char        errBuff[2048]={'\0'};
    time_t      startTime;
    bool32      done=0;

    // Channel parameters
    char        chan[10] = "Dev1/ao0";
    float64     min = -10.0;
    float64     max = 10.0;

    // Data write parameters
    int32       pointsWritten;
    float64     timeout = 10.0;
	
	float32		header[2];
	float32		datval;
	float64		*data;
	int			off=0;
	long		fsize;
	long		sampPerChan;

	stimfile=fopen(argv[1],"r");
	if (stimfile==NULL) {
		printf("Unable to open file %s \n", argv[1]);
		exit (8);
	}

	fread( (char *)header, 4, 2, stimfile);

	fseek(stimfile, 0, SEEK_END);
	fsize=ftell(stimfile)-8;
	fsize=fsize/4;
	fseek(stimfile, 8, SEEK_SET);
	
	sampPerChan=fsize/header[0];
	printf("Playing file %s: %i channels with %i samples at %.2f Hz ...\n", argv[1], (int)header[0], sampPerChan, header[1]);

	data=(float64 *) calloc(fsize, 8);
	for (i=0;i<fsize;i++) {
		fread( (char *)&datval, 4, 1, stimfile);
		data[i] = (float64)datval;
	}

	if ((int)header[0] > 1) {
		sprintf(chan, "Dev1/ao0:%i", (int) header[0]-1);
	}
	printf("Using device %s \n", chan);


    DAQmxErrChk (DAQmxBaseCreateTask("",&taskHandle));	
    DAQmxErrChk (DAQmxBaseCreateAOVoltageChan(taskHandle,chan,"",min,max,DAQmx_Val_Volts,NULL));
    DAQmxErrChk (DAQmxBaseCfgSampClkTiming(taskHandle,"",(float64) header[1], DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, sampPerChan));
    DAQmxErrChk (DAQmxBaseWriteAnalogF64(taskHandle,512, FALSE,timeout,DAQmx_Val_GroupByScanNumber, data ,&pointsWritten,NULL));
	off+=1024;

    DAQmxErrChk (DAQmxBaseStartTask(taskHandle));
    gRunning = 1;
    // The loop will quit after 10 seconds
    startTime = time(NULL);
    while( gRunning && !done && time(NULL)<startTime+10 ) {
    	DAQmxErrChk (DAQmxBaseWriteAnalogF64(taskHandle,512, FALSE,timeout,DAQmx_Val_GroupByScanNumber, data+off ,&pointsWritten,NULL));
		if (off>= fsize - 1024) {
			done=1;
		} else {
			off+=1024;
			
        DAQmxErrChk (DAQmxBaseIsTaskDone(taskHandle,&done));
		}	

    }
	
	printf("Done. Sent %i samples in %.2f seconds \n", pointsWritten, (float) time(NULL)-startTime);

	if (!done) {
        DAQmxBaseStopTask(taskHandle);
        DAQmxBaseClearTask(taskHandle);
	}

Error:
    if( DAQmxFailed(error) )
        DAQmxBaseGetExtendedErrorInfo(errBuff,2048);
    if( taskHandle!=0 ) {
        DAQmxBaseStopTask(taskHandle);
        DAQmxBaseClearTask(taskHandle);
    }
    if( DAQmxFailed(error) )
        printf("DAQmxBase Error: %s\n",errBuff);
    return 0;
}
Beispiel #5
0
/*
 *

static int gRunning=0;

int main(int argc, char *argv[])
{
    // Task parameters
    int32       error = 0;
    TaskHandle  taskHandle = 0;
    int32       i = 0;
    char        errBuff[2048]={'\0'};
    time_t      startTime;
    bool32      done=0;

    // Channel parameters
    char        chan[] = "Dev2/ao0";
    float64     min = -10.0;
    float64     max = 10.0;

    // Timing parameters
    #define     bufferSize 512
    uInt64      samplesPerChan = bufferSize;
    float64     sampleRate = 20000.0;

    // Data write parameters
    float64     data[bufferSize];
    int32       pointsWritten;
    float64     timeout = 10.0;


    for(;i<bufferSize;i++)
        data[i] = 9.95*sin((double)i*20.0*PI/(double)bufferSize);

    DAQmxErrChk (DAQmxBaseCreateTask("",&taskHandle));
    DAQmxErrChk (DAQmxBaseCreateAOVoltageChan(taskHandle,chan,"",min,max,DAQmx_Val_Volts,NULL));
    DAQmxErrChk (DAQmxBaseCfgSampClkTiming(taskHandle,"",sampleRate,DAQmx_Val_Rising,DAQmx_Val_ContSamps,samplesPerChan));

    DAQmxErrChk (DAQmxBaseWriteAnalogF64(taskHandle,samplesPerChan,0,timeout,DAQmx_Val_GroupByChannel,data,&pointsWritten,NULL));

    DAQmxErrChk (DAQmxBaseStartTask(taskHandle));
    gRunning = 1;
    // The loop will quit after 10 seconds
    startTime = time(NULL);
    while( gRunning && !done && time(NULL)<startTime+10 ) {
        DAQmxErrChk (DAQmxBaseIsTaskDone(taskHandle,&done));
        if( !done )
            usleep(100000);
    }

Error:
    if( DAQmxFailed(error) )
        DAQmxBaseGetExtendedErrorInfo(errBuff,2048);
    if( taskHandle!=0 ) {
        DAQmxBaseStopTask(taskHandle);
        DAQmxBaseClearTask(taskHandle);
    }
    if( DAQmxFailed(error) )
        printf("DAQmxBase Error: %s\n",errBuff);
    return 0;
}
 *
 */
static PyObject *
pyni_ao(PyObject *self, PyObject *args)
{
    float sampr;
    int32       error = 0;
    TaskHandle  taskHandle = 0;
    int32       i = 0;
    int32       pointsWritten;
    char        errBuff[2048]={'\0'};
    time_t      startTime;
    bool32      done=0;
    PyObject *monitor;
    PyArrayObject *data;
    Py_ssize_t	l;
    int64	bs=20000;
    int gRunning = 1;
    double	data2[20000];
    char *name, *chanids;
    
    if (!PyArg_ParseTuple(args, "OfsO", &monitor, &sampr, &chanids, &data))
		    return NULL;
		    
    data=PyArray_FROM_OTF(data,  NPY_FLOAT64 , C_ARRAY);
    DAQmxErrChk (DAQmxBaseCreateTask("",&taskHandle));
    // for (i=0;i<PyList_Size(chanids);i++)
    // {
    // 	name=PyString_AsString(PyList_GetItem(chanids, i));
    // 	printf("%s\n", name);
    // }
    
    for(;i<bs;i++)
        data2[i] = 9.95*sin((double)i*20.0*PI/(double)bs);

    DAQmxErrChk (DAQmxBaseCreateTask("",&taskHandle));
    DAQmxErrChk (DAQmxBaseCreateAOVoltageChan(taskHandle,"Dev2/ao0","",-10,10,DAQmx_Val_Volts,NULL));
    DAQmxErrChk (DAQmxBaseCfgSampClkTiming(taskHandle,"", 10000,DAQmx_Val_Rising,DAQmx_Val_ContSamps,bs));

    DAQmxErrChk (DAQmxBaseWriteAnalogF64(taskHandle,bs,0,10.0,DAQmx_Val_GroupByChannel,data2,&pointsWritten,NULL));

    DAQmxErrChk (DAQmxBaseStartTask(taskHandle));
    // The loop will quit after 10 seconds
    startTime = time(NULL);
    while( gRunning && !done && time(NULL)<startTime+10 ) {
        DAQmxErrChk (DAQmxBaseIsTaskDone(taskHandle,&done));
        //if( !done )
        //    usleep(100000000);
    }


    //DAQmxErrChk (DAQmxBaseCreateAOVoltageChan(taskHandle, chanids ,"", 0.0, 5.0, DAQmx_Val_Volts,NULL));

    //DAQmxErrChk (DAQmxBaseCfgSampClkTiming(taskHandle,"",sampr,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,data->dimensions[0]));
   // DAQmxErrChk (DAQmxBaseWriteAnalogF64(taskHandle, data->dimensions[0] ,FALSE, 10 ,DAQmx_Val_GroupByScanNumber ,PyArray_DATA(data),&pointsWritten,NULL));
   // DAQmxErrChk (DAQmxBaseStartTask(taskHandle));
   // startTime = time(NULL);
   // while( !done && time(NULL)<startTime+10 ) {
   //         DAQmxErrChk (DAQmxBaseIsTaskDone(taskHandle,&done));
   //         if( !done )
   //     	    usleep(1000);
   //         }
   // startTime=time(NULL)-startTime;
   // DAQmxBaseStopTask(taskHandle);
   // DAQmxBaseClearTask(taskHandle);
    
    i=PyList_SetItem(monitor, 1, Py_BuildValue("i", pointsWritten) );
    i=PyList_SetItem(monitor, 0, Py_BuildValue("i", 1) );
    
    printf("wrote %i samples in %.2f sec\n", pointsWritten, (double)startTime);
    
    Py_XDECREF(data);	
    //Py_XDECREF(monitor);
    //Py_XDECREF(chanids);
    return monitor;
    
    _fail:
	if( taskHandle!=0 ) 
		    {
	    DAQmxBaseStopTask(taskHandle);
		    DAQmxBaseClearTask(taskHandle);
	    }
	if( DAQmxFailed(error) ) {
	    DAQmxBaseGetExtendedErrorInfo(errBuff,2048);
	    printf("DAQmxBase Error: %s\n",errBuff);
	    }
    
			    
	    Py_XDECREF(data);	
	    //Py_XDECREF(monitor);
	    //Py_XDECREF(chanids);	
		
	    return PyErr_Format(PyExc_StandardError,
				errBuff);	
								
}