LabVIEW Idea Exchange

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

Replacing a cluster constant should not alter its 'View Cluster As Icon' setting.

 

Combined Image.pngCombined Image.png

 

The bug manifests itself regardless of the method used to replace the constant: via QuickDrop Ctrl + P tool or via right-click >> Replace menu.

Add a note here if the VI is dynamic dispatch to aid in code readability:

avogadro5_0-1776205743247.pngavogadro5_0-1776205743247.png

 

In large-scale LabVIEW projects, performing a text search across the entire project hierarchy can take a significant amount of time to complete, especially when the codebase contains numerous VIs, libraries, and dependencies. Currently, the search results can be browsed(doble click and locate the search result in the code) only after the entire search operation has finished.

It would be highly beneficial if the search results could be browsed incrementally while the search is still in progress. In many practical cases, the desired result appears early in the search process. Allowing users to review and navigate through the partial results as they are discovered would enable them to quickly locate the needed item without waiting for the full search to complete. If the relevant result is found early, the user could simply stop the search operation, thereby saving valuable time and improving overall productivity when working with large LabVIEW codebases.

 

Sample.pngSample.png

 

Please add your opinion.

 

Regards,

Adarsha Pakala

LabVIEW from 2006

CLA From 2014 

 

Within the VISA Read and VISA Write nodes, you can currently choose the Synchronous I/O mode for each individual read or write operation by selecting either Asynchronous or Synchronous (see attached screenshot).

 

It would be helpful to allow this setting to be configured at the project level rather than requiring it to be set on every VISA Read and VISA Write node. While there are certainly edge cases where a project is best served with a mix of synchronous and asynchronous VISA operations, the vast majority of applications would best use one mode consistently throughout the project.

 

A related enhancement would be to allow the default value for this setting to be configured in the LabVIEW Options dialog, rather than always defaulting to Asynchronous.

 

Another possibility would be to change the default for new LabVIEW code to Synchronous. Although synchronous communication can be slightly slower in some situations, it is generally more reliable. Since LabVIEW is used primarily in test applications, reliability is likely more important than maximizing communication speed. 

Problem

I find myself wanting to Ctrl+Drag to add/remove diagram space INSIDE of a structure without actually resizing the structure itself AND without modifying any other frames – I just want to clean up the visible diagram that I am working on.

However, this is not how LabVIEW currently works – the structure itself is also resized, and the space within other frames of the structure are resized as well (outward/inward from the same point as the Ctrl+Drag action), which can mess up both the code in other frames as well as the code outside the structure.

Proposed Solutions

Option 1: Lock Structure Size Add the ability to lock the size of structures (or perhaps only lock them from growing during creating/removing space), so that I can use Ctrl+Drag to create/remove space without impacting the structure and the code around it. This would be similar to "Auto Grow" but would perhaps be an "Allow Grow" or "Lock Size" setting.

Option 2: Modifier Key Use the Shift modifier during Ctrl+Drag and Ctrl+Alt+Drag to NOT resize the containing structure. This would maintain backward compatibility while adding the new functionality.

Why This Matters

When working on complex VIs with multiple frames in structures, it's frustrating to have simple diagram space cleanup operations affect the entire structure and surrounding code. This feature would allow developers to better organize/tidy the code within individual frames without the ripple effect of resizing everything (in other frames and outside the structure).

 

When working with classes and interfaces, I often use the right-click option on classes to navigate to their parent class.  I regularly find myself trying to do this with classes that inherit from interfaces too, but...this isn't made easy.  It'd be nice if there was a right-click menu option on classes to navigate to their parent interface(s):

 

Untitled.jpgUntitled.jpg

The Build status window should display the amount of time that has elapsed since the build started. The two screenshots below show a possible implementation.

1 (edited).png1 (edited).png

 

2 (edited).png2 (edited).png

Currently, a malleable VI will not show coercion dots for any case (that I can find). It would be nice if it would show a coercion dot if it leads to one inside the vim:

 

BertMcMahan_0-1775166268652.pngBertMcMahan_0-1775166268652.png

 

 

(taken from avogadro5's post here)

 

I would propose that ANY coercion happening inside the VIM would lead to the dot, so even if the wire split and went to one non-coerced terminal and one coerced terminal, you'd still see the dot.

Current Behavior of LabVIEW
Currently, the error messages that emerge from bad call to a Property Node or Invoke Node only state that the error occurred in a property node or invoke node.

 

User Need

As a user of LabVIEW, it saves me considerable time in development/debugging, when I can precisely know why and where in the code an error occurred , so that I can get on with the actual work of fixing the bug in my own code/logic.


Problem For Users 

The current behavior, described above, makes it impossible to know (without placing probes and retaining wire values):

A) Which Property Node or Invoke Node actually generated the error (in cases where there are many of such nodes)? Again, all we know is that some Property/Invoke Node on the block diagram of the VI raised the error.

 

B) Which specific Property actually caused the error, in cases where a Property Node has multiple properties that it is reading and/or writing.  Again, all we know is that the error occurred inside a Property Node.


Proposed Solution

Error message for invoke/property nodes should state:

- the Name of the Method or Property where the error occurred
- the Class Name of the VI Server Object (if available)

- the Object Refnum value (e.g. the hex value of the object reference)

- possibly even (only if running in the editor and not the runtime environment) the VI Server Scripting UID of the GObject node on the Block Diagram for super-fast debugging with a "fancy error dialog of the future" (TM) whose LV Idea Exchange post with undoubtedly be coming soon...

Starting from LV 2023 Q1, the terminals height of some nodes was harmonized to 16 pixels to improve diagram readability by reducing the amount of needed wire bends.

 

Some candidates for this harmonization were omitted though:

 - Data nodes of timed structures (timed loop, timed sequence).

 - I think pretty much all of FPGA nodes (IO nodes / methods / properties, FIFO / memory / register / handshake methods, IP integration, high-troughput math nodes, ...).

 

Example with a Timed Loop:

raphschru_1-1759327735617.pngraphschru_1-1759327735617.png

 

The idea is to also allow RT and FPGA developments to benefit from this harmonization.

I really like the drag-a-box-then-Ctrl-Space structures feature we got. It would improve my coding speed if it could respect bare wires aswell.

To my knowledge we can't solve this ourselves, so it's up to NI.

I suggest to make it the default option or to make it respect wires when clicking Ctrl-Shift-Space instead.

strcutures.gifstrcutures.gif

 

A very common task when operating with 2D pictures are mouse down/move events where we are interested which pixel was just clicked. While there is an event data node for the clicked coordinates these are relative to the front panel and translating them into image pixel coordinates is a chore and requires jumping through flaming hoops tweaks. (i.e. label yes/no? zoom factor? etc.)

 

However, there is a "Mouse" property for 2D images that has all the information directly in pixel coordinates and mouse button states. Currently, we need to read that property inside the mouse event to easily get the information we always (always!!!) want in such an event!

 

It would be cleaner if mouse events on pictures would output these mouse properties directly as an additional event data node.

 

Two clear advantages:

 

  • Cleaner code for those who know how to work with this property.
  • Stop sending newbies on a snipe hunt trying to figure out how to translate the current "coords" event data node into something useful for the intended task.

Here is an example where this idea would have helped

 

Here's a picture for the graphical thinkers!

 

altenbach_0-1748105937806.pngaltenbach_0-1748105937806.png

 

Thanks for voting!

 

 

 

 

 

The window for selecting interface inheritance isn't resizable -- and is rather painful to use as a result since interface names from dependency libraries are almost always going to be long. Allowing this window to be resizable would be a simple way to make this more pleasant.

 

_carl_0-1771513150988.png_carl_0-1771513150988.png

 

 

(Adding a search/filter option would also be great, along with just generally making all windows resizable, but that's a bigger ask, and has been requested elsewhere.) 

Another modernization feature (not on this comprehensive list already...) that would be nice to see in XY graphs:
 
We currently have to select an interpolation method per plot. Instead I would like to be able to say that if the next sample is less than a given delta apart from the previous it should draw a diagonal between the points, but if the delta is larger (due to deadband filtering e.g.) it should draw the previous sample value as a flat line until the new sample...
 
This could be added as an option in the manual selection method that visually showed a mix and had a name like dynamic or conditional (none of the options currently have a descriptive name or tip strip by the way so that is an idea as well; with an enum input for the property...). If conditional was chosen it could pop up a dialog asking for a definition of the condition. Similarily this would have to be a new interpolation option and an input of a threshold or list of such to set up the conditions. Just having two methods with a threshold would normally suffice...
graph interpolation.pnggraph interpolation.png
 
Yes, we can off course achieve this today by doing the interpolation prior to feeding the data to the graph, but building this into the graph will simplify and seriously optimize the process.
 
 
 

Quiztus2_0-1777992326142.pngQuiztus2_0-1777992326142.png


The layering of values shown during highlight execution mode should take the data type into account. I suggest moving types whose values do not change—such as refnum or lvclass—to the back of the display stack. This should also apply to ordinary VIs, similar to how property nodes are already handled. Otherwise values worth to know are hidden by actually useless info.

If you set up Windows 11 as Microsoft suggests (at your peril), your user Documents folder will be synchronized to OneDrive. Unfortunately this is also the location of the default data directory for LabVIEW. Various side effects ensue but the one I've run into is the compiled object cache, a SQLite database that can get into the gigabytes, winds up getting synchronized which is a complete waste of bandwidth.

 

To deal with this I think there should be a warning dialog with "don't show again" checkbox when LabVIEW detects the default data directory is in a synchronized folder to prompt the user to choose a different location.

Currently each error in terminal contains the following description: "<B>error in</B> can accept error information wired from VIs previously called. Use this information to decide if any functionality should be bypassed in the event of errors from other VIs. Right-click the <B>error in</B> control on the front panel and select <B>Explain Error</B> or <B>Explain Warning</B> from the shortcut menu for more information about the error." This occupies 367 characters (bytes).

 

Currently each error out terminal contains the following description: "<B>error out</B> passes error or warning information out of a VI to be used by other VIs. Right-click the <B>error out</B> indicator on the front panel and select <B>Explain Error</B> or <B>Explain Warning</B> from the shortcut menu for more information about the error." This occupies 271 characters (bytes).

 

This applies to terminals of all styles: Classic, Modern, Silver, Fuse Design System.

 

This adds a total of 638 characters (0.62 KB) to each and every VI that uses a pair of error in/out terminals, which is probably a majority of VIs in LabVIEW.

 

The descriptions appear in the Context Help window and can be useful to beginners. But this benefit is not worth 638 bytes of space in so many VIs. The contents of the descriptions should be mentioned in training material such as LabVIEW Core 1 or the LabVIEW Help.


This proposal is to remove (clear) the error in and error out descriptions, such that VIs are "slimmer" and codebases are smaller.

 

Combined.pngCombined.png

Existing right click menu during wiring provides options to create terminals or wire branches.   Proposing a feature to add a cluster unbundle terminal when wiring clusters, that places and wires the terminal with the desired element reference.

Robzilla_0-1762307860683.pngRobzilla_0-1762307860683.png

 

The QuickDrop insert shortcut (Ctrl + I) is extremely useful already. The following enhancements would make it even more so.

Enhancement 1.pngEnhancement 1.png

 

 

Enhancement 2.pngEnhancement 2.png

 

 

 

Enhancement 3.pngEnhancement 3.png

What is a strictly-typed reference?

 

A strictly-typed reference is a kind of reference whose type descriptor contains an inner, user-specified data type.

For example, a queue is a strictly-typed reference because it contains the data type for its elements, specified when creating the queue.

 

Here is a non-exhaustive list of such reference types:

 - Queue

 - Notifier

 - User event

 - DVR

 - Datalog file reference

 - Strictly-typed control refnum

 - Strictly-typed VI refnum

 - Shared variable

 - Network stream (reader/writer)

 - RT FIFO

 - FPGA IO / register / memory / FIFO / handshake

 - ...

 

Idea:

 

Add a new primitive that would output the inner data type of any strictly-typed reference.

Here is a design example of the primitive, which could be named "Get Contained Data Type of Strictly-Typed Reference":

raphschru_0-1755995515580.pngraphschru_0-1755995515580.png

It would work for all the strictly-typed references mentioned above.

 

Motivations:

 

The implementation of malleable VIs is sometimes limited (or made complicated) by the fact that we miss some basic "type operators", such as getting the contained data type of a strictly-typed reference. While this missing function could be implemented using some tricks for most strictly-typed reference types, it is for example impossible for user events (See this thread for more details).

 

Typical application:

 

A malleable VI that takes a user event (for its type) and outputs a newly created refnum with the same contained data type:

raphschru_1-1755996509116.pngraphschru_1-1755996509116.png

This simple code is currently impossible in the general case due to the nature of user events.

 

Remarks:

 

1. The output terminal of this primitive will have to be named exactly as the contained data type, which is crucial for user events.

2. The output would have the LabVIEW default value for the data type (False for booleans, 0 for numerics, "" for strings, ...).

3. The primitive could be placed in a dedicated "Malleable VI Tools" palette.

4. In case the FPGA-specific implementation creates a dependency to the FPGA module, we could have a separate primitive just for FPGA (and also for RT if required).

 

What do you think?

 

Regards,

Raphaël.