LabVIEW Idea Exchange

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

The tendency of LabVIEW to indicate that 5 or 10 VIs have been changed for every VI actually edited makes maintiaining organized, legible version control logs difficult. To be kind to my co-developers, whenever possible, I try to keep the number of spuriously modified VIs down by intentionally not saving VIs that do not need to be saved. This would be a lot easier if the "Save all (this Project/Library/Class)" menu item behaved as it sounds intuitively. Currently, it functions to save all of the items in the Project/Library/Class, as well as their dependencies. In 99.9% of all cases, I did not intend to modify any dependencies. If I had intended to work on them, they would be in the library or project.

 

This idea is to have the "Save all (this Project/Library/Class)" menu item save only items inside the Project/Library/Class, and not their dependencies.

Double variables can have the non-numerical values NaN, +Inf and -Inf. I would also like to be able to give them the value Undefined, and that applies to all kinds of variables (integer, boolean, string, etc.). This could solve issues that other users have posted:

 

- To make a test for inputs of subVIs if they are wired or not. Give them Undefined as the default value.

- A ternary boolean.

- If you want to force the user to fill inn data in the main program, there must a way to see if data has been entered and not a default value. This can be done by setting Undefined as the default value.

 

How to handle the Undefined value:

 

Any operation on an Undefined value should give Undefined as a result. The only exceptions are two test blocks [Is Undefined] and [Is Defined].

 

This can also be useful for debugging in a tangled block diagram to see if input A really has a connection to output B. If it is, then B should be Undefined if A is set to Undefined.

 

 

 

 

Make the probe display remember the scroll position. This in order to avoid the scroll to go back at top when looking at another probe and coming back.

 

 

1-scroll all the way down.

1.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 2- look at another probe.

2.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3- go back at first probe and have to scroll down again.

3.jpg

When I am running multiple version of LV at the same time I have a hard time telling by sight which version a given VI belongs to.  As others have noted, double-clicking opens the last version used, regardless of the VI version.  This leads to occasional upconversion when an 8.6 VI is opened in LV2009 and subsequently saved.  Every time I want to create a new VI I have to double-check which version I have open using 'About LabVIEW' or checking for subtle differences in the pallettes.  I would appreciate it if the version appeared in the title bar of the window.  In fact, any visual cue would be helpful.

If we can have instrument simulator VIs, we can test our codes prior to the actual hardware acquisition

 

The idea proposes device driver packages from IDNet to include a vendor instrument simulator VI that can be run prior to code testing. The VI can be configurable (VISA based on virtual ports created during runtime, file paths to read from to simulate measurements and responses to messages, etc) and started asynchronously (call & forget) at the start of the program and terminates when the caller terminates.

 

or as a template from the "New > Simulated Instrument" where user can modify according to the instrument that they are going to use.

 

...and that it covers NI and 3rd party instruments

If I create abstract messages for the calling actor, I often have to write a wrapper function so the child classes can use the abstract message.

 

This is a repetitive task that would be a prime candidate for scripting. Images below is an example of the type of wrapper I'm referring to.

 

Send Abstract Message WrapperSend Abstract Message Wrapper

 

 

 

From the Structured Error Handler's page:

The Structured Error Handler (SEH) reference library provides tools for handling errors in an organized fashion. The SEH consists of a configurable Express VI that helps you handle specific errors, a communication mechanism for transmitting errors, a template for a central error handler, and various supporting VIs and utilities.

... and...

The Specific Error Handler is a configurable Express VI which allows you to configure common responses to an error.

It was mentioned in this thread that it would be a useful if it was installed with LabVIEW.  Here's a place to show our Express VI love.

When you change a global's variable name, all instances are not been updated, causing a broken arrow.

It must be done manually and it costs a lot of time.

There is an option "Find ALL instances" so i guess it is very easy to update all names automatically

So, due to massive lag in the project environment, borked graphics drivers on the virtual machine and the resulting random rearrengement of objects on the front panels, i've Locked all objects.

Now, trying to delete a control from the block diagram nothing happens, which is technically correct. No information or warning, however, is borderline Bug in my book. I'd expect a popup "Object is locked", not just a silent denial.

 

LV2014SP1f3 (which for some reason is 14.0.1.3 instead of 14.1.3.x, but that is another discussion)

 

/Y

3 states.PNG

There are lot of posts in the forum regarding the design of a boolean control with 3 states "On", "Off", "Default". This is very useful when during some tests the LED should initially be in one color say "black", if test passes, it should display "green" color and if test fails, it should display "red" color. If this comes as a special LED in the front panel, this will prevent extra coding.

 

 

When working on a front panel you can drop a typeless array and add or remove data types from it.  If the array isn't typed, the vi won't compile.  (Broken run arrow.)

 

I'd like to see this behavior extended to other constructs that contain type information:  queues, notifiers, user events, and DVRs come to mind immediately but there may be others.  For me the lack of this ability is most noticable when I'm creating new classes.  I'll be trying to set up the class definition (.ctl) but if it contains any of those data types I have to open a block diagram, drop the create prim, and create a control on the output terminal.  It's inconvenient to have to do this with any vi, but moreso with ctl files since they don't have a block diagram associated with them.

 

The property node will be executed in top to bottom sequence. Changing the sequence of the property node is difficult now. In the example shown, reordering from Available sequence to expected sequence will more steps.
Proposed Idea: There should be an option of reordering the sequence on the right click menu of property node as we have in case structure (rearrange cases) 

 

The property node will be executed in top to bottom sequence. Changing the sequence of the property node is difficult now. In the example shown, reordering from Available sequence to expected sequence will more steps.

 

24278i34BF0287468F2376

 

 

 


Proposed Idea: There should be an option of reordering the sequence on the right click menu of property node as we have in case structure (rearrange cases) 

 

Attached the images also.

Currently, LabVIEW uses standard Windows "last path" mechanism to create the default persistent path when loading or saving files.

 

I would like to have this be made more user friendly, by having file specific persistent paths remembered by LabVIEW.  For example, individual persistent paths for Projects, VI's, Controls, etc.  This saves time navigating the file hiearchy when the file type has changed. 

 

Yes Windows has a Recent Documents folder in the file dialog, but it often is sluggish loading.  In one application that we write, we have six different persistent paths to make life easier for the end user.

 

Carsten Thomsen

With how event source references are currently handled, it is not possible to add any additional event sources to an existing Even Registration Refnum. The user is required to know the number of events needed and statically configure the Register for Events block at the beginning. The Register for Events block is resizable when you have not wired an input for the Event Registration Refnum, as shown,

 
EventRegister.JPG

But this presents a problem whenever you are working with a preconfigured refnum. If you're working with an application that defines the events within a subVI and then passes out that Event refnum, there is no way to append new events to that refnum.

 

EventregistersubVI.JPG

 

The new Register for Events is not resizable and there is no way to combine the previous refnum with a new refnum you have created. This really limits the capability to expand and continue using the refnum throughout your code.

 

The only ways to work around this would be,

 

Preallocate many readdressable events that you can later overwrite,

 

  • Use a datatype that has multiple elements (cluster/array) and use the different array indices as needed

 

  • Preregister many event sources on first creation of the refnum, and then rewrite over those sources later

 

preregister.JPG

The last way to approach would be to just create another Event structure to handle the new refnum.

 

Has anyone else run into something like this and has a recommended way to approach? Any other approaches and recommendations to help make the Event refnum more flexible would be great!

 

 

 

We really need the LabVIEW Statechart Module to run in LabVIEW 64-bit! Many of our projects are large vision projects requiring lots of processing and hence LabVIEW 64-bit.

 

Please make Statechart Module available in LabVIEW 64-bit!

Why do i have to open the Executable builder properties to access the icon editor of my icon file that's included in the project?

Add a r-click option to Edit the icon and/or make it the default if double clicked in the project environment, it doesn't really benefit anyone to open it in Image viewer.

(You can workaround much of the issues by setting the icon editor as default program for .ico's in windows, but there should still be a r-click option.) 🙂

/Y

Since I got the proverbial hook on the pervious progress terminal for a FOR loop, I thought I would take another stab at it.  Should the N Terminal be sliding along the front border of the structure?  And even though it fell flat, I still like my progress terminal, albeit with a more appropriate symbol.

 

23162iD83AF4B6706A414B

The current version of Trim Whitespace.vi uses regular expressions that are quite slow, but not needed since only simple search and a substring function is desired.

Therefore, I suggest to throw out the regex functions and replace them with G code looking for the same whitespaces (or even extend the selection to the openG variant).

I use the presented version within all my string processing functions, but many shipped VIs (especially the NI_LVConfig.lvlib) uses the trimming functions a lot. Since I do a lot of config files, this starts to be the bottleneck of the total LV code.

 

23008iC728CE59C53E9B3C

 

left-trim sub-VI:

23006iC444DD465E2506D4

 

right-trim sub-VI:

23010i7E67AC14F8028ECC

 

Performance metrics suggest speedup of about a factor of 15 for short strings and even more (>35) for longer strings.

This Idea was spawned from my quest for the über-migration experience when upconverting previous versions of enum data to the most recent version - in other words, providing backwards compatibility for data sources (networked clients/servers, databases, files...) that use a previous version of an enum. 

 


 

When you flatten an enum, the result is the only the numeric value of the name-value pair. Once flattened, an enum is indistinguishable from a vanilla numeric, containing no additional information:

 

22751iAAC1E6C59DDD7753            22747i41FF880474AA8369

(Yes, the snippet works in 2010, even with the cameo, but it's slow because the "Favorite Scrabble Word" enum has 47k+ items)

 

Looking at the flattened value, the first 4 bytes (00000001) represent the value of the I32, the next two represent the 6809th enum element (1A99), the next two represent the decimal year in hex (0797), and the final two bytes represent the birth month enum index and day of month respectively. That's all the bytes there is - 20 hex nibbles of flattened data to describe the value.

 

Storing this data structure as-is will be problematic if the type definition of the Scrabble Club Member ever changes. Fortunately, a typedef can be converted into a class, and the class definition will natively retain data structure mutation history, meaning flattened object data can be upconverted from previous versions. Cool!

 

22755i48F4D7119EE88C29

 

Above, we can see that if the data structure is converted to a class, the red-underlined represents byte-for-byte the same information as the flattened cluster, but with flattened classes there are additional goodies buried in the data, such as the version of the data underlined in blue.

 

From Preserving Class Data:

 

"LabVIEW, as a graphical programming environment, has an advantage over other programming languages. When you edit the class, LabVIEW records the edits that you make. LabVIEW is context aware as you change inheritance, rename classes, and modify private data clusters. This allows LabVIEW to create the mutation routine for you. LabVIEW records the version number of the data as part of the flattened data, so that when LabVIEW unflattens the data, LabVIEW knows how to mutate it into the current version of the class."

 

But what if you mutate one of the enums, by adding items, removing items, rearranging items, or renaming items? Now you're in a pickle, because Enums currently do not store mutation history as part of their definition.

 


 

Consider the simple enum, GreekLetters, as part of a project developed by So-So Engineering, Inc. The SSEI developers launch the code into production with version 1 of the enum: v1: { Alfa, Betta, Hero, Delta } (The So-So engineers aren't too good at Greek, but so-so engineering brings home the bacon at SSEI).

 

Throughout a long development cycle, every few months this enum is mutated to account for mistakes, new features, or obsolete features:
 
  1. v2: { Alpha, Beta, Gyro, Delta }
  2. v3: { Alpha, Beta, Gyro, Delta, Gamma }
  3. v4: { Alpha, Beta, Delta, Gamma }
  4. v5: { Alpha, Beta, Gamma, Delta }
The SSEI developers pounded out code in blissful ignorance until v4 when the app started outputting thingamabobs rather than whirleygigs. 
 
Their superstar programmer - boasting his shiny CLAD certificate he had been toiling for 3 years to obtain - realizes the previous versions from persistent data logs were being interpreted incorrectly. With the new v4 enum, v1 data with index 2 is now being interpreted as "Delta" instead of "Hero", and v2 data with index 3 is now "Gamma" instead of "Delta".
 
v5 comes around with a homebrew-upconverting-state-machine-mutater, and continually ranks higher as nastiest code the guys at SSEI have ever seen as they slowly discover Epsilon in v6, Zeta in v7, Eta in v8...
 

 
I propose that this revision history, or mutation history, be stored with the control type definition of the enum itself. Further, a flattened enum should include a four-digit version (like classes) in addition to the flattened value.
 
This Idea may be manifested as a new data construct altogether - the 'Enhanced Enum' or the 'Enum with Benefits' 😉 - or more elegantly it could be included as a new flag 'IncludeVersionHistory' in the existing enum construct.
 

 
As a final note, even if you think you're immune to this problem since you don't write enums to persistent files to be read by future versions, you're probably affected. A subVI that uses an enum BD constant will improperly upconvert to the most recent version if it is not in memory while the enum goes through multiple mutations - say a rearrange and rename - that cannot be implicitly determined without explicit mutation history.
 
If that explanation does not make sense (hey, it doesn't even make sense to me), just ask yourself this question: "Do default values of controls and BD constants sometimes get screwed up after rearranging, adding, or renaming enums?"
 
22753iC17B0E7D87CFF612
 

 
Finally, while you're excited about the Enhanced Enum, also get excited about the Enhanced Enum supporting sparseness and different datatypes. Feel free to post questions/comments/insults in the comments section below or on the original thread.

 

When you have the Desktop Trace Execution Toolkit (DETT) set to log errors, it will indeed generate an entry any time an error is generated. However if any custom message data is part of the error it is not captured, the DETT instead displays the default text for the captured numeric code.

 

DETT Error.png

 

I propose that this data should be logged as well.