LabVIEW Idea Exchange

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

Current state:

 

Suppose you have some neat code that bundles/unbundles elements from either a typedef-ed cluster or a class. You even provided free space in case some names are changed in the future:

raphschru_17-1769453321291.png

 

But then, when you change an element's name to a longer one, this happens:

raphschru_18-1769453350666.png

 

Now, to have the same neat code as before, you have to surgically select, move and realign the Bundle/Unbundle nodes correctly:

raphschru_16-1769453276240.png

 

Since these nodes are resized in a centered manner, to keep neat code without the need to realign everything by hand, you must provide free space both on the left AND on the right.

 

Remark 1: The same issue can happen when you select another item with a different width in the Bundle/Unbundle node.

 

Remark 2: It seems all nodes of class "Named Bundler" and "Named Unbundler" are concerned. So that also includes the Waveform / Digital Waveform / Digital Data Bundlers/Unbundlers.

 

Proposed Idea:

 

When a Named Bundler or a Named Unbundler updates its own size (either because the typedef is changed or because the user selects another item), it resizes to the right instead of resizing from the center. So, if you want to provide space for further modifications, you only need to put space on the right (and not both on the left and the right). Also, I find that resizing to the right is quite consistent with the left alignment of the element names.

 

 

Regards,

Raphaël.

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).png

 

2 (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.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.

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.gif

 

For the "OS" and "CPU" symbols, the documentation states: "The VI must be in a LabVIEW project to access this symbol."

 

The documentation is correct and reflects the current behavior of LabVIEW. Instead, the condition should reflect the operating system where LabVIEW is running, like the "TARGET_BITNESS" and "TARGET_TYPE" symbols.

Recent improvements to editing string constants on the block diagram—such as enabling Ctrl+A to select all text—have been very helpful. When testing parsers, I frequently work with large string constants, and smooth navigation becomes important.

Currently, scrolling inside a string constant always moves by a single line, regardless of the operating system’s configured “number of lines to scroll per mouse wheel notch.” 

 

Please update LabVIEW so that scrolling within a string constant honors the OS-level scroll-wheel configuration. This would make navigating large constants more consistent with user expectations and system-wide behavior.

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

Enhancement 1.png

 

 

Enhancement 2.png

 

 

 

Enhancement 3.png

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

 

 

(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.) 

For pass-through values like errors, classes, visa sessions, etc. it's a hassle to insert a vi into existing wires.    It would be intuitive and very efficient if you could "pick up" the wire, hover over the vi terminals, and have the connections made automatically.

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).

 

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.png

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...

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.png

 

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.png

 

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

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.png

 

Thanks for voting!

 

 

 

 

 

Option to automatically generate Set or Maps on the outpout tunnel of a loop would be nice.

 

setmap.jpg

Sometimes I want to have global static constants which I can read in multiple different places and update in only one.

 

I either have to do this in some clunky fashion with an in-lined VI that just has a constant on the block diagram which gets wired out, or I use a global variable with default values set and just never write to it.

 

The global variable option is a way cleaner implementation but has the disadvantage that there isn't technically anything preventing it from being written I just have to rely on/promise that I (or anyone else) won't write it.

 

I would be awesome if there was a property which could be set on a global which allowed it to only function in the read direction.

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.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.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.

Surrounding structures should not grow while I´m typing in a string constant or comment.

Only afterwards when I move or resize the string constant or comment.