LabVIEW Idea Exchange

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

Let's be honest: The easiest way to make a large VI unreadable is to click on the “Clean Up Diagram” button (if you're smiling, that proves I'm right). My suggestion would be to give this button some artificial intelligence. Maybe give the customer the option of setting what is “good” and what is “bad” design. And if you like the challenge, let them train it themselves.

I got some code from a coworker that I'm building into an EXE.  There are a lot of references to user.lib (like 60 classes) and the folder structure that my coworker gave me makes some of the classes in user.lib too long and causes the exe to fail building.

 

I moved the stuff from user.lib to a root folder on my C drive and now I have to manually update every class because they aren't in user.lib.  Its pretty time consuming and I think just saying "Look in this directory for the missing files" would help tremendously for larger projects that need to get moved around.

Currently, if a new version of LabVIEW comes out with new shortcut menu plugin or a quick drop shortcut, that is written in LabVIEW the only way to have that added for older, still supported versions is to save them to for the oldest version, and copy them to the respective folders.

I wish, that the new features in these categories would be available trough download for the supported LabVIEW versions for everyone that has a license.

I would love, if these were separated into their own package, that is a dependency of the LabVIEW installer, but could be updated later from the package manager.

  • The default widths of the LLB Manager window and the Name column in the multicolumn listbox are too narrow (see the attached picture). They should be widened considerably so VI names are completely visible without having to resize the Name column and LLB Manager window.
  • The multicolumn listbox displaying items should be replaced by a regular single column listbox since only one column in the multicolumn listbox is actually used. This would allow for listbox scaling due to window size changes to work much better. Currently, when you resize the LLB manager window, the multicolumn listbox resizes as expected, but the width of the Name column doesn't change accordingly, which means you often have to manually resize the column when resizing the window.
  • You should be able to select multiple items in the listbox, such as VIs, and open them by pressing the Enter key (like the behavior in Windows File Explorer). The only way to open multiple items from the multicolumn listbox currently is to select them and then right click on them and select Open in the shortcut menu.

Many of the property accessor VI creation scripting is currently hard coded, or not easily changeable. There might be some conventions around how to name a property accessor, or about the usage of the error handling case structure inside the accessors. It would be nice, if there was a user settable option for these.

The things that I have to change often:

  • The read VI to Get, the Write VI to Set
  • Front panel controls and indicators to the default style
  • Removal of the error handling case structure
  • Renaming the Error in (no error) to error in (this might be solved by the global ini setting though)
  • Organizing the labels to the left for controls and right for indicators on the block diagram
  • Cleaning up the front panel, with the Ctrl+U shortcut, while there is a scripting code in the quick drop to arrange both the front panel and the block diagram, by default Ctrl+F

To fix most of these, I modified the scripting library, for all the templates and the global defaults containing the name for read and write VIs.

It would also be nice if we could override the scripting class as a whole, in order to customize the end result, without needing to go over trough VI again.

Bookmark manager is extremely useful for navigating large code bases. Every feature I have in flight, I've got marks for all my expected or in-progress work. Sometimes I'm using it to navigate through related chunks of code. So I'm constantly referencing it. But it gets buried behind windows, just like the equally useful Error List Window. I'm constantly reopening both, but the Error List Window has a quick hotkey to bring it to the front (ctrl+L). I'm finding more and more that I want Bookmark Manager to have a hotkey too. 

 

I've edited my personal menus to have "ctrl+," as the shortcut key, but I wish I could grab ctrl+k as a better mnemonic. Ctrl+k is currently paired with ctrl+j for bring to front and back... and those are keys that cannot be reassigned by users because they aren't main menu items. Personally, I'd place higher priority on accessing Bookmark Manager than reordering zplane, but I understand I might not be in the majority there. 

 

Anyway, the idea is for some standard key to be assigned to the View>>Bookmark Manager menu item. 

Quick Drop (Ctrl+Space) is often used to work with a selected VI (e.g. Ctrl+P replacement). The Quick Drop dialog window opens with blank text box. Default that text box to the VI name if one is selected when Quick Drop is opened. That text should be pre-selected so that typing replaces it (no extra keystrokes for backward compatibility). Furthermore, it would be extra nice if the selected VI was automatically highlighted in the list.

QDP.jpg

It would be better if we could probe the auto indexed tunnel while the for loop is still executing.

 

If the For Loop is running for a huge number of iterations and if the Auto-indexed tunnel is having a condition. Then to check the values in the conditional auto-indexed array should be made possible even when the for loop is still running for debugging purpose.

 

If something like the below can be done it will be helpful in debugging.

For Loop Tunnel Probe.png

Hello,

 

Actually the LabVIEW project Build Specification allow to create an old style DLL shared Library.

This kind of DLL is not so user friendly to use, because you have to define the DLL function prototypes, when you want to use them  ...  (Import, declare ... )

 

It would be nice, to be able to create a .Net DLL shared Library which is more easy to interface. (Without declare, import ...)

 

Build specification.png

The DotNet DLLs can be used without having to create Import declaration.

The self documentation of DotNet DLLs don't need to declare all function prototypes when you want to use them.

 

My need is :

- To create LabVIEW drivers libraries

- To create Packed libraries, from these librairies, to be used by LabVIEW projects or TestStand sequences.

- To create DLL from the same libraries, to be used by dotNet projects

 

Thanks a lot for reading.

 

Manu.Net  

Particularly for refactoring code, it would be nice to have a way to only apply changes to re-parented items if they already have a library/class layer in their icon. With other smaller utility VIs, using the Apply Icon To VIs action causes the layer to be added and then I have to go through and eliminate the created layer so the icons look correct again. I'm fine with that as the default behavior but I'd like to have an option to only update icons that already have the NI_Library icon layer for these kind of updates.

Would it be possible to display the data over each wire when running a LabVIEW programm without having to place the probe where you want it or enable the highlight?

You could quickly look at the data flow over the program and save a lot of time debugging.

What do you think about this idea?

 

Thanks

 

Since LabVIEW 2020 selecting "Show Case" from the right-click menu of a case or event structure will call a plugin that lists and allows you to filter/search the list of matching cases. That is great.

 

Figuring out that this is what you need to do to find one or multiple cases though is less intuitive. I would argue that most users would start by looking for a phrase like "Find Case", or "Find Case(s)". That is what a similar action is called when we e.g. right-click on a control and try to find its terminal, local(s) etc - we select "Find", then Terminal/Reference etc...

 

Sub-idea: Leaving the list of found matches open (if there are multiple) even though you select one of them could often be beneficial.There is a great plugin from wiebe@CARYA that lists event(s) associated with a given front panel item which does it that way. It makes it easier to go through all the found cases if needed, instead of having to redo the search. And of course it places itself in the Find submenu; making it a "Find Event" option(!).

 

 

Flatpak is a distribution-agnostic package manager, as long as Flatpak is installed on the system, the same Flatpak package can be installed on any distro. A Flatpak package contains not only the application, but the libraries needed to run it.

 

So, if NI creates flatpak package with LV and all of its dependencies, then we would have a LV that it's able to run in any distro! Without to having the hassle to manually support every major distro or (like at the moment) only supporting a few of them.

I've used NI Packages over 5 years now. Early on in my time with NIPKGs, Allen Hsu said that NI's recommendation was to have  "Pool" directory where all ni packages are located. Then have a separate directory for each feed. In effect, feeds act as "views" of the pool. I've adopted this model and used it with success.

 

However in the Build Spec, there is no option of where to place the built package. The build package always is placed in the same directory as the feed files.

Chris_Cilino_0-1645456274680.png

 

Package Output directory under "information" is where the instance of the package is temporarily exported before it is moved to the location referenced by the feed. 

 

In the same way NI Package Feed Manager allows you to specify a location of the ni package different that than the feed I'd like to see the same option exposed in the build spec ui. The NIPM api already exists... it just need to be exposed in the UI and persisted to the Project xml.

 

Chris_Cilino_1-1645456447751.png

 

if only LabVIEW can read and write PDF files, since it is already an open format. needless to say for the function of writing in report generation, but reading from PDF can also provide: text, picture or even CAD data that can then be used from automated mass data entry, QC vision inspection (CAD vs fabricated), augmented reality visualization of measurements (temperature, stress, vibration, etc) and much more...

 

if only...

When working with multiple projects at a time I try to keep all of one projects windows on my primary display and all of the windows for the other project on a secondary display.  This can become tedious to move every window I open.  I know each VI remembers its' last location and opens there but it would be great if there was an override setting.

 

So for instance, when I open a project, there could be an option in the Project menu for "Open project windows on this display" that would then force any windows related to that project to stay on the same display.

 

Randy B

 

EDIT:  An alternative which might be easier to implement would be to add an option (Gather Project Windows on This Display) in the Window menu that would move all of the Projects currently open windows to the active display.

When creating a real-time app (.rtexe) intended to be run on multiple targets with target-relative references, the recommended technique is to create a build with a IP address of 0.0.0.0; then, using some other utility outside of the LabVIEW environment, copy the executable to the startup folder on the target.

 

Given that, it would seem reasonable to create a feature within the LabVIEW Project Explorer that allows for direct deployment to a specific RT target or targets from the right-click menu instead of having no option to select an alternate target(s).  If setting the IP address in the project to 0.0.0.0 is the recommended technique for creating a target-relative (versus absolute) executable, then LabVIEW Project Explorer should be able to key off of this value to take a different and more appropriate action.

 

The same would be true of the Set as startup and Run as startup right-click menu options.

 

 

When connecting to an RT target from the LabVIEW Project view, LabVIEW RT automatically makes changes to the lvrt.conf file's startup app settings. I’ve never really understood why it needs to do that. I suppose that for some users, maybe less experienced users, this action enforces some sort of consistency that may help to avert potential tech support issues in some scenarios. However, in my case, it is an annoyance that I have to manage.

In my opinion, the LabVIEW Project view should not alter the startup app settings in the lvrt.conf file unless you use the Deploy feature from the menu. (For PharLap-based controllers, it would affect the ni-rt-.ini file).  If you use the Deploy feature, then that behavior may likely make sense.

NI should consider either eliminating the automatic edit to lvrt.conf when connecting to an RT target from the Project view and/or editing lvrt.conf only if using the Deploy feature is used.  If for some reason NI feels that the behavior is justified for some technical reason (and I would be curious to know what that reason is), what I would like to see in lieu of that is a LabVIEW option (checkbox setting) that gives the user the ability to prevent that automatic edit.

 

Currently, the specific changes that connecting to an RT target makes to the lvrt.conf file are:

  1. It changes the name of the startup app back to the default name of startup.rtexe.
  2. It changes the value of the key RTTarget.LaunchAppAtBoot to FALSE.

Deploying a library to an RT target should also not alter the startup app settings.

If you want to select, say, a cluster inside an array, you have a really narrow range of pixels to target. If you click in the body of the cluster, it selects the array. If you have a cluster in a cluster, it doesn't select anything to click blank space inside the cluster.

 

Attached file indicates what I'm talking about. If you want the green line, that's pretty narrow. Many people may be able to handle that degree of precision. But some people may find it hard to point that precisely.

 

SO, it'd be nice if you could select anything in the containment hierarchy, and discretely adjust your way to the right thing. I suggest that tapping shift would select the parent of the current selection. Tapping ctrl would select the child of the current selection that the mouse is hovering over.

 

Like, select the inner array and tap shift, and the selection is now the cluster it's in.

 

Showing this as an option in the contextual menu, with the shortcut indicated to the right, would be a good way to introduce this to the user -  "select parent (shift)", "select child 'childName' (ctrl)"

I am extending on an old idea, but the implementation is different than the OP so I made this a new idea:

https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Decimation-feature-built-into-the-graph-indicators/idi-p/1109956

 

What I would want would be an XY graph with automatic disk buffering and on screen decimation.  Imagine this, I drop a super duper large data sets XY graph.  Then I start sending data in chunks of XY pairs to the graph (updating the graph at 10 hz while acquisition is running at +5000Hz).  We are acquiring lots of high rate data.  The user wants to see XX seconds on screen, probably 60 seconds, 120 seconds, or maybe 10 or 30 minutes, whatever.  That standard plot width in time is defined as a property of the plot.  So now data flows in and is buffered to a temp TDMS file on disk with only the last XX seconds of data showing on the graph.  The user can specify a file location for the plot buffers in the plot properties (read only at runtime). 

 

We decimate the incoming data as follows:

  • Calculate the maximum possible pixel width of the graph for the largest single attached monitor
  • Divide the standard display width in time by the max pixel width to calculate the decimation interval
  • Buffer incoming data in RAM and calculate the min and max value over the time interval that corresponds to one pixel width.  Write both the full rate data to the temp TDMS and the time stamped min and max values at the decimation interval
  • Plot a vertical line filling from the min to max value at each decimation interval
  • Incoming data will always be decimated at the standard rate with decimated data and full rate data saved to file
  • In most use, the user will only watch data streaming to the XY graph without interaction.  In some cases, they may grab an X scroll bar and scroll back in time.  In that case the graph displays the previously decimated values so that disk read and processing in minimized for the scroll back request.
  • If the user pauses the graph update, they can zoom in on X.  In that case, graph would rapidly re-zoom on the decimated envelope of data.  In the background, the raw data will be read from the TDMS and re-decimated for the current graph x range and pixel width and the now less decimated data will be enveloped on screen to replace the prior decimated envelope.  The user can carry on zooming in in this manner until there is at least one vertical line of pixels for every data point at which point the user sees individual points and not an envelope between the min and max values.
  • Temp TDMS files are cleared when the graph is closed. 
  • The developer can opt to clear out the specified temp location on each launch in case a file was left on disk due to a crash.

This arrangement would allow unlimited zooming and graphing of large datasets without writing excessive data to the UI indicator or trying to hold excessive data in RAM.  It would allow a user to scroll back over days of data easily and safely.  The user would also have access to view the high rate data should they need to.