LabVIEW Idea Exchange

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

OK, using Malleble VIs is cool. Imaging being able to not only wrap code around a variable datatype but wrapping an object around a variable datatype.

 

I personally have quite a few classes which do pretty much exactly the same thing but which only differ by the precide datatype contained within its private cluster.  No changes in the number of elements, no changes in methods, only the datatype of the specific data.

 

Obviously, the datatype would have to be compatible with all methods and VIs of the class which use that data field or we would have broken code.

Right now, you can add one group by which to filter the files you can select in a file dialog (e.g. when clicking the button next to a path control). You  can add extensions by opening the "Browse options" and adding the extensions. You can separate the extensions by semikolon to filter by multiple extensions. However, you cannot add multiple groups.

Here's how it looks now:

 

File Dialog now.png

 

In this setting you get to see all *.txt, *.doc and *.pdf files at once.

 

But what if you want more than one group to filter?

 

You could use .Net to call a standard windows File dialog. This dialog supports multiple groups separated by |

So, you can achieve something like this:

File Dialog.png

 

This feature should be available for the standard path control in LabVIEW, too.

Hi all,

 

Since the release of the new “Silver” control style in LabVIEW 2011, I had the idea of having a style control on the front panel. You would essentially click the drop down box and it would change all/selected controls and indicators on the front panel to that style.

 

Take a look at the mock up below.

 

Untitled.jpg

 

 

The idea could be extended to having a style of control that the User could populate, notice the “User” on the drop down.

 

I hope that you like my suggestion I can certainly see many uses for this.

This happens to me quite often.

 

In scenarios such as replace "Equal?" to "Equal to 0?" the quickdrop should be able to avoid comparing with a constant, or prevent getting broken wires such as this:

JimChretz_0-1686144056731.png

I've got some calls to low level VIs that rely on windows system dlls within a larger top level VI. To make that application work on Windows and Linux, I've put conditional disable structures around the dll calls. When I open the top level VI in Linux, I have to click through a bunch of "Find missing file" dialogs for the Windows system dlls. If I cancel through all the dialogs, the VI still compiles and runs correctly in Linux, so the Conditional Disable structures are doing most of what they should, but the dialogs are annoying and can cause problems with automated builds and other hands-off activities. Since the code is inside a conditional disable structure, it seems to me that LabVIEW has all the information in needs to know it shouldn't load that stuff, so it would be great to get rid of these nuisance dialogs.

I'd like to see the 3rd mouse button (scroll wheel button) activate the scroll window tool and allow me to move the window while held down.

When you create a library, its banner (the strip on the top of the icon) is 12 pixels high. This is pretty useless. NI is taking 10% of the icon's height (3 pixels) more than is needed to have a line of text using the default font in the editor. These 3 pixels can be very useful for the rest of the icon, which is what actually shows which specific VI you're dealing with.

 

I suggest that this be changed to be 9 pixels high, as shown on the right side:

 

Banners.PNG

I wish to have the option to pin the (relative datatype) pallette opened thro' short-cut menu, like inthe attached snapshot.

 

The use-case I feel is, most of the times when I want/need to navigate to the related datatype pallette in search of something, suddenly I find that I need more than one function to be used in my next steps of coding. So during those times, pinning is a viable & useful option.

 

Hope some of the folks would agree with me... Smiley Happy

Download All

Interpolate 1D array is very similar to index array, except it accepts a fractional index and will return a linearly interpolated value. (For integer indices, the results are the same). As the name suggests, this only works for 1D arrays.

 

I suggest that the functionality should be expanded for higher dimension arrays. The equivalent function for 2D arrays is bilinear interpolation and for 3D arrays it is trilinear interpolation. In the past I have written simple drafts for replacement code, but I think the "Interpolate 1D array" should be renamed simply to "Interpolate Array" and made polymorphic to accept up to at least 3D arrays.

 

An example of bilinear interpolation of a 2D array can be found here.

An example for trilinear interpolation of a 3D array can be found here.

(SInce I wrote both, they would need to be verified for correct operation and enhanced with exception handling, etc. ;))

 

These functions are useful to e.g. extract a profile along an arbitrary line in 2D (example) or 3D, or an arbitrary cutting plane in 3D.

They can also be used to resample an existing array (1D, 2D, 3D) at a different grid spacing.

 

Here's an example for resampling a very coarse 2D array at 10x higher rate (posted here).

 

 

 

(True, we also have the interpolation palette and some of the above 1D or 2D functions could probably be achieved with a detailed reading of the help and some extra code. None have the simplicity of "index array" with fractional indices.)

 

My suggestion is extend the functionality of interpolate array in the array palette to also accept at least 2D and 3D arrays.


Via this link, I learned, "If automatic tool selection is disabled, you can use the Wiring tool to select the control or indicator first and then select the terminal."

 

I happen to like using the automatic tool selection, so can this be an option when automatic tool selection is enabled?

 

SelectControl1stIdea_JoB.png

E.g. if one (and only one) control/indicator is selected, clicking on a connector pane terminal will connect the control/indicator.

 

(I can't count the number of times I've *tried* to do this, even though it didn't work.)

-joeorbob

Let's be honest: The easiest way to make a large VI unreadable is to click on the “Clean Up Diagram” button (if you're smiling, that proves I'm right). My suggestion would be to give this button some artificial intelligence. Maybe give the customer the option of setting what is “good” and what is “bad” design. And if you like the challenge, let them train it themselves.

As part of a review of a shipping product, I want to make sure that all of our LabVIEW-built executables are using the same version of LabVIEW so that we also only have to ship one version of the LabVIEW Run-Time Engine. Everyone I've talked to has given me advice on things to change at export time, build time, or even run-time to know the version of LabVIEW it was built in (e.g. the App.Version property), but what if I want to know the version of an EXE I have already built?

Here are the methods I've tried so far:
1. I created a set of VIs that does it crudely by reading the EXE file in as if it were a text file, finding mention of lvrt.dll, and then scanning back a few hundred bytes to try and find a version X.Y token in there. (Of course this could be done in any language, not just LV). This solution can be automated for my product release's review process, but it would be prone to failure if the EXE format changes or my assumptions aren't correct. I wrapped the solution in one that searches our installation directories for all EXEs and returns all LV EXEs with versions (as they are detected here) and all non-LV EXEs so I can verify that my tool is not giving false negatives on LabVIEW-based executables.

Parse EXE as text for Version

 

(See attached .zip file for my LV implementation)


2. Run the EXE on a machine with no LV RTE and read the version from the error popup that you get when it launches. Obviously this requires user interaction, and requires launching the executable.
3. Install all LV RTE versions you think the EXE most likely requires. If it launches without incident and stays in memory, you can use Process Explorer to figure out what libraries it has loaded and see which version of LV RTE was called (since the lvrt.dll will be under "<NISHARREDDIR>\LabVIEW Run-Time\<Version>"). Obviously this isn't easily automated either, and requires launching the executable.
4. I tried using Dependency Walker to see what lvrt.dll dependency was found, but it didn't show me anything useful. I'm guessing it's dynamically loaded somehow, and DepWalker can't tell me?

What I'd really like are two things:
1. An LV Invoke Method like "Get VI Version" and "Get VI Editor Version" that works on built applications -- "Get App Version" with the same types of inputs and outputs as (file path input, string version output and U32 version output). An added output to determine platform and/or bitness would be nice, too.

2. An LV RTE property that tells me the Run-Time version in the file's properties. I could potentially automate checking of this via .NET calls or something like that

GetAppVersion.png

 

Embed_LVRTE_Version_into_EXE.png

Renaming files with F2 or the context menue entry "rename" is easy - as long as the file is a LabView or NI-File. But if it is just a simple *.txt, *.pdf, ... file it is not possible. Please add this function! - thanks.

 

Currently, if you select a tunnel, you can only move it along the border of the structure - attempting to move the tunnel perpendicular to the structure border is just a no-op. Instead, I'd like to see this action resize the structure!

 

The first video demonstrates current behavior, how tunnels cannot affect structure boundary sizing. The second video shows a selected tunnel resizing the structure boundary as it is repositioned.

 

 

  1. These demonstrations reposition the selection using the Keyboard, but the same principle could apply repositioning a selection with the Mouse.
  2. A side perq of this feature is that structures are resizable with fine, granular control using the Keyboard!

The detailed help link in the LabVIEW Context Help window is a great way to add extra documentation to your LabVIEW code.  However it currently only supports .hlp, .chm, .htm, and .html files types.  This should support many more documentation types such as pdf, txt, doc, .xls, png, .etc, etc.

 

pdf.png

When searching for text, the results are returned as a comma delimited string. If you are interested in finding a result based on location or type, you have to eyeball the results to find what you want. Since the data is already delimted, each piece should be placed in its own column which can then be sorted. Also, the ability to filter the results based on an expresssion would further help narrow down the results.

 

20121i19DC718199D8B5D6

"A picture is worth a thousand words..."

 

That's especially true when describing complex interactions of the kind often seen in code.  Currently the block diagram decorations consists of 4 elements: a line, a straight arrow, a frame, and a label.  I can and often do create state diagrams out of those elements, but they look very hacked together (i.e. unprofessional) and are cumbersome to create.  The alternative is to use an external graphics program and paste the image into the block diagram.  I do that sometimes too, but it makes it harder to keep the diagram up to date.

 

I'd like to see elements added to the decorations palette to help us create graphical comments.  Since state machines are very commonly implemented in Labview, that seems like a good place to start.  How about adding a state decoration and a transition decoration?  The state decoration should allow more formatting flexibility than the label does.  (Like having the first line centered and the rest left justified.)  The transition decoration should be an arrow that allows routing--either smooth curves or point turns.  It should also have a label attached to it for identifying the transition trigger.

 

Here's an example of a state diagram for some proof of concept code I wrote that I pasted to the block diagram.  I'd like to be able to easily do these kinds of drawings without needing a 3rd party app.

 

Capture.PNG

We can easily replace a FOR loop with a WHILE loop and vice versa and most features are retained in a reasonable and expected manner. (For example if there is an indicator wired to [i], it will still be connected after replacement).

 

There is one annoying exception: The conditional terminal is completely ignored.

 

For example:

 

Case 1 (FOR -> WHILE)

We have a FOR loop with a conditional terminal wired to a boolean condition. If we replace that FOR loop with a WHILE loop, we probably would expect the conditional terminal be still connected in the same way. This is not the case. We get a dangling broken wire and a new, now disconnected conditional terminal.

 

Case 2 (WHILE -> FOR):

We have a WHILE loop and replace with a FOR loop. If the conditional terminal is wired to some real code, it should automatically retain the conditional terminal in the same place. (If the conditional terminal is not wired in the while loop, the FOR loop should not show the conditional terminal).

 

As a practical example, let's look at my old inverse erf draft posted here long ago. One flaw is the fact that there is no limit on the number of iterations so it might get stuck with a misbehaving function. In the old days, we would add another comparison with [i] and OR to the termination condition (lots of extra code, new loop needs to grow in size). A cleaner solution is to replace the while loop with a FOR loop, leaving the conditional terminal in place as-is, and wire a reasonable iteration limit to N (little extra code (just one diagram constant!), loop can remain at the same size). Here Case 2 would simplify the transition.

 

SUGGESTION: If we switch loop flavors using the "right-click..replace" mechanism, the conditional terminal wiring should be retained in a reasonable way.

Currently, the "In Range and Coerce" function requires that the upper and lower limits be wired. Often I am only interested in coercing at one end of the range. It seems crazy to wire "-2147483648" to the lower limit of an I32 just to ignore that input and coerce the maximum...

 

I'd like to propose that this function allow unwired limits, and that unwired limits assume the maximum or minimum allowable values for the given datatype:

coerce.png

The shortcut menu should launch the new type def.'s front panel when 'Make Type Def.' is selected. You will need to save it anyway, and if you find the need to edit it right away, then it is already open and ready to go.

 

make type def.jpg