LabVIEW Idea Exchange

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

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

 

 

Spoiler
LabVIEW to Android .apk for apps or to Apple mobile

Dear Hot Shot Devs! 

thousands of us want to be able to build a mobile app from LabVIEW!!! 

Can you imagine??

 

All that power with full responsive features on any device, like Swift and Android Studio??

 

you can “hook into” those tools to let us design the User Interface and evening do Bluetooth and Wireless with all’s y’all’s stacks and wizardry!!

 

Consider me as an Alpha tester.  I know what is needed. Let me know the plans!

 

I have been using LabVIEW since before rev 3.0 when we could actually talk to Dr G!! 

great work you are doing. Sometimes I do not enjoy the “abstractions” you do to make it easy. Kind of liked the good ole “bit banging” direct link to Comms and I/O but I understand.  

contact me at Dave.Korpi@gmail.com

 

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

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.

The For/While Loop conditional indexing feature (new in LV 2012) is neat but so far only accepts a Boolean. That's departing with the behavior of the Case Structure selector terminal, which accepts error clusters:

 

ScreenHunter_007.jpg<----------- I'd like to connect the error cluster wire in the For Loop directly to the indexing condition terminal

(the case structure outside is just here to show what I mean by connecting an error cluster to the condition terminal of the Case Structure).

Of course the workaround is simple (as shown), but why introduce an even simpler approach for the Case Structure and not offer it here?

 

Edit: The obvious objection is that some will want to index when there is an error, other when there is none, which in fact might be best handled by the approach shown above. An error cluster connection would need a different contextual menu as well (index on error or index on no error).

 

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

To make the class relation ship better visible I suggest to show the ancestor class name in brackets behind the name of the current class in the project view.

See the picture for better understanding:

 

Andi_S_0-1594038101153.png

 

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

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

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

Comments for code explanation of the block diagram can be added using the text labeling tool but they can occupy too much space.  Many LabVIEW examples use an alternative of placing a marker label such as "1", "2", etc at desired locations which refer the viewer to another comment location on the block diagram where expanded corresponding text is displayed.  This means though that diagram scrolling must be done to see the explanation for the comment.  How about a Help Hint type of "hot" label that when hovered over pops up a short comment and when clicked on shows a more detailed comment.  Similar to the front panel's Description and Tip but available at edit time and maybe not requiring a right click to see the full comment description - just a left click.

 

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".

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

Today, the management of error codes is a little bit complicated. (Error code file to include in executable properties ... )

 

It could be intersting to add a new entry to a project which could list all custom errors only available to the project.

 

This file or project property could be associated with the project as a source code !

 

How many time you'll get an old application ... without all files ... And error code file is a source file. So the error code file should be located near the project ...

Or best inside the project !

 

The best way to manage the custom errors would be to edit them in the project properties like "conditionnal disable symbols".

 

Simplifying the error code management will reduce the none managed errors ( The famous 488 error !!!! which i hate ! )

Having a complete API for zip file

Currently it has :
- New zip file
- Add a file to zip file
- Close zip file and add a comment
- unzip the zip file to a folder

This API is not quite complete.

Example of use of ZIP files: In a data streaming application, you want to make an archive of recordings files. The data files average 500 MB Once compressed, they do more substantive than 50MB. You create an interface to assist the user in steps of compression. Once compressed, you want to propose an interface for retrieving compressed recordings.


The ideal is to list the files and clarify some information, such as track number, recording time and a few other indicators related to data.

But to do that, we 'could' use two ways:
- The properties of the zip file.
- An additional file that would read that to see them.

 

Several problems arise:
- It is not possible to read the commentary added with the close function.
- It is not possible to edit the commentary added with the close function.
- It is not possible to decompress a single file.
In the example, if we unpack all files to read properties, it'll take time and a lot of CPU resources.

 

It would require full management functions:
- New file
- Close file
- Add a comment
- Read the comment
- Erase the comment
- Add a file
- Delete a file
- List all file (with or without a mask)
- Uncompress a zipped file to disk
- Uncompress a zipped file to memory

- compress and uncompress a string in memory (usefull to optimise the network data flow)

 

In the ideal case, a zip file should be considered a folder. So we have all classical file functionality to manage it.

The number of parallel Instance is currently capped at 64, independent of hardware. This limit should be raised.

 

First Reason: Since even 64 bit Windows 7 supports up to 256 cores, it would be reasonable to raise that limit to 256.

 

(Even the next version of windows mobile (8) will support 64 cores. (Mobile! On a Phone! 🐵. Obviously the upcoming hardware is fast moving in that direction.)

 

Second Rason: Sometimes it is useful to generate many instances, even if we have fewer cores available, for example maintain individual data in a large number of identical reentrant subVIs. (Such an usage example where we want many instances even on a single core machine can be found here)

 

Idea: Raise the max number of parallel Instances of a parallel FOR loop to 256.

When compiling a Polymorphic VI with many members, it's kind of awkward to press the "Edit Name" button each time, fill in the values, click OK, select the next member, repeat & rinse.

 

Why not allow direct text entry into the table shown in the picture instead of having to jump trough some loops?

 

Direct Polymorphic VI Menu entry.PNG 

 

Shane.