07-07-2006 05:10 PM
07-07-2006 05:30 PM
07-07-2006 06:34 PM
07-08-2006 01:48 AM
You could also try plotting only an abstract of your acquisition (say 1 point every 200 or 500) and stream the rest to disk / leave in memory: after the acquisition is ended you can redraw the graph with complete set of ponts. This permits the operator to have a raugh idea of what's happening and saves a lot of drawing work.
07-10-2006 10:04 AM
Well, it's pretty much what I suspected then. I am at a loss to suggest anything that might help short of a major rewrite of your program to put data-acquisition in a separate thread from the user interface management. This is how I would design the program from the outset:
If you are using the old-style "Traditional NI-DAQ" functions, perhaps changing to the new-style functions may help? I am not really sure. I tried doing a search of the knowledge base to see if anything came up that obviously addresses the problem but I didn't see anything in the few minutes I have to look at it. Perhaps some deeper digging may help. It may also be worth posting this question to one of the boards more specifically relating to NI-DAQ.
One further thing I would suggest is to turn off autoscaling on the plots. Set a reasonable starting scale and only re-scale on command.
07-10-2006 12:54 PM
These suggestions are great. Also, I think the best
start to troubleshooting this would be to determine which exact component is
causing the slowdown. There are a couple possibilities, but I would like
to determine if it is the DAQ slowing down as a result of acquiring more
channels of data, or whether its the updating the graph with extra data which
causes the slowdown. What happens if you substitute all of your DAQ calls
with random number generation? What happens when you acquire all of your
data points, but don't plot any of them to the screen? Suggestions
provided by other users about not updating with all of the points is sound
advice -- and wouldn't be extremely difficult to implement.
Multithreading your UI could be done (and in general is a good program design),
but it gets slightly more complicated. Furthermore, multithreading on the
older OS might not be as helpful as it is on a modern built-to-multithread
processor. Feel free to attach screenshots of your code too -- someone
might be able to offer some additional advice based on that.
hope it helps -- let us know how it goes!
07-10-2006 01:42 PM
07-10-2006 02:10 PM
Well, as usual is the actual problem that must trace the path to the "right" solution. My suggestion was intended for a scenario with a test running of a relatively short duration with data collected and stored for post processing and with a sample only of data shown to let the operator mantain some surveillance over the process.
In case your test is long lasting, with a huge amunt of data the operator must handle during the process, the multithreading solution seems the most appropriate, in addition you are running with a modern OS and the latest CVI so you should have all the resources needed.
But you told something about swapping the hard disk to test the two scenarios, that means the hardware is the same and you only switch the software environment, so this question comes to my mind: may your XP environment be suffering the contraints of an "old" pc (processor, memory, graphics card...)? This could maybe explain the poor performance you are experimenting.