LabVIEW Idea Exchange

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

Idea:

Double-click to a wire + holding <ctrl> or <alt> will call the wire-cleanup tool for this particular line => much faster than via context menu

cleanup

It would be great if Package builds also supported these two arguments as is supported by normal installers Advanced Page (Installer Properties Dialog Box) - NI

 

The value in this, is that you could then store your package feed in a directory that is relative to the package and automate installing the package and adding the feed to NIPM.

 

Currently, as per NI support, there is NO way to do that.

When building an installer, the resulting installer window can be customized with:

 

  • Welcome Title
  • Welcome Message
  • Readme & License agreements, etc.
  • Welcome Graphics (578x383 BMP)
  • Banner Graphic (578x59 BMP)

 

Like in the good old days of vt100 terminals, we are flying completely blind after selecting (hopefully!) correctly sized BMP files and entering all other information, because we have no idea how things will actually look like in the end. There is not even a verification that the BMP sizes are actually correct.

 

IDEA: I propose a instant graphical preview that actually shows how the dialog will look like based on the entered titles and images. This way we can easily make correction, pick different images, make the title or message longer or shorter, and so on.

 

The idea could be expanded to include a full graphical install dialog editor (similar to the icon editor) where we can paste (from clipboard, or explorer, for example) and arrange any kind and size of images interactively, scale them, change the saturation (gradient), etc. At the end, the Installer builder would create the final BMPs in the correct size to be used.)

In MultiColumn listboxes there is a very useful (but slightly hidden, I'm sure a lot of people do not know about it) option that allows you to set the properties of entire rows or columns in one go by setting the active row or column to -2. Similarily you can set the properties of the headers by setting the row to -1.

 

However, if you want to set the properties of all rows or columns *except* the header, there is no such shortcut available; you have to first use the -2 option, then use -1 to undo the action on the header...

 

Idea: Add a third shortcut (-3 ?) to select all except the header.

 

SelectAllRowsExceptHeader.PNG

 

 

To replace a VI or a control by an other one from the hard disk a lot of mouse action is necessary (See the first image). An other disadvantage is, that the file browser opens in the last used folder. It would help to start browsing on definable paths.

 

currently

 

 

If the "replace"-context-menu would be extended in the suggested way the "select a VI" function could be reached much faster. Additionally some useful entrees could be added to make replacing even more comfortable.

"Recently used ..." a palette with the last twenty VIs / functions / controls (was already suggested in other ideas)

"Favorites ..." a user definable favorites palette with VIs / functions / controls (was already suggested in other ideas)

"Select a VI..." moved one level up from "All Palettes" and opens a file browser with the last used path

"Browse in <path>" Opens a file dialog at the specified position; Entry(s) should be configurable.

 

 

future

The String class has an "Enable Wrapping" / "Wrap at word breaks" setting that can be set from the UI or via "EnableWrap" / "Enable Wrapping" property node. Add the same for decoration text class objects, e.g. captions, so that at as much of a long word is displayed in the frame when SizeToText? is false. As it is, a long word near but not at the right edge is automatically wrapped to the next line and thus hidden when the caption height is one line.

What bugs me about the VI Profiling Tool is that it is not intuitive.  The information it provides is really useful; however, it's so hidden and difficult to interpret that few people actually know where it is to use it.  Let's say you are simply acquiring data using DAQmx and writing that data to a file, as below:

 

Block Diagram of Inefficient DAQmx and File I/O

 

You might want to find out how to make this more efficient, but the only way you know is to insert Tick Count VIs and wrap your wires through sequence structures to do it.  It's annoying, and there are other ideas from JackDunaway (here) and JohnMc19 (here) which aim to simplify the use of those VIs. 

 

But why re-code your application when the VI Profiler can do it for you?  In addition, the VI profiler has more timing information (longest, shortest, average, total, etc) as well of number of runs and memory allocation data.

 

Good news: VI Profiler makes getting the data easy. 

Bad news: VI Profiler makes using the data difficult.

 

Why Using the Profiler is Difficult

 

First, you need to know it exists among a number of bland and condensed gray menus (Tools>>Profile>>Performance and Memory).

 

Next, you have to coordinate starting the profiler with starting your VI (start the Profiler, then start your VI, then stop your VI, then stop the Profiler).

 

Finally, you have to dig through a TON of VIs to find the ones that are relevant (I assume this is because, for polymorphic VIs, all of the instances are loaded into memory, even the dozens that aren't currently being used.)

 

When you find the VI you wish to examine, it will look something like this:

 

VI Profiler Currently

 

Have fun sorting through that!  When I finally find a VI that's hogging memory or speed, I'd expect to click on it to navigate to that VI.  NOPE!  All the VI Profiler does is make the line bold.  Not particularly easy to use...

 

I can't say if it's possible to get rid of VIs that aren't being used, or to make the menu option more visible to the user, but I do have an idea or two for how to make this information easier to understand in LabVIEW.

 

So here's what I suggest:

Adding a couple of check-boxes to the top of the VI Profiler will view in relation to your LabVIEW VI.  Notice the extra check boxes in the top of this image. 

 

VI Profiler With Color Shading

 

One checkbox allows you to color the column you wish to highlight in your LabVIEW code.  The other checkbox inserts a text comment containing the highlighted data straight into you LabVIEW code (right next to the sub VIs):

 

Shading SubVIs According to Relative Execution Speeds

From the above picture, you can clearly see the Write to Spreadsheet File VI is the slowest to execute.  Next in line are the Start DAQmx Task VI and then the Stop DAQmx Task VI.  So if a developer wanted to find out how to make his loop run faster (and therefore increase the rate data is read from his PC RAM), he would know the VIs that are more red are the ones he needs to focus on first.

 

Also, if a user wants to highlight the memory usage, he could select a memory column from the VI Profiler.

 

Highlight Average Memory Usage Per VI 

 

Then the LabVIEW block diagram would look like this:

 

Block Diagram Shaded in Blue for Average Memory Usage

In this case, if a developer wants to find out how he can optimize his code for memory usage, he knows where to start.

 

Side-note: I think selecting multiple colors at a time (one for each column of data you wish to highlight) would be cool, but that would start to get messy on the block diagram.

 

Other data, like the number of runs, could highlight which sections of code are running more often than others.

 

If we integrate the VI profiler more effectively into LabVIEW, there are a lot of benefits:

 

1. Re-coding to find timing specs won't be necessary for Sub-VIs

2. Monitoring memory allocations much easier (some users don't know it's possible with LabVIEW).

3. When there's a problem, it's easier to understand which SubVIs are slowing down code or hogging their memory.

4. Developers can further code development WHILE being wary of inefficiencies.

5. More integrated development environment "feel" for new customers or the experienced G-coder.

 

Please let me know what you think!

When LabVIEW displays text, you are allowed to choose the following types of justification:  LEFT, RIGHT, CENTER.

 

Wouldn't it be much prettier if we could also select "fill justification".  Below is a subtle example, but its known to be easier on the eyes. 

Upvote!  😁

 

Capture.PNG

 

There are cases where a variant constant / control needs to have a data value. This can be done by right-clicking a control / constant, selecting Data Operations -> Copy Data, then right-clicking the variant and selecting Data Operations -> Paste Data. This can be time consuming for many variants.

 

variant_drag_1.png

 

The idea is to allow dragging and dropping of a control or constant onto a variant, and have the data copied to the variant:

variant_drag_2.png

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.

Whenever I drag an object's label or caption I can't help expecting the text justification to change too. Is there any use case where this would not be desired?

 

The current behaviour is particularly inconvenient when I first drag a label, and then later edit the label text:

 

update_justification.png

 

I feel that "auto-justification on drag" should apply to controls/indicators/constants on the front panel and block diagram.

 

A search of the idea exchange turned up a mention of this concept here (credit to M*H*), but it seems to have been lost as a sub-idea of a not-so-popular parent idea. I think it deserves a chance of its own!

 

 

         in "debug mode" (retain wire values), be able to choose the "radix"

 

                something like this:

 

                toto.png

 

           yes, I know the custom probes, but I'm not talking about that. .
It would be nice and useful to have this in the native behavior of LabVIEW
                                        sorry for my poor english, i do my best

Hi,

 

I suggest an option added to the Open VI Reference primitive to open that VI reference without any refees. I suggest option bit 10, i.e. option 0x200h:

 

OpenWithNoRefees.png

 

The demand for this arises when you want to access methods and properties of VIs that may be broken, while on the other hand you don't have any need to run those VIs - for instance in one of my current tools (BatchEditor) where I'm tasked with investigating hundreds of VIs simultaneously of which some could be broken or missing dependencies. Other situations would be tools for traversing project trees for instance. Opening a large number of healthy VI references takes a while, and when something is broken in a VI, opening even a single reference could take 30 seconds to minutes.

 

Currently you can suppress the "loading" and "searching" dialogs by setting option 0x20h on the Open VI Reference primitive, but that only loads the refnum silently as far as that will get you. Opening the refnum takes the same amount of time as if you could see those dialogs, and you are rewarded with an explorer window if a dependency search fails. I just want a way to open a VI refnum without even starting to look for dependencies, thus very quickly and guaranteed silently.

 

The relevant people would know that this request isn't that hard to implement, as it is kind of already possibly using some ninja tricks. I'd like such an option to be public.

 

Cheers,

Steen

One of those little things that winds up bugging me over and over again.  In almost every type of control/indicator I am accustommed to some type of visual clue that a given object is a giver or receiver of data.  Usually it is some combination of shading, increment/decrement buttons, something.  For Refnums (and DVRs in icon view), there is nothing as you can see from the top two pairs of images.

 

DVR ControlVersusIndicator.png

 

Open question:  Should the terminal in the DVR icon glyph change direction to reflect control/indicator of the DVR itself?  I can think about it and say no, but my initial response is always yes.

 

In the lower two pairs of images I at least change the color to reflect the system control/indicator background defaults.  Not bad, but it loses some of the shading effects.  Also a bit light against the system default background so a frame may be desirable.

 

My suggestions:

 

1) Do something (even if it is not exactly what I want).

2) Change the default shading, tweak frames as needed.

3) Fold the opposite corner for indicator.

 

NewCtrlRefnum.png

(Ignore the fact that I was lazy and reflected the entire refnum icon, I suggest only the corner is switched)

 

Open question #2:  while I am at it, why does a VI reference control have an icon which also contains a reference glyph?  Seems like a strange Droste effect going on.

Currently, all setup (any any other configurable items) for LabVIEW is stored in the LabVIEW folder hierarchy.  I would like to see it moved to the User folders.  This would provide several advantages:

 

  1. Multiple users can use LabVIEW without having to worry about reconfiguring someone else's setup.  This can be especially nice for the pallette menus, if different users like to "tweak" the default layout and create personal custom palltte menus.
  2. For people who use roaming profiles (such as me), whatever station I sit down at and log into will have the LabVIEW configuration I use on every system.  Any modifcation is automatically updated in my profile and "moves" with me from PC to PC. 
  3. It would provide an easier way to backup settings, since all customizable settings will be in one place, and not mixed in with LabVIEW installation files which aren't customizable.

In Unity (and also Blender I think, probably others) it is possible to adjust a numeric value by giving focus to the field and then dragging the mouse left or right. It works wonderfully.

 

Take a look at the video, it is pretty self explanatory. The nice thing is that when your cursor gets to the end of the screen it wraps around automatically (even if you have multiple monitors). It really works very well.

 

In LabVIEW it is not really possible to nicely scroll through a range of values of a control (at edit time or run time). This is the kind of thing that if you have never used it probably does not seem relevant. However it really does work nicely.

When creating a class hierarchy, I find it repetitive to have to create a New -> Class, then go in the class properties to set its inheritance. It would be nice to be able to create a new child class directly by right-clicking an existing .lvclass in the project explorer, and selecting New -> Child Class.

A Context Help annoyance: when I hover over an enum, it graciously provides a wealth of information about the datatype I have chosen for the enum. So much information, actually, that the information I'm after - the items - are cut off by the window. How about a shorthand data representation?

 

ContextHelpDatatype.png

So at the moment LabVIEW has the icon editor glphs stored in the following location.

 

<username>\Documents\LabVIEW Data\Glyphs

 

This is fine, until you login as another user.  Then you realize all of your icons are gone because LabVIEW installed the icons for the user that was logged in when LabVIEW was being installed.

 

Similarly a problem exists if I am distributing icon editor glyphs of my own.  I have a reuse package with a bunch of useful icons, and I have VIPM install them to that users folder.  The problem is if I login to a machine remotely, and perform the update as my user, then those icons are only installed for that user name, and not all users.

 

What this idea is for, is to have a shared folder for icon editor glyphs, which is used for all users on that PC.  Some place like

 

<LabVIEW Install>\Resources\Icon Editor Glyphs

 

would work, or...

 

<ProgramData>\National Instruments\Icon Editor Glyphs

 

Then icons can be installed in one folder, and be shared for all users.

The Open/Create/Replace file I/O primitive is pretty powerful.  It will check to see if the file is there for you, and, if not, create a new one.  I use the "Open or Create" option often when generating multiple delimited text files in long term tests.  When a new file is created, I need know so I can add a header, and I need to skip the header operation if the file is being appended.  Sure, I could check to see if the file exists before trying to open it, but then wouldn't that just make the power of the Open/Replace/Create function redundant?  Some operation took place based on my input to the "operation" terminal, and whether or not the file exists.  Unfortunately, I have no idea what that operation was, because the function doesn't tell me. Let me know if the Open/Create/Replace function created a new file so I can add my header.  

 

New File Feature.png

 

This is not without precedent.  For example, the "Obtain Queue" primitive has an option to create a new queue if a queue of the given name is not found.  It let's you know if the new queue was created:

 

created new.png