Exemple #1
0
    def create_task(self):

        # need to check if task exists and fail

        #self.task = PyDAQmx.Task()
        self.task_handle = mx.TaskHandle(0)
        mx.DAQmxCreateTask("", byref(self.task_handle))

        if self.mode == 'large_range':
            logger.debug('counter_chan {}'.format(self.counter_chan))
            logger.debug('input_terminal {}'.format(self.input_terminal))

            mx.DAQmxCreateCIFreqChan(
                self.task_handle,
                counter=str(self.counter_chan),
                nameToAssignToChannel="",
                minVal=5e1,  # applies measMethod is DAQmx_Val_LargeRng2Ctr
                maxVal=1e8,  # applies measMethod is DAQmx_Val_LargeRng2Ctr
                units=DAQmx_Val_Hz,
                edge=DAQmx_Val_Rising,
                measMethod=DAQmx_Val_LargeRng2Ctr,
                measTime=1.0,  # applies measMethod is DAQmx_Val_HighFreq2Ctr
                divisor=100,  # applies measMethod is DAQmx_Val_LargeRng2Ctr
                customScaleName=None,
            )
        elif self.mode == 'high_freq':
            mx.DAQmxCreateCIFreqChan(
                self.task_handle,
                counter=self.counter_chan,
                nameToAssignToChannel="",
                minVal=1e1,  # applies measMethod is DAQmx_Val_LargeRng2Ctr
                maxVal=1e7,  # applies measMethod is DAQmx_Val_LargeRng2Ctr
                units=DAQmx_Val_Hz,
                edge=DAQmx_Val_Rising,
                measMethod=DAQmx_Val_HighFreq2Ctr,
                measTime=0.05,  # applies measMethod is DAQmx_Val_HighFreq2Ctr
                divisor=100,  # applies measMethod is DAQmx_Val_LargeRng2Ctr
                customScaleName=None,
            )
        elif self.mode == 'low_freq':
            mx.DAQmxCreateCIFreqChan(
                self.task_handle,
                counter=self.counter_chan,
                nameToAssignToChannel="",
                minVal=1e1,  # applies measMethod is DAQmx_Val_LargeRng2Ctr
                maxVal=1e7,  # applies measMethod is DAQmx_Val_LargeRng2Ctr
                units=DAQmx_Val_Hz,
                edge=DAQmx_Val_Rising,
                measMethod=DAQmx_Val_LowFreq1Ctr,
                measTime=0.05,  # applies measMethod is DAQmx_Val_HighFreq2Ctr
                divisor=100,  # applies measMethod is DAQmx_Val_LargeRng2Ctr
                customScaleName=None,
            )

        ### data = c_int32(0)
        ### self.task.GetCIDataXferMech(channel=self.counter_chan, data=data )
        ### print "XFmethod" , data.value

        # set DMA
        #self.task.SetCIDataXferMech(channel=self.counter_chan, data=DAQmx_Val_DMA)

        ### self.task.GetReadOverWrite(data=byref(data))
        ### print "overwrite", data.value

        #Set the input terminal of the counter
        mx.DAQmxSetCIFreqTerm(self.task_handle,
                              channel=self.counter_chan,
                              data=self.input_terminal)

        #Set the counter channel to continuously sample into a buffer.  The size of the
        #buffer is set by sampsPerChan.
        mx.DAQmxCfgImplicitTiming(self.task_handle,
                                  sampleMode=DAQmx_Val_ContSamps,
                                  sampsPerChan=1000)

        mx.DAQmxSetReadOverWrite(self.task_handle,
                                 DAQmx_Val_OverwriteUnreadSamps)

        ### self.task.GetReadOverWrite(data=byref(data))
        ### print "overwrite", data.value

        # Sample buffer
        self._sample_buffer_count = c_int32(0)
        self.sample_buffer = np.zeros((SAMPLE_BUFFER_SIZE, ), dtype=np.float64)