LabVIEW Idea Exchange

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

Could it be possible for LabVIEW (even if only for versions 202{1,2,3} onwards etc) to make an attempt to open newer files and just break them when new features are used?

 

The comments in this Idea (LabVIEW Compatibility Modes) suggest this and related ideas, but it isn't the main part of that idea, so I'm posting it separately here.

 

An ideal solution for me would be for VIs to automatically save back in the 'oldest' version that they would support (and perhaps not be 'up-compiled' on load), but this idea has been discussed a few times and doesn't appear to be something NI will support.

 

An alternative (perhaps only possible in currently unreleased versions?) might be to have LabVIEW 202x try and open a VI saved in 202<x+n>, and then give the symbol for missing VIs (ideally with the name, if possible) for anything that isn't supported.

 

As an example, trying to open a VI using Insert into Map (if this were available for existing LabVIEW versions) in LabVIEW 2018 could produce something like

cbutcher_0-1596430804139.png

with the Context Help giving me a clue as to what was lost - I could then Google "Insert into Map LabVIEW" and try guess how I might replace it (here, probably with Variant Attributes).

 

I'm posting this idea in relation to some comments I've recently heard regarding sharing and packaging code with LabVIEW, and how even when other (text) languages add new features and so code using them will fail to compile, their users/developers can still open the code, try fix bits, or generally workaround issues (and evaluate the benefits of upgrading, if the changes are large).

New versions of LabVIEW continue to have significant new features, so upgrading seems like it will continue to be at least my preference, but not everyone has the same requirements/situation/SSP/blah blah blah.

I like the "new" Review and Update Typedef feature.

 

What I don't like is handling the CASE structures I have connected to enums when the enums update. The constants for the enums update fine, but the selectors for the CASE structure are not included in this operation.  I really wish these could be handled as pseudo-constants for enums, allowing re-assignment of cases with a preview of old and new values.  I've started adding an enum constant to each case just to serve as a reminder which case it's actually supposed to be. And that feels kludgy.

 

Currently, case structures auto-adapt to enum indices. I'd like that to no longer be the case.

The LabVIEW forum has shown the constant need of a colorbox indicator that looks like an LED (round or square). Of course we can make our own, but maybe it would be easier if these would ship with LabVIEW.

 

 

Here are some example links. It comes up all the time! 😄

4 Color LED

Dimmer

labtris

I think this is about time that we can have more than 256 colors in our VI icons.

 

I would really like to have support for 24 bit images so this nice icon 24 bit icon example.png does no longer become this:

 256 color icon limitation.png

 

PJM

We can right-click a string object and change the state (control, indicator, constant, array, element) by right-clicking. Unfortunately, the current behavior is (partially) inconsistent in the way the display format (normal, /-codes, pass, hex) is handled. Here are some results (list is incomplete), the symbol <> means in either direction.

 

Control<>indicator: The display format is retained

Array<>array constant: The display format is reset to "normal". *(Also see below)

Control|indicator<>constant: The display format is reset to "normal".

 

(*note that if I drop a string constant into an empty array container, the format and element size is retained. Converting to array using right-click should do the same!)

 

Whenever a conversion involves a diagram constant, the current display format is lost. I think it should be retained!

 

An addition to the 'Find' project provider (or a standalone one) to find Parent Interfaces would be good.

 

I expected it to be included in LabVIEW already, but I don't see it.

Parent Interface Ideas.png

 

 

In LabVIEW we can specify <topvi> as a VI search path when VIs can't be found.

 

I would propose adding <project> as an option (perhaps with a subfolder by default). This would allow for new reuse patterns based on keeping libraries in the project. I expect this would make tools like GPM much easier to develop as well.

 

It could be a first step to something like node_modules in NPM or virtual environments in Python.

 

James_McN_0-1590488521270.png

 

"Auto-insert Feedback Nodes in cycles" option under Tools > Options > Block Diagram should default to OFF. I am a believer and preacher of FN's since Darren's blog post about them, but it seems I can only get FN's to appear when I mis-wire, not when I want one.

 

Plus, they really scare LV beginners (and me!) when I miswire. GAH! What just happened??

 

ScaryFeedbackNodes.png

Maybe I have just created bad habits, but often times I copy a control on a BD that is the datatype I want. Then I go to some other VI and open the front panel and try to paste it, but I can't. I would like to be able to copy a control or indicator from the BD but paste it to another VIs FP. The reason I want this is because if I have to paste to the BD because I copied fromt the BD, sometimes it puts the control in la-la land away from all my other controls or indicators on the FP. If I could just paste directly to the fp, I could put it where I want.

 

Could I double click the control to find it then copy from the front panel? Yes, and maybe I should have made this a habit. But because I have not this lack of functionality sometimes annoys me  Smiley Sad

 

 

 

 

Download All

Looking at messy diagram from forum posts (not mine!), I often find myself in a situation that I cannot really tell where an "interesting" wire is coming from. Triple-clicking just shows me a spiderweb of wire segments going in all directions.

 

Often, the leftmost wire end is near the data source, but not always. Maybe it would help if we could right-click on a wire and do a "find source" and a halo,(or donut or similar) would temporarily appear showing where the data in the wire is originating.

 

A wire can have many sinks, but only one source and the data source is the most interesting property of a wire.

A tool to find it quickly could be helpful.

 

This picture is way too ugly, but should give some idea.... 😉

 

Anchore position of Bundle & Unbundle Ny Name elements to "Input cluster" and not to same point in the middle of element.

 

I don't like when I place (Un)Bundle By Name element to Block Diagram and when I connect Input cluster to same cluster wire then element dance on block diagram.

 

Similar: when you change (Un)Bundle By Name element by clicking a name terminal and selecting a name from the shortcut menu then element is dancing (moving) on block diagram.

 

Every time I have to shift (Un)Bundle By Name on block diagram to original position.


Expected behavior: Anchor (Un)Bundle By Name position to Input cluster part of element.

 

unbundle_by_name2.PNG

Second Unbundle By Name is reference of original position.

 

 

bundle_by_name.PNG

Second Bundle By Name is reference of original position.

I'm missing somthing like that:

 

silver tab.png

 

Amir.

I've encountered quite a few limitations when debugging debuggable PPLs, and feel that a number of improvements could be made to this process. I often find myself having to open a second project with the specific dev library in it, and then toggling back and forth between the two which is both confusing and inefficient. This is just scratching the surface, but here are some improvements I'd like to see made:

 

  • Non-editing menu options should remain available. One I use quite commonly: right-click on a class cube, and select "Show Class Library". But it's not available:
    _carl_0-1718205041101.png
    The workaround I use is to "Copy Data", press ctrl+n to create a new VI, drop the class cube there, and then right-click on that and select "Show Class Library", then toggle back to the temporary VI and close it.
  • VI Properties aren't available in VIs:
    _carl_1-1718205311007.png
    I often want to double-check reentrancy settings on VIs to ensure everything's configured correctly.
  • Private class data isn't shown. I get why this isn't available in non-debuggable PPLs, and I understand that there's a healthy debate that can be had as to whether or not this should be available in debuggable PPLs. I'm of the opinion that private data should be available in debuggable PPLs as they are meant for debugging, not for distribution.
  • Private class methods don't show up in the project.  But if you click on the sub VI for a private method, you can open up the block diagram.  If the block diagram is accessible, it really should show up in the project. I often find myself searching for a VI in the project, and not finding it anywhere, because the method is private.
  • Unusual interactions. I've seen a number of scenarios where I'm prompted with requests that I shouldn't be asked.  For instance, if I double-click on a malleable VI in a PPL's block diagram, I get this popup:
    _carl_2-1718205991996.png

     

 

There is a construct I am quite fond of in pointer-friendly languages, using iterator math to implement circular buffers of arbitrary data types.  They are a little bit slower to use than straight arrays, but they provide a nice syntax for fixed sized buffers and are helpful in cases where you will be prepending and appending elements.

 

I am pretty certain that queues are implemented as circular buffers under the hood, so much of the infrastructure is already in place, this is mostly adding a new API.  Added bonus:  the explicit circular buffer can be synchronous, unlike the queue, so for example you can put them in subroutine VIs.

 

It should be easy to convert 1D arrays to/from circular buffers.  Array->CB is basically free, the elements are in order in memory.  CB->Array requires two block copies (most of the time).  This can be strategically mananged, much like Reverse or Transpose operations.

 

Use cases:

 

You can implement most of  the following two ideas naturally:

http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Looping-Input-Tunnels/idi-p/2020406

http://forums.ni.com/t5/LabVIEW-Idea-Exchange/New-modes-on-auto-indexed-input-array-tunnels-in-loops/idi-p/2263706

 

Circular buffers would auto-index and cycle the elements and not participate in setting 'N'.

 

You can do 95+% of what I wanted to do with negative indexing:

http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Negative-Values-in-Index-Array-or-Array-Subset/idi-p/960863

 

A lot of the classic divide and conquer algorithms become tractable in LV.  You can already use queues to implement your own stack and outperform native recursion.  A CB implementation of the stack would be amenable to subroutine priority and give a nice performance kick.  I have done it by hand for a few datatypes and the beauty and simplicity of  the recursive solution gets buried in the implementation of the stack.  A drop-in node or two would give you a cleaner look and high-octane performance.

 

Finally, perhaps the most practical reason yet:  simple XY Charts.

 

As for appearance I'd suggest a modified wire like the matrix data type.  Most if not all Array primitives should probably accept the CB.  A few new nodes are needed to get/set buffer size and number of elements and to do the conversions to/from 1D arrays. The control/indicator could have some superpowers:  set the first element, wraparound scrolling (the first element should be highlighted).

NI updater kindly informed me that LabVIEW 2014 SP1 was released (even though I uninstalled it shortly after I tried it last year) and out of curiosity, I took a look at the known issues list.

I learned a few interesting things I did not know about, and also that some problems had been reported as long ago as version 7.1.1. This type of stuff looks like bugs that won't be fixed, ever.

For instance, CAR #48016 states that there is a type casting bug in the Formula Node. It was reported in version 8 and the suggested workaround it to use a MathScript Node instead of a Formula Node (where is the "Replace Formula Node by a MathScript Node" contextual menu item?).

Problem: the MathScript RT Module is required. Even in my Professional Development System, this is not included by default. Does this really count as a workaround?

I read: we don't have the resources to fix that bug, or we don't want to break code that expected that bug.

In any case, this bug with most likely never be fixed.

The bottom line is, we can waste a lot of time as users, rediscovering bugs that have been known for a while and will probably never be fixed. As a user, I would really appreciate a courteous warning from NI that there are known traps and have a complete description handily available with the help file related to the affected function.

 

My suggestion: add a list of known issues (with link to their description) for all objects, properties, functions. VIs, etc, in the corresponding entry in the Help File.

Hello,

 

When you have to handle events, many times you have to use "defer panel updates"  fonctionnality, in order to make your front panel updates more fluent.

 

It could be nice to include a checkbox in the event configuration window, in order to ask (or not) an automatic defer panel Update.

 

If check box is checked :

 

  • At the begining of the event handler code execution : DeferPanelUpdate = TRue
  • Execution of the event code
  • At the end of the event handler code execution : DeferPanelUpdate = FALSE

DeferPanelUpdate for event handler.png

 

Manu.net

It would be nice to have the option for showing the radix on the index display of an array. This would make it easier to look at an array when dealing with addresses in hex.

 

For example, if you have a large array representing the contents of a flash, and want to look at specific addresses, you need to convert the hex address into decimal to be able look at the corresponding value in the array. This can get tedious and time consuming (although I will admit it does force one to learn how to make the conversions a little more quickly in your head... as long as you are not making mistakes!)

 

index display.png >>>>> index display new.png

After installing a few word processing and graphics editing programs, my font list in LabVIEW is about 6 screens long and all I see without scrolling are some really useless fonts.

 

 

To select the ones I typically use (tahoma, courier, etc.). I need to scroll many pages, keeping a close watch on the alphabetically sorted names flying by when scrolling). Of course I could spend a day cleaning out my fonts, but I am never sure if something actually uses one of these.

 

Like most other applications, LabVIEW should maintain a short list on top, containing favorite fonts. This list could be auto-populated by the fonts used on the current front panel or just be a short history of recently selected fonts. There should also be a configuration option, allowing us to "pin" certain really-really favorite fonts to that area.

 

It could look as follows:

 

 

Of course what we really need is a modern text toolbar, but this idea would apply there equally. 😄

Download All

This idea started when I realized the WebDAV API provided by NI does not have the ability to read the File Creation information on a remote file.

 

Example_VI_BD.png

 

"That's okay" I thought, I'm a programmer and will add it myself.  Looking at the source it looks like NI just leveraged someone else's protocol, and wrapped it into some Call Library Function Nodes.  NI could have written the WebDAV API wrapping their own HTTP API functions, using G instead, allowing for customization but they didn't.

 

"That's okay" I thought, I'm a programmer, and I'll look into recreating the WebDAV API, by calling the NI HTTP API.  Looking at the source sounds like NI didn't implement all of the HTTP functions available, only the most basic ones.  And since WebDAV requires more than just the PUT, GET, and POST, that means also having to update the HTTP API to have those functions, so that I can rewrite the WebDAV API.  Oh but look at that, NI also just (seemingly) wrapped someone else's implementation again into Call Library Function Nodes, this time calling the ni_httpClient.dll.  NI could have written the HTTP API wrapping their own TCP primitive API functions using G instead, allowing for customization but they didn't.

 

So this idea is for one or more of the following things, from the easiest, to the most difficult.

 

  1. Add the File Creation Date, as returned information from the Get File Info of the WebDAV API.
  2. Implement the WebDAV API in G, and eat your own dog food.
  3. Implement the HTTP API in G, and eat your own dog food.

When you have a control name containing 'in', creating an indicator should automatically name the indicator 'out'.  Currently the indicator name is appended with '2'.  This could be expanded to include control names where the name includes a default value, and the capitalization is matched, too:

 

name indicators.PNG