LabVIEW Idea Exchange

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

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.

 

I would like to see the functionality of the TCP and UDP primitives expanded to include more state information, better control of the connections and the capability to receive events for the connection.

 

Items that I can see which would be helpful would include the following:

  1. Ability to enable/disable the Nagling algorithm.
  2. Ability to abort a TCP connection with a TCP-RST. (The wire is there on the TCP-Close primitive but it doesn't do anything)
  3. Ability to receive an event when data is present.
  4. Ability to receive an event when the data has actually be put on the wire. (Currently the write VIs return as soon as the data is buffered. There is no ability to have the application wait until the data is actually delivered.)
  5. More access to the IOCTLs that are available on a socket connection that a programmer has access to via Linux or Windows socket libraries.

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.

 

 

Currently, when you use the Reshape Array primitive, if new elements are created, they are filled with the default data of the datatype. Alternatively, allow a terminal that defines the fill value.

 

CurrentReshapeArray.png