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.