Hi,
Usually, the best way to read data when the data source has stopped is to monitor the scan backlog (which you are doing) and then create a shift-register on your loop. The scan backlog should write to the shift-register on the right edge of your loop. The "number of scans to read" port of your DIO Read.vi should read the shift-register value coming from the left side of your loop (contains the previous iterations scan backlog). Make sure that you input a different value then the scan backlog on your first iteration otherwise there won't be anything read since you have obtained the scan backlog yet. This can be done by initializing the shift-register with an initial "number of scans to read" value. The shipping example Cont Pattern Input.vi, which you
can find by selecting Help >> Find Examples >> Hardware Input and Output >> DAQ >> Digital I/O >> 653x, has the general structure for performing this.
However, if you want to change one of your data acquisition parameters while you are acquiring (DMA vs Interrupts), you will have to stop your acquisition, change the parameter you want and then start it again. You can do this by using Digital Buffer Control.vi in your code and using the control code "Reserved" to temporarily stop your VI. Then you can use Set DAQ Device Info.vi to change from DMA to Interrupts. Then finally, you can use the Digital Buffer Control.vi to "Start" you acquisition again. Although I haven't tested this, it should work.
The first method I described is definitely the preferred method. Hope that helps.
Ron