LabVIEW Idea Exchange

Community Browser
cancel
Showing results for 
Search instead for 
Did you mean: 
Post an idea

Hi.

 

When you register a user event the name of that event (the name that appears in the event structure selector) is determined by the last output terminal that event emerged from. If your user event came directly from the Create User Event primitive your event will of course carry the name you gave it on its data type, so no problem there. If your event came from a control terminal you are (usually) also in control of the name your event wire carries (as it will be the control label), but if your event wire came out of another primitive along the way your event name will in some cases have changed to something you don't control yourself. In some cases your event name will just be <User event> or even <?>:

 

Before.png

 

One of such events is annoying but can be acceptable. It's worse when you have several of those in your event structure selector - which of the <?> belongs to which user event? Therefore I usually rename events on the wire if they catch a generic name along the way. I use the Variant To Data primitive for this:

 

UsualFix.png

 

The above is the best solution currently, but it has a couple of drawbacks most of which come in effect if the data type of your event changes. In this case you risk ending up with code that isn't broken but executes with runtime errors. Therefore I suggest a new LabVIEW primitive for renaming events - one that will automatically carry over the event data type:

 

Suggestion.png

 

Would that be useful for anybody else but me?

 

Merry Christmas,

Steen

I have searched the forum but cannot find this particular issue - only the adaptive nature of the dropped constant.

 

When an Integer Numeric Constant is dropped onto the block diagram the value '0' is highlighted ready to accept a typed value.  When you do the same thing with a DBL Numeric constant you have to double click it to highlight it before you can enter a value.  This behaviour is inconsistent the Integer being preferred.

 

Ken

When you get a data changed event from an array, it would be nice if that event included an array of what items in the array actually changed.  This makes it easier for the user to determine what changed and how to deal with it.

We have the option for finding the items that doesn't have any callers in the Project. So it would be good if a "Delete" option is also available in the same window as shown below. The same option can be disabled if the item selected item is locked and can only be enabled if it can be really deleted from the project.

 

IDEA_Item_With_No_Callers.PNG

 

 

 

 

For illustration, create a ring, set the representation to DBL and uncheck "sequential values".

 

You would think we should be able to enter any value we want on the "edit items" screen, but just try e.g. entering two items with the following two values 3.45e-12 and 8e-7.

 

The display never switches to E-format and all we later see is 0.00000. The dialog actually throws an error complaining about duplicate values. 😞

 

Note that the ring itself can work with such values perfectly well but the only way to enter them successfully is by writing to a "strings and values []" property. We can later read them back and they are actually perfectly fine.

 

Here is an illustration. The edit items is completely useless here. We (1) cannot see the values and (2) we cannot successfully edit them. This is an unecessary limitation.

 

IDEA: The edit items screen of rings needs full support for the selected datatype.

 


When working on classes or libraries I often find myself copying icons from one VI to another. I don't necessarily want to create an icon template for a handful of VIs that will be developed however it is a slow process to switch between the icon editors of different VIs to copy and paste icons. If multiple copies of the icon editor could be opened this would speed editing up considerably. This idea may not be as necessary if this idea is implemented however it still has it's merits.

I suggest a better sorting of topics in the "Search" function in help. I usually find the LabVIEW Help search functionality so poor that I start out with a google search online.

An example:

I would like to look through the 'VI Server Class Hierarchy'. I open LabVIEW Help and type 'vi server class hierarchy' n the search field. In this case what I looked for turned up as rank 21 of 24 - in a search where I actually typed the full title of the page! Turning to Google I typed the following: 'site:ni.com vi server class hierarchy' and the first hit was what I was looking for.

The Help documentation in LabVIEW is generally very good, but it is a very hard job to search through it. I always have a hard time finding documentation unless I a direct link (from Context help or similar) to the Help item I am looking for.

LabVIEW Help

If there is one thing that tops my wish-list, that is a simple way to figure out the outcome of such simple actions as this:

 

ScreenHunter_004.jpg

 

Are the successive "Array" outputs going to be: {1, 2, 3} and {4, 5, 6} or {1,4}, {2,5} and {3,6} ?

I've been unable to find a good mnemonic to remember it.

So, each time I run into one of those, I've got to go through a debugging step. And since those functions are typically chained (say, convert an image into a 2D array, extract a sub-array, do some processing on it, replace the subarray, put back into image), this is a lot of debugging, which I have to repeat over and over again.

Don't get me wrong, debugging is not the issue. It is just that in language based environment, there would be no ambiguity as of which dimension of the array is read/written, because it is explicitly stated:

 

for (i=0; i<Nx; i++)

   for (j=0; j<Ny; j++)

       Array[i] = Input[i][j];

 

1D array functions are easy to interpret and use, but, at least to me, in higher dimensions troubles start with the simple "Index Array" function:

ScreenHunter_005.jpg

 

What's it going to be? {1,2,3} or {1,4}?

And if I want to access {2,5}, do I need to use this:

 

ScreenHunter_006.jpg

 

or that:

 

 ScreenHunter_007.jpg?

 

That may be just me (disclaimer: I can't seem to remember my left from my right), but I wished there was a more GRAPHICAL way to figure it out... I am not even starting to talk about more general N-dimensional arrays...

For 2D, here is my suggestion:

 

ScreenHunter_008.jpg, or to mirror the actual control behavior: ScreenHunter_009.jpg

Extensions to more dimensions could be looking something like:

 

 

ScreenHunter_010.jpg

 

and similarly for other array functions (I am just opening the Pandora box and running away).

Now, that does not really answer the question on how to figure out the outcome of my first example above... For this, I suggest (anathema!) to modify the auto-index design by offering an option to "expand" the auto-indexing icon and replace it with a larger, more explicit "function-like" icon:

 

ScreenHunter_013.jpg

 

Notice that, in my version of LabVIEW autoindex, you actually get a chance to choose which dimension is going to be auto-indexed. Of course that only works if know the dimension of the array beforehand, but that is most of the time the case.

Likewise for the autoindexing upon exiting a loop, although I am shying away from suggesting any design.

 

In summary, LabVIEW, which is supposed to be a graphical programming language, should offer better clues as of what some of the functions are doing. I have expressed my frustration with some of the array functions, but the same theme goes with others (such as strings! but then, LabVIEW is not a text-based language, so that would be unfair to try and compete with one).

 

My 2 cts.

 

It would be useful if we could connect a class wire to a case selector. You will be able to create a case for the children of the class. The internal connection for the selector will return the specific child class. This will eliminate the need to cast to more specific class inside of the case.

 

This idea came from this thread on Lava.

 

original.png

From an AE:

 

I confirmed with the Product Support Engineer for the PID Toolkit that the toolkit does not officially support the Mac OS X and therefore, we do not have an installer available for it. However, she also did mention that the PID Toolkit is created using LabVIEW code, so it is possible that you would be able to open VIs that come with the PID Toolkit in the Mac OS. I can submit a product suggestion for you to request Mac OS support for the PID Toolkit in the next release.

 

So here is the product suggestion. NI has gone to the trouble of building a cross platform set of VIs for PID and then stumbled in merely packaging it. Just build an installer.

Free labels and Name labels can be set to have transparent backgrounds on the Block Diagram.  For consistency of BD labels I have to manually go and set the wire labels background to be transparent to match.  If I don't my wire labels complain that they are treated as "second class labels."Smiley Sad   Stop the discrimination! and give me the option to "Use transparent wire labels"Smiley Wink

wire labels.PNG

Provide an option to display a QR (2-D) code in the product activation dialog.  The QR code should contain a web address that would return the activation codes for all selected products.  For those of us stuck out in a lab or factory with only our smart phones this would provide a slick, foolproof way to enter all of the data needed.  It would save us from either making a round trip back to civilization (with a pad full of info) or getting carpal-tunnel trying to type all that stuff in on a little soft keyboard (multiple times for multiple activations = hand cramp).  We would still have to type the resulting activation codes into the LabVIEW activation screen but that's a lot easier than all the rest.

 

Idea details:

1) Provide a http link as a QR code 

ExampleNIActivateQRcode.png

2) Have the target web page auto-generate the activation codes and display them (preferably in a mobile browser friendly format)

3) As an alternative, let the user upload a picture with the QR code to the NI activation web site for the same result (works for anyone with a camera not just smartphone users -- this would also let you show off IMAQ.)

4) Profit

 

(And, once you have the QR-code generation code available, add a VI for it to LabVIEW -- see http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Generate-Barcodes-in-LabVIEW/idi-p/1283912)

 

Now that coding for LVXCC is finished (get over there and vote before November 6 in the UI Controls category!), back to the Ideas drawing board. Smiley Wink

 

A common messaging practice involves creating a messaging ref (whether Queue, User Event, or Notifier) from a clustered datatype. The next step involves sending some data along that ref, and the final step is receiving data from the ref:

 

MessagingInterfaceCurrent.png

 

Above, you can see that the first two messaging types return the entire data cluster on the Receive, thus requiring an 'Unbundle'. I like how the third messaging construct uses the Event Handler Structure to "fan out" the elements on the Event Data Node interface (well, every now and then I'd like access to the top-level data structure on the Event Data Nodes...). All three constructs require fully-formed data structure type information for the Send input.

 

The interface for these Send and Receive primitives could be simplified, yielding a significant reduction in the BD footprint and an appreciable decrease in layout maintenance. 

 

MessagingInterfaceProposed.png

(Note, also, added a third element on the Dequeue graphic and centered the Enqueue by a pixel Smiley Tongue )

 

Since the data is already strictly typed in these messaging references, additional type information is not needed in a separate Data Input Terminal.

 

Below I've illustrated a place I'd love to use this cleaner interface - between a While Loop and a Case Structure. We save 32 pixels - enough space to fit one more primitive into the Case Structure! :thumbup1:

 

TightMessagingInterfaceApplication.png

 

Also note: this follows suit for current practices that allow you to "fan out" data structures on the syntax level, such as Property Nodes (with a cameo appearance😞

 

PropertyNodeInterface.png

 

Discussion questions to duke out in the comments section:

 

  1. Can the developer rearrange the order of the nodes (like in a Bundle by Name), or is the order fixed (like a Bundle)?
  2. Related, can the developer select fewer or duplicate elements that are in the data cluster (like a Bundle by Name), or is the node size fixed to show the exact number of elements in the data cluster (like a Bundle)?
  3. Are inputs Required, or can the developer leave them unwired to assume default data?
  4. Would these nodes replace the current nodes, be an alternate display of the current nodes, or be new nodes altogether?
  5. Should the Error Terminals go above the data I/O (like Scan From String) or below?
  6. Do we want only the small icons (like Bundle, or Scan From String, and shown in proposed illustration) or the full data name (like Bundle by Name) for data IO on the node? Does it need to be configurable, like 'No Names', 'Short Names', and 'Long Names' on Property Nodes?

 

A change of inputs or outputs in a SubVI leads to the need for manually Relink all the calls to the SubVI.

 

16989i318B79FCD1457C8A

 

As I often use the SubVI at many different places I would appreciate a function that automatic relink all the instances. Something like this:

 

16997i868A9B7B267A7210

 

 

Over the years the wiring routines have been improving a lot, here is a next step that would make wiring even easier.

 

I call that "Bad wire gets cleared automatically when it can", it would take me 50 lines to explain, so here are to screen shots to explain what i have in mind :

 

ex_a.png

 

ex_b.png

 

 

The Array Max & Min function is quite versatile, but for some reason it does not accept boolean arrays.

 

This restriction make no sense at all. Since we can easily sort boolean arrays, this function should work too!

 

It would come in handy for example if looking for the position of a single TRUE in a 2D array (search only works for 1D arrays!). Array min & max would simply return the index pair of the first TRUE found. As a workaround, we currently need to insert a "boolean to 0,1" to get the same effect. This seems unecessary.

There could be a IP Control in LabVIEW which will function the same way as the IP address in Network connection properties. There should be inbuilt validation of the each of the 4 fields hence eliminating the need to validate the IP address programmatically. Also when the user has finished typing the value in the first field, the control should immediately move after the dot and wait for input in the second field, etc.

 

IP.JPG

 

 

I often find myself having to sort the rows of a 2D array based on a one of the columns.  It would be nice to be able to have a native function for that.  Currently I turn each row into a cluster, sort the array of clusters, then convert back to a 2D array -- way too much overhead and wiring time. 

 

Instead, I envision something like Matlab's sortrows or Excel's expand selection.  

Inputs would be a 2D array, a column index, and an ascending/descending selector. Output would be the 2D array with rows reordered such that the specified column is sorted.

Instead of having nested case structures to implement if...else if...else if...else

I'd like to have an elseif structure where only one frame executes when one condition is TRUE.

Elseif structure

 

 

 

 

 

 

 

 

 

 

 

Here's a very fundamental User Interface concept that LabVIEW lacks: 

 

When you press and hold an increment or decrement button on a numeric/ring/slider...etc..., the rate at which the value changes is constant: painfully slow. Typically, in other applications, button presses will increase the rate of change of the number proportional to the amount of time held, and if you hold it for 5 seconds or so that sucker is flying.

 

We want the same native behavior for increment/decrement buttons in LabVIEW, but we want it to be configurable. Consider a Property Node that defines a Lookup Table for the velocity profile of the increment:

 

INCDECAccProfile.png

 

The way the above code is read: For 0<t<1000, the control only moves at 1unit/sec. For 1000<t<3000, the control moves at 10units/sec. For 3000<t<5000, the control moves at 100units/sec. Another (more difficult?) way to define the velocity profile is to provide the velocity profile vs. time as a formula.

 

Of course, while the "typical" profile would start off slow and accelerate, I'm sure the ability to create unique accel/decel profiles would give incredible control for some awesome, one-of-a-kind User Interfaces.

 

(As a side note, if LabVIEW simply implements a fixed acceleration rate that was non-configurable, I will still be frustrated and still take the XControl route.)

 

I'm sure someone can think of a better, more intuitive implementation, but the concept remains:

For a press-and-hold on Increment/Decrement buttons, the control should increase its rate of change proportional to the amount of time it has been held, as defined by the programmer.