LabVIEW Idea Exchange

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

Hello,

 

In many of my applications i had to run dynamic assynchronous VIs using a VI path.

 

When the VI you want to launch has some problems (VI broken, missing ressources, ... ) you get the generic error 1003. (The VI you want to launch may be broken ... ? )

 

This error can be easily solved when you are using LabVIEW IDE. Smiley Happy

 

But sometimes, this error can occured in an executable you have deployed to your final user computer.

And then, the error 1003 (The VI you try to call may be broken ... ) is a little bit poor in order to analyse the problem. Smiley Frustrated

This error occurs, for example, when the dynamic VI tryes to access missing DLL's.

 

It would be nice, if the error 1003 message, could be filled out with and additionnal "error description", giving more informations about the error source.

For example, an error list, like the error list in the LabVIEW IDE. (Broken arrow error list !)

 

Thanks a lot.

 

Manu.

First of all, this is not a duplicate of this, by Case Selector I mean Case Selector and not the label.  It may well be a duplicate of something else...

 

I doubt that I am the only one who uses multiple conditions.  This usually leads to nested Case structures, building boolean arrays, or obfuscated mapping functions between the conditions and some enum.  Other times, the case structure is half-of-a-screen wide just to accommodate the values associated with the different cases.  I would suggest that NI add multiple Case Selectors to the Case structure.  Additional selectors could be pulled down like a shift register, or added via a right-click menu.  Either way, I don't think they should be allowed to cross, so the top-down selectors map to left-right selector labels.  There could be a reasonable limit to the number.

 

Over the years I have run into situations where I have to monitor files accessed by another application from within my LabVIEW application (Example: monitoring the standard_out/standard_error files from an app launched with the system exec).

Currently the only way to do that is to use polling. 

 

I would love for LabVIEW to have built in events for file monitoring so polling would no longer be required.

 

For instance, the following events would be very useful:

  1. File Opened
  2. File Closed
  3. File Change  (I really want this one if nothing else)
  4. File Created
  5. File Deleted 
  6. more...

 

Below is an example as to how it might look like.

5-20-2010 9-20-09 AM.png

 

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

 

 

Currently it's only possible to have drag and drop events for files on a path control.

 

It would be usefull if we could have drag and drop events for files on any control.

This way simpler GUI can be build with a very nice user experience.

 

Ton

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 thought something similar was suggested before, but I cannot find it).

 

It is often necessary to deal with "malformed" spreadsheet strings, where there is more than one possible delimiter.

 

One example is discussed here, where a delimiter is either ",", "N", or a combination of the two, but the same has come up before. In my typical case, users sometimes use notepad to edit spreadsheet files, randomly replacing tabs with multiple spaces, multiple tabs, or a combination of tabs and spaces, so it "looks" aligned, but spreadsheet string to array will choke on it.

 

"Scan strings for tokens" has that useful feature to allow the definition of multiple delimiters as an array and (by default) consecutive delimiters are contracted into one (option "allow empty tokens?"=false). This makes it easy to parse lines (delimiters: \n, \r) or fields (delimiters: \t, \s). An example to deal with dirty strings is given here.

 

"Spreadsheet string to array" already accepts arrays of delimiters, but they are treated as alternatives and multiple consecutive delimiters are NOT contracted into one. I suggest to add an option to "Spreadsheet string to array" where multiple consecutive delimiters will be contracted into one for parsing. (or it could be named "allow empty tokens?" as above for simplicity, default=true to keep current behavior)

 

For example if I wire a delimiter array containg a single space element, it would treat multiple spaces as one.

If the delimiter array contains a tab and a space, consecutive spaces and tabs (in any order) will act as a single delimiter. The above quoted example would have a delimiter array containing two elements, "N" and ",".

 

Suggestion: add a boolean input to treat multiple consecutive delimiters as a single delimiter. For example, the two code fragments in the image should give basically the same result (The upper part is slightly defective and would need a little bit more code if lines end in a delimiter, but I think the idea should be clear).

 

The suggestion is at the bottom:

 

 

 

 

The "Save As" dialog does remember the last selection (this is nice). But sometime when going from "Rename" to any "Copy" operation there are one too many click.

 

This is what you have to do if you want to go from "Rename" to "Copy>>Open additional copy".

 

9-29-2010 3-44-02 PM.png

 

Instead this is what you should be able to do.

 

9-29-2010 3-08-58 PM.png

 

This is fairly minor (and a low hanging fruit) but this will improve usability.

Provide a new command line option to show the block diagram of a VI in addition to and above the front panel automatically. I almost always open VIs in my project folder from a terminal and most research and development work is on the code. See current arguments here: https://www.ni.com/docs/en-US/bundle/labview/page/lvhowto/lv_defined_args.html

As LabVIEW evolves more and more, the compiler takes over an awful lot of code optimisation for us.  This leads us to situations where relatively large and important pieces of code can be evaluated at compile time and constant folded which can greatly aid execution speed.  This is good.

 

Constant folding can be a great aid when programming but at the moment, it's usage is a bit "hit and miss" due to the opaqueness of the process.  We already have constant folding highlighting, which really helps things (even if the feedback is sometimes very hard to understand).  But this doesn't always give us enough feedback.

 

What I would like is the option to declare a portion of code as "Requires constant folding" (like a "Precompile" structure).  In this way, I can, as a programmer, designate some code which is meant to be evaluated at compile time.  If the compiler is unable to constant fold this code, then the VI should be broken.  My motivations are three-fold.

  1. Sometimes we want to specifically make use of the constant folding capabilities of the compiler, but a small change can result in the code no longer being constant folded.  I would like explicit feedback when code I want constant folded is not constant foldable.
  2. I have no idea whether code complexity has an effect on the ability to constant fold.  Other compiler optimisations (Like unbundle-unbundle inplaceness) are dependent on code complexity.  Explicit declaration is not code complexity dependent.
  3. When looking at FPGA designs, the ability to perform constant folding of data otherwise requiring resources or affecting performance is very powerful.  In such a "Constant folding" code, we could also allow mathematical functions to be used which are otherwise not supported on the target (max/min of an array in a timed loop for example), or creating default data for an array (to be used as Block RAM) based on an existing equation where constants are defined as DBL.

 

One example of FPGA code is automatic latency balancing of several parameter pathways into a process where the code accepts abstract parameter objects whose latency is queried via a dynamic dispatch VI which simply returns a constant.  I use dependency injection to tell the sub-VIs which communication pathways they are being given and they can then query the latency and do some static timing calculations for the delays required on different pathways.  Tests have shown that this is constant folded and that it is thus possible to write very robust FPGA code which auto-adjusts request indices for parameters in multiplexed code.  At the moment, things seem to work but the ability to specifically designate such code as being constant folded would be welcome to make sure I don't accidentally produce a version which doesn't actually return a constant (and my compiles fail, I get timing errors, or just over-use resources)....  In the code below, all of the code circled in blue is constant-folded when compiling the FPGA code.  In the sub-VIs I have to do some awkward calculations because certain functioanlity is not available on FPGA.  By defining this code as requiring explicit constant folding, I could theoretically utilise the full palette of LV functions and also be guaranteed a compile error (LabVIEW error, not Xilinx) if the code thus designated can not be constant folded.

 

2016-09-15 10_13_00.png

 

So in a way, it's similar to the In place element structure which, when all goes well, should not be needed but there are cases (I've run into some myself) where either small changes in code can make the desired operation impossible or where the code complexity can cause the optimisation to not be performed.  As such, it is still required at times to explicitly designate some code paths as being In-Place.  I would like to have the same functionality for "Constant folding".

Here is a small tweak that would save me a lot of development time (when added up). When I create a new cluster for a typedef or on a front panel, the cluster shell should default to the Arrange Vertically autosizing format. This is already the case for new class clusters, and it is really nice to use! It is a pain to repeatedly configure this setting after dragging a new control type or types into the cluster and have it mostly obscured behind the cluster shell.

 

It's a small improvement, but these small improvements really add up or time!

I often find myself switching between different machines and different versions of LabVIEW and one thing always bugs me.  Sometimes I have to work on a customer's machine with their (almost always) awful settings.  The settings for the development environment are always different to what I want no matter what I do.  It's a pain to have to keep all up to date.

 

While I know others have suggested moving the ini file to the user folder or allowing us to choose the ini file, I would like to go a step further and allow us to enter a web URL to access our ini files.  This way I can work effeciently on anyone's development computer with minimal effort and we can even share our settings if we want to.  We could have community INI files for others to use.

We experience two use cases that is quite hard to complete 100% succesfully:

 

1) When we work several developers on a project we need to have identical development environments on our computers or else we get "dirty dots" on our VIs when another developer opens them from SCC. The development environment consists of at least LabVIEW version, modules, tool-kits, device drivers, patches, service packs, maybe TestStand, and maybe third-party tools as well.

 

2) If we need to recreate a particular development environment because a customer wants an update to some existing application.

 

The first one we try as hard as we can to achieve with lists "handed around", but it's almost impossible to extract all the version information from the installed environment (you have to look many places and filter each list manually), so it's extremely easy to miss something. The second one can be achieved with images on virtual machines, but sometimes VMs can't be used due to hardware or IO limitations, legal rights and what have you.

 

So I suggest some form of tool that lets you export an .msi that you can run on another machine, that tells you what to install to replicate the dev environment the .msi was created with:

 

ExportMenuSelection.jpg

 

The tool could be available from the various Tools-menus, and maybe from the MAX, from Start->Programs->National Instruments etc. It could open up a configuration dialog like this:

 

SelectDialog.jpg

 

The install script (.msi or similar) shouldn't contain any applications itself, but would just be a guide to get the proper tools installed - you must have access to the install media and activation codes yourself, but you would be told what to install, and the script would be able to verify that the installer you're pointing it at really installs the correct version. It should be possible to skip steps during the install guide process, and it would be great if the installer would also be able to handle already installed versions (both the correct and the wrong versions = different actions available).

 

Cheers,

Steen

This may have similarities to Pelle S - Quick Wiring, but wouldn't it be nice if you could drop a VI on to a wire such as the Error In - Error Out wire on a diagram and it auto connect to the VI's Error In and Error Out connectors.

auto-connector to VI.png

It would be nice, if you could resize a structure to a minimum (a small padding should be left over) with simply double-klicking on these small blue "resize-squares". It should function with every "resize-square".

resize structure.png

Currently the exponent function (x^y) is hidden deep within the Mathematics >> Elementary and Special Functions >> Exponential Functions.  However this is a very commonly used mathematical function that should be in the palette right next to add, multiply, etc.  Most people don't even know it exists and probably would benefit from having this easily accessible.  I suggest this function be moved to the numeric palette as well as given an icon similar to the rest of the basic math functions.

 

exponent.jpg

I like the concept of the probe watch window in LV 2009.  It is equivalent to using watch windows in other languages like Visual Basic.  However, I haven't used LV 2009 enough yet to get a feel for how I would use it.

 

With LV 8.6 and earlier, the probe windows are separate entities and detached.  This is good if you need to quickly jump to the front panel to hit a button or change a value and see the changes that are occuring the block diagram.  However, there are some issues with viewing them on the block diagram.

 

I'm watching a control loop subVI.  I've opened up a dozen probes to look at the values on the wires at different parts of the block diagram  (I'm not using highlight execution as I want things to run at full speed).  I scatter the probes around so that they are near the wires they represent.  That way at a glance I can see the path of data and how the decision structures are working.  However, if I need to scroll the block diagram, or move the whole window to look at something else, the probe windows stay where they are and obstruct the view of the other things.  Then it is difficult to relocate the window or scroll bars so that the probes line up with their wires again.  If I am doing this with a couple of subVI's, then all the probes intermingle and it is impossible to tell whether a value is from the visible subVI or a subVI that is hidden underneath a few other windows.

 

What I propose is an attached probe.  Once you place it on the block diagram, it stays associated with that location/wire.  move the window, it moves.  Scroll the diagram, it scrolls.  Hide the window, it hides as well.  Also make the window slightly smaller so you don't need all the space for the title bar, X button.

 

Go one step farther and instead of making it a probe, let it be what is essentially a front panel object on the block diagram.  So that it looks like a basic indicator, or a boolean LED, or even an array or graph.  You drop it on the BD and wire it up.  When you are done, you delete it.  Scroll the BD, move the window, things stay where you want.

 

See BD indicators.png for the proposed way and Current Way.png for the problems with the current way.  I did put the images in the message, but they filled the screen and overlapped other parts of the web page.

Message Edited by Ravens Fan on 09-16-2009 05:18 PM
Download All

A new function that indexes the last element of an array would spare some place on the diagram or avoid to use a subVI !

Or the Index Array function might be enhanced (First, specified Index and Last).

 

21748i0E884F1728A1398B

Currently, it takes LabVIEW user the same amount of time to find and select commonly used functions as ones they never touch. The function palette requires the user to interface with all of the hundreds of functions, including the vast majority which they do not use on a regular basis to select ones they use often. If, for some reason, the user was working with the "NI435X configure port in.vi" regularly, it would take clicking through 7 menus every time they wanted to drop the block. It also makes it very difficult to find, as there are 7 levels of places the user could go wrong trying to find it.  

Example: menus.JPG

 

Many other programs, particularly CAD and CAM, have minimized this difficulty by allowing the user to add in customizable toolbars to his GUI. They can be either floating or attached as well. For instance, Solidworks allows the user to create custom interfaces which can look like this: 

:

CAMWorks_4ax.jpg

 

A large portion of the regularly used functions are all displayed at once on the customized toolbars on the top. For regularly used (or self explanatory) functions, like "multiply" in LabVIEW, no space is wasted in the description area, and the icons can be scaled down quite a bit. For multiply, it takes the click count from 4 to 1 (right click, programming, numeric, multiply to simply a drag and drop). Much more time can be spent coding, instead of looking for blocks.

 

Furthermore, there are many ways to customize the Solidworks GUI, which can be seen below. The first window allows the user to select which toolbars are on the screen, as well as set hotkeys for any action in the program, also a great feature. The second window (from right clicking the toolbar) allows the user to select which icons in each toolbar are actually on the screen. The toolbars can also be dragged to various locations, be seen with -or without- large icons and text, and be floating or attached, all great features. 

.

solidworks GUIs.JPG

 

 

I would love to see a labview that looked like this:

 

LV with toolbars.JPG

 

Also, Im not suggesting getting rid of the functions palette, only allowing the user to place SMALL (preferribly smaller than on the FP), perminent icons where they need them instead of only using the rather unweildy functions palette for everything.

 

For reference, here is a good article which covers the Solidworks Command Manager:

http://www.solidmuse.com/2008/01/customizing-the-solidworks-2008-command-manager/

 

Regards,

Kyle Mozdzyn

Applications Engineering

National Instruments

I was searching for occurences of a reference to a Graph in one VI, and as I was interrupted, came back to the search result after the interruption, only to discover that the Search Result Window did actually not show ANY kind of useful information regarding the object I was searching references for:

 

Screen Shot 2014-08-19 at 18.03.18.png

 

I know I have outrageous expectations as a LabVIEW user, but this seems to me an odd lack of feature:

 

- From this window, I have absolutely  no clue what I am searching for. In particular, if I have in the mean time jumped from windows to windows...

- ...there is no way to go back to the object these references are linked to (unless I go to one of the references and then look for the Control or Indicator they are associated with).

 

Of course asking for a VI information when this is provided in the list below is maybe unnecessary.

But consider this global variable whose references I was looking for:

 

Screen Shot 2014-08-20 at 10.12.34.png

 

Same thing here:

- I do not know the type of the global.

- I do not know which VI it is part of (Globals are saved in a VI).

- I do not know where I started my seach from (but that's more of a back-to-source button issue).

 

Suggestion: provide as much information as possible about the starting point of the search, when said starting point is an object (by contrast to a text search).

 

Tested in LV 2013 SP1 64 bits.