Chris,
I'm going out on a limb here a little, but here goes:
You wrote: "...Would changing the circular buffer size (samples per channel on the DAQmx Timing.vi) or the number of samples to read at once (a number used along with the property AvailSampPerChan to determine when to read) have any effect? Any other ideas?"
There are two aspects to buffering. One has to do with the DAQ board delivering samples from itself into system RAM, using either DMA or interrupts. This is probably your most serious bottleneck. However the other aspect has to do with your app issuing the DAQmx Read command to retrieve samples from the RAM buffer.
Changing the circular buffer size or the # to read at once will only affect the 2nd of these two aspects of buffering. If the buffer is too small or you fail to retrieve data often/fast enough, the buffer will get overwritten. The next time you do a default DAQmx Read, you'll get an error and no data back. However, if you're setup for continuous sampling AND you setup DAQmx Read Property node values ahead of time, it's possible to request the most recent samples. In such a mode, the circular buffer can overwrite over and over, but at any time you can retrieve recent data without getting the error.
However, I think your main problem at the moment is the DMA vs interrupt issue of filling the buffer as fast as the samples come in. I'm not personally aware of a workaround that will let you ignore this error and retrieve whatever data happens to get transferred successfully. I suspect the driver is designed (rightfully) to prevent you from retrieving chunks of data that may be missing samples at various points. Better to throw an error than to give you mysteriously wrong data...
P.S. Sorry about the little subvi -- one of the hazards of submitting without testing on hw. Doug M figured out the problem with it and gave a solution in this same thread.
You wrote: "...So when I mentioned about the circular buffer size, the 6602 card has a buffer built onto it? Do you know roughly how many events it can store? ... say the 6602 has a buffer that can store 1000 samples. So if I wait until there's 1000 samples there and then read from the card, then I'm actually only doing a data transfer across the bus 1/1000th as much. I'm just wondering if I can optimize how many samples are stored vs how many times stuff is read for the card."
I don't know how the exact size, but I think the on-board buffer is pretty small. However, when you issue a DAQmx Read command, you are not reading directly from the board anyway. You're reading from system RAM. The DAQmx driver is busy behind the scenes making the board deliver its samples into system RAM for you, and I don't know of anything you can do from the app level to affect this. Errrr, wait a minute. I might know of something after all.
Here's
another thread I got involved in a little while back. It related to a different board doing Analog Output, but the "Data Transfer Request Condition" property just
might also be relevant for counter input operations. Again, I'm not near hw to check it out.

Hope this helps,
-Kevin P.
ALERT! LabVIEW's subscription-only policy came to an end (finally!). Unfortunately, pricing favors the captured and committed over new adopters -- so tread carefully.