LabVIEW Idea Exchange

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

When you’re making a By Reference LabVIEW Object using a Data Value References (DVRs) the user of your class would need to embed each Dynamic Dispatching VI inside an In Place Element Structure (IPE). Or you have to create wrapper VI for each method but this undermines the advantages of LVOOP Inheritance.
 
The idea is that a DVR containing a LabVIEW Object wired to a Dynamic Dispatching Terminal is equal to calling the Method VI inside the IPE structure like illustrated below.

DVR DynamicDispatch.PNG

Message Edited by Support on 01-15-2010 04:39 PM

Having a continuous integration system is an essential component of software development:

Continuous Integration ProcessContinuous Integration Process

This system requires automating the building process.

The LabVIEW development environment unfortunately does not have built-in tools to achieve this easily.

But the community has supplied a few sollutions to achieve this: CLI Tool

 

On of the biggest hurdles that yet remain, is the fact that the application builder is inherently tied to the development environment.

This requires a valid license for the environment and all toolkits / technologies used in the source code of the product you intend to build.

 

My proposal would be to have a special "CI" license in which all required modules and toolkits are activated, and that would allow the development environment to launch in some sort of protected mode that prevents users from actively developping code (while still allowing scripting functions), for the sole purpose of building applications.

Current methods for the LabVIEW Project that exist as Right Click Popup Menus are not exposed via VI Server/Scripting.

However, these methods would be very handy to call programmatically. 

 

I say, if we can Right Click Popup on it, then we should be able to script it!

There have been several ideas proposed to alleviate accidentally savings vis in the wrong version of LabVIEW. While useful, I think the main problem is that LabVIEW doesn't use the information it reads from the file to preserve compatibility. I'd like to propose here that LabVIEW introduce compatibility modes for previous releases in which LabVIEW will break a VI if a feature is introduced that isn't supported by the compatibility version. It will essentially be a built-in, seamless "save for previous" mode. 

 

By default, LabVIEW will load a VI (hierarchy) in a compatibility mode for whichever version is was saved in. If the user tries to make a change that isn't compatible, LabVIEW will alert the user and the user can tell LabVIEW whether it's ok to save to a newer version that supports the feature.

 

The level of alerts can be configurable, of course.

 

Related ideas:

Version-aware LabVIEW launcher

Add header to LabVIEW file to contain the version of LabVIEW

Display VI version in title bar

Version independent Source Code Saves

Currently it's only possible to have drag and drop events for files on a path control.

 

It would be usefull if we could have drag and drop events for files on any control.

This way simpler GUI can be build with a very nice user experience.

 

Ton

NI LabVIEW allows VIs with invalid characters such as "?" in the filename inside an LLB file as shown below:

LLB.png

 

However when it comes to building a Source Distribution / TestStand Deployment that uses this file it returns an error as shown below:

Build Error.png

 

This inconsistency within LabVIEW is quite frustrating where one part allows invalid characters in the filename and another part will return an error. Since the invalid characters are allowed in VI filenames within LLB files I would suggest that the LabVIEW build tools also handle them graciously.

 

During the build process it could quite easily rename the file "pi40iv Can Connect Channel?.vi" to "pi40iv Can Connect Channel_.vi"  and link the VIs that use it to the newly renamed file. The build tools already contain the ability to rename files by adding prefixes so something like this would not be that difficult.

 

While people may argue to just rename the filename within the LLB and be done with it, the fact that the LLB is a perfectly valid file in the Development Environment but causes problems when trying to do a build is a problem that should be rectified.

 

The LLB in question is one that is not developed by us but is part of a Pickering Driver Installation obtained from the following location:

http://downloads.pickeringtest.info/downloads/drivers/IVI/

Therefore every time we install a new version of the driver we would need to rename the VI filename within the LLB file.

When a third party add-on expires you get a dialog asking you to activate it, but the dialog does not offer you the option to remove it instead:

 

Mads_0-1665130603004.png

 

If would be nice to be able to select add-ons in the add-on list and then click a Remove/Uninstall button (and/or right-click). The current solution is to manually fire up the package manager and uninstall it from there (the remove button could alternatively (if needed /quicker to implement) call the package manager and tell it to start the removal of the selected packages.

You can right-click on a While Loop and select "Replace with For Loop", and vice-versa:

 

loops.png

 

Neither of these operations is currently available in VI Scripting. If they were, Quick Drop and other G-based editor features could benefit.

I suggest NI include a native feature to serialize LabVIEW objects in an interchangeable form.  (Alternatively, NI can at least provide enough access to allow a third party to develop such a framework.)

 

By "interchangeable" I mean in a manner that allows sharing object data between platforms (e.g., between LabVIEW and Java).  (Hence having "default data" without specifying the values of the default data is not allowed.)  Moreover, using a more common format (such as "Simple XML") is appropriate.

 

Of course, including the object version number is only meaningful within LabVIEW, but this is useful within LabVIEW thanks to the capability of LabVIEW objects to translate between versions.  (Note: I recognize the versioning can't avoid all possible issues, but in practice I think that is rarely a practical issue.)

 

I understand that for security reasons a developer may want to turn off the ability to serialize an object.  To support that, I envision a checkbox to allow serialization (default = True) in the class properties dialog.

 

I think XML is the best option for this for several reasons:

1) It is a common way to serialize objects in different environments.  This means that I can exchange serialized data with Java applications, for example.

2) It is readable, albeit not easily readable, by human beings.  (I actually don't want humans to read serialized data very often--and really never the operator, but it is good that they can on the rare occasion when they need to do so.)


Why I think NI should implement this:

1) This is relatively straightforward for NI to do since NI can already serialize a class to the current (noninterchangeable) LabVIEW XML format.

2) Having this capability could greatly expand the application space of LabVIEW, since it would make it orders of magnitude easier to interface with nonLabVIEW applications.  This is especially important in large systems, in which it may be advantageous to implement some system components in one environment and other components in another environment.  This is, I think, by far the most compelling reason to include this feature.

3) That there is a need for this seems obvious, given the number of lengthy discussions just on LAVA about this topic.

4) The current situation, in which each class must contain specific code for serialization, is patently inefficient and nonsensical.

5) In other major languages meaningful object serialization is a given, and LabVIEW should include (indeed, must include) this functionality to be competitive.


For the record, to serialize LabVIEW object data for communication within LabVIEW we use either the methods to flatten to string or to XML, and this works fine.  I realize it's not theoretically 100% fool-proof, because of potential issues across different object versions, but in practice we use version control, so that we build applications using the same versions of interface code (usually), and we only have one large system, so we can pretty easily control our deployed applications.   (I think that versioning an application could achieve the same.)  In practice, we've never experienced a version problem with this approach, and it avoids having to write any class-specific code (which, again, a developer should definitely not have to do) to support serialization.

Hello,

 

Actually the LabVIEW project Build Specification allow to create an old style DLL shared Library.

This kind of DLL is not so user friendly to use, because you have to define the DLL function prototypes, when you want to use them  ...  (Import, declare ... )

 

It would be nice, to be able to create a .Net DLL shared Library which is more easy to interface. (Without declare, import ...)

 

Build specification.png

The DotNet DLLs can be used without having to create Import declaration.

The self documentation of DotNet DLLs don't need to declare all function prototypes when you want to use them.

 

My need is :

- To create LabVIEW drivers libraries

- To create Packed libraries, from these librairies, to be used by LabVIEW projects or TestStand sequences.

- To create DLL from the same libraries, to be used by dotNet projects

 

Thanks a lot for reading.

 

Manu.Net  

One practice which is increasingly debated in the community is the packaging of code for distribution and collaboration, and which tools to use.

 

I suggest that NI should define and maintain an open standard for distributing packages of LabVIEW artefacts (.vi,  .lvclass etc).

And include a frontend to this in LabVIEW. This package manager should handle dependencies between packages and across LabVIEW versions and targets. The typical use cases would be:

  • The distribution (online or shipped with labview) of:
    • NI examples
    • NI drivers
    • NI toolkits
  • The distribution of third party species of the above

There should also be an API so that applications can use this mechanism to be modular and extensible. 

 

Cheers,

/MArcus

 

 

With the advent of scripting, it is possible to create some nifty tools to aid in code writing.  Those that work on individual elements of the FP or BD can often work nicely in Quick Drop or the Right-Click Framework.  Some of these tools however, work most naturally as an addition to to Tools menu.  The missing piece of the puzzle for seamless integration into the IDE is the ability to customize keyboard shortcuts for those additions.  I would simply like the ability to assign keyboard shortcuts to any item which appears in the Tools menu.  I have at least three things in there already more worthy of Ctrl-t.

Invoke nodes can have lots of optional arguments, resulting in their taking up a lot of vertical space.  I would like to recommend that the arguments portion of Invoke nodes be resizeable, allowing the developer to select the optional arguments to be displayed on the block diagram and, hence, have more control over the layout of the block diagram.

 

Consider the Save-As Invoke node from Microsoft Word:

 

Current Microsoft Word Save-As Invoke Node

 

which gets longer with each new version of Word.

 

Now imagine being able to show just the optional arguments that are needed:

 

Just the Optional Arguments that are Needed

 

And, as an added bonus, this Invoke node would not break when the VI is opened in a development environment that has a different version of Word with the same exposed optional arguments.

If you are using TCP to communicate to a different code environment, you may want to set some of the socket options. For example, for responsive control, you will want to disable Nagle's algorithm. There is currently no obvious or easy way to do this. TCP Get Raw Net Object.vi in <vi.lib>\utility\tcp.llb will provide the raw socket ID, but you then need to call setsockopt() on your particular platform using the call library node. You can do this with the code provide here. A much better way would be adding a property node to the TCP reference that allowed you to set and query the options directly.

Idea:

Create a free, stripped down edition of LabVIEW for general purpose programming (GPP). Let's call this hypothetical edition "LabVIEW Lite". By GPP, I mean programming tasks that have nothing to do with data acquisition, test, or measurement- tasks such as creating generic PC, mobile, and web applications. Former text-based programmers would flock en mass to LabVIEW Lite for GPP use cases if a free, stripped down IDE were available. Imagine the recent popularity of the Eclipse IDE and Java, only with LabVIEW Lite and G!   

 

Rationale:

  • LabVIEW Lite would exponentially promote the paradigm of graphical system design.
  • Few (if any) structural dataflow languages are available for GPP.
  • Structured dataflow languages are insanely cool! Inherent parallelism, increased productivity, and hierarchical system design are only a couple of reasons. These are things other GPP programming languages can't offer.
  • 16, 32, 64, ... core consumer devices are coming! LabVIEW is poised to exploit parallelism in a way that is hopelessly messy with text-based languages.
  • GPP use cases of LabVIEW Lite would spark user ideas for many non-GPP use cases, for which NI would receive full LabVIEW and NI hardware sales.

 

Implementation:

  • No measurement/test/data acquisition VIs or tools.
  • No FPGA tools.
  • Application (exe, dll) builder for stripped down applications.
  • The LabVIEW IDE we all know and love.
  • Primitive types, clusters, structures, loops, file i/o, etc. provided.

 

I think it's a shame that programmers today aren't using G! What do you think?

 


When you get a data changed event from an array, it would be nice if that event included an array of what items in the array actually changed.  This makes it easier for the user to determine what changed and how to deal with it.

The Duplicate Frame method of the DisableStructure class in scripting currently returns error 1072 ("This property or method is not yet implemented"):

 

dupframe.png

 

If we could programmatically duplicate frames in Diagram Disable Structures or Conditional Disable Structures, Quick Drop and other G-based editor features could benefit.

In Enthought's python integration toolkit (PITL), the "Open python session" VI accepted as an input the path to the python.exe file to use for the python kernel. In LV2019  the "Open python session" accepts a string "2.7" or "3.6", and then labview searches the system path to find the python installation.  The LV2019 method is vastly inferior to the PITL method. Due to the way the LV python node requires one to manipulate the system path in order to find the desired python installation, I realized that this is a complete non-starter for sending compiled applications to end users, because the end user may have multiple python installations on their computer, and I can’t expect them to bend over backwards just to be able to use my compiled LV app.

 

I do not know how NXG currently handles this, but I hope that they emulate the PITL method. Furthermore, it would be great if NXG could handle arbitrary python distribution, such as Anaconda, rather than just the bare bones installation from python.org. It would also be great if there was more documentation about the python node in general--there is very little to be found currently. The Labview python node is shrouded in mystery (e.g. what the heck is NIPythonInterface.exe) whereas the PITL was very self-explanatory. It is a shame that NI displaced such a useful product and replaced it with an inferior one.

The Matlab data plug-in supports version 7.0 files.

https://www.ni.com/example/29178/en/

 

The newest files are 7.3:

https://www.mathworks.com/help/matlab/import_export/mat-file-versions.html

 

Projects are beginning to require this newer format.

 

Hi,

 

building a large project consisting of several executables and an installer is no problem when using the AppBuilder API.

But a quite time-consuming task is to open all build specifications to update the build path or the file  versions.

E.g. opening the build specification of an installer containing several executables can take up to a minute even on an up-to-date pc.

 

So I suggest to enhance the AppBuilder API with property/method nodes to manipulate the "often-to-be-changed" properties. An example is attached below.

 

Regards,

 

Bastian

 

AdvancedAPI_lvie.png