LabVIEW Idea Exchange

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

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

This is an idea I've been working on for a while. It's time to let others start evaluating it. 🙂

000.png

001.png

 ^ I included the above for Dmitry Sagatelyan and similar folks who have asked me for these things over the years so they know the mindset to use when evaluating the idea. But it's written up below for LabVIEW users who only know LabVIEW as it stands today (Q3 2024).

002.png

003.png

004.png

005.png

006.png

007.png

 

Feedback and questions welcome. 

In a simple project, the main entry point into an application is usually easy to find:

simple.png

 

However, for more complex projects (particularly those utilising libraries/classes) it may not be obvious where to begin:

complex.png

 

Proposal:

LabVIEW should provide a mechanism for tagging one or more VIs such that they are easily accessible to someone unfamiliar with the project. 

 

One possible implementation:

links.png

  • Display tagged items as links at the top-level of the project.
  • Links would be pinned to the top row
  • Link names would be editable and need not correspond to the name of the item they link to. (e.g. The link "main" may point to "WidgetTester.lvlib:GUI.lvclass:launcher.vi")
  • For minimal confusion, developers should be encouraged to name the first link "main" (or similar)
  • In principle links could point to anything interesting, not just the main VI.
  • Double-clicking a link should open (or navigate to?) the target item

 

Searched briefly but couldn't find any ideas about this.

 

I know we have the ability #via_ignore comments to ignore specific tests for a specific VI, but I am looking at a different use case.

 

Here's the use case, I use DQMH. When you create a new DQMH module there is a lot of plumbing code that comes with it. It's standard stuff. Very rarely do I have to open or edit it. Much of it is scripting generated. It often fails tests but I don't care. In addition to failing, it takes up test time, which slows my feedback loop. I would a way to signal to VI analyzer to skip these files. I know I can use the VIAN API to limit the files it checks, but I was thinking there had to be a better way. 

 

Implementation Ideas - I had 2 main ideas

- Regex matching on VI names - with the regex pulled out of a text file somewhere ala gitignore. Many of the DQMH generated VIs have standard names, so that is easy. When generating events, they don't but you could easily add a prefix/suffix or something that the regex would pick up.

- Using the Tag API to tag the VI. I like this because the scripting can just apply the tag or apply it to the template the scripter uses. Downside is: kind of hidden from the user and perhaps if I decide to make some edits to this VI  I may want VIAN to stop ignoring it and it's not immediately obvious how to do that.

 

Note:

I picked the Execution and Performance Label because it didn't seem to fit any of the labels easily. If this is the wrong label and you are an admin, please relabel it.

 

 

We've all probably found ourselves writing various forms of this:

TurboPhil_0-1621002015826.png

It would be great if there was a malleable version of the "Traverse For G Objects" function that shipped with LabVIEW to save a few headaches. Rather than passing in a string for the class name, and then adding a downstream ToMoreSpecific operation, it could accept the refnum constant (in the above example, the "Control" class ref) and return an array already cast to that class.

 

The function of "Compound Arithmetic" can be changed very quick and easy.

Why not use that concept for other items too?

 

Use cursor mode "Operate Value" to change function quickly.

Old: Click > Replace > Comparison Palette > Item

New: Click > Item

 

See concept screenshot for example:

Change Mode for all Items.png

 

The clicked item acts like an polymorph selector to choose from same palette or from similar items.

 

Okay so lets say you have a VI that you developed, and works great on its own.  You have some nice scaling and control manipulation with panes and custom resizing code.  All works great.  Then you realize this might be handy to have in a subpanel.  So you insert it into a subpanel, which itself can be resized at runtime.  The only problem is, if code isn't written to handle the resize of the Subpanel properly, then the user could accidentally make the subpanel smaller than the minimum VI size that is inserted into it.  At which point the UI will get messed up and making the subpanel larger will not bring it back to the desired look.  Here is a thread where I post a simple example.  If the subpanel is set to fit to a pane, then you could programatically set the minimum pane size, to be the same as the minimum front panel window size, of the VI being inserted.

 

But if the Subpanel isn't in a pane, then there could be other issues.  So this idea is to have a property of a Subpanel that is "Minimum Subpanel Size".  Which will not allow the control to be smaller than a set size.  To make things even easier I propose a property that is "Set Minimum Subpanel Size to Minimum Front Panel Size".  Now when you try to make the Subpanel too small with a property node, it will generate an error, just like if you try to set the Front Panel too small with a property node.  And if the Subpanel is in a pane and being resized, this would prevent the control from getting smaller, and prevent the pane from getting smaller.

Now that the SSP package is delivered on USB instead of DVDs (good stuff!), I have a minor request: Could you have the USB label include a release/version name on its label?

It might add too much of a cost depending on how you get them customized, but if that is not an issue it would be very practical to be able to see what the USB contains by its label (as we could with the DVDs).Smiley Happy

 

On a side note: Many companies have strict regulations on the use of USBs, and the need for such has increased with weaknesses like BadUSB. Perhaps NI could state something about how the USB sticks they send out are protected, either in the delivery package, or just as a statement on ni.com? That way people who need to convince their IT departments to allow them to use the NI USB sticks will have something to show (I'm sure you will have to add some legal disclaimers there as well , but that's OK).

Make it easier to find the right product in the uninstaller

If you install a lot of National Instruments developer tools the uninstaller becomes very crowded. You can have 50-100 components, often with similar names and varying name structure. Finding the component you want to uninstall/modify/repair can be difficult. 

 

The fact that things a split into so many separate components is practical, but the components should be organized better:

They could be:

  • logically grouped
  • have descriptions
  • there could be a search/filter function available (that accepts wildcards)

Allow us to specify a new source location

If I want to repair or modify an installation it might turn out that the original source for the installation is gone, or I have a new (identical/compatible) source that I would like to use instead. It would be nice if the uninstaller handled this, instead of insisting on the original. 

 

Right now the only way possible to set the tabbing order of controls on the front panel of a (sub)VI is to use Edit >> Set Tabbing Order.

 

I would like a VI Server property/method to be able to programmatically set the tabbing order of the controls on the front panel the way I want.  This way I can write a script to fix a large number of VIs without needing to manually click through each one.  (Of course I would be responsible for programmatically figuring out the order I wanted, but I could make some general assumptions like following the top-bottom left-right on the front panel existing layout, or following how they are connected to the connector pane, etc)

As requested by this fellow 8 years ago: http://forums.ni.com/t5/LabVIEW/Multiple-pattern-lines-in-path-s-Browse-Option/m-p/776968/highlight/true#M355522, it would simplify some GUI if the user could select from a drop-down list, which files to look for in a File Dialog pop-up window.

Currently, we get a single line:

Screen Shot 2016-04-11 at 18.33.05.png

This results in this kind of mess courtesy of the IMAQ Load Image Dialog.vi):

 

Screen Shot 2016-04-11 at 18.35.29.png

 

To update the snapshot illustrating this other thread, here is an example of MS Word in action, illustrating the desired behavior:

 

Screen Shot 2016-04-11 at 18.27.21.png

 

In other words, it helps cleaning up the results, while using a single dialog window for all kinds of different files (which will be dealt with differently down the line).

I am not sure how multiplatform that can be, but here is the file open dialog options from TextWrangler on MacOS:

 

Screen Shot 2016-04-11 at 18.30.21.png

 

so it seems that can be done.

The thread I am referring to had a link to a Windows API call, but the link is dead (probably the result of the recent disastrous site cleanup). And of course is not multiplatform.

 

                             below, here is the "old" File-Dialog

 

         toto3.png

 

                                       But NI advises this :

 

                              toto1.png

 

 the problem is that this "new" File-Dialog isn't aligned like the "old" one

 

      toto2.png

 

                Please ... align this "new" File-Dialog-Express-VI"

 

                                                  (thank you)   Smiley Happy

With LINQ (Language-Integrated Query) becoming increasing prevolant in .Net programming, more and more classes are using <T> Generics.

Unfortunately, LabVIEW does not support Generics, which limits the Methods and Classes available when importing .Net Dll's.

 

Take the following code:

 

namespace GenericsTest

{

   public class GenericList<T>

      {

      void Add(T input) { }

      }

 

   public class NonGenericList

      {

      void AddNoT() { }

      }

 

   class TestGenericList

      {

      private class ExampleClass { }

      static void Main()

            {

         // Declare a list of type int.

         GenericList<int> list1 = new GenericList<int>();

         // Declare a list of type string.

         GenericList<string> list2 = new GenericList<string>();

         // Declare a list of type ExampleClass.

         GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();

            }

      }

}

 

When importing this to LabVIEW

 

GenClass.PNG

 

Notice that I can only see the "NonGenericList" Class as LabVIEW fails to destruct the "GenericList" Class.

One solution to this problem may to treat generics as Method/Constructor inputs, allowing the developed to choose the Generic Type.

This idea is somewhat similar to Shrink-Wrap-Structures but for comments and strings

 

The idea is to resize a comment or string to the text by double clicking one of the resize indicators around the box.

This would happen without changing the number of lines or words on each line.

resize double click.png

The process would be resize the horizontal direction of the box until the line layout looks nice (and fits!) then double click the corner to remove the unwanted space.

There could be different resize processes depending on the corner or edge you click eg. double clicking bottom middle resizes to only remove vertical space, top left would resize and shift the text down and right so the bottom right corner remains anchored.

 

There are some other ideas about resizing multi line comment boxes but none were quite as straight forward as this so I made a new post for it.

 

This mechanism is similar to other programs for resizing boxes so it seems like a sensible thing to implement.

 Connecting to remote panels using LabVIEW is difficult if private networks, local private and external public IPs (under NAT), and firewalls, etc. are involved. It requires significant knowledge as well as external networking configurations (port forwarding, etc.), and possibly admin privileges to modify those.

 

There are plenty of companies that have found a way around all this. The prime example is chrome remote desktop, which seamlessly works even if target computers are in hidden locations on private networks, as long as each machine can access the internet with an outgoing UDP connection. The way I understand it, each computer registers with the Google server, which in turn patches the two outgoing connections together in a way that both will communicate directly afterwards. All traffic tunnels inside the plain Google chat protocol (udp based). Similar mechanisms have been developed for security systems (example) and many more.

 

Since the bulk of the traffic is directly between the endpoints, the traffic load on the external connection management server is very minimal. It simply keeps an updated list of active nodes and handles the patching if requested.

 

I envision a very similar mechanism where LabVIEW users can associate all their applications and distributed computers with a given user ID (e.g. ni profile), and, at all times be able to get a list of all currently running remote systems published under that user ID. If we want to connect to one of them, the connection server would patch things together without the need of any networking configuration. Optionally, users could publish any given panel under a public key, that can be distributed to allow public connections by any other LabVIEW user.

 

This is a very general idea. Details of the best implementation would need to be worked out. Thanks for voting!

 

Scenario: You have a number of classes, and they are perhaps even members of a library. Now you find out that the folder one of the classes and it's member files are stored in on disk should be renamed, or you wish to move a number of the files (as a group) to a different folder...

 

End result; LabVIEW will at best ask you where the files have gone, and then typically fail(!) to relink and get back to runnable code. At worst you end up at a dead end/nightmare, with a "class or library corrupt"-message...(editing the XML content of the class file might solve it yes...but that's not a proper solution).

 

I understand that it can be complex for LabVIEW to track the changes done externally, and/or be able to link everything back up, but it should be able to do it better than it does (not) with the guidance of the user.

 

And if that's too big a task, could we at least get the possibility of renaming folders on disk from the project explorer - and *then* get LabVIEW to automatically handle the changes correctly?

 

PS. There might be ways of doing this already without running into trouble that I'm just not aware of (hopefully!), but the suggestion still stands, as it is obviously too vulnerable and counter-intuitive as it is now...

 

 

You can right-click on a While Loop and select "Replace with For Loop", and vice-versa:

 

loops.png

 

Neither of these operations is currently available in VI Scripting. If they were, Quick Drop and other G-based editor features could benefit.

Hi,

 

Currently if a VI is set to subroutine priority you can only call subVIs within that which are also subroutine priority (to prevent priority inversion I guess).

 

It would be great if it was possible to also use inlined subVIs inside subroutine VIs.

 

As inlining basically defeats a VI's priority setting an inlined subVI would just "inherit" the subroutine priority of its caller. I configure many of my very small reuse VIs  as inlined (most of those in the GPower Error & Warning toolset from v2.1 onwards for instance), since they typically perform much better than subroutine that way. But since they are configured as inlined, this effectively prevents them from being (re)used inside subroutine VIs.

 

Cheers,

Steen

I finally found the time to download a trial version of LV2012. I find that the new 2012 features are really useful and interesting. Good job NI! Smiley Very Happy

One of the greatest for me is definitely the new "concatenating tunnel mode".

I've noticed that it cannot be activated with a variable of scalar type, and this obviously makes sense for almost every type of variables. However, strings are only formally scalar variable. I have lots of VI where the concatenate string vi has exactly the same use (on strings) that Build array has on numerics type of data, particularly when the concatenation had to be conditional. Obviously it is possible to convert the string into a U8 array before to connect the wire to the tunnel, and reconvert it into a string out of the loop, but this convertion probably can be internally managed without too much effort.

The attached snipped can show you what I mean. So, in my opinion, if tunnels could accept strings also when in Concatenating (conditional or not) mode would be great.

Cheers.

Can we get a "Loose Fit" plot axis option that actually works?

 

Loosefit.PNG

 

In the plot above, it's really hard to tell without squinting what the value was over time. Did it transition from 5 to 6, or 6 to 5? If you toggle the "loose fit" option in this plot, it looks exactly the same.

 

Can we add a property to specify something like "LooseFit.Padding"? Users could enter a percentage of full scale value, so then once the native autoscale algorithm is performed, it bumps out the y-axis min/max values by x% of the full range.