While this method works, it carries a fairly significant performance penalty. If you are updating more than about 20 times per second, you will want to use a different approach. Details on both points below.
Performance Penalty
Each time you make a call to VI server, you force a thread switch to the UI thread. This thread thrashing can significantly slow down execution. In addition, when you write a front panel control/indicator using VI server, the operation must totally complete before the execution thread can continue. This means all front panel updates must complete - it is not simply updating a single memory location. In contrast, when you write to a local variable or indicator terminal, you notify LabVIEW that the front panel control needs to be refreshed, and this happens on the next UI refresh cycle (about 30Hz). As a result, you can write to an indicator or local variable orders of magnitude faster than doing the same operation using the Value property.
Faster Approach
This leads to the faster approach. In your main VI, create a queue with the proper data type. Pass the queue reference to the subVI. Any time you want to update the main VI front panel control, enqueue the value. In the main VI, create a WHILE loop to process the queue. Every time the queue receives a value, write it to the front panel using the terminal or a local variable. You get a speed-up two ways. First, you no longer get a thread switch in your subVI every time you want to update the front panel. Second, you use the optimized LabVIEW UI update mechanism instead of forcing a full update every time you have a change.
If you need the faster method and need more help on it, let us know.