LabVIEW Idea Exchange

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

I think LabVIEW should have something like the dialog VIs that acts as a popup where the vi displays a message to the user but doesn't hang up code and wait on the user to press a button.

 

An example case is a state machine that has error checking built in errors out.  Instead of creating a more complex error handling scheme to display the state machine errored out and heres why then shutdown the state machine, you could instead drop this async popup in the state with the message to display the error occurred then have the state machine shutdown like normal.  This way, the user knows "the state machine shutdown for X reason" while the state machine also goes into a safe state.  

 

I think the async popup is easier to trace since the error message is located in that section that detected the error vs having some sort of store an error string then in the shut down case read if there is an error and if so display the error once the station is already shutdown.  Additionally, you cold see where all asnyc message blocks are via dropping one in your code then right clicking and searching for all instances.  This could streamline the process to see where the fault occurred since the async message block would be in the location of the fault itself.

 

I have currently built something like this that is a reentrant VI whose input is a string and a secondary VI that launches the display message VI.  It's a bit of a work around, but I can display a message to the user while my code continues to do whatever it needs to.  

The Swap Values node only supports a Boolean input on the '?' terminal.

swap-values-error-cluster.png

It should also support an error cluster input, in the same way as the Select node (pictured) and many other nodes with Boolean inputs.

When a TLS Configuration Refnum is wired to "Not a Number/Path/Refnum" it always returns true, even though the TLS Configuration Refnum has been correctly created and is valid.

 

tls-refnum.png

The idea is for "Not a Number/Path/Refnum" to handle the TLS Configuration Refnum and return false when the refnum is valid.

 

Hello LabVIEW Experts.

 

I am using LV 2017 (Not sure how it works in Recent Versions of LabVIEW). Sorry if its fixed in Recent versions.

Started this thread to share my recent learning/bug.

 

It all started like this.

 

One my Engineer was re-architecturing existing LabVIEW Application and it has 40+ States/Cases Defined- Out of which two were identical and he is not able to figure out the duplicate.

We spend sometime to resolve by sorting and finding the duplicate.

 

Later i was working on the same to figure out why cant LabVIEW Highlight the issue/restrict from adding.

 

LabVIEW does restricts User from adding identical Items when using Edit Items of Enum Properties.

 

PalanivelThiruvenkadam_0-1664173360124.png

But it allows me to add identical items when users adds using shortcut/add items.

 

During this experiment i also found that LabVIEW doesn't allow user to create (Make Type Def) if the items are identical.

The above behavior is perfect but there should be a warning why they are not able to (Make Type Def)

 

I have Few Points on this.

 

1. There should be Error Warning/Highlight  to make user to debugg where the identical cases located (helpful when more states are mapped)

2.There should the restriction in adding items at all levels (all possible options to add items)

3.There should be an warning why user cannot (Make Type Def) when there are identical items.

Hello NI,

I am thinking of a feature that if I hold a certain key such as CTRL and then move a vi that has error in/out wire in it, it will automatically snap to the error line that gets close to it such that the feature will automatically connect the moved vi in between the error wire it is closed to. This will cut the error line and insert the error in and out of the vi that gets close to it. Thus a person will not need to do the following steps:

1) click to error line, then click to input of the error wire of the vi.
2) click to error line again, then click to output of the error wire of the vi..
3) click the unwanted wire/broken path and delete.

Regards,
Mark J.

If you build a PPL with a class and then probe the class wire, all you get is the name of the class, whereas probing a source class shows you its private data.

 

Currently the only way I'm aware of (hopefully I'm just ignorant on this matter) to see the private data is to create extra code to expose it in some form.  This also often requires the PPL in question to be rebuilt which can be a huge pain when trying to debug. If the PPL is built with debugging enabled, wouldn't it make sense to show the private data contents in probes?

In vi.lib\Utility\file.llb the 'file open+.vi' throws an error when a file can't be opened. It doesn't tell which file it can't open.

 

One of the strenghts of LV is the source string in the error cluster that can be used to include a lot of extra information. For example which file couldn't be opened.

 

The change can be very simple, just add the file into the source string, also see attached file:

beuvink_0-1652104974240.png

This is probably true for some other files here as well.

 

(also checking out these files... would be nice if they are updated to some newer standards... still some very old styling here...)

 

Some background: https://forums.ni.com/t5/LabVIEW/Looking-for-feedback-on-the-Carya-PDF-toolkit/m-p/4229342#M1228046

 

 

 

 

 

Support the loading and use of dotnet core libraries.  They are cross platform and could provide functionality for both Windows, Linux and Mac users and there is so much code that we could begin to bring into the ecosystem.  

 

Batch message class should have a public static method to build a batch message that can be sent to the Time-Delayed Message.vi.

tkendall_0-1643323757644.png

 

I would like to wait xxxx ms then send three messages in order.

tkendall_1-1643323849848.png

Yes there are twelve other ways to do this but this would be much cleaner and it is an easy one change.

Allow type casting between Strictly Typed VI References

TypeCastVI.png

Why:

The asynchronous methods require strictly typed VIs. Strictly typed VIs depend on the connector pane and terminal wiring type (Required, Recommended, Optional). Depending on your development environment and configuration options (Front Panel > Connector pane terminals default to required), newly connected terminals may be Required -or- Recommended. 

Opening a VI reference or calling an async method with the wrong terminal wiring type will result in Error 1057: Type mismatch. 

TypeCastVI_Justification2.png

To work around the connector pane variance, we need to type cast check every connector pane terminal variance in order to call the proper async method without getting the Type Mismatch error.

TypeCastVI_Current.png

The amount of unnecessary complexity to call and collect a thread is infuriating. There is already enough complexity when it comes to spawning a new threads; between the conditional options (Non-Reentrant, Reentrant, Async Forget, Async Collect), VI type specifier (Generic, Strict), Connector Pane Type (Pattern, Rotation), Terminal Wiring Types (Required, Recommended, Optional), etc. Threading in LabVIEW needs improvement.

Idea:

To better support Asynchronous calls, we need the ability type cast the required strictly typed VIs to:

1. Add an option to Start Asynchronous Call and Wait on Asynchronous Call methods to ignore the VI terminal wiring type flags:

     Required (0x21000), Recommended (0x20800), Optional (0x20000)

2. Support type casting VIs To More Generic Type and To More Specific Type to avoid the error 1057 Type Mismatch all together

TypeCastVI_Idea.png

Regards,

A LabVIEW Enthusiast 

It makes no sense to write the channel name every time with TDMS write. You could easily improve write performance and disk utilization if you stored the channel names once and used a smaller alias to them (see example below). There are other work arounds including buffering

https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P9reSAC&l=en-US

But the downside of buffering is that the data is stored in memory so if you lost power, you would potentially be missing a large chunk of data. Also, this solution is compatible with the buffering idea in that this would make the files even smaller.

In my example even after just 100 writes, the example using the lookup table is 20% smaller.

We can also get even bigger gains if instead of using hex-ascii strings for the short names, we used an integer.

 

TDMS long name lookup.png

Two more suggestions

 

There has also been a need for rising edge and falling edge triggers for boolean values instead of having to manually code this in every time.  I know this would take extra memory space but could be turned on or off maybe in the control settings dialog.

 

I also have to manually code in time delay functions because everything I do is in loops with parallel code.  The timers can't execute properly this way and would be nice to be able to use the built-in timing functions instead of hand-coding.

I really like the option to use indicators (connected to the connector pane) as the output for webservice methods. By default, Labview will serialize it to JSON, but text and xml are also options. It works quite well and it saves a lot of coding writing your own serialisation.
I have some suggestions for the serialize functionality:

 

1. order the JSON output by tabbing order when there are multiple output indicators. This prevents that you end up always clustering all controls into one, just to enforce order.

 

2. it would be nice if an enum could be represented by its string instead of its index.

 

3. support for maps

We are already using the shortcut Ctrl+i for opening the VI properties window.

 

But to open a VI's Icon Editor window, we do

  • Right Click on the Icon → select Edit Icon (or)
  • Double Click on the Icon

 

Think about the improvement in development speed if we have a shortcut Ctrl+Shift+i to open the Icon Editor window.

 

This will also come in handy if we are dealing with wider VI windows.

 

Current Environment takes ~2.5 seconds to open the Icon Editor

  • Move the cursor to the VI Icon (~1-2 seconds)
  • Two mouse clicks (double click) (~1 second)
  • (or)
  • Move the cursor to the VI Icon (~1-2 seconds)
  • Right click on (~1 second)
  • select Edit Icon (~1 second)

Proposed Environment will take ~1 second to open the Icon Editor

  • Press Ctrl+Shift+i (~1 second)

Allow the mechanical action of radio buttons to be switch until released.

 

The way I make arrow buttons now is to put switch until released buttons in a cluster and watch for the value changed event of the cluster. When it changes, I convert the cluster into an boolean array, that array into a number, then feed that number to a case structure. Switch until released radio buttons, "No Selection" being a necessary default, would make that code nicer. The case selector would be an enumeration instead of a number.

Hi,

 

I want to find warnings in an opened VI. For example, a function has moved outside the case or loop structure and is not visible anymore. I call the error list STRG +L and give the show warnings a TRUE. I double click on the specific warning and I get the invisible VI or function highlighted, so I can move it back into the visible area by keys. The problem is, I always have to find the VI in a list of approx. 1000 VIs, which have a warning. It would be great if I would have a search by name function, or I could see the warning/errors of the active VI window. 

I have attached an example picture of what I mean (I use a german version) 

 

Cheers 

RogerG

 

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. 

 

It would be a great add-on if the graphs have got in-built measurement features/properties/methods like an oscilloscope;

 

AdarshaPakala_0-1627657945371.png

 

  1. Trigger
  2. Basic arithmetic function like Ch1-Ch2, Ch1/Ch4, etc.
  3. Event trigger based on plot value change. Example an event will be generated if Ch1 value is greater than a set value, an event will be generated if Ch2 value is greater than Ch4 value
  4. In built average plots. Example add plots like 10SMA(Ch3), 30EMA(Ch1) etc.
  5. Threshold based graph visual property change. Example configurable out-of-threshold or in-threshold plot color change.

 

 

Advantages;

  • Save time in development.
  • Integrated code will be efficient as no data unbuild/build/pass overheads.
  • Block diagram would be neat and easily readable.
  • Lightweight code.

 

Thank You

Adarsh

LabVIEW from 2006

CLA from 2014

I need "something" that is flexible and not necessarily defined during development... can be expanded or superseded over versions without breaking VIs.

 

currently using map, with main VI setting the keys and values and called VIs/subVIs processes only the keys specified (with default values) within the called VI itself. additional checks are required to prevent illogical or erroneous conversions during execution

 

something simpler/more elegant would be nice... the current ones are too "predefined" or "required to be defined'

 

any ideas?

For the "VI Documentation" test, it would be great to have an option to skip controls (.ctl). We never add VI Documentation to typedefs or other controls. 

 

vi-documentation-skip-ctls.png

 

(cross-posted to VI Analyzer Enthusiasts)