You can communicate between VIs either via a Queue (named queues are cool) or via VI server.
Assuming you can give VI1 a reference to VI2, VI1 can use VI server to set control values in VI2 and so on. Alternately, you can simply use a QUEUE-based approach where each VI waits for data from a named QUEUE. The trick is naming the QUEUES so that the correct order is followed. The easiest is to launch the VI templates with an index number and then have a standard QUEUE name with a string + index number as the queue name. Thus, waiting for QUEUE(n-1) will make the VI instance wait for the data from the previous VI. Of course you need logic to make sure the first VI doesn't wait for data from QUEUE-1.....
This way you'll have all instances of the VIs in memory, with each subsequent VI containing different data.
If you're looking for pure functionality, why don't you just stick a VI in a loop with a shift indicator? I^m assuming your code is more academic in nature?
Hope this helps
Shane.
Using LV 6.1 and 8.2.1 on W2k (SP4) and WXP (SP2)