LabVIEW Idea Exchange

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

Background:

 

I have a single pane that I was using to debug a state machine.  It is not clever at all, but it is useful.

Capture.PNG

I viewer of the Snip might not see what I did here, but I used the "Align Objects >> Left Edges" tool and the "Distribut Objects >> Vertical Compress" tool to get all the text tags and the order of the components to be "human readable".

 

fztvpepa479127866874303765.jpg

nrlsubih1015103514127206467.jpg

 

A human doesn't know that but the software should. 

 

When I hit "cleanup" I get this:

Capture.PNG

 

From this image you can observe that "fast, human readability" is lost.  I can hunt, but its not a simple up-down. 

 

I think that the "cleanup" should recognize the formmating, and retain it in this case.  It should do this by default.  The entire paradigm of LabVIEW is visual programming.  The diagram cleanup tool, in this particular case, has room for improvement there. 

If we run an installer that was built with the application builder, sometimes it can happen that we have the exact same version of the program already installed. Nothing to do! Easy, right?

 

We get a nice dialog telling us that "No software will be installed or removed". So far so good.

 

Any reasonable person would think that we could just press [Next >>] here, proceed with doing nothing, and close the installer without further roadblocks.

 

Unfortunately, the [Next >>] Button is disabled and greyed out . Why??? It seems to be a perfectly valid operation at this point.

 

If we press [Cancel], we get yet another dialog asking us if we are really sure to cancel. Of course we are sure!!! There is nothing useful this installer can do on this particular machine at this time, so get it over with already!!!

 

 

Idea: If the installer determines that there is nothing to do, we should be able to press [Next>>] and close the installer without further dialogs.

 

 

 

 

(I assume that this is not a Microsoft thing cast in stone and that NI can actually do something about it)

 

 

 

As simple as that.

 

Instead of right clicking and then going to Visible Items->Label, just double click to edit the label.

The only option for closing the Multiple Variable Editor is with the Done button, or closing the window itself. In both cases any changes to the variables are applied, with no option to revert or cancel. There is an undo function, but it would be handy to be able cancel all changes in case sweeping mistakes were made across hundreds of variables (which is very easy to do if a column is selected).

 

mve_cancel.PNG

 

 

It'd be great if when sorting a column of items (say in the Multiple Variable Editor, or a table of data), the values were sorted using a numeric sort rather than a literal sort (ie. DI10 should not come after DI1, and DI20 should not come after DI2).

 

channel_sort_wrong_annotated.png

 

There could also be a specialised string sort function which takes in a string array and provides an option for a numeric or literal sort.

 

 

Many advanced funtions in the optimization and fitting palettes allow the use of a "VI model" given as a strictly typed VI reference to be defined by the user. A great feature!

 

LabVIEW provides various templates containing the correct connector pattern. Here is a list of the templates I found:

 

in labview\vi.lib\gmath\NumericalOptimization:

  • ucno_objective function template.vit

  • cno_objective function template.vit

  • LM model function and gradient.vit

in labview\vi.lib\gmath

  • Zero Finder f(x) 1D.vit

  • Zero Finder f(x) nD.vit

  • 1D Evolutionary PDE Func Template.vit

  • 2D Evolutionary PDE Func Template.vit

  • 2D Stationary PDE Func Template.vit

  • ODE rhs.vit

  • Global Optimization_Objective Function.vit

  • DAE Radau 5th Order Func Template.vit

  • function_and_derivative_template.vit

  • function_template.vit

As you can see, the naming is quite inconsistent:

  • all files are templates as is immediately obvious from the file extension! (*.vit )
  • some containing the word "_template" (undescore/lowercase t)
  • some containing the word " template" (space/lowercase t)
  • some contain the word " Template") (space/uppercase T)
  • some don't contain the word template in any form (good! :D)

 Since the extension fully defines them as templates, maybe the word "template" could be scrubbed from all the filenames, making things more uniform and consistent.

 

Idea Summary: remove the word "template" from all model template names that contain it.

CfgFileLibrary2.png

Right now, the LabVIEW File utility for reading Configuration Files (NI_LVConfig.lvlib) are restricted to loading data from a configuration FILE.  Unfortunately, I have a case where I am storing configuration STRINGS in other locations (like in a database) and need to interpret them.  I'd love to be able to reuse this library of code to do that, and I can't quite do that without a lot of extra work.  Right now the workaround is to read the string from elsewhere, write it to a temporary file, read the temporary file, process..... (sucks to have to take time to read/write to disk, require permissions to save to a disk which I don't always have depending on permissions on system, and wastes processing time especially for larger configuration strings/files)

I'd love to just "Open Config String" instead of "Open Config File"  (and then "Close Config String" (and return an output string)).

Unfortunately because the library has internal items marked as private I cannot reuse the internal processing code without duplicating the entire lvlib and/or customizing vi.lib.

 

The LabVIEW XML parser library supports a polymorphic instance of the "Load" function to take either a file path OR a string input, so why can't we have the same support for the configuration file utility?

 

 

If You drag a tunnel of a loop, case structure or any other structure along the border over a corner, then

the connected wire becomes hidden behind the frame.

 

Sometimes, the wire looks alike it is connected to another wire instead - like in the example below.

I fell into that trap, because I've just seen the frame to the right and didn't expect, that the wire was

connected to the tunnel near the bottom.

wire_behind_frame.png

Wouldn't it be great to break up the wire with a 90° corner and place it in the visible area?

     wire_not_behind_frame.png

 

 

More similar situations like this are posted in this thread:

http://forums.ni.com/t5/LabVIEW/wire-vanishes-behind-frame-of-case-structure/td-p/3221167

The „Search 1D Array“ primitive should have a Boolean output “Found?”

 

 

I was thinking it would be nice to call the DETT programmatically, in particular:

 

1) Start and stop a capture

2) Save and load a configuration

3) Save the log file to a user-defined location

(4) Perhaps even compare log files, although this bit can also be done using existing technology

 

As we get used to more multithreaded programming ideas, such as the actor framework, the DETT will become more important as debugging with independently executing clones is not straightforward. One such really nice feature for the AF has been created by niACS (https://decibel.ni.com/content/docs/DOC-44158).

 

The next step to me now is to allow it to be called, for example, during a unit test, so that I can measure performance. There is clearly a chicken and egg problem, because the code in which I call the event may preload the code under test, but I can easily imagine being able to set up and tear down the test using different VI's.

 

How will this help?

 

1) We can do something correctly, record the trace, save the file and then diff a unit test against the good file, checking that it still produces the same output (if we fire user events as niACS did with the AF). This might not be the best way of unit testing (we ideally develop the test before the code, a la Test Driven Development) but we also should be allowed perhaps to look inside the process (white box testing) to see if more calls are used, say, than the last time the code was run.

2) We can create performance benchmarks for code with tests that are easily re-run. Sure, we ideally should use the same machine with no more software than the last time the test was run, But we can also

 a) See variation across different machines, platforms, etc.

 b) Assess code smells at a quantitative level

 c) Assess upgrades across versions of Labview

I didn't find this idea immediately, perhaps something similar has been posted already?

 

I would like to propose an extension to the Index Array function, to accept an array of numbers or booleans on the index input. The picture below illustrates the idea. The new Index Array function would replace the for loops in both cases, making for a neater and more readable diagram.

 

Index Array proposal.png

Say a 1% discount on the annual DSRL fee for each unresolved CAR per company/organisation.

If you think 1% is too much, please suggest a percentage that you think would be acceptable.

 

If NI did this it would really show how much they care about the quality of their products and also that they value the feedback of their users.

 

It would also be an incentive for users to report issues and for R&D to fix them.

Nowhere in the Help for the Initialize Array function is it indicated that this is perfectly fine:

 

Screen Shot 2015-11-20 at 15.20.06.png

 

Unfortunately this situation could result from a Ctrl-B operation deleting a broken wire to the "dimension" input, and this could remain undetected for a while (and difficult to debug).

Since an empty array can be generated in other simpler way (for instance creating a constant), I am arguing that this "feature" of the function is more harmful than it is useful and should be replaced by a Mandatory Dimension Size input.

The Drag and Drop event Drop has an element named "Available Data Names". This is a needleslly very long element name and wastes a lot of BD space (the whole vertical area can't be used for a case structure, for example).

 

Something like simply "Data" would be enough..

Untitled.png

 

Changing a graph's axis mapping (linear to/from logarithmic) is super easy using the context menu in edit mode.  But as far as I can tell, this feature is not available at run time:

 

EditMode.pngRunMode.png

 

It's inconvenient to have to stop a VI to change the axis mapping (and sometimes impossible, e.g. in stand-along applications) and I believe that most users would expect to find lin/log controls in the context menu, right next to autoscale.  Why not enable this feature in run-time?  If, for whatever reason, a developer doesn't want these options displayed, it would be easy to delete them from the run-time context menu. 

 

It's certainly possible to change the axis mapping programmatically, but I would prefer if it were built in to the graph control, and enabled by default.  It's frustrating to manually create axis scale control elements, over and over again, every time an application doesn't permit stopping the VI to change mapping from the edit-mode context menu.

Left shift registers (For Loop, While Loop) can be either initialized or not.

In general, the programmer knows what is needed for the correct behavior of the code, but code modification (say a broken wire followed by a Ctrl-B) can change this status:

 

 

Step 1:

Screen Shot 2015-11-09 at 18.35.55.png

Step 2:

Screen Shot 2015-11-09 at 18.38.12.png

Step 3:

Screen Shot 2015-11-09 at 18.37.59.png

 

If this last step is performed without remembering that the shift register needs to be initialized for the rest of the code to function properly, an insidious bug can result.

 

My suggestion: Let the user specify whether a shift register initialization is required or not (just like a VI connection can be specified)  

 

Currently, you can drop a control on a queue control to change the inner type of that queue

Changing Queue Control Type.PNG

There's no such shortcut for network streams

Network stream drop.PNG

 

I would like this shortcut to be enabled. Also, maybe have the network streams optionally show the type in the control:

 

Bigger NS Control.png

Waveform charts are really useful but have an annoying bug. Every now and then (maybe once every 10 seconds depending on the update rate), the digital displays blink to zero even though a zero value was never written to the chart. I use these charts frequently in HMI type displays and explaining this behavior is always part of the training for new operators ("Don't worry if this critical sensor goes to zero for a second unless the line on the chart also goes to zero, then you should freak out and hit E-stop"). This has been brought a couple times over the last 8 years (http://forums.ni.com/t5/LabVIEW/Waveform-chart-digital-display-blinks-zero/td-p/554868) but has never gained enough attention to be fixed. I know this functionality could be duplicated with additional numeric indicators or even an xcontrol but I would prefer to just have waveform charts function correctly. I attached a VI that shows this behavior. All three of the digital displays randomly blink to zero.

 

 

Chart digital display blinks to zero.png

I'd like sometimes to have more control over what to delete from the compiled cache.

 

If I am working on a certain project and I'm having trouble with RT deploys and inlined VI code change propagation (it's a real thing) then I have found out that deleting the compiled code cache can help a lot.  Thing is, I don't really want to delete all of the cache, only those related to a sub-set (current project / directory on disk).

 

It's not a huge deal-breaker but if the technical barriers are not great, it would be a nice choice to have.

When we try to copy and paste a element in the cluster constant its not replacing its added as the new element.but it working well in the control and indicator

 

The figure explains the problem

Replace elements in cluster constant.png