LabVIEW Idea Exchange

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

Within  LabVIEW project, R'CLK on an autopopulating folder gives option to mass compile on that directory.


Ello,

 

Many of us have to install multiple versions of LabVIEW on a development system due to legacy projects where the benefits of transfer to newer versions of LabVIEW are outweighed by time and risk.

 

What I'd like to be able to do is have modern versions of drivers etc installed at the same time as legacy ones that are unsupported.

 

For instance, I have IMAQdx installed for LV2019 and LV2016 using VAS 19.5, which is only backwards compatible down to LV2016 (ref). I'm trying to install IMAQdx 4.2 to be able to use it as part of an LV2013 installation, but the installer will always tell me that there's no need, I've got a newer version! Unfortunately, said newer version isn't compatible with LV2013.

 

My workaround is to uninstall IMAQdx and IMAQ 19.5, install 4.2, then deal with the consequences afterwards. The other alternative would be to set up a series of VMs for different versions, but that's easier said than done in my company!

Don't have enough time to make any fancy pictures or diagrams, but the idea is simple. When cleaning up VIs, I find myself constantly switching my right hand between the mouse and the arrow keys. It would be really slick to be able to move highlighted FP/BD objects with a CTRL + Mouse Scroll combination. Here's my thoughts on what the combinations could be:

 

CTRL + Mouse Scroll Up: Move highlighted object(s) one pixel up

CTRL + Mouse Scroll Down: Move highlighted object(s) one pixel down

CTRL + ALT + Mouse Scroll Up: Move highlighted object(s) one pixel right

CTRL + ALT + Mouse Scroll Down: Move highlighted object(s) one pixel left

 

And to get really fancy...

 

CTRL + SHIFT + Mouse Scroll Up: Move highlighted object(s) several pixels up

CTRL + SHIFT + Mouse Scroll Down: Move highlighted object(s) several pixels down

CTRL + SHIFT + ALT + Mouse Scroll Up: Move highlighted object(s) several pixels right

CTRL + SHIFT + ALT + Mouse Scroll Down: Move highlighted object(s) several pixels left

Annotate palette items with dynamically generated keyboard shortcut characters. The keyboard shortcuts should be such that users don't have to use two hands to type them out. Typing out the shortcut will close the palette and put the palette item on mouse cursor. If the shortcut is on a palette folder, the palette will remain open and show content of the folder. 

 

This is a great symbiosis between mouse and keyboard and will increase user's coding speed by reducing mouse travel.

 

There should be a couple of options for opening the palette via keyboard shortcuts for a complete experience- 

  1. Shortcut to open main palette. Similar to right click on blank space. 
  2. Shortcut to open recently or most used items palette. 
  3. Shortcut to open parent palette of node under cursor (or last node dropped). 
  4. Shortcut to open palette related to datatype of wire under cursor.

Here is a visualization of how the annotations might look like- 

ritesh_soni_0-1611941818238.png

 

Note that all the shortcut characters are on left side of the keyboard, and could be typed one handed operation by a touch typist. It will be easy to configure the tool for left-handed people and concentrate the keys on right side of the keyboard. Also, the letters have been selected in a way that the two keys are on separate fingers for faster typing.

 

Comparing to quick drop feature-

  1. Quick drop requires user to recall from memory. User has to either remember the short name or the full name of the item. With this idea, the shortcuts are right in front of the user.
  2. Characters of full name of the item on quick drop can go all over the keyboard. User either has to move one hand around which will require looking at the keyboard or move the mouse hand to keyboard. With this idea, it will be easy to control the shortcuts to be on one side of the keyboard.

    Note: Short name of items in quick drop are concentrated on left side of keyboard, catering only to right-handed use. Not sure how easily the short names can be configured for left-handed use.
  3. Overall this idea supplements quick drop. It speeds up a few happy paths.

Inspirations 

  1. Figma. It is a website design tool and has a tiny palette with rectangle, circle, line, text, etc. It has keyboard shortcut for each of the palette item – R for rectangle, L for line, T for text, and so on. E.g. typing R brings the rectangle on mouse cursor. It has a small palette so remembering the shortcuts is easy. This idea cannot be directly ported to LabVIEW because of the billions of palette items. 
  2.  Vimium C Chrome extension. This extension enables experience of vim editor in browser. One of the features it has is annotating links with dynamically generated keyboard shortcuts. Typing out the shortcut keys takes you to the link.

Combining both gave origin to the above idea.

Idea

The idea is to implement an option to choose for which RunTime-Version you want to compile your executable.

With this you could always use the newest LabVIEW development version but do not need to update all systems with a RunTime-Version.

NI-RunTime-Version.png

 

Background

When changing from LabVIEW 2019 to LabVIEW 2020, you need to update every RunTime-System also to version 2020.

This is difficult, if you have many worldwide runtime systems with different projects, where you can not easily update a RunTime-Version because of technical restrictions in production or access to the system.

 

This results in parallel use of different LabVIEW development versions for all of your projects.

Means a mess because once open a project in the wrong/newer LV-Version you have to store all changes "for older LV-Version" to continue work in right version.

Or, to avoid this, not upgrading to a newer LabVIEW development version and still working for example with LV16 in all projects.

 

Conclusion

Best way would be if you can update all projects to LV20 development system, but still be able to directly built executables for older runtimes.

It would be very helpful to be able to change formatting (different background, font, etc.) on individual items in a listbox. My use case would be listing a bunch of files in a listbox. Some of these files need to be brought to somebodies attention but most don't. The user also needs to view the files around the highlighted file so just listing the files that need attention is unhelpful. 

 

In the image below imaging that the file highlighted needed review. I would want to use any logic including string matching, or other logic to highlight the background color of just that item.

 

Image 3.png

Consolidate all LabVIEW G files into two file extensions:

  • Source LabVIEW File (*.xx) - Human readable source code files (e.g. *.vi)
  • Compiled LabVIEW File (*.xxc) - Compressed compiled binary files (e.g. *.vic) 

Justification:

LabVIEW is proprietary. I need LabVIEW to open LabVIEW files. There are +15 LabVIEW file extensions to create LabVIEW G code. Recognizable LabVIEW extensions are worthless because I still need LabVIEW to open and edit the files. Some LabVIEW files contain compiled code, whereas other LabVIEW files are glorified name-spacers; some are UI components, while others embed compiled LabVIEW code into other LabVIEW files.

 

With every new LabVIEW version, capabilities are added that inherently cause inconsistencies between LabVIEW file types, environments and overall behavior. Let me explain. 

 

Problem:

  1. Current LabVIEW file types don't adhere to consistent behavior:
    • Libraries (lvlib, lvclass, xnode, xctl) are xml files (human readable) but also contain encoded compressed data (non-human readable)
    • VIs (vi, vit, vim, ctl, ctt) are binary files that can contain compiled code (or not)
    • Libraries (lvclass) add dynamic capabilities like dynamically dispatched VIs and can embed class private data controls (or not for interfaces) using the same extension, rendering the extension useless
  2. Inconsistent code redistribution
    • Distribution libraries (llb, lvlibp) embed compiled code differently
    • Packed libraries (lvlibp) resolve system paths differently that source
    • Libraries (lvlib, lvclass) lack the capabilities to embed reusable libraries for redistribution - Similar to Python's PIP library
    • Some 3rd party applications (like VIPM) to manage distribution inconsistencies add more file types and compounds the redistribution problem
  3. Compatibility discrepancies
    • VI (Poly, Express), Class (Class, Interface) already introduces development idiosyncrasies that could be resolved with a one "file" fits all methodology.
    • More file extensions equals more variability, increased maintenance time, and puts ownership on developer community to find discrepancies

Proposed Solution:

  1. Consolidate current LabVIEW G source files (vi, vit, vim, ctl, ctt, lvclass, lvlib, xnode, xctl) into a single Source LabVIEW File (*.xx) that is human readable (i.e. xml) that contains no encoded, compiled or compressed data. - Similar to NXG's xml format
  2. Introduce Source LabVIEW File (*.xx) nesting/namespacing to remove the need for external Library files (lvclass, lvlib, xnode, xctl) - Similar to how C# or Python files allow for multiple methods within a single file.
  3. Add a build spec component to generate a Compiled LabVIEW File (*.xxc) that embeds the Source LabVIEW Files and Compiled Object Cache - Similar to Python wheels/pip package manager
  4. Allow developers to use the Source LabVIEW File (*.xx) or Compiled LabVIEW File (*.xxc) interchangeably in their development projects - Similar to how Python's *.py or *.pyc can be called

Features:

A single LabVIEW Source File (*.xx)...

  • can be human readable (i.e. xml) - Editor agnostic
  • can embed one or more LabVIEW Source Files - Single file libraries
  • replaces *.vi, *.vit, *.vim, *.ctl, *.ctt, *.lvlib, *.lvclass, *.xnode, *.xctl
  • adheres to common coding language extensions (C#=cs, Python=py, Java=java)

A single LabVIEW Compiled Files (*.xxc)...

  • is a specific build specification for packaging and distribution
  • contains the source files (optional) and compiled object cache
  • can embed run-time components - Package distribution
  • adheres to common coding practices (Python=.pyc, Java=.jar)
  • replaces *.lvlibp, *.llb, [*.exe]

 

LabVIEW currently has +15 extensions to develop G code:

(Not including, LV Projects, NXG, VeriStand, TestStand, LabWindows/CVI, etc.):

- Virtual Instrument (*.vi)

- Virtual Instrument Template (*.vit)

- Malleable Virtual Instrument (*.vim)

- Control (*.ctl)

- Control Template (*.ctt)

- Virtual Instrument Library (*.llb)

- Library (*.lvlib)

- Class (*.lvclass)

- XNode (*.xnode)

- XControl (*.xctl)

- Packed Library (*.lvlibp)

- Palette Menu (*.mnu)

- Run-Time Menu (*.rtm)

- Data (*.tdm, *.tdms, *.lvm, *.bin3, *.rc)

 

Should we consolidate?

Working with XML is fairly common and an addition to the palette to replace a specific node value would be helpful. Besides, there's lots of space there yet.

 

This link saved time. Thank you to juliodia

for posting this.

 

https://forums.ni.com/t5/LabVIEW/XML-Update-Element-Text/td-p/1239026?profile.language=en&lang=en

VI snippets are useful but often hard to deal with. Sometimes you can drag one directly from a website into LabVIEW and have it just work. Other times you have to download it, open File Explorer to it and drag the file into LabVIEW.

 

Many times dragging directly from a website doesn't work and results in a comment with a link to the VI snippet. Instead LabVIEW should try to go to the link, download it and insert it as a VI snippet. There are some cases when this will not work (for example the user needs to sign into the website) but LabVIEW should at least try the link. It is possible a link will be provided to LabVIEW that is not a VI snippet in which case LabVIEW should recognize that and just treat it as a normal link.

 

I'm not sure but there may be cases when a PNG image is dragged or pasted onto the block diagram. Is there a possibility for LabVIEW to check if it is a VI snippet and treat it as such?

Allow array controls and indicators to line-wrap 1D data into a 2D display.

 

I have, say, a 1x1000 array of square images, and I'm browsing through them, and it'd be really lovely to be able to pop them into a grid as a single display element instead of having to make several array indicators with carefully synchronized display indices, or reshaping the array.

 

That is, if I have a 1D array consisting of the alphabet, and I pull the array indicator into 3x3, then it could look like:

 

abc

def

ghi

 

or if I entered index 1 in the index box, it would show

 

bcd

efg

hij

 

etc.

 

An option to allow vertical-first would seem reasonable:

 

adg

beh

cfi

If we can have instrument simulator VIs, we can test our codes prior to the actual hardware acquisition

 

The idea proposes device driver packages from IDNet to include a vendor instrument simulator VI that can be run prior to code testing. The VI can be configurable (VISA based on virtual ports created during runtime, file paths to read from to simulate measurements and responses to messages, etc) and started asynchronously (call & forget) at the start of the program and terminates when the caller terminates.

 

or as a template from the "New > Simulated Instrument" where user can modify according to the instrument that they are going to use.

 

...and that it covers NI and 3rd party instruments

If you've got a project open, any new VIs you create automatically get added to the project.  It'd be nice if there was a way to disable this feature.

 

I find the feature frustrating because:

- I often create new VIs that I never intend to save, just to test out some logic quickly.  However, I can't just close the VI -- I need to go and remove it from the project too -- and this also leads to a dirty dot in my project (and extra work).

- I'd prefer to have full control over which VIs get added to my projects, and where they added within a project.

- If you've got more than one project open, you have to be careful about where you press "ctrl+n" from.

- I've found myself in situations where I close a project after creating a new VI, tell LabVIEW that I don't want to save changes to the project, and by doing so inadvertently lose the code in the new VI because I'd overlooked that automatic association.

 

If one had to explain the architecture of a larger project to a new person that implements classes & interfaces without referring to a top level UML diagram, the eyes could quickly start to glaze. Adding simple functionality may prove to not be so simple.

 

Perhaps adding to the context help when hovering on the wire showing the hierarchy would be helpful as outlined below.

 

Note: Kudos to Piotr for making the code available. Thank you!

VIWeek 2020/Functional programming inspired object-oriented template in LabVIEW + SOLID

 
 

interface & class context help.PNG

 

Hello,

 

NI should provide any text label that can be rotated by custom user defined angle like 45 or 30 or -45 or -30 degree.

Currently we have following options only.

 

_aniket72_0-1589361098132.png

 

Best Regard & Stay Healthy,

 

I am guessing this idea won't go anywhere, but sometimes it would be really nice to have more than one i terminal in a loop. I cross a lot of wires in ugly ways to get that iteration number to different places and sometimes its hard to track down when i move it around the loop to avoid wire crossing. It would be great if you could right click on loop and say "Add iteration terminal" and then have access to the value multiple places. and maybe another right click option for "Find iteration terminal". Then you could also delete the extras.

 

Even if you could add something like a local variable for it or something that would be great. I know it would be tricky as it can only belong to that loop and so it has to be treated special. But it would be so convenient.   

And let people delete them all if they are not using it. 

Now LabVIEW is not able to handle .net DLL generic datatypes like lists.

Would be very useful if next generations could handle this.

 

Thanks. 

I sometimes want the first result from a tunnel on a loop. I end up using a auto indexing tunnel and then just indexing off the 0th value. Not a huge deal, unless the data type is something huge or I am doing tons of iterations and then I am just wasting memory. I guess I could put in a last value and make it conditional on i=0 but that is extra mess. You would probably want to make the tunnel icon look different so its obvious whats happening. maybe something like

tshurtz_0-1587680626172.png

 

When you drop a VI on the block diagram it's becomes statically linked to the calling VI. If instead you wanted to call the same VI dynamically (without creating an edit-time dependency by using a Static VI Reference) you'd have to change the code to, instead, open the sub VI's ref by path, create a type specifier and then wire the reference to a Call by Reference node.

 

Why not instead just provide the option to call a given sub VI dynamically by right clicking on the sub VI itself? I'm picturing a right-click menu that has two options:

  • Static Call (default)
  • Dynamic Call

If "Dynamic Call" were selected, all the steps to convert the call to dynamic would be handled would be handled by the IDE/compiler without the developer having to actively modify the block diagram. The IDE has 90% the information to make this happen, right? And the missing information could be provided by an options dialog if necessary (e.g. synchronous vs asynchronous call, run as sub VI vs top-level).

 

There should probably be some sort of visual indicator on the BD that the sub VI is being called statically vs dynamically.

We require to programmatically Add an EPICs IO server to a shared variable library like you can do manually from the project explorer as shown in the picture:

renditionDownload.jpg

 

Currently, there is a way to create an EPICS IO server programmatically with the function but this function will not save the EPICS IO server on a Shared variable.

 

Screenshot_1.png

We require to save the EPICS IO server to the library, then save the library(.lvlib file) to disk so we can later deploy the library. 

 

 

The current way to bind many shared variables to an OPC client, is through browsing a tree and selecting.

This is very time consuming when you have hundrends or thousands of tags to bind. Specialy if the all the tags are not in the same path.

A better way, is to bind the variables, by simple text.

Example: We will insert the following text

A1M01Z1:value

A2M01Z1:value

A3M01Z1:value

 

and LabVIEW will automatically create 3 variables, bounding to those addresses (with the same name, prefered). Many OPC Servers supports this type of address.

Note that the true path of A1M01Z1 could be something very big, like:

My Computer\OPC ABB.lvlib\_OPC1\[Control Structure]\Root\NETWORK 1\Nodecm3\Extended Process Objects\MB300 AI\A1M01Z1\VALUE

 

This way you can add thousands of items in minutes. It is quite easy for the R&D team to implement and will help many professional engineers.

Most probably, this idea will not accept many kudos, but i think R&D must consider to implement this.

 

(this was discussed with NI technical suport, Reference#3279019)

 

Thank you all, for reading