LabVIEW Idea Exchange

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

I'm finding that often my classes have some sort of dynamic private data that needs to be initialized before the object will work correctly.  (Queues, User Events, etc.)  Currently I have to implement some sort of initialization vi that the class user must call every time an object is created.  If the user forgets to do this Labview raises an invalid refnum error.  There are workarounds such as wrapping the class in a .lvlib, using class factories, or checking the queue refnum with every class sub vi.  However, they are workarounds that require extra coding and add complexity.

 

I'd like to have the ability to define a private class constructor that fires behind the scenes every time an object constant or control returns the default value during execution.  With this ability I can be certain the object's dynamic resources have been allocated correctly and it simplifies the api for class users.

I spent some time the other day troubleshooting a problem and couldn't for the life of me figure out why my program wasn't working. By chance, the guy who'd installed the runtime engine on the computer I was installing to had left the executable on the desktop. He had used the minimum install that's normally for remote front panels. It would be great if there was a warning when you tried to run a program that needs the full run-time install but only the minimum was installed. Most of the program worked (a suprising amount actually), but it was only certain features that didn't. The features that didn't work (like TDMS logging) wouldn't throw an error either, even with debugging enabled. If there had been a pop-up warning that the program wouldn't work completely with the current run-time engine, I would have saved a couple of hours of combined time between me and the other engineers trying to run a test.

When you press 'Build All' in a project, it builds each build spec in the order they appear in the project.  This will cause some build specs, like an installer, to fail or package the wrong version of components if it appears in the list before one of the components it is packaging, like an exe or web service.

The process that performs the 'Build All' needs to inspect each item for dependants and build those first.

If this is too hard, at least add some documentation that warns developers of this issue. 

I'd like to have a user dialog that shows a message to the user but doesn't wait for the OK button being pressed to continue. I want to use it as a simple informative pop-up window that the user can close whenever he or she read it, without my code having to wait for the OK button.

I now use a self made VI that I call using the VI Server method 'Run VI' with 'Wait until done' set to FALSE. Or did I miss something obvious?

 

Manu

The Lego NXT software release (not toolkit) is a wonderful interactive environment, that should be provided as an add-on application

on its own, call it "block application builder".  I see many useful applications in a variety of different industries where businesses wish to extend to their customers interactive and intuitive interface that they can program in their desired configuration of the product's behavior according to their own use cases.

 

That means we need an environment where we can prepackage blocks that is functionally specific to their applications, with ability to sequence them, run them in parallel, add conditional runs, and iterative loops. The blocks themselves could be computational in nature, or additionally provide user interface popups for interrogating the user, and have access to the full range of Labview functionality. Each block properties settings can appear as front panel settings for user to customize the behavior of that block. This is exactly how the

Log mindstorm software was configured, except we ask that you extend the availability of that functionality for the general users to develop their own intuitive applications using the same environment framework design. This application can target building the customer created sequence of operations as a windows .exe or .dll. We also would like to customize the menus in the application. In other words, make the Lego mindstorm application a generic template for us to develop our own applications with similar intuitive framework.

What if I had this:

 

idea1_1.PNG

Then I wanted to insert something with similar terminals:

 

idea1_2.PNG

 

I'd end up with this:

 

idea1_3.PNG

 

But the Error terminals aren't wired! So maybe I should be able to select both wires:

 

idea1_4.png

 

Then Right Click » Insert Write Node:

 

idea1_6.PNG

 

Then I'd have this:

 

idea1_5.PNG

 

How easy would that be!?

 

 

 

 

 

Traditional IVI drivers haven't worked. The industry has been waiting for this for too long.

 

Best regards, Pavan

Sorry if this is a duplicate.  I though I posted this a couple of days ago, but it hasn't appeared.

 

 

These are suggestions for this site:

 

Add a label: "Ideas Exchange Enhancements"

 

Put "Previous" and "Next" at the top of the page as well as the bottom.  Better yet allow us to go to the first, last, or particular pages like other forums (ex:   << 1 2 3... >>).  Put this interface at top and bottom.

 

In advanced search give the option to go to the PAGE the idea appears on rather than the idea itself.  Currently if I search for a particular date (the last time I looked at ideas) I get a list of ideas for that date.  If I click on an idea I go to the idea itself and any posted comments.  There doesn't seem to be a way to get to that day's page of ideas short of starting at the first and clicking on "Next" over and over.

 

I would like to see a case statement that would work like a switch statement in C.  You could wire a cluster of information to the input that has all the data of interest in it, such as the values of A, B, C, and D.  Each page of the case statement would have a complex logic statement that defined what it handled, such as "A<3 and B>4".  If this was false, it would drop through to the next case.  If none of the cases were true, it would drop down to the default case which would always be last.

 

Another possibility instead of a cluster would be using one input for each variable, just like the formula node uses.  You could enter a name for each input that would be used in the case statements.

 

This would have saved me a bunch of time in a recent program, where there were three possible values for A and three for B, as well as C and D.  The cases ended up being nested four deep, which is something of an editing nightmare.  The ability to do multiple comparisons within a single case statement would have been wonderful.

 

It might be a little confusing to keep track of the order/priority of the cases.  We might need some sort of tool for viewing the whole list of cases and editing each case, sort of like editing the list of values for an enum.

 

This idea was inspired by JeanPierre's request for an if else statement.

 

Bruce

Message Edited by Bruce Ammons on 07-30-2009 10:42 PM

I really like block diagram cleanup in 8.6 but it does not handle labels very well at this time.  We stopped using floating text for code documentation since cleanup sends them to the lower left of the diagram.  Instead we started using labels for structures, VI icons, etc.

 

The 'space' the labels occupy should not be ignored.

LV_label.PNG

 

-Brian

LabView Control and Simulation Design Toolkit

 

-A simulation subVI fails to compile if an initial condition of zero exists on an integration block.

 

 IDEA: Run a zero initial condition check on a system before attempting to compile.  If the condition exists, don't attempt to compile and report the problem to user.

 

 

 

-A simulation subVI fails to compile if a change is made after the subVI is created.

 

IDEA: If a change is detected in the subVI, force the subVI to recompile every time a file command is implemented.

 

As mentioned at the end of my comment here, editing text is a bit clumsy. There should be a text toobar that is similar to what we can find in any other application.

 

Maybe it could be dynamic so it only appears when editing text.

 

Here's the quote from the other thread:

 

One thing that should be improved is the font pulldown which feels so early 1990's. When working with text, we want a text toolbar like anywhere else, (even in the post editor here in the forum!) with a bold, italic, etc. buttons, font and size rings, etc. You know what I mean!

The built-in LabVIEW comparison and array sort primitives are inadequate for many applications involving clusters.  For example, the clusters may contain elements that

  • Cannot accurately be compared using the default method, such as case-preserved but case-insensitive strings.
  • Have a comparison sense (in a particular instance) that is opposite in sense to another member of the same cluster.
  • Weight the ordering more heavily (in a particular instance) than another member, but whose location in the cluster is below the other member, and so have less effect on importance than the other member.
  • Should not be considered at all in the comparison.

For example, consider the following cluster:

db-cluster.PNG

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Now, suppose I want to sort an array of this cluster, but I am uninterested in the VendorCode or the Password, and I want the Server, Database, and User to be compared caselessly. The Sort 1-D Array primitive will not do this properly. The common pattern for overcoming this is something like the code below.

sort-pattern.PNG

 

 

 

 

 

 

 

 

 

This does the job, but it is not particularly efficient for large arrays.  I could code my own sort routine, but that's not the best use of my time, nor is it very efficient.

 

A similar argument can be made for simple comparison (lt, le, eq, etc.) between two clusters, although this is easily done with a sub-VI.

 

My proposal is to take an object-oriented approach and allow clusters to decide how they are to be compared.  This would involve something like attaching a VI to a cluster (typedef). This would allow the default comparison of two of these clusters to be determined by the provider of the cluster, rather than the writer of the code that later needs to compare the clusters.  I will leave it to LabVIEW designers how to associate the comparison code with the cluster, but giving a typedef a block diagram is one way that comes to mind.

 

Of course, different elements may need to be compared in different ways at different times. This leads to the thought that Sort 1-D Array ought to take an optional reference to a sorting VI to be used instead of whatever the default is. This idea was touched on in this thread but never thoroughly explored.  The reference would have to be to a VI that conformed to some expected connector pane, with well-defined outputs, like this:

compare 1.PNG

 

Strictly speaking, the x > y? output is not required here.  Another possibility is

compare 2.PNG

 

which simply outputs an integer whose sign determines the comparison results.  Clusters that cannot be strictly ordered would somehow have to be restricted to equal and not equal.

 

The advantage to wiring a reference to such a VI into the Sort 1-D Array primitive is obvious.  It is less obvious that there would be any utility to be gained from providing such an input to the lt, le, eq, etc. primitives, but consider that this would allow the specifics of the comparison to be specified at run-time much more easily than can presently be done.

1. Allow for "Tabbed Browsing" of VI's to better manage windows.

2. Allow for the BD to be open independent of the FP.

3. Allow dockable palettes... dock to either the edge of the screen, or to the top bar (pictured below) of LabVIEW.

4. As a bonus, consider being able to open PDF's, txt's, and html's in tabs also for Help and documentation.

5. Finally, allow the project tree to be docked into the IDE.

 

Please, add your own IDE upgrade ideas in this discussion - illustrations will be especially helpful here. If it's a major enough idea, create a new idea!

 

LabVIEW2010.png

We need something sort of like MS Office's "Clippie", but for LabVIEW.

 

1.png

Message Edited by Jim Kring on 07-24-2009 04:26 PM

I searched on "polymorphic" and did not find this idea posted. 

 

I just learned over here that when you use a polymorphic VI, all flavors of that VI load into memory!  That's why a VI hierarchy gets so cluttered so fast when you use them.

 

In the object-oriented version of polymorphism, all possible polymorphic cases need to be coded and loaded into memory, since any of these possible cases could be called depending on the execution of the program.  In the LabVIEW-specific version of polymorphism, where a function has many flavors, perhaps due to a change in data type on one of the inputs, it is not usually the case that all of the different polymorphic members can execute at run time.  In fact, I believe it is usually the case that only ONE of the cases will ever be called or execute.

 

So, why are all of the other polymorphic members in memory?  I don't know.  I think they shouldn't be.  They seem to be eating RAM for no good purpose.

 

Load only the specifically called version of a polymorphic VI into memory.

If a Facade VI of an XControl registers for some dynamic events (whatever the source), a firing of one of these Events will NOT trigger actual activity (Facade VI activity) within the XControl.

 

If we register for a static Event (Mouse move on the FP for example) we DO get a trigger for the XControl (Facade VI becomes active).

 

The unusual situation rises that the Danymic events are registered but not executed UNTIL a static Event is called, after which all of the dynamic events are also dealt with.

 

Please make it possible for Dynamically registered Events within an XControl to "trigger" the XControl just as static events do.

 

Shane.

When sending data to an XControl terminal, the action returns immediately regardless of how long the XControl has to update its display.  When using an XControl in a situation where the individual data updates  are very close together, the "Data Change" Events within the XControl stack up and the XControl can lag significantly (Multiple seconds) behind the ACTUAL data. 

Think of a typical In-box on an overworked clerk's desk.  It just keeps getting higher and higher, and he's stuck dealing with "old" data.

 

When the loop calling the XControl is stopped, the XControl will continue updating even though it's not actually receiving any new data.  It must still work through the backlog of old data.....  This is extremely bad from a UI point of view.

 

This is different when using any of the in-built controls.  If a control takes 5ms to update, the loop sending to the terminal for that control will wait until the control is finished displaying.  As such, the control effectively limits the rate (5ms) of the calling loop to match its drawing speed.

 

XControls should do this also (perhaps automatically, perhaps optionally).

 

Discussed in forums HERE.

 

Shane.

It's a simple idea really.  Recompile the existing code so that the SPT runs in Linux and Mac, not just Windows.

In order to straighten out your wires and reduces crossover, it's often necessary to swap inputs. Or, if you accidentally wire y^x when you wanted x^y, you need to swap inputs. Currently, we must delete the wires to both inputs, then rewire into the opposite input. Proposed: "Swap Inputs" option:

 

SwapInputs.png

 

(The expected behavior is obvious for a function that only has two inputs - please give your input on expected behavior on functions with more than two inputs. Right now I lean toward limiting "Swap Inputs" to primitives and user-defined functions that only have 2 inputs)