LabVIEW Idea Exchange

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

Being able to set the default target build folder for anything I build in LabVIEW would be a nice convenience for me.  Currently, when a new build is created the default path is relative as "..\builds" from the current project folder.  I would like to be able to change the default to a physical root path to something like "C:\Users\<username>\LabVIEW Builds\".

 

Back in the day (up to LV8.6) there was an option to enable or disable the ability to delete FP controls by deleting their BD terminals.

 

DeleteFPControls.png

 

This was both great and very annoying which made it hard to decide to leave it on or off.  I had a slight lean toward off with its previous incarnation.  Now you have to set an ini key to get this behavior: copyDeleteFPDCOFromFPTerm = True/False.  It was great when you wanted to delete a structure or group of objects in a BD, but save the controls.  It was annoying when you actually wanted to delete the control from the BD.

 

I do not want this back as is (as was?).  I would prefer a small change.

 

The default setting should be to blast everything as happens now.  Same as setting the old option to True.

 

The new setting should behave as follows:  If a selection contains more than control terminals, then everything but the terminals should be deleted.  The terminals should be selected though.  A selection containing only one or more terminals would result in deletion of the controls. 

 

In this way, let's say you are deleting a structure with some controls inside.  Select the structure and delete it.  You should be left with a selection containing the terminals which were inside.  Delete a second time to get rid of them, or move on if you would like them preserved.  Selecting a terminal and deleting it works normally.
 

 

I know that this idea exists, but it was submitted in 2009 and I haven't seen any progress in this area. The bottom line is that we need a better way to support different languages in built applications. Importing/exporting strings is tedious and there is no good way to work with these files.

 

My suggestion is another attribute for every control which contains the name of a string in a language file. I've chosen to show it here similar to php, but any other way to denote that it's a localized string could be used, maybe a different color.

 

controlcontext.png

 

In this example, there would be a string with the name "control1" in each language file that gets loaded based on what language is selected.

 

There should also be a way to add a "free localized label" to the front panel and a "localized string constant" to the block diagram. This way you can use string names in labels and constants that will be replaced with localized strings from the current language file at run time.

 

messagebox.png

 

The file could be simple xml:

 

<string name="control1">
  <text>Input Number</text>
</string>
<string name="fileNotFound">
<text>The file you selected does not exist</text>
</string>
<string name="okButton">
<text>OK</text>
</string>

An interface to edit language files could be as easy as a dialog box with a 2 column table containing string names and text.

 

One language file will be the default. The VI should be broken if the string name isn't found in this default file. When changing the language either by the OS default or a property of the application, all localized text is replaced with strings from the new language file. Any that aren't found fall back to the default file.

 

Most of this is based on the way Android programming handles localization, which makes it incredibly easy to implement.

Hi.

 

Most nodes in LabVIEW have what is coined 'standard error in functionality', which basically means the node is skipped if an error is present on its error in terminal - like this Defer Panel Updates property node below:

 

Normal.png

 

A smaller subset of nodes behave differently if an error is present, usually by running anyway which is the case for the Close Reference primitive for instance.

 

Sometimes it's desirable to run one of these nodes with standard error in functionality also in case of error, and then one has to resort to something like this clearing the error before the node and bundling the error wires afterwards to maintain dataflow priority:

 

Around.png

 

I suggest a new Run Even If Error option for property and invoke nodes, similar to the Ignore Errors Inside Node option in the context menu:

 

RunEvenIfError.png

 

This could be expanded to other nodes/functions/primitives as well...

 

Others.png

 

...but this time around I'm only suggesting this for property and invoke nodes as that may hit fewer obstacles.

 

Cheers,

Steen

You can access the data in your class using property nodes.

 

Property Node.png

 

 

Currently all you have to do is select "Make available through Property Nodes" when creating your accessor. I think it would be cleaner if there were simply an Access Scope setting on the control like so:

 

Access Scope.png

 

 

The idea here is that there is no VI behind the scenes. If you later decide that you want to keep the data private, all you have to do is change the setting. You don't have to remember to delete the VI.

 

I am guessing that the majority of class VIs are simple accessors. This idea will reduce the number of files to create and lug around increasing edit time performance and would make your class libraries load faster.

 

Many people (myself included) do not prefer property node access because they can be big and clunky. A possible enhancement to this idea is to put a "Universal Accessor" in the Cluster, Class & Variant palette that looks and acts like a polymorphic VI.

 

Universal Accessor.png

 

[Edit: the polymorphic selectors in the above image should just say 'Numeric' instead of 'Read Numeric' and 'Write Numeric' as that is implied]

 

Stellaris Launchpad.jpg

 

I’ve already put up ideas, about 7 weeks ago, for four development boards that could be LabVIEW targets:

1)  LabVIEW for Raspberry Pi (current kudos 139)

2)  LabVIEW for Arduino Due (current kudos 74)

3)  LabVIEW for BeagleBoard (current kudos 49)

4)  LabVIEW for LM3S9D96 Development Kit (current kudos 15)

 

I wanted to leave it at that to gauge LabVIEW community/user interest, however an exciting new board has just been introduced, which is too good to leave out. It’s the Texas Instruments Stellaris Launchpad.

 

It’s very attractive for three main reasons:

1)    It is very easy to get LabVIEW Embedded for ARM to target this board (a Tier 1 port)

2)    The microcontroller is powerful with many useful on-chip peripherals

3)    The price is extraordinarily low.

 

The Stellaris Launchpad features are:

  • ARM Cortex M4 with floating point unit running at 80 MHz (100 MIPS)
  • 256 KB flash
  • 32 KB SRAM
  • USB device port (separate from the USB for programming/debugging)
  • 8 UARTS
  • 4 I2C
  • 4 SSI/SPI
  • 12 x 12 bit A/D channels
  • 2 analog comparators
  • 16 digital comparators
  • Up to 49 GPIO
  • and more

 

The most interesting feature is that it costs $4.99 including postage. Yep, just under five dollars!  Including postage!  I’ve already ordered two!

 

The Texas Instruments Stellaris Launchpad can be programmed using the free Code Composer Studio in C/C++ or the free Arduino IDE using Energia from github. Both great ways to program. It just needs LabVIEW as the third exciting programming option.

 

Wouldn’t it be great to program the Stellaris Launchpad in LabVIEW?

I propose that the Execution section of the VI property node include ALL of the options in the Execution pane of the VI Properties dialog.

 

Execution Properties.gif

 

This would allow programmatic changing of variables like Auto handle menus at launch that I would like to change programmatically across an entire project at once (since I didn't take the time to do so one-by-one as I developed my application). These should probably be False by default anyway Smiley Wink, as commented here.

 

Execution Property Change.gif

 

I currently have a program that sets Allow Debugging and Automatic Error Handling to True or False depending on whether I am developing or releasing software. I would also like to add Auto handle menus at launch to that list.

 

Who's with me?

Based on discussion at the CLA Summit with Dave Snyder and others: The 'Standard State Machine' available through the 'New...' dialog is not a state machine at all.  It needs to be called something else.  Other implementations commonly referred to as 'state machine' are in fact not; As has been pointed out by Elijah Kerry: "State Machine is a misappropriated name for a Queued Message Handler."

 

I think this is worse than misappropriated; it's actually quite misleading.  The main problem is that Commands (or Messages) and States are two different things and shouldn't be used interchangeably.  

 

I propose LabVIEW ship with something similar to what I attached.  Although it's lacking many of the features that a full-blown state machine ought to have, it does capture the basic premise: "A state describes a behavioral node of the system in which it is waiting for a trigger to execute a transition." [http://en.wikipedia.org/wiki/Finite-state_machine]

 

Those of you with knowledge on this subject, please comment here with suggestions for this code that might bridge the gap in making this a useful template for people who understand state machine design but also still keep it as a good starting point and learning tool for beginners.

The attached code is multiple files, since I used type defs for States and Commands.  Replacing these with string constants would quickly turn the template into a single VI. 

 

stateMachineFrontPanel.png

 

simpleStateMachineBlockDiagram.png

In one of my project, encountered a situation to change the front panel cluster look from modern to classic and i found there is no option to change the looks. Then i created classic cluster constant and replaced all values from modern to classic. What will happen in case of more controls/Indicators on the cluster? 

So what is wrong to suppose have an option to change different looks for the front panel objects. This is applies to arrays on the front panel.

 

 


img.JPG

If you make a control into a type def (a standard type definitions, not a strict one) copies of it will no longer have scaling options in their contextual menus. Why? You can still rescale it manually, even change its looks (as it is not a strict typedef), so why is it not possible to set it to scale with the pane. Is this by design, or is it a bug?

 

typedefNoscaling.png

 

I could understand it if this only affected strict typedefs (although a separate idea would be to not necessarily restrict the size of such typedefs either, only their value options (if any) and/or other visual traits), but not regular typedefs...the fact that they allow manual size manipulation makes it illogical that automatic scaling is not available too. And there is even a way to fool LabVIEW into allowing you to turn on scaling; just remember to set the scale feature ON before you connect it to a typedef...it will then automatically scale, although you no longer will have access to turn that off/on(!). (Not unlike the very nice bug that allows us to scale controls on multiple tab pages as long as we do it on all pages without running the code in-between...shhh...).

 

When dealing with shared variables can we add a Change to Read and a Change to Write like we can do for constants, controls and indicators.

 

When you right click on a control you have the option to change it to a constant or an indicator. I feel the UI would be more consistent if shared variables should have something similar instead of having to go to Access Mode>>Read or Write.

 

When you're reading from a shared variable and you want to right just have a choice under visible items for "Change to Write" and vice versa.

 

Numeric constant.JPGshared variables.JPG

Hi,

 

Now when I right click on the broken, unfinished wire with intention of creation adequate Indicator/Constant/Contol they will be created but not connected to the wire.

 

Capture5.JPG

The improvement would be when the requested item will be connected as well. 

 

At the moment a properies node can be linked to one object, e.g String, Boolean etc.

to change the properties of that object.But sometimes it would be usefull to have a

new type of properties node (a second beside to the existing one) whre the logic

has inversed.

 

NOW: 1. Propertie Node -> link to ONE object -> select from a lot of properites

 

PROPOSED: 1. Propertie Node B, -> select ONE properties -> link to more than one object

 

Properties Knot.png

Hi.

When you have a big projet, offen you have a lot of build.

Main application, main application in debug mode, installer, update for other version, some tools, ...etc.

 

Example of projet.

 

build 2011.png

 

You can make a right clic on the specification of construction a select 'buid all'.

But in this case, it can be very long and not amways needfull.

 

My suggestion is to have a way to create sub trees in the construction specification.

 

 

new build.png

 

It is more readable

and we can make 'build all specification' of a sub specification.

 

Regard's

EricC

 

 

 

 

 

 

 

When a user wants to perform a CBR or async CBR, they must pass a strict type specifier to the Open VI Ref node.

 

If the user wanted to call or asynchronously call a VI but did not want to pass any parameters, it would be nice if there was a way to call VIs that did not require a strict VI reference.

 

The Open VI Reference would need to know to reserve the target VI without a strict VI reference wired in as a type specifier.

    • Option 1: Add a new option flag. The CBR nodes will need to be updated to potentially allow non-strict references. This would prevent some compile time error checking by moving the check to run time.
    • Option 2: Create a new VI class to specify a typeless call. This new class would be wired into the Open VI Ref type spec input. The advantage to this approach is the user would get the same compile time error checking they do now.

There are many reasons to create a sub VI, but one of the most common reasons is simply to reduce block diagram clutter.

 

For example, I'm developing a user interface VI and some part of the code starts to get too big for the available block diagram space... After pushing the limits of sub VI density and exhausting all my clever wiring tricks I eventually surrender to the fact that I need to create "yet another single use sub VI"... 

 

This is one of those things that always bugs me. Why?? Because I know I'm adding some project load time, an execution performance hit, some file system clutter... and all I'm getting in return is a sub VI that will never be used anywhere ever again. 

 

So here's my idea:

Allow creation of a "pseudo VI". It would work just like creating a normal sub VI, except no new file would be created. Rather, its code would remain as part of the parent VI, but it would appear as its own entity on the block diagram (just like a normal sub VI).

 

  • The pseudo VI would have a name relative to the parent, e.g. "myLlibrary.lvlib:myParent.vi:myPseudo.pvi"
  • It would be visible in the project as a child of the parent VI
  • In practice it would behave something like an inlined sub VI
  • Because its code would reside inside the parent VI there would be minimal/no performance implications arising from its creation
  • A menu option would exist to convert the pseudo VI to a normal VI
  • (As an aside, this may also be a good way to achieve the "hard inline" functionality described in this idea)

 

pseudoProject.png  pseudo.gif

When configuring a polymorphic VI you can enable "Allow Polymorphic VI to adapt to data type". This applies to input only:

 

Poly.png

 

I suggest to let this apply to output also. If there are any issues with enabling/disabling both together, it could be split into two selections: "Adapt to source" and "Adapt to sink" (or similar wording).

 

Cheers,

Steen

Currently the NI Vision Toolkit can only read AVI movie files (and not all AVI's either Smiley Sad).

AVI.png

 

I would like to see support for all (or as many as possible) of the other formats including:

 

The Windows Media Format (*.wmv)

The MPEG Format (*.mpg, *.mpeg)

The Quicktime Format (*.mov)

and perhaps even the Shockwave (Flash) format (*.swf)

 

The quick drop selection list seems to have a random or otherwise unintelligable order. The most commonly frustrating example in my case is Bundle and Unbundle by name:

 

Smiley SadUseless Guess

 

I have to type more letters because the regex search on 'u' returns lots of results and they don't seem to be sorted:

 

Smiley MadUnbundle Quick Drop

 

When doing OOP in LabVIEW, bundle/unbundle by name is a very commonly used VI. Every time I want to insert it into a class/cluster, I have to type either the whole first word and a space, or use the arrow keys after the first three letters. What would be more useful is if Quick Drop kept track of the VIs I drop and count their frequency. At the top of the list should be the most frequently dropped VIs, then all the other VIs that match the letters typed so far. This way, because I use unbundle by name so often, I would just have to type U and it would be the first result:

 

Smiley HappyBetter Quick Drop

 

TLDR: Quick drop should learn from usage and prioritize results based on frequency of selection.

The "Run Continously" tools is typically used as a debugging tool to quickly play with inputs for "pure" subVIs that don't have a toplevel while loop (see also my comments here). This sandbox mode has the unwelcome side effect that the computer uses 100% of at least a single CPU core while doing so, starving all other processes that might already run on the computer. It gets even worse if I use "run continuously" on several subVIs at the same time. (Yes, I am a multitasker! :D)

 

Another use of the continous run button seems to be a certain other class of users. Also in this case, the high CPU use is a serious drawback.

 

All use scenarios I can think of suffer from this. There is no real advantage to run this fast without taking a breather.

 

My suggestion (first mentioned elsewhere)  is that there should be an implicit small wait (e.g. 10ms) between each restart so the continuouly running VI behaves more politely and is less demanding of system resources.