07-06-2011 12:59 PM
@altenbach wrote:
Can you elaborate on your diagram comment for the need of two FOR loops. Since your are indexing over the same array, shouldn't the iterations always match?
Argh! Thanks Altenbach. That was a modified older file. It "works" so I didn't think twice after I ran it then decided to post it. There were a few things missing in the old one as well.
Let's try again....
.
07-07-2011 01:44 AM
Here's a more complete list which was generated using a private method. It looks like there are ~280 classes in total and about 140 of those are BD classes. The BD classes seem to occupy the upper bit of an I16.
07-07-2011 10:46 AM - edited 07-07-2011 10:47 AM
What I was trying to provide was a way to view the ClassID, the ClassName, and a picture of the item in question. Below is a representation of what I was trying to achieve by placing the items directly on the BD.
There are some surprises in there.... Is it intuitive that "GenClassTagRefConstant" is the ClassName for for the System Host?
Why is an Expression node just "Node"?
Decimate 1D Array = "Bundler"
Array To Cluster = "ArrayToCluster" but...Cluster To Array = ""Function"
07-07-2011 09:35 PM - edited 07-07-2011 09:36 PM
Nice. You're probably better off using Traverse for GObjects though, which will recurse into any structures.
Also, there are some Class IDs which can have multiple Class Names - for example, all the Express Nodes and XNodes have the same ID but different names (at the moment, your list of Names and IDs might not be the same length, or match up properly).
07-30-2011 02:56 PM
I see the question of stopping multiple loops posted a lot. Here is the most recent example - stop button do not work.
This micro nugget has the following goals:
The assumption of this micro nugget is that the behavior of an uninitialized shift register is understood. I will not attempt to outdo Ben on his Community Nugget. If a novice LabVIEW user is getting to the point to where he or she needs multiple loops, this is a good time to learn about the concepts presented.
There are a lot of methods to signal loop shutdown and this is probably not the best. But it is probably the most simple acceptable way. It uses a Boolean Functional Global Variable. It also demonstrates how I like to privately scope FGVs in a library with public wrappers for the API.
Privately scoped items can only be used by other items in the library. In this example the FGV is only available to the wrapper functions which are Publicly scoped. You can modify the private items any way you want. After testing the public API you can redeploy the library and your applications that use it will work. If the applications directly use the FGV they would break if you modify it or remove it.
To change access scope you right click on a library item and select Access Scope. There are three - Public, Private and Community. Community scope will not be discussed here.
In a real application I would probably use a shutdown message with a notifier or queue instead. But I wanted to demonstrate this particular technique. I also want you to understand that since the FGV is private it could be removed and replaced with a notifier or other technique without breaking the applications which use the library. You can modify the inner workings of the API but the inputs and outputs stay the same.
I always call any privately scoped FGV or Action Engine "core.vi". The actions for this one are:
I always set the command enum to input required. Here is the Global Stop core.vi
I created three wrapper VIs - one for each action. I do this for several reasons.
Here are the three wrappers.
Initialize
Stop
Check
I have a test VI to demonstrate the use of this library.
Attached is a project containing the Test Global Stop VI and the Global Stop library along with the two SubVIs in LabVIEW 8.2 format.