LabVIEW Idea Exchange

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

I find using the Tools palette useful, and would love to get to it quickly, eg. by right clicking the mouse button to bring up the short cut menu.

Could you include the Tools palette in the short cut menu?  

 

May be it is possible to add it there, in which case I would like to know how.

 

Thank you.

I will write this off to my **bleep** retentive personality, but what about an option that would allow wires to enter/exit structures from the left and right sides of the structure only? The left would be enter / the right exit. When the source of the wire is not visible, and the entry/exit point of the wire is on the top or bottom of the structure, I sometimes find it hard to see the data flow direction.

 

Top Bottom Entry

 

Side Entry.png

 

In most every text-based programming language there are built-in functions to convert a character to its decimal ASCII code and a decimal ASCII code value to its associated character.  In BASIC, for example, ASC(character) does the former and CHR$(code) does the latter.  In LabView you have to implement these functions yourself from scratch with a CASE structure.  If you want to do the whole 7-bit character set you need 128 cases.  This is a waste of time!  Since many instruments use single ASCII charcters as their commands why not include such functions in LabView?

The append table to report.vi for excel now sets the font to 10. Even if the current cell in the excel report has another fontsize specified.

The idea is to add an option to keep the tables fontsize, in stead of changing it to 10.

 

See the attached vi for the current behavior.

 

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.

 

Hello, I'm searching about this topic in the forums, but I find no ideas about this, if I repeat the idea please tell me.

 

I'm working with LabVIEW from time ago, but I've noticed that when you have a large Project is complicated to work with it. I will explain myself:Example.jpg

 

Here it is my last project (right), you can see that it have a lot of directories and a lot of classified data, controls, vi's and some more stuff. I hope you are familiar with it. Well, you will work with it for a lot of time, but when you want to go fast you need to access to some controls or global variables files a few times, don't you?. This is annoying with the actual interface, because of the nesting in the virtual directories. Some kind of favorite system is needed, but instead of that I have another proposal:

 

Copy list.

 

Let me explain this idea. You can have in the project explorer, for example, integrated another tab called copy list that can be like this.

 

Copy List.jpg

Ok, every time you do a copy action the object that you copied is added to this list classified as you can see. Now you are able to drag and drop items very fast without searching on the project explorer, you can center on the work (I've noted that I expend a lot of time searching on the project explorer tree my next control or vi to use).Well, let's see the really advantages that I think can be helpful.

If you stop the cursor on a element you could see all the related information easily:

 

Copy list Help Tag1.jpg

   But this is not the only shortcut to access your "most used" stuff, I do another image to show you the options:

 

Copy list Contextual.jpg

 

Now this is the real advantages:

  • You can copy to the clipboard elements easily (as property node or invoke node) and without searching the control or terminal
  • If a control is used a lot of times you can fix it on the copy list and you can put it in order. (The fixed elements can be marked in bold and can be in the firsts positions of the list)
  • Of course you can remove a element that you don't use.
  • If you must to go home you can save the copy list to get it easily tomorrow.
  • An extended help is useful in this list.
  • I think that a rename option is helpful too.

You can define the length of the list to achieve some memory optimization (but with the actual development computers I think that this is not a problem).

But for this price I think that this can be a great tool to work fastest on LV.


What do you think?

I tend to use a lot of floating windows that can be suppressed by the user if they don't want to see them any more, to convey various messages.

 

But in doing so, either Windows or LV is playing three card Monty with the order that they show up in the open programs list.  Is it possible to leave them at their original ordering?  When you have a lot of VI's open, this can be quite irritating.  This might be something that can't really be worked around because of Windows quirks, but I don't know enough of the Win kernel to say ... maybe the floating status of a VI is actually a Windows flag that you have no control over.

 

Also, would it be possible to not have floating LV windows disappear from the Windows task list?  This seems like it's directly related to the same cause of the previous issue.

 

Thanks,

-Ben

When I save a vi for a previous version then the next time I open that vi and close it LabVIEW prompts me to save it because it was converted from a previous version. I should be able to open it, make changes, and save it again with LabVIEW remembering what version I wanted it saved for. Maybe the version could be a vi property?

In the Run Mode we can set the breakoint by pressing the <Ctrl> key and left click over the probe. To remove it the vice versa applies...

 

In the Edit mode it would be more handy to set the Break point by Pressing <Ctrl><Shift> key and left click over the probe to set and remove the Break points.

I have checked the Functionaltiy of the <Ctrl><Shift> key when both are pressed the mouse pointer changes into a hand tool and we can move the BD on anyside but it doesn't have any effect over the probe and on the Front panel.

 

So this idea would defenetly help to make easy debugging..

From early on in labview i've had issues with larger VI's not being completely visible on the screen, making it more difficult to 'wire up'. Other suggestions have been for resizing the front panel, but resising the diagram would also be a very helpful feature.

Similar to the "view / zoom" window in IE8 or word to view more or less information on your screen at once. Hopefully this would come with a hotkey option as well to quickly increase and decrease the zoom level during code writing.

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.

It would be great to have a feature similar to the Microsoft 'Format Painter'.

 

Sometimes in a project you need to change an amount of indicators from one data type to another (U8 to U16 for example) or, you want to change the number of digits of precision, string indicators from Normal to Hex etc, etc.

 

A Format Painter would be great, highlight the format tool, click on the master object and then click all of the controls/indicators that have to be the same. The painter could work on front panel objects or block diagram terminals.

Assuming that I have a case structure with numbered cases, I would like to be able to add a case anywhere and have LabVIEW renumber all the cases for me. This would be like the opposite of sort, which rearranges the order of the cases but leaves their numbers alone, instead, this would renumber all the cases but leave their order alone.

The current interface for DLLs does not nicely accommodate C++ classes.  For instance, there is no inherent mechanism for passing in and out of DLL calls the reference to an instance of a class.

Allow the configuration portion of DLL nodes to see mangled function names, such as those generated by many C++ compilers (@Initv, for instance).

 

when you do a lot of operations whit arrays, you spent a lot of time and space in the block diagram, to put the input and output array in de the array functions.
the idea is not put the output array, if that is the same as input, see the figure.
and also applying the concep of pointer, C typical, to write some value in a array, when you put a value in to a array, the array is read, modified and finally written completly, that generate two problems,
-one, this operation spends a lot of coputacional time,
-the second one, is the overwriting  all values, if your program using multiple threads, you can write diferents values of the same array, in different places, now you need to synchronize this operations to avoid the overwrite, if the operation only modify the value pointed, this function solves both problems.
Sin título.png

 

My idea is simple... It could be helpful to add automatically a connection (input/output) when we draw a wire through a flat sequence.  At the moment, we have to connect the wire on the left side and than, passing through the flat sequence to the right side...

Hi

I like that the labview suport to show the hided control which is member of cluster, 

 

It would be nice to have an option in XYgraph that could allow the user to define some set of spatially related points (or cluster in statistics) by drawing some boundaries with complex shapes using the mouse. Here is the problem that brought me to write this post. Let's say that we have a series of data {x1,x2...xi...xn} that represents the duration of time between two adjacent heart beats. The pointcare plot is the representation of the points [xi,x(i+1)] and that can be achieved to by the XYGraph function. Using this graphic, it is expected that adjacent intervals with almost similar values will form a cloud (circular, eliptic or with more complex shapes) centered around the average values of the xi. Now, unusual changes between adjacent xi values in the time series (lower or higher x(i+1)) will result in points outside of the primary cloud. This is an easy way to identify abrupt changes in a time series.

 

The step I'm blocked with the following. After I used the XY graph to plot the [Xi,X(i+1)], I would like to use the mouse the draw the border of the primary cloud and extract separately the indexes of the point in or points outside the border. 

 

Again, I really appreciate your help for that.

 

Olivier