LabVIEW Idea Exchange

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

Its better to disable the functionality of the function keys while a code is running.

 

One incident i came accross is:

     I assigned ESC key for a control and while running the code i wrongly pressed F1 (Which is not assigned to any control) suddenly the Help file started opening and my whole code got hangged. I dont think that some one will need open the help file during code running So its better to disable the original functionality of the function keys just during the code is running.

 

Smiley Wink

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!

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.

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.

Living in the dark ages I do not have web access on my LV development PCs and so have to go to www.ni.com/activate to turn on LV after every update/install. If I am lucky I can sit my LV machine beside my web PC and type in the computer ID code and vice-versa with the resulting authorization code. If I am unlucky bits of paper, pens and walking become involved. Having to authorise on each PC is reasonable but if I need to authorize more than one product e.g. LV and Application Builder (I have the Pro version) then not only do I have to licence 2 things but I have to enter ALL the data twice - a simple 'activate another product' button at the end of the activation pages (with data like pc id and licence number and name etc retained) would make life easier. My appologies if there is one already - but if there is it needs to be more obvious.

Currently I'm busy with GOOP and I came across the following problem. 

 

I have a validator class. The purpose of this class is to validate data. The validator class as a number of childrens...

 

Validate IP address

Validate string length

Validate inRange number

Validate Alpha

 

The main, validator, class has a function called "valid?" This function has 3 inputs and 3 outputs

 

Inputs:

- Object

- The data that must be validated

- Error

 

Output:

- Object

- Valid?

- Error

 

The children classes must inherit this function and overwrite it. Now the problem is is that each of the above validators have a different datatype which must be validated....

 

Validate IP address has a string as input

Validate string length has a string as input

Validate inRange number has a number as input

Validate Alpha has a string as input

 

Now you might see the problem. To get the children to inherit the function from the main, validator, class the connector pane must be the same as of the datatypes... This means that I have to choose in my main function to use a string or a number as input... This is something that I don't want... I want to be able to select a datatype called "yet unknown datatype" in my main "valid?" function in the main, validator, class. So that I can use any datatype input in my children that is suitable for that implementation. 

 

 

My idea is thus to create a new kind of datatype which sort of represents "any kind of datatype known to labview" which can be used in functions of a main class that are inherited by its children, which are all using a different input datatype.

 

ps. Now you could maybe suggest why not use a variant datatype? Yes this is possible but the problem is;

- I would have to cast the data back

- It isn't very neat programming, the variant solution is in my opinion more a kind of hack to make the code work.

 

pss. Yes but if you would do this... then...

- Yes there are proberbly a few more work arounds thinkable, such as creating two "Valid" VI's one inherited (Valid?), one unique of the child (_Valid?), but these are in my opinion still workarounds and do not really provide the functionality that is needed. Which is pretty common in OOP languages.

 

psss. if anyone knows a better title for this described idea let me know it! 

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.

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.

Hi,

 

the idea subject says it all. I think this is usefull for multi-level data types with data placed into the parent and its child class (and in the child of the child class ...). To transport the data, you use the parent class. If you want to modify the data inside of a child class, you program a corresponding dynamic dispatch VI or you have to convert the parent class to its child class, modify the data, and convert back to parent. The In Place Element Structure would be nice for the second method.

 

Regards,

Marc

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

Issue:

Dynamic Launching of a VI works fine when the plug-in code is launched from the LabVIEW source code.

When the Application was build it fails to launch the VI. Upon debugging I found that I am reusing some of the SubVIs in the plug-in VIs that is part of the EXE. I tried renaming and re-linking of those Vis for the Plug-in VIs it works fine.

 

Solution:

           Similar to Name spacing provided by Lvlib files. Add an additional option in the Exe build spec, to add a name space for the application this will rename all the VIs as "my project:main.vi, My project:test1.VI" etc inside the Exe. This will resolve the naming issue created by the LabVIEW runtime engine. So a plug-in VI can reuse the test1.Vi from the Source code.  

 

 

I have had to jump through hoops to create a .net process or use runas to get portions of code to run

when the end used does NOT have admin privileges.

 

Add Option under VI Properties >> Execution to allow setting the VI to run as admin or another user.