LabVIEW Idea Exchange

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

I'm a first-time user of labview, but a very experienced programmer in other languages. 

It was impossible for me to find a complete, modifiable list of the changeable properties associated

with an icon on the block diagram.

I kept expecting this to be available when I right-clicked the middle of an icon in the block diagram, or a control on the control panel.  At first I expected to be able to right click connection nodes and get connection properties, as well.

The expectation was initially almost unconscious, so I believe it is deeply ingrained, and might be common in other users.

This is the predominant mode of interaction in MS Windows applications, and I think it can be convenient in other UIs.

If so, Labview would be more intuitive if it leveraged this preexisting user training.

 

I found this behaviour of LabVIEW some months before and till now i didn't get the answer that why am posting here.

 

When i have some controls in the front panel if i press ctrl key and left mouse button and drag between the controls it gets displaced. Is that a short cut key for aligning the items? or does it has any functional use?... I am really puzzled with that behaviour and no body knows the answer (the person i met) for it. If it is a strange behaviour and do not have any proper use then in the next version the architects and champs of LabVIEW can try removing the behaviour.

 

Smiley Wink

 

 

Download All

I often need to build applications and installers that include VIs or .LLBs that have been built  earlier on...but this is a major pain because as long as LabVIEW recognises the file type it will try to link the VI or VIs in the library to the other VIs in the project, it finds conflicts etc. There are ways to come around it yes, but not very elegant ones.

 

Basically what I want is for projects to be able to treat VIs and LLB files as non-LabVIEW files. Just like you can include a text file, a JPG picture or other files in your project and installers I want it to be simple to add "completed" LabVIEW files.

 

One solution could be to have another type of project folder. We have auto-populating folders...perhaps we could have a folder for pre-compiled / to be treated as external sources folder...? In most cases for me LabVIEW could just see that the file does not contain any source code and then treat it as a "dead" file..or at least give you the option to do so (if there is a potential conflict).

After deciding to post an idea for a "parallel" structure, a search revealed the idea for a Parallel Execution Structure has already been proposed by gvholland here

I gave my kudos to this idea because I believe it would be very useful.  In order to make a parallel structure even more useful, I propose adding some features that would make it more convenient for those of us who might use it in code that must execute in parallel for performance and functional reasons.  It has been commented on the other thread that parallel code should be placed in subVI's, and I concur with this view.  However, there are instances where this is either inconvenient or impracticable.  Consider the following example:

 

An application needing to perform simultaneous PID control on 32 channels must execute in parallel (only 8 channels shown for clarity):

 

23998iF3A3D6145B22A221

 

Now quadruple the number channels in this scheme, and you can have a pretty big diagram with lots of wires.  Also consider the routine task of initializing that “clustosaurus”  or “classosaurus” as in this example:

 

24000iDFC8181255144D80

 

We've all probably tried the scheme wherein we put a case structure inside a FOR loop and wired the iteration terminal to the case selector, as in these examples:

 

24002i0E33EE6CA3D6316A

 

24004iB398DF500188AD49

 

That's clean and easy, and allows the user to create instances of the reentrant VI by duplicating cases.  But that architecture forces the vi's or code to execute sequentially.  The new parallel FOR loop can boost performance of these techniques, and create parallelism.  But I would like a basic parallel structure that cleanly handles some routine tasks by adding some useful I/O nodes, ala the InPlace Element Structure.

 

I propose the following structure, or something similar:

 

24006iEFA2DE50585DBE3A

 

This structure is drawn here with some proposed I/O nodes and tunnels.  This is by no means the complete set of I/O that might exist, but rather a starting point.

 

Cluster unbundle/bundle node:

 

 24008iB135E86434F20934

 

This node accepts only “brown” clusters, or clusters of Booleans.  The elements are passed to each frame in corresponding index order, element 0 to frame 0, and so on.  Once added to the structure, a single unbundle/bundle terminal pair appears in each frame. Much like a bundle function that has its center terminal wired, the bundle terminals may be left unwired.  The values of unwired elements remain unchanged.  Any cluster wired to this node must have the same number of elements as the parallel structure has frames.  If not, the wire is broken.

 

Array index/replace node:

 

24010i570ABF83C7044CDA

 

This node auto indexes an incoming array and provides a replace array element node on the right.  Note there is no index value IO as with the IPE, since the parallel structure auto indexes the array and distributes/replaces the elements across the frames.  If an array has less elements than the number frames at run time, the node returns default data for the undefined elements, exactly as an index array function does, but the structure returns a warning or error (I can’t decide which).  The output array would always have the same number of elements as the structure has frames, or the same number of input (can't decide which) .  The replace element node on the right must be wired in every frame, just as a replace array element structure must have all of its exposed elements wired.

 

Cluster unbundle/bundle by name node:

 

24012i2C2666661000FEB0

 

24014i1D92D4684B152FC9

 

This node is tricky, but I decided to take a stab at it anyway.  The node is created and visible on both sides of the structure.  However, unlike the IPE, the unbundle/bundle terminals on either side can be of different sizes and element selections, and can optionally be unused on either side, or both sides, within the individual frames.  Unused terminals appear with the same symbol as the center terminal of a bundle function, as shown in the proposal drawing.  If an element is selected for bundling within a frame, then it is unavailable for bundling in all other frames.

 

Indexing and non-indexing tunnels:

 

24016i58EE71B2884A8F01

 

Non-indexing tunnels function somewhat like they do on a sequence structure.  Input tunnels provide data to all frames, non-indexing output tunnels may only be wired in one frame.  Unlike sequences, however, the data arriving at output tunnels would be free to flow out of the structure immediately, which will seem weird, and violates the "whole structure must complete" convention.  But remember, this is a parallel structure.  Like sparks shooting off the bolts in the monster's neck while it's alive, it's gonna be be weird by default.

 

Indexing tunnels are different.  Like the auto-indexing node, auto-indexing input tunnels distribute the array elements across the frames.  If the array size is smaller than the number of frames, the frames either execute with default data, or the undefined frames don’t execute, and the structure returns an error or warning (help me define this).  Auto-indexing output tunnels behave like output tunnels from case structures; either all frames must be wired, or the tunnel must be configured to use default data if unwired.  Unlike the non-indexing output tunnel, data from this tunnel is not available until all frames have completed execution.

 

Error I/O Nodes:

 

24018iB1B7660563C17E73

 

There are error inputs/outputs for the structure as a whole, and for each individual frame.  The structure error IO is situated in the lower left and right corners, naturally.  The frame input and output terminals can both be optionally hidden or exposed in each frame, and also slide independently of each other up and down the left and right sides of each frame in which they are exposed.  The structure distributes the incoming error among the exposed frame error input terminals, and merges the frame output error values to the structure output terminal, along with any messages generated by the structure itself.

 

So what do you do with this “Frankenstructure”?  Well, here are a couple of the aforementioned examples rewired using this hypothetical beast:

 

24020iFA3810D047850DB3    24024i4CB073DB117956CF

 

 

Of course there could be other cool things, like a CPU core selector for the frames, etc.  Just let your imagination, (or nightmare, depending on how you see it) run wild!

When you make a build, Project Explorer concludes with a status box that tells you where the build "lives".  This box needs to have a button "open folder", or at least make the status text selectable to ease navigation to the Build folder.

 

Carsten Thomsen

Hi,

 

i'm using the german version of LV. Maybe some names are "like a decription" because i don't know the english

names corresponding to my indicators.

 

I'm using a combination field of strings and create the content using a propertie node with "StringsAndValues".

Elsewhere i'm using a propertie node with "Value" to know what selection the user made.

 

The normal way to ceate an indicator is right click, create indicator. But in this case the indicator has the same style

of the element "QueryCode" and doesn't show the value -> it shows the String part. The only way to get an indicator that

shows the value is by using the context menu.

 

Please change that! Whenever a propertie node with "Value" is choosen, right click -> create indicator should create an

indicator that shows the value and not the string or whatever.

 

 

23872iA2CACDD7AE92FD17

Codes in labview are getting bigger and bigger. It's difficult to manage Block Diagram Without zoom out function. even though in normal code we can use state diagram or another features to compact the code .. but when using FPGA .. It's not possible.

 

 

So if Navigation window (CTR ALT N) can edit the diagram or can only copy past , it will be really helpful..

 

These are screen shot of my codes.. it's really been difficult to manage this now.

 

23776iE30321A9FC0BE53A23778i0EC72155D6C56868

 

Regards,

Hitesh Dhola

Currently, if you want to programmatically bind HMI controls and indicators to network URL's you need to first set, at edit time, a fake

URL (example: \\192.168.0.3\cRIO-HPU\'PU.Accumulator_Dump_Valve') since the actual IP address may not be known at edit time.

If you leave the HMI 'unbinded' then the attempt to set the BindingPath properties will result in an error.

It would be nice if you had a generic option called 'late binding' that you could select with the expectation that the exact URL will be set

at runtime.  This would provide an additional benefit where the  PSP driver could wait for a BindingPath to be set before attempting

the first transaction.

For whatever reason, the end of an array is just as natural a location as its beginning. Go figure...

Hence it would be nice to have an index array function that could be started from the end (for instance with an "invert" indexing option accessible with a right-click).

At this point, one has to either flip over the array (time and memory costly) or clutter the diagram with a "Array Size" + "Minus One" (and more if one wants to access previous elements).

My 2 cts,

X.

The idea is that a single conditional statement could overlap a for loop (or while loop) boundary.  I don't know exactly how to enable the feature in the block diagram but it seems like it could be very useful when you have routines that are different for each case that run both outside and inside the loop passing data between them (see example block diagram).  This can be done right now with two conditional structures but it is just not as clean a solution.

ConditionalOverlapExample.PNG

23428iD0BA4DD79C1603C2

even if name is inside " "

Concat ( ',', a, b) should result in a string a,b This way, block diagram looks better in the case we concatenate many strings together.

On occasion one needs to open the source code for a closed VI. The Project explorer window appears to be a good access point for browing and opening VIs. However, clicking on the VIs opens the front panel only. It would be great to have the ability to open the block diagram if one holds the <CTL> key while clicking a VI on the project explorer window.

 

Anthony L

I think it would be great to allow zooming out on a block diagram. I know we should make all attempts to code on the available window space without scrolling but it's not practical in some situations.

The Vision Acquisition Software seems to send all GigE attributes to the camera that have been set in the camera file. There should be an option to select which attributes are sent to the camera when connecting. This would allow the settings configured through vendor specific third party tools to persist when acquiring in MAX or LabVIEW.

 

This could possibly also alleviate the "Attribute value is out of range" error if MAX is only sending the attributes you specify.

All the time I make type def enum's in order to use with a state machine. Most of the time I create the enum from the block diagram instead of the fp. Maybe I should change my habit but I wish there was a "create type def" option on the bd right click menu so I didnt have to change to control, switch to fp, customize, then change back to constant.

 

 

 

I have seen ideas for automatic creation of constants, but here is one for easier manual creation. 

 

Simply hover the mouse over a terminal as usual, and then press 1, 2 or 3 to create a constant, control or indicator.  No mouse-click needed.

 

I have attached a vi that uses VI Scripting (LV 8.6.1) to demonstrates this functionality.

 

Regards,

David

 

Instructions are on the front panel of the vi, but here they are again:


Instructions:
1. Run this vi.
2. Open a new vi and place an "add" function on the block diagram.
3. Hover the mouse over any terminal and press 1,2 or 3 to create a constant, control or indicator.

Of course, this will work for existing vis as well, and with any terminal on the block diagram.

Enable a Sub VI to launch as a daemon without having to open a reference to it using its path.  The VI Properties page would look like this:

 

21429iB830C4B88A795136

Wait until done would be checked by default, and auto dispose reference would be left false be default.  So instead of parsing the path to the VI on disk and using a method to run it:

21433i0CFC0F873277247C

I just set the correct properties in the VI Properties page and drop the subVI on the block diagram of the calling VI.

I was just involved in a discussion about a default return value for the dequeue primitive when a different idea struck me.

 

Why can't we define a default value for typedefs.  Especially enums would benefit by having a case reserved for operations where something didn't work as expected and a default value is returned.  Being able to seperate this value from other (normally required) values would be a boon for ensuring data integrity.

 

21307i98E925E66B45E54C

 

Why can't we have the default value set to something we don't normally interpret as being valid?

 

In the LLB Manager, it's nice to have a separator between Top-Level VIs and the subVIs.

 

I'd like to see something for a mid-level VIs. This would allow the "major" (but not top-level) blocks of code to be easier to find when developing, separating them from the low-end subVI pool.

 

21151i6B3333152562E342