Quantcast
Channel: Measurement Studio for VB6 topics
Viewing all articles
Browse latest Browse all 323

Simultaneous Digital Write and Read w. Interval Measurement

$
0
0

Hi all,

For the past couple days, I've been wracking my brain trying to get a program to work.

 

I'm trying to generate a 4-bit digital output while simulatanously counting the rising edges on its LSB up to an arbitary number set by the program's operator, at which point, the program would make a measurement.

 

I'm noticing, though, that, over a certain rising edge count number (~950 or so), the program crashes. The problem persists even when I remove the function that reads the LSB, although, in that case, the crashes occur at a much higher number. What might cause this? Is there any way I can work around this problem?

 

Below is my code:

 

arraySizeInBytes2 = 8
bufferSize = 255

ReDim readArray(arraySizeInBytes2)


publicLifetime = 100 ' use this to control the length of time the task takes
numSamplesToWrite = 10 * publicLifetime * numSample * 5
numSamplesInArray = 5 * 10 * numSample

'code that defines the digital and analog output signals

j = 0
  k = -1
    Do While j < numSamplesInArray
        If j Mod SampPerCycle = 0 Then k = k + 1 Else k = k  
        For m = 0 To 3
        If ((k) And (2 ^ m)) = (2 ^ m) Then writeArray(m, j) = 1 Else: writeArray(m, j) = 0 
        Next m
        j = j + 1
        Loop

    publicStatus = DAQmxCreateTask("", taskHandleDigitalOut)
    publicStatus = DAQmxCreateTask("", taskHandleAnalog)
    publicStatus = DAQmxCreateTask("", taskHandleDigitalIn)
    taskIsRunning = True
    
     publicStatus = DAQmxCreateDOChan(taskHandleDigitalOut, "Dev2/port0/line0:3", "", DAQmx_Val_ChanForAllLines)
     publicStatus = DAQmxCfgSampClkTiming(taskHandleDigitalOut, "Ctr0InternalOutput", 1000000#, DAQmx_Val_Falling, DAQmx_Val_AcquisitionType_FiniteSamps, numSamplesToWrite)
     publicStatus = DAQmxCreateAOVoltageChan(taskHandleAnalog, "dev2/ao0", "", -10, 10, DAQmx_Val_VoltageUnits2_Volts, "")
     publicStatus = DAQmxCfgSampClkTiming(taskHandleAnalog, "Ctr0InternalOutput", 1000000#, DAQmx_Val_Falling, DAQmx_Val_AcquisitionType_FiniteSamps, numSamplesToWrite)
     publicStatus = DAQmxCreateDIChan(taskHandleDigitalIn, "dev2/port0/line7", "", DAQmx_Val_ChanPerLine)
     publicStatus = DAQmxCfgChangeDetectionTiming(taskHandleDigitalIn, "dev2/port0/line7", "", DAQmx_Val_AcquisitionType_ContSamps, 8)
     publicStatus = DAQmxWriteBinaryI16(taskHandleAnalog, DACwaveFormSize, False, -1, DAQmx_Val_GroupByScanNumber, buffer(0), sampsPerChanWritten, ByVal 0&)
     publicStatus = DAQmxWriteDigitalLines(taskHandleDigitalOut, numSamplesInArray, False, -1, DAQmx_Val_GroupByScanNumber, writeArray(0, 0), sampsPerChanWritten, ByVal 0&)
     publicStatus = DAQmxStartTask(taskHandleDigitalIn)
     publicStatus = DAQmxStartTask(taskHandleAnalog)
     publicStatus = DAQmxStartTask(taskHandleDigitalOut)
     publicStatus = DAQmxStartTask(publicCounterHandle)

r = 0
Do While r < (publicLifetime * numSample)
publicStatus = DAQmxReadDigitalLines(taskHandle, 1, 5, DAQmx_Val_GroupByScanNumber, readArray(0), arraySizeInBytes2, SampsPerChanRead, numBytesPerSamp, ByVal 0&)
If publicStatus = 0 Then r = r + 1
If r Mod publicMeasurementInterval= 0 Then 'Measurement Code here
Loop

publicStatus = DAQmxStopTask(taskHandleDigitalIn)

 publicStatus = DAQmxWaitUntilTaskDone(taskHandleDigitalOut, -1)
 publicStatus = DAQmxClearTask(taskHandleDigitalOut)
 publicStatus = DAQmxStopTask(taskHandleAnalog)
 publicStatus = DAQmxClearTask(taskHandleAnalog)
 publicStatus = DAQmxStopTask(publicCounterHandle)
 publicStatus = DAQmxStopTask(taskHandleDigitalIn)
 publicStatus = DAQmxClearTask(taskHandleDigitalIn)   
 taskIsRunning = False

   

 

 

Thank you.


Viewing all articles
Browse latest Browse all 323

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>