LabVIEW Idea Exchange

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

Hello all,

 

This is an elaboration on a prior request by RavensFan:

 

When AppBuilder reports a file related error, such as error 8, could someone please provide a path?

 

I have no idea what's causing my file IO error, as I am running LabVIEW as a local admin and there should be nothing interfering with my path.

I can't probe a path wire in the AB method because the diagrams are understandably locked.

 

This is so frustrating.  No one likes to debug by guessing and it wastes a tremendous amount of time.

 

 

 

Thank you with my deepest respect to the AB team.

 

Jim

 

 

For example:

AppBuilder.png

Formula Node output variable names should be shifted right 1 pixel within their borders. Currently, the names are left-justified. Since each character is also left-justified (i.e. the white-space to separate them from adjacent text is on the right of each), input variable names have a 0-pixel left margin and 3-pixel right margin within their 1-pixel border. Since the output variable two-pixel borders grow inward to match the outer dimensions of input variables, the text pixel is cropped with excess on the right. This is problematic for the 1-pixel wide lower-case letter L which is cropped in half by the left border but still has a 2-pixel right margin. If shifted, names would be centered, cropping would not be as apparent, and the letter L would be distinct. The image below is enlarged 200% so the issue is more obvious (but the name is easier to read).

 

formnode.bmpformnode.bmp

While debugging there's no way to easily have informations about the settings of a Call Library Function node.

 

Why not adding some infos on the Context Help?

 

imgCLF.PNG

The current implementation of flattening and unflattening from XML is quite noisy and includes information unnecessary for the users. Rewriting it or including Pretty Print functionality to LabVIEW would greatly simplify loading settings, exchange of data with other languages, dynamic configurations, visualizations of complex systems, network communication etc.

 

PrimaryKey_0-1573820513072.pngPrimaryKey_0-1573820513072.png

For community solution and examples of these features please go to -> https://forums.ni.com/t5/LabVIEW-APIs-Discussions/Tree-Map/td-p/3972244

 

This could include also Pretty JSON since XML and JSON are interchangeable -> http://www.utilities-online.info/xmltojson/#.Xc6XjVdKiUk

 

Additionally the XML parsing should be implemented without requiring Windows .NET platform components, so it can be done on a real-time system. Current XML parsing functions cannot be called on RT.

 

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

When right-clicking on a control or indicator from the block diagram, there is no replace option:

carls___0-1590685761815.pngcarls___0-1590685761815.png

Instead, you need to go to the front panel and then replace from there.  It'd be useful if you could replace directly from the block diagram.

 

(This is particularly useful in situations where controls/indicators are hidden on a GUI)

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.

 

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.

There is a need to have the capabilities to make comment about a type def/strict type def control (in the control editor) that are only visible in the control editor.

 

Control Editor Comment.png

 

For instance you might want to point to the person editing the control that he/she should not rename that particular cluster element or this will brake the code (and you may want to use an arrow pointing to the element along with some text).

 

Currently, if you do that the comment become part of the control and is visible for every front panel instance. This bring absolutely nothing to be able to see that type of comment on the FP and it should not be seen by the user of the control (because this actually make the type def so large an unwieldy).

 

Therefore, there should be a need to select a group of decorations and mark them has only visible in the control editor .

 

Note: Right now the only way to achieve something similar to what I describe, is to put the comment in the control description, but this is no great because:

 

  1. People tend to not expect control to have VI description.
  2. This does not allow to use arrow and such to directly point  to a specific part of a control.

 

PJM

This is not functional idea, but nevertheless - the point is that context help of boolean operation functions will contain not just text explanation of how does the function work, but also truth table. Thus it will be clearly seen all combinations of input values, and the resulting function output value - visualizing is always better than text description.

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

A tabbed wiring diagram comment field. Not a constant, just a placeholder for free text.

 

17661iA4DF90F9D4D1C4A7

 

 

Firefox is not publishing the PNG data that contains a snippet inside the Drag and Drop info, however the info is stored inside CFSTR_FILEDESCRIPTOR (source) it would be very helpfull if LabVIEW supported this as well.

 

TOn

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!

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.

 

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

When you compare two Vis, one with a control, and the other one with the same control but with a change on the test justification (You can modify it by clicking on the dropdown menu of text settings, next to the pause button)

 

daguero_0-1680115378128.pngdaguero_0-1680115378128.png

 

 

If you compare the vis at this moment it only shows this

----------------------------

Difference Type: text justification

 

As we can see there is missing information regarding other comparissons like label name, object type and detailed description like the following example

 

----------------------------

Label Name: Label1

Object Type: String

Difference Type: moved

Detailed Description: Changed from "(168,132)" to "(12,71)"

 

daguero_1-1680115378130.pngdaguero_1-1680115378130.png

 

 

 

Consider that this is a small scenario (only comparing two indicators) where the difference can be found easily, but if you try this with bigger VIs it will have a lot of missing information

 

The fact that this information is not available is time consuming, eventhough they can be walked manually the record of changes is compromised

I am migrating and updating some of my favorite tools to LV10, and one of the first to make the move is always my Connector Pane Editor.  This is a homemade tool I have had around since LV8.2, which allows me to quickly wire the connector pane in a style reminiscent of the Icon Editor.  I use my version constantly and can not live without it at this point.  I would like NI to adopt something similar for a few reasons.  1) I am a UI pragmatist, and this could probably use a little help in this regard.  2)  It is hard to incorporate tools like this into the IDE.  Right now I use the Tools menu which is ok, but I'd like to get this into the Right-Click menu that we currently use to edit the connector pane.  3) It drives me nuts when I am on a computer that does not have this.

 

Here is a screenshot of my version and zoom on the right-hand side.

 

21055i12DB0EFCA0AC94F9

 

21059iD4CEEA35EC3F9767

 

Features I like about my current version:

1) No squinting and carpal tunnel issues trying to land on tiny terminals

2) Auto increments controls, when one control is placed, the target is automatically incremented so the next control is ready to go.  Arrow keys allow you to skip controls.

3) Front panel image shows which control is currently being wired, which one is currently attached to a terminal when the mouse is over it, and is clickable to choose which control to wire.

4) Control descriptions are editable at the same time.

5) Shift-click grabs the currently wired terminal.  If you want to move a connection, Shift-click to pick it up, move to the new location, click to drop.

6) Clicking on a currently wired terminal replaces that connection with the current target, and makes the previously wired control the new target.  Swapping terminals is a two-click process.

7) Optional autowiring, Error In/Out as well as references/paths can be autowired according to my preferred style.

 

In short, even my crude attempt is an incredible timesaver, I can wire a ConPane in a matter of seconds, without the back and forth trips between the FP and the ConPane with the wiring tool.  A little NI-ification, as well as integration should make it even better.  If it gets screwed up, at least it should be similar to the Icon Editor which can be modified by those who want to badly enough.

 

 

The Compare VI tool is immensely useful, except when identifying changes in case statements, where it is easily "confused". Take for example two VIs where the cases in the case statement are identical except that in one VI there is an additional case at the end, or has a renamed case. When you run the Compare VI tool, everything is out of whack. It shows differences between two case that are named totally different, ignoring the other case that is named exactly the same. When this happens, you end up manually comparing. It would be great if the Compare VI tool would ignore the case order and compare the actual case names when doing a compare, much like a text compare tool would. Maybe even make it an optional setting.

This idea is to improve the QuickDrop search window, to return functions that might be betters suited, based on the datatype of the selected function or wire.  Lets say I have a 1D array of numerics selected and I want to reverse it.  I will select the wire, then invoke QD and type "reverse".  But the first item in the list is actually "Reverse String".  With a context aware QD hopefully the search window will see I have an array of numerics, and prioritize the Reverse 1D Array function, and still include the reverse string but maybe push it farther down the list.  

 

This idea can be applied to the basic data types pretty easily (numerics, boolean, array, string, cluster).  But we could also use this on class wires that are selected.  A class library can have an associated mnu file, which is why some functions you can right click and the corresponding subpalette menu comes up.  So this idea could also prioritize functions that are found in the mnu associated with the class.