sunuk
2007-12-27 10:40:05 UTC
I'm controlling the high speed scanning mirror device with PCI 6534 card.For continous output of data that composed of lager amount of buffers , I used DOsingleBufExtTrig653x.C.For setting number of channel and transfer time, I set the first three configuration buffers like this.
//configuration bufferibuffer[0] = 0x0002;//configuration buffer informing bufferibuffer[1] = 0x003E;//3 channels for output and 3 channels for inputibuffer[2] = 0x0000//interval multiplier(0 means 24 us)
Then, real position data(x,y,z) is filled with sine curve in the same buffer.ibuffer[3] = ibuffer[4] = ..............................................................................................................
And continously output the buffer like below.
while(((Ibuffer*)pParam)->stop_flag == false) { iStatus = Align_DMA_Buffer(iDevice, iResource, ibuffer, ulCount, ulBufferSize, &ulAlignIndex); iRetVal = NIDAQErrorHandler(iStatus, "Align_DMA_Buffer", iIgnoreWarning); iStatus = DIG_Block_Out(iDevice, iGroup, ibuffer, ulCount); iRetVal = NIDAQErrorHandler(iStatus, "DIG_Block_Out", iIgnoreWarning); printf(" Apply the digital trigger to the 'start trigger' pin to start the operation.\n"); ulRemaining = 1; while ((ulRemaining != 0) && (iStatus == 0)) { iStatus = DIG_Block_Check(iDevice, iGroup, &ulRemaining); iRetVal = NIDAQYield(iYieldON); } iRetVal = NIDAQErrorHandler(iStatus, "DIG_Block_Check", iIgnoreWarning); }
When I run this program, there is significant delay (5 sec) beween two consecutive blockout operation.
How can I solve this problem?
I attached my program.
[20071223]ControllerTest1.zip:
http://forums.ni.com/attachments/ni/70/7961/1/[20071223]ControllerTest1.zip
//configuration bufferibuffer[0] = 0x0002;//configuration buffer informing bufferibuffer[1] = 0x003E;//3 channels for output and 3 channels for inputibuffer[2] = 0x0000//interval multiplier(0 means 24 us)
Then, real position data(x,y,z) is filled with sine curve in the same buffer.ibuffer[3] = ibuffer[4] = ..............................................................................................................
And continously output the buffer like below.
while(((Ibuffer*)pParam)->stop_flag == false) { iStatus = Align_DMA_Buffer(iDevice, iResource, ibuffer, ulCount, ulBufferSize, &ulAlignIndex); iRetVal = NIDAQErrorHandler(iStatus, "Align_DMA_Buffer", iIgnoreWarning); iStatus = DIG_Block_Out(iDevice, iGroup, ibuffer, ulCount); iRetVal = NIDAQErrorHandler(iStatus, "DIG_Block_Out", iIgnoreWarning); printf(" Apply the digital trigger to the 'start trigger' pin to start the operation.\n"); ulRemaining = 1; while ((ulRemaining != 0) && (iStatus == 0)) { iStatus = DIG_Block_Check(iDevice, iGroup, &ulRemaining); iRetVal = NIDAQYield(iYieldON); } iRetVal = NIDAQErrorHandler(iStatus, "DIG_Block_Check", iIgnoreWarning); }
When I run this program, there is significant delay (5 sec) beween two consecutive blockout operation.
How can I solve this problem?
I attached my program.
[20071223]ControllerTest1.zip:
http://forums.ni.com/attachments/ni/70/7961/1/[20071223]ControllerTest1.zip