LabVIEW Idea Exchange

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

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.

Many LabVIEW functions use the UI thread, like DataSocket (due to ActiveX events IIRC), everything VI Server etc., and since there is only one UI thread (per LV instance, no matter the number of logical processors, right? Also on Real-Time?) these functions are blocked when the UI thread is occupied by something else.

 

What I find particularly troubling is the fact that you can't dispatch VIs dynamically when the UI thread is blocked - for instance if a dialog is open or a user is selecting something in the menu. The latter can be an application blocker, if you are dispatching 20 VIs to populate your UI for example, and the user clicks the menu bar (without selecting something), your app might freeze since you won't be able to dispatch anymore VIs until the user lets go of the menu bar. There are many much simpler scenarios that you'll hit more often (a DataSocket read with a long timeout may block your dynamic VI from loading?).

 

Upping the count of UI threads from one to several would be great, but probably out of the question due to the implications to the LabVIEW core.

 

Instead, could we at least get the 'Open VI Reference' function and the 'Run VI' VI Server method freed from the UI thread? That would enable dynamic dispatching while the UI thread is blocked. Other VI Server calls aren't that important to get out of the UI thread, since there are other (and better) ways to transfer data to your dynamic VI for instance, than with VI Server. One curious thing is that it's possible to open all the 'One Button Dialogs' you want in parallel for instance - I'd think they'd run in the UI thread, and hence the first one'd block the rest?

 

A (somewhat contrived) example that fails due to this limitation:

 

DynDispatch.png

The blue statement is true even when DynVI doesn't touch the UI thread, and even when no VI in the hierarchy runs in the UI thread etc. It's simply the 'Open VI Reference' primitive and the invoke node that gets blocked, due to the one button dialog being open.

 

Cheers,

Steen

Sound playback on built-in sound cards using Standard vi's has multiple issues regarding quality (clicking etc.), choice of block sizes, latency, stability, inconsistent results between various OS versions, CPUs etc.

Needs complete re-write by NI to fix it.

Carsten Thomsen

I'm sure some of you know python. In python you can do things like array = [1, 2, 3]. If you want to select the last element, 3, of the array you can do array[3] but also array[-1]. array[3] = array[-1] = 3. I purpose to introduce this also in LabVIEW with the "Index Array" and proberbly some other array tools as well. Then finaly I see a good argument why the type of the index to select a element from the array in "Index Array" is of type I32.

 

ps. LabVIEW arrays go from 0 to n hence the 'inverse' selection would be n-1 to -1. Where -1 gives the last element and n-1 the first.

Add a new selection, so that the application pauses if "something" is on the wire...please see the attached image!

 

Similar to that, a conditional "DBL" probe could be enhanced by adding a "NaN" option...one could realize that by inserting "Equal to ... NaN", but it would be easier to just select this "value" with a checkbox, and two conditions could be monitored at the same time ("=NaN" and "=xxx")

 

extendedconditionalstringprobe.PNG

I just used the space constant VI from the string pallet. (I don't really now why I use this one sometimes because you can easily create it by yourself, mostlikely because of the icon Smiley Wink)

 

When I then checked the VI properties of "Space constant.vi" I noticed that the "Inline subVI into calling VIs" checkbox was not marked in the execution tab. I don't think it will do anyone harm to make this VI inline, can it? I also came to think of it that there are most likely other small VI's from National Instruments which maybe should have Inline marked, maybe NI should take a look threw the small VIs?

 

Maybe, maybe it is even an idea the LabVIEW check the contents of a string and if it sees that it is a constant space, line feed, etc it changes to its respectable constant icon. 

Hi.

 

I simply propose to add a Warning case in the automatically generated Error/No error case structure:

 

Warning.png

 

The inclusion of the Warning case could be optional, and maybe setup by right-clicking the case structure?

 

Cheers,

Steen

How about allowing the creation of XControl classes?

 

Families of XControl classes would allow the Publish / Subscribe paradigm I'm struggling with as discussed here: http://forums.ni.com/t5/LabVIEW/XControl-publish-subscribe/m-p/1568958

 

Being derived from a common ancestor client, XControls could be managed in a collection (array) and the publisher could call a common or overidden class method for each XControl client in the list.

 

XControl classes would also allow an elegant implementation of the Model View Controller paradigm used extensively by other object oriented languages.

 

You should also allow XControls to be members of an existing class.  That way the XControl would gain access to the member variables of the class without resorting to cumbersome accessor vi's.

 

XControls sub-classes of a class should also be allowed, then methods in the parent could be overidden in the XControl.  Mediator objects can then call class methods without caring if the instance is a XControl View, Model, Controller or some other object.

 

Phill

We need a 64-bit version of the Internet Toolkit, which we plan to use on our new product. Are there any plans to make it? It seems that it should not be that difficult to recompile the current 32-bit version for 64 bit.

The Close Reference –VI could be integrated into the Property Node ore the invoke node.

a.png 

I would recommend that the reference output could be activated or deactivated.

 b.png

A deactivated reference output

  • would change its appearance
  • would close the reference immediately after a the call.

An activated reference

  • should require a connected wire on its output. Otherwise an error should be indicated (somehow).

c.png

My comments  

  • An integrated Close Reference –Function would simplify the code and improve the readability.

     

  • The output should be changeable in the context menu / pop-up menu of the Property Node.

     

  • The default state needs to be discussed. I would recommend to close it by default. Sometimes it is not necessary to close the reference – it would lead to a void operation --> so what? Sometimes it is required to close it later. I think in this case you would find it out after the first run of your vi.
  • Usually it would not mater if somebody would let some references open. LabVIEW closes open references finally. But if an application should run for several days, left open references could lead to problems. Because of this I think that it is better to close to often than left some references open.
  • I am not sure how LabVIEW should react if an activated reference output would not be connected. I would recommend to indicate an error. In my opinion this would be an additional new feature to LabVIEW. LabVIEW does check inputs only. But this is another problem to discus.
  • Perhaps there are other places / VIs to implement an auto-close reference output.

The Combo Box is a useful means of linking "machine readable" strings and human readable text.  Unfortunately the current item editor lacks a key feature.

You cannot enter special characters (escape codes) or nonprinable characters \FF since any "\" entered is replaced by the "\\" escape  This means that if I want to add any non printable char to a value I need to write a vi to edit the strings and values property interactively and then type-def the control.   to edit the typedef I again need to disconnect from type def edit the strings and values from a vi, create a new custom control (no type def) and replace the original control in the type def with new control and apply changes.  Kinda a pain!  Again the values property will accept any string so this is only an items editor feature and does not change the combo box object in any manner

 

Many embedded applications use non printable characters in the commands. Most commands translate well into human readable text.  the combo box's auto completion feature allows an intellisense like feel to the UI but the difficuly mapping HRT to strings with non-printable characters seriouly increases the development and maintainence of these controls

For FPGA programming, sometimes I want a smaller representation of the loop iteration terminal on the for loop mostly just to squeeze every last gate out of the chip. Other times I want the integer to be unsigned or larger to prevent saturation.

1 I suggest that when in exe mode,  new controls still can be created by LabVIEW, however, vi scripting can not do it now.

 

2  An picure of image can be directly used as a common control, not indirectly from customized design.

After reading a rather heated discussion about converting Globals to Functional Globals, I was made aware that you can convert the Shared Variables to Globals, but not the other way around.  How strange.

 

I will not enter the debate that I liked Steve's idea, especially for debugging purposes.  But what if we could convert the Globals to Shared Variables?  They have the error cluster in and out..  Which would force dataflow.  Much better than wrapping the Global inside a Flat Sequence Structure and run the error wire through the Flat Sequence in order to force dataflow.

 

I did a quick search and to my surprise, I did not see such an idea being proposed.  Apologies, if I missed it.

 

I do offer these links if you are interested in reading the other G to FG discussions.

 

http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Convert-Global-Variable-To-Functional-Global/idc-p/1528260

http://forums.ni.com/t5/LabVIEW/Global-Variables-Are-Better-than-Functional-Globals-So-There/td-p/1528392

 

 

 

I'd love it if the LabVIEW developers optimized the search speed for searching pallettes for VIs.  When I hit the Search button on the Controls pallette, it can take 30 seconds or more before I can search as it says "Populating List...Please Wait."  It would be great if LabVIEW could populate the list as a background task sometime after startup such that when we need this function it would be ready to go without waiting.

 

 

I liked the new DBL on the palette that we got last year or so - saves a step. But, it should NOT adapt to entered data by default! Why would I specifically place a DBL only to have it change?

 

1.png

The "Run Continously" tools is typically used as a debugging tool to quickly play with inputs for "pure" subVIs that don't have a toplevel while loop (see also my comments here). This sandbox mode has the unwelcome side effect that the computer uses 100% of at least a single CPU core while doing so, starving all other processes that might already run on the computer. It gets even worse if I use "run continuously" on several subVIs at the same time. (Yes, I am a multitasker! :D)

 

Another use of the continous run button seems to be a certain other class of users. Also in this case, the high CPU use is a serious drawback.

 

All use scenarios I can think of suffer from this. There is no real advantage to run this fast without taking a breather.

 

My suggestion (first mentioned elsewhere)  is that there should be an implicit small wait (e.g. 10ms) between each restart so the continuouly running VI behaves more politely and is less demanding of system resources.

 

 

As a tool to refactor inherited code it would be nice if LabVIEW had the ability to convert global variables into functional global variables. I did a search and did not find this idea and will be surprised if it is not a duplicate.

 

You would pop up on the global and select "Convert To Functional Global". The vi includes error terminals in the standard locations but are (obviously) left unwired. The name of the FG vi would default to a concatenation of the name of the global vi and name of variable.

 

 

replaceglobal.PNG

 

I will leave it up to the experts to come up with a better icon.

Forgive me if this is a duplicate idea. I searched and didn't find anything that looked like it.

 

In most text programming languages the While loop comes in two flavors. The do {} while () and the while () {}. The difference is when the loop condition is tested. LabVIEW's current While loop will always execute one time before the condition is evaluated (at least before deciding if the loop should stop). It would be nice if LabVIEW had a While loop that would test the condition BEFORE the code is executed. Think about iterating over a string for example and consuming it in each iteration. You may want to run the loop while the string is not empty. Using the current while loop you would have to test the string and place the loop in a case statement to avoid operating on s string which is empty to begin with. This new loop construct would allow us to avoid wrapping while loops in case structure where we need to test a condition before anything is executed.

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.