LabVIEW Idea Exchange

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

Scroll bar should be disabled if all elements are visible! Kudo here to get a big bang for the buck sooner than the 2nd in TOP KUDOED IDEAS from 2013 with 600+ kudos (https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Indicate-that-array-constant-contains-more-elements-than/idi-p/2299860). It points out that the scroll bars are not a viable method because it looks the same when all elements are visible. That is EASY to fix; disable the scroll bar if ALL elements are visible! Currently it is disabled only if an empty element is visible. Perhaps the behavior was originally by design like block diagram scroll bars as mentioned in the reason that the following was Declined, '...without this "boundary", it is impossible to create more space...' but constants can easily be stretched by border handles to create more elements (https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Make-window-scroll-bars-reflect-actual-contents-of-window/idi-p/1844127).

 

dwb_0-1703104642443.png

 

Many or most VIs that ship with LabVIEW have their protection set to Unlocked (no password). The screenshot below shows a selection of such VIs.

1.png

 

It would be much better if the protection of vi.lib VIs was set to "Locked (no password)", to prevent accidental modification.

2.png

 

It seems very risky for built-in VIs to be open to modification, especially to accidental modification.

 

Scenario 1: Developer A is developing an application on their machine which contains modified vi.lib VIs which were accidentally modified as part of work on previous projects. They build an application which passes validation and starts to be used in production. All of the developer's source code is committed to a source code repository. Developer A leaves the company. Six months later Developer B is asked to pull the code from the repository and add a minor improvement. The application behaves very differently when Developer B builds it on their machine. A long and complicated troubleshooting session later, Developer B concludes that the different behaviour was likely caused by modified vi.lib VIs on Developer A's machine. Developer B cannot be sure, because Developer A's machine was wiped when they left, so there is no way to unequivocally prove the conclusion.

 

Scenario 2: A team of developers builds a test system for a defence application. The code is completed, and the test system is put through a thorough  commissioning and validation process that involves testing dozens of known good units and known bad units. The validation process takes three weeks to complete. Management plans to not have to run the whole validation process for future minor changes. Instead they will ask the development team to perform code reviews and record notes for each minor change. Revalidation is not necessary if the code reviewers agree that the changes are non-functional, for example, the wording was changed in a dialogue message, or a logo was added to the UI. This sounds like a great plan, but is technically unsafe. Strictly speaking the whole revalidation process would have to be rerun, even for minor changes, due to the fact that not all of the source code is visible in the repository (there is uncontrolled source code in vi.lib that could have been modified in between builds).

Essentially I don't think it's safe for an app to contain source code that is not visible or tracked in a repository.

I can't think of a simple, quick solution to the concerns above, but having all vi.lib VIs set to "Locked (no password)" could be a quick first step towards reducing the likelihood of this issue. Developers would at least have to consciously edit vi.lib VIs, rather than doing it accidentally which can happen now. Of course, a malicious actor could still wreak havoc by editing a few inconspicuous vi.lib VIs.

The risk would be reduced further if the vi.lib VIs were password-protected. This would come at the expense of not being able to view the source code of native VIs, something which I find useful. Therefore, I personally would prefer "Locked (no password)" to password-protected, but I might prefer password-protected to unlocked.

Similar concerns apply to non-NI third-party libraries that install in vi.lib, user.lib or instr.lib, for example the extremely useful OpenG libraries. These too are examples of uncontrolled source code. For this reason some developers I worked with preferred to copy the OpenG and other libraries into the project repository (this involves a tedious job of opening each library VI and relinking it to the other library VIs in their new location).


This idea is similar but potentially easier to implement than the following idea: Make the VI's from the "vi.lib" Read-only - NI Community

 

Thanks

I find the process of initializing Maps in LabVIEW to be unintuitive and inconsistent with the initialization process for other similar concepts (such as, say, arrays).  After some initial trial and error, the process I've settled into for creating maps is to drop a map constant, and then to drag and drop the appropriate data types onto it for my key and value. I first looked for an Initialize Map VI (which doesn't exist) and then tried to create the constant by wiring up appropriate types to an "Insert Into Map" and creating the constant from there -- but this doesn't work as expected because the terminals don't update appropriately.

 

What drove me to coming to the forum today though, was that in creating a malleable VI with a map inside of it, I found a breaking point for the "drop constant and drag values into it" approach. Since the map data types need to be dynamic to support malleable VIs, I've had to get creative to get around that...

 

_carl_1-1613065330054.png

 

 

 

 

If you have a missing VI, you can select "replace with" and you'll be brought to a file dialog so you can point the IDE to the file.

ReplaceWith.png

I'd like the same functionality with regular files. Currently the "Replace with..." menu option doesn't appear

No Replace.png

 

The Tree- Control and the Multicolumn Listbox support the presentation of a Symbols per row. But there are a lot of cases where there is needed more than one symbol per row. One very common scenario is the display of various states (Calculation completed: Checkmark; Results written to file: Checkmark; Assigned Application to open file: App-Icon...). NI does this already in the "Example Finder" window, so it is obvious there is a need for this feature.

I think it is a good practice to hold a pool of symbols, attached to the control, like NI does currently with the Trees and MCLBs. And for performance reasons there could still be the possibility to determine the columns to be capable to display symbols.

So from the LabVIEW programmers point of view there could be added the following properties / methods:

  • Symbol-Displayable Colums (property, read/write), (1D Array I32): Gets or Sets the indices of colums, which can show symbols and reserve space when the property "Visible Items->Symbols Visible" is set to true
  • Active Symbol- Column (property, read/write), (I32): Gets or Sets the Column-No which has focus for the next "Item Symbols"-property operation.
  • Set Column- Symbols (method, takes an I32 as Index for the Column, takes a 1D-Array of  I32 as Symbol-pool indices): shortcut for setting the Property "Active Symbol- Column" followed by setting the Property "Item Symbols".
  • Get Column- Symbols (method, takes an I32 as Index for the Column, returns a 1D-Array of  I32 as Symbol-pool indices): shortcut for setting the Property "Active Symbol- Column" followed by reading the Property "Item Symbols".

This should provide compatibility to the current handling of symbols since the property "Symbol-Displayable Colums" defaults to [0], so if "Item Symbols" is read or written to, it is meant to use the first column, which is status quo.

The Match Regular Expression is worth it's weight in gold, once you get used to it. There is some functionality missing though:

 

1) The begin\end positions of the capturing groups are not available. These positions can be more useful than the matching strings.

2) It's unnecessary slow when the string results are not needed.

3) The results are output terminals, making it hard to adapt to dynamic inputs. A results array is sometimes more convenient. For example a pattern is entered in a GUI.

 

I use the attached VI (based on the same API) a lot, to bypass these limitations. I think it would be useful in the LabVIEW palette, under String>Advanced String Functions.

Match Regular Expression (VI Version).png

In LabVIEW we can dynamically run a VI in a few ways:

a) If it's not running Top Level VI or if the VI re-entrant with the Run method.

b) Already running as sub VI, with Call By Reference.

c) Make a new VI and drop the (running) sub VI on the diagram.

 

Downside of a) is we can't always make sub VI's re-entrant, but still want to call it by reference. Downside of b) is we need to know the strict type (connector pane). Downside of c) is we might end up with a lot of VI's just to function as Top Level VI for the sub VI's and it doesn't work in executables.

 

I like to propose a method, so we can dynamically call a sub VI without knowing the strict type.

This is all I want.png

Using it, we enable LV to dynamically run sub VI's while setting\getting it's parameters by name.

 

For sub VI's (already running) this method will act as Top Level VI. For Top Level VI's it will fail unless it's idle.

 

 

 

(Please ignore my first confusing attempt)

Searched the exchange and found a similar idea but it didn't contain pictures so maybe that's why it didn't receive very many kudos. So here is another attempt at what I think would be a very useful addition to the LabVIEW IDE.

 

Occassionally, I would like to find where a specific enum value is used throughout a project. If I use the right-click Find | Callers popup menu, I obtain a list of VIs that use the enum but no indication of how many times it's used or what values are associated with an instance.

 

Very simple example:

ProjectWithPopup.png

The project subVI front panel and block diagrams:

VIs.png

Find caller results:

FindCallersPopupResults.png

 

It would be nice to have some way of knowing what enum values are being used and have the ability to jump directly to the instance. Maybe a Find Callers that displays enum values:

FindCallersWithValue.png

There has been always the need of opening the file/folder location in windows explorer, but I guess every application uses the trick of doing it through "System Exec.vi" or "Open URL" or Win32 API.  There is no LabVIEW native function to directly open folder/files in windows explorer directly.

 

Below threads discusses various methods to achieve this...

http://forums.ni.com/t5/LabVIEW/Use-LabVIEW-to-open-Windows-Explorer-to-a-certain-directory/td-p/898...

https://lavag.org/topic/11395-opening-windows-explorer-to-a-specific-directory/

https://lavag.org/topic/18444-open-windows-folder/

https://decibel.ni.com/content/docs/DOC-14633

https://decibel.ni.com/content/docs/DOC-22461

 

It would be nice if LabVIEW comes with some native function like below

 

File Folder Idea Exchange.png

When we try to copy and paste a element in the cluster constant its not replacing its added as the new element.but it working well in the control and indicator

 

The figure explains the problem

Replace elements in cluster constant.png

I'm very often in this situation:

Screenshot from 2015-05-25 11:18:57.png Screenshot from 2015-05-25 11:18:49.png

 

At some point I realize that I have to change somehow my output indicator, say adding an array dimension, changing an element type, adding a cluster element, whatever.

 

Screenshot from 2015-05-25 11:22:22.png

 

Well, if I could just right click and choose "Adapt Indicator to wire"....

 

My current best general workaround is the following:

 

  1. Go to the wire source (may be far away on the BD) and right-click "Create Indicator"
  2. Select the newly created indicator and double click it to select it on the FP
  3. Ctrl-X cuts the new FP indicator
  4. Select the old indicator on the FP (or go back to BD, double click...)
  5. Ctrl-V replaces the old with the new indicator but leaves it on connector
  6. Go back to the BD and rewire to the proper source/ remove broken wires

If the indicator I wanted to modify was, additionally, Hidden, there are a couple of steps more of Show/Hide... And if instead I invested in cosmetics of the indicator, I have to redo that again from scratch...

 Getting a value change event on a shared variables seems to me like something that ought to be expected "out of the box" in LabVIEW.  Polling shared variables for changes is taxing on resources, and such an architecture is generally frowned upon by NI and the LabVIEW community for things like front panel interactions and the like.  Why, then, should we expect to pay extra to deploy applications which such an architecture for interacting with shared variables?

 

I completely understand the extra license for the DSC run-time, as there are numerous other terrific tools included.  It just seems to me that the SV value change events are one thing that should be freely available for deployment to everyone already paying for the application builder.

 

Thanks!

The current bluetooth VIs (as of LV 2014) don't support communication with the new protocol Bluetooth 4.0, referred as Bluetooth Low Energy (or Bluetooth Smart).

 

New VIs dedicated to BLE or adding support on current VIs is needed for all developers of this new bluetooth stack.

 

Simple idea. The Bookmark Manager would be much more useful if there was a timestamp of when each bookmark was created.

 

Admittiedly, the user could just include this in the note but....well....that seems slightly long winded.

 

I find the Bookmark Maanger very useful already but I reckon this would certainly improve it.

 

Apologies if this has been logged already.

After you selected a shared var, local var, ... it should be possible to use a shortcut (ctrl+x) to switch between the read and write option

When you first create a unit test an lvtest file is created next to the VI under test in both the project and on disk.

 

In order to keep things tidy I like to move my lvtest files under a single tests folder but this move on disk requires you to relink each test to the VI under test, even if moved from within the project.

 

This is extremely tedious, it should be possible to move them in the project without having to relink every time.

You don't need to look too deep to find examples of TDMS API "memory leaks". These are not leaks but rather the TDMS API holding meta-data in memory related to the structure of the TDMS file in case you need to read from the file.

 

The biggest issues with this is that it makes TDMS a bad choice for RT applications where you make cause this index to build through file fragmentation however in most RT applications you are only writing. On investigating whether it would be possible to make an RT compatible API (in native LV) it appears that there is no reason for this to increase in a write only mode.

 

So the request is a write only API or flag in the existing API. This should prevent memory build up in loggers.

 

There is a design decision around whether to use a seperate API or have errors thrown if you attempt to read, I think I would be open to either but I think the error would work best to allow easy upgrade of existing applications.

The new LabVIEW bookmark manager in 2013 is nice but one thing it does not do is scan for bookmarks, inside the dependencies of an open project.  I understand that NI wants to make the loading of bookmarks quick so they likely limited it to not include the dependencies to make the loading faster because it has fewer VIs to scan.  But some times a project will have a majority of the code under the dependencies section.

 

I think it would be nice if there were an option to load bookmarks under dependencies, but not vi.lib, and user.lib to help keep the number of VIs to scan to a minimum.

 

Because of the awesome API support for multiple bookmark managers, I have made a new bookmark manager that does as I describe posted here.

The same Menu Shortcut (Control-E by default) is currently used for both switching between Front Panel and Block Diagrams in VIs, and for switching between Items and Files views in the Project Explorer.  Because these are linked, it is not possible to change/remove only one shortcut.  Like others, if you have a large project, switching views can take a long time, and it's easy to mistakenly hit it when the Project Explorer has focus, rather than the VI you think you're looking at.

 

ControlE.png

 

The idea is to separate the Shortcuts used for these two operations.  This matches several of the comments on that previous idea (but not the idea itself).

A longstanding issue with the "active plot" property is that is throws an error if fewer plots currently exist. Conversely, if we wire data containing more plots, the graph automatically adapts to that.

 

The main problem with this is that the order of operations matters. We need to write the value first, followed by the active plot properties. Many times we already know what kind of plots we want (color, name, etc.), even if one of the plots is only added in a later step or the terminal is written a nanosecond later due to code scheduling. Workarounds mean excessive sequentialization because we need to enforce strict order: (1) write data (2) update plot properties.

 

The current behavior is annoying, and there are many forum examples where that was the cause of the problem (example).

 

Two suggestions can address this:

 

(1) if an active plot property is written, and that plot does not exist yet datawise, it should be created automatically and the node returns without error. (Of course all other missing plots up to that number need to be created too, they can have default properties).

 

(2) Maybe there should also be a property for "number of plots" than can be written to define the number of plots.