04-16-2007 07:13 AM
My app collects 250-300 channels of signals at 10 Hz. SCXI, Digital IN, Counter, TCP instruments, CAN, you name it.
It uses "plug-in" VIs - VIs that the user creates in a particular folder and that perform particular calculations during a test.
For example, one plug-in might take the SPEED measurement and the TORQUE measurement and produce a POWER measurement, at each sample (10 Hz).
From then on, the POWER signal is just another channel to the user; he can graph it, record it, set alarms on it, just as if it were a measured channel.
I have a mechanism to sort these out and execute them in the correct order. If some other plug-in needed POWER as an input, then it's important that the POWER plug-in runs BEFORE the one that uses the POWER value.
Currently, the DAQ cards are all PCI, on the host, and that all works 100%.
Now we are moving all the DAQ stuff to PXI. I have all the types (except CAN) working there, and now I need to move the plug-in types over. As part of this, I need to send the actual VI files from the host to the PXI for execution, just before the test.
I am looking to minimize the amount of disk writing I have to do, and the time it takes to prepare thes things for the test.
---- QUESTIONS ----
I seriously doubt this, but thoughts are welcome.
If necessary, I could establish a static reference to these support VIs, I think that will eliminate the searching that it might otherwise have to do?
Blog for (mostly LabVIEW) programmers: Tips And Tricks
04-17-2007 08:12 AM
Blog for (mostly LabVIEW) programmers: Tips And Tricks
04-17-2007 03:03 PM
Hi,
04-17-2007 03:32 PM
I had expected that, as I see no VI SERVER functions except using PATHs.
A RAM disk is a piece of software that acts like a disk driver. It uses a chunk of RAM, and sets up a file system on it. You can then address it as any other drive: make folders, read and write files, etc. Programs don't know the difference, but the speed is much faster. Of course it's volatile when power goes off.
Actually, I'm already part way down this road. The VIs that were already in memory were found easily by the plug-ins. Others were not found at all, until I included a STATIC VI REFERENCE in the main code, to force those to be loaded as well.
That's fine for a finished product, and I intend to do that, but for development, it's way more hassle than I need.
No, when you deploy your VI to the target, the target will not need to recompile the VI.
OK, good to know. I hadn't tested this. I was afraid that loading the VI would cause a re-compile. I could have gotten around it by storing the VI again, I suppose, but it's nice to know I don't have to.
I didn't know the COMPARE VI tool was available programmatically.
I have implemented this with a HASH function to detect differences. The FILE SIZE idea is not good enough, in the case that somebody changes a constant from 3.2 to 6.9. The hash will detect any changes.
So the host sends a VI name, and a HASH value to the RT. The RT checks its local copy of the VI, and its local copy of the HASH value. If the VI doesn't exist, or the HASH value is different, the download occurs, otherwise it's not necessary, and I've saved some wear and tear on the disk, and a few mSec as well.
Thanks for your help.
Blog for (mostly LabVIEW) programmers: Tips And Tricks