LabVIEW Idea Exchange

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

The first idea is about huge stacked shift registers, it's often not very nice to have a huge amount of stacked shift registers if you only want to use the last element because it makes your block diagram look more complicated as necessary. Here another representation could help, perhaps one where you can adjust the element you want to have and this one is the only one you will see. Or you hide all other elements and just the element you want to have is visible with its number in the rectangle. I think there are many ways, my example here is just a very quick and dirty drafts, I'm sure NI would build something that looks much better.

 

The second idea is about the problem that shift registers have to be "docked" to the borders of your loop. If you have a really huge loop that means that you have many wires all the way through your loop that may cause many crossing lines. That will make your block diagram look very confusing.

Because of this problem I suggest a type of shift register that don't has to be docked at the borders of your loop but works like a normal shift register. A feedback node couldn't do this job because of a bunch of reasons and even the idea to work with a lot of local variables isn't very practicable.

When implementing this idea there are two problems, the first is that you don't know if your feedback node is the one that would be on the right side of your loop for your incoming data or the other one for your outgoing data. This can be solved by a little arrow or something like this that shows the type of the node. The second problem will be that you don't know what's the right node for your shift register you want to use at the moment if you have many of them. This can easily be solved if your shift registers would get label names.

 

Once more for these nasty drafts but I wanted to show a example of the problems. If you like these ideas be sure that the implementation by NI would be very nice and look much more great, so please don't be put off by my little drafts.

 

 

 

Based on customer use, there was a "print options" available in Executables back in LabVIEW 7.1, but that is no longer available in 2010.

 

This feature is available in a VI as shown here:

PrintOptions2010.png

 

In executables, there is not a Tools>>Options to select Printing features such as not printing in grayscale.  Can this feature be added back into the Application Builder?

 

Executable.png

 

Thanks!

 

Download All

Often I have to open quickly a project see how things are done and close it. Sometimes due to different LabVIEW versions or small changes, it ask to save the project. It first takes time to search for which files have been changed and proposes to save them, which is often not wanted.

 

I regurarly use the shortcut ctrl + w to close the project, but it would be nice to close the project without saving the files. And thus save much time.

Other proposals only relate to close a VI without saving or the Do Not Save Option, but are too limited to single files and the revert option already functions well.

 

Suggestion

- use ctrl + shift + w or ctrl + alt + w to close a project without asking for saving and discard changes in project and VIs in the project immediately.

Hello,

 

it would be nice to have an option to choose which features should the "suite" of IMAQ Setup Learn Geometric Pattern + IMAQ Learn Geometric Pattern + IMAQ Get Geometric Template Features return. Currently it is returning all of the features, which needs more time.

 

(please compare with IMAQ Extract Curves + IMAQ Get Geometric Features from Curves which has this option and is much faster (among other differences).

 

[actually a customer's idea]

 

Thanks!

Zenon

I need to know how to display a series of words one at a time in labview. I need to be able to do this by having a button a person can push for the next word to appear on the screen. The only thing I want visible on the front panel is the button to be pushed and the word being presented. Any help would be appreciated.

Hello,

 

When you launch a HMI VI assynchrounously using the "Run VI", the mechanical actions of the controls are not taken in account.

When i launch the same VI directly using the run button ... all works fine !

 

For example i wanted to use a "Switch until release" ... The value of the control should stay true until i release the mouse button.

in assynchronous running mode, the control doens't keep the "true" value until the mouse button is released ...

the control value automatically change to false value even if the mouse button is pressed !

 

It seems that there is a different behavior between ...

 

  • A normal run
  • An assynchronous run

=> The events are not handled the same way in both execution mode.

 

It should be nice to make the mechanical actions works in both cases ...

Or if the problem is linked to the LabView inner architecture, to explain this particular behaviour in the Labview Help.

 

One of my collegue gets also a problem like mine using FPGA IRQ methods calls ...

 

  • The Wait IRQ works fine in a "Main VI" launched by the Run button.
  • The same code generates an error, if the VI is launched assynchronously.

 

I think that the behaviour difference of the 2 run mode (Direct run or assynchronous run) should be described in detail in LabView Help ...

 

Manu.

By default, the a newly created vi will have the 4-2-2-4 connector pane, But when you create a new subvi from a main vi, LabVIEW generates Connector pane based on number of input and outputs. I propose the newly created subvi will also have the 4-2-2-4 connector pane and hence mainitaining uniformity through out.See the attachments. This saves the pain of chaging the connector pane, disconnecting and reconnecting the input and the outpus

 

Also if there any error terminals present in the subvi then the same should get connected to the bottom left and right panes and Path/refnum to the top left and right pane

 untitled.GIF

Where LabVIEW close a VI it does not free the memory automatically. This should allow the VI to reopen soon.
For large projects or multiple projects open at the same time, this feature is very annoying. More and more memory is consumed and the only way to release is to close LabVIEW.
It should be possible to force the mode of operation within the parameters of LabVIEW.
[X] Free memory when a VI / Project is closed
] Maintain a copy of the VI in memory to improve performance at the reopening.
In the second case, it would be useful to have a command in the menu of LabVIEW to force the timely release of memory.

Current Scenario:

 

for dequeue element we can pass one reference only. And the function waits till timeout if no element is present in queue. If element appears before completion of timeout then function returns immediately with data.

However if I want to wait for data from multiple queues then I need to dequeue from them one by one. This approach has following problem.

 

Lets say I Have two queues Q1 and Q2 and I am Dequeuing element from them one by one with 10 Sec timeout. Now lets assume there is no data in Q1 but there is data available in Q2. Now when I dequeue element from Q1 it waits for 10 sec and returns and then I dequeue element immediately. If situation is opposite then Q1 returns immediately but Q2 waits for 10 Sec.

However what I need that if Q1 or Q2 has data then there should not be any wait/

 

In Notifier palette there is a VI called "wait on notification from multiple" this VI accepts array of notifiers and return immediately if any of the notifier receives notification.

 

notifier pallet

 

Similar functionality will be highly useful in queues

 

Modified Queue Palette

 

 

 

the decorations in the front panel have properties, these properties you can to modify in execution time, but the order off these decorations is created automaticaly, and the newer decoration object, it's the first, and other existing decorations your order number is changed automaticaly.
Proposed solutions 
- the automatic order number should be generated, in the same order to are created the decorations, in the same way of controls
- create a new function to modifying the order number, the same way to modify the tab order of the controls.

 

Hi,

 

it would be a great idea to choose an option to put a LV icon on the taskbar when LV is minimized (when running a program), also try to eliminate the 2 windows when open an running a "vi", with one is too enought ...

 

Thanks !!!

Whenever we create an executable file for example, abcd.exe from abcd.vi that can be run on a computer having the runtime engine of the corresponding labview version, it has certain default data control set at the time of creating the .exe file. I propose that there be an option to set the values default after creating the executable file.

I propose a property node to tell if a control was wired when This VI was called as a subVI.

 

Wired.png

 

Sometimes it is practical to be able to distinguish if the value in a control was wired to it (data arrived via dataflow), or if the control was unwired and the value hence the control's default value. Even comparison with the known default value of the control isn't enough, as the program logic may depend on the value source.

 

Consider an FG that stores two data elements:

 

FG.png

 

You'll have to have two Set functions for this, one for Data 1 ("Set data 1"), and one for Data 2 ("Set data 2"). If you have only one Set function, you add the constraint that both data sets have to be present (wired) every time you set any of the two data sets, or else the unwired set will get overwritten in the FG with the default value of the unwired control. If the FG could decide programmatically if the value was wired to the control, or if it was merely the default value of the unwired control, it could decide whether to overwrite its stored copy or not. The data values could be the same in the two cases, but the actions very different. This is just a simple example, but I have many much more complex cases, that would get much simpler if I could tell where the control value came from. In the above example you could even dispose of the Function input alltogether, if I could tell if any data inputs were wired.

 

A polymorphic VI will remedy some of these issues, but not all, and in other cases a polymorphic VI is a drastic solution to a simple problem. It's also not an issue in a Top-level VI, as such run only once (only subVIs get called again and again, while depending on prior runs).

LabVIEW should be able to update property like background color, and so on... for the whole table instead of changing active cell one-by-one.

It's coding difficulty, and very low speed.

Maybe there is a very good technical reason why this idea is not a good one.

 

Problem: If I want to load a vi into my application the subvi's of the dynamically loaded vi can not be found.

 

My Plug-In Application (EXE) is Not Calling My Plug-Ins Correctly

 

Solution: Add a boolean input (or an options flag) to Open VI Reference which will load the vi and modify the search path so the subvis can be found.

 

I know there are several workarounds but I would like this to be easier.

This post is intended to present a solution to a problem that I was struggling with using LV2 global variables in my applications.

I don't claim that this is a unique or elegant solution or even the first of its kind, but I'd be curious to hear comments and suggestions about it.

Since it might be a long post, I will split it into 3 parts.

Part 1 (below) will discuss the intended functionalities.

Part 2 will present my current implementation.

Finally, I will try to summarize all this into Part 3, opening the discussion.

 

So you may want to wait until that part is published before posting your comments (if any).

 

Part 1: What do I mean by Generalized Functional Global (or GFG)?

 

The LV2 global variable (or functional global, FG in short) is a well known structure (see for instance the beginning of this thread). It is a subVI which can store data locally in between calls. Usually it comes with a "Write" (or "Set") action and a "Read" (or "Get") action and a few inputs (and the same number of outputs). The inputs are the variables you want to update and the outputs, their corresponding values.

The advantage of this design over the standard LV global is that there is only one copy of your variables in memory. If you are only using scalars or string, etc., using LV globals might not necessarily be a big problem, but if you start storing arrays of large data structure, it could result in a significant performance penalty.

Note that there are other ways to pass data from VIs to VIs (queues and notifiers). Here, I am concerned with long term storage available from many parts of an architecture (e.g. subVIs or dynamically launched Vis).

To begin with, there are two major limitations with any design based on FG (at least that I am not happy with):

 

1) First, as emphasized above, due to the limited connectivity of a VI's connector pane, a FG cannot store a large number of variables. You can use clusters, but that is not always very practical.

 

2) Second, if you try to cramp as many variables in a single FG, you will probably run into the issue that you don't necessarily want to reset all variables at once, but maybe just one or two. That calls for a more sophisticated set of actions (Write Variable 1, Write Variable 2, etc, and possibly Write All, Clear All, etc).

In practice, if you use a lot of those FG, you will encounter a third problem:

 

3) In which FG did I store this @$%&! variable?

 

Some of my applications contain many of these FGs and I figured that this had become impractical to handle when I started duplicating them, having forgotten that I was handling variable "X" in an existing FG.

 

The obvious solution (apart from NOT using FGs) is to have a single FG that is designed such as to handle an unlimited number of variables of ANY type that can be modified at ANY TIME from ANYWHERE.

 

I first looked at the WORM (Write Once Read Many) design of tbob (you’ve got to go to the end of the thread to download the final version of the WORM VI). It is a very clever and compact solution to store different types of variables within a single variant.

Two of the limitations I saw in this design are that you need to know:

 

1) the NAME of the variable you want to access.

 

2) the TYPE of the variable that you are WRITING or READING.

 

Let me clarify those two points.

 

It seems obvious that you HAVE TO know the name of the variable you are interested in. Well, that’s maybe true when you are designing your application. But after a month or more doing other things, it is not obvious anymore whether you’ve stored the number of components as “# Components” or “Component #” in that other part of the program that…where did I save it, BTW? You get my point…

 

The second point is apparently taken care of by tbob’s solution of outputting the variable (as a variant) as well as its type. The problem is that this “type” provides a very limited description. For instance, what do you do with a “cluster” type?

 

Finally, since I want to be able to modify any variable at any time, the “Write Once” feature is not cutting it for me. This is could be easily modified, but considering the previous comments, I decided to change the architecture some more.

 

I will describe my solution in the next part.

 

Often times, I have a set of code in a for loop that takes a while to complete, so I put in a progress bar on the UI.  The problem is the progress bar defaults to 0-100 range, and my for loop normally does not have 100 iterations. 

So.... I can either rescale the progress bar to the number of elements, or I can use the "N" and "i" to calculate the percent complete and use that.

 

Since I like to keep my progress bars as 0-100 (since that works nicely to also show a percent complete) and % complete is useful elsewhere, I generally always end up calculating % complete of my for loops.

 

Well, why can't NI calculate this for me automatically???  Something like expanding the "i" iteration counter in the loop also have a "%" box right next to it.

 

Example shown below should probably wire as a double instead of an int, but you get the idea!

 

ForLoopProgress.jpg

It's good to have tool like Quick Drop...........but it will great if we can see our own VIs/Custom Controls/Custom Indicators/objects present in my PC in the list.

 

This can be achieved by remembering them while they are made or being used for the first time. So that every time I don't have to got to Select Vi, search the path & call a VI.

The only option to do this right now is by placing the VIs in user or inst directory of Labview.

But this not what we always do right? We manage the folders & VIs in different locations.

 

Just as good function as any desktop search.

I would suggest that NI makes the datatypes of the "Quotient and Remainder" VI consistent.

 

If you now wire a double to the VI the outputs are of the datatype "double" however in my opinion this is not consistent with the mathematical definition of quotient, floor(x/y) and remainder, x-y*floor(x/y). The output of the VI is always a integer and should therefore also be of that datatype, thus one of the following datatypes (I64, I32, I16, I8).

I had a customer call in that wanted to be able to increase the limitation that Excel allows us to import. He has found a work around in which he creates a Visual Basic Macro in excel. He uses Active X in LabVIEW to open excel, and this puts the macro into use and overwrites the limitation. He was hoping that LabVIEW could do this for him and others so he would not have to write separate code in Visual Basic.