LabVIEW


Laboratory Virtual Instrument Engineering Workbench is a system-design platform and development environment for a visual programming language from National Instruments.
The graphical language is named "G"; not to be confused with G-code. Originally released for the Apple Macintosh in 1986, LabVIEW is commonly used for data acquisition, instrument control, and industrial automation on a variety of operating systems, including Microsoft Windows, various versions of Unix, Linux, and macOS.
The latest versions of LabVIEW are LabVIEW 2019 SP1 and LabVIEW NXG 4.0, released in November 2019. NI released the free for non-commercial use LabVIEW and LabVIEW NXG Community editions on April 28th, 2020.

Dataflow programming

The programming paradigm used in LabVIEW, sometimes called G, is based on data availability. If there is enough data available to a subVI or function, that subVI or function will execute. Execution flow is determined by the structure of a graphical block diagram on which the programmer connects different function-nodes by drawing wires. These wires propagate variables and any node can execute as soon as all its input data become available. Since this might be the case for multiple nodes simultaneously, LabVIEW can execute inherently in parallel. Multi-processing and multi-threading hardware is exploited automatically by the built-in scheduler, which multiplexes multiple OS threads over the nodes ready for execution.

Graphical programming

LabVIEW integrates the creation of user interfaces into the development cycle. LabVIEW programs-subroutines are termed virtual instruments. Each VI has three components: a block diagram, a front panel, and a connector pane. The last is used to represent the VI in the block diagrams of other, calling VIs. The front panel is built using controls and indicators. Controls are inputs: they allow a user to supply information to the VI. Indicators are outputs: they indicate, or display, the results based on the inputs given to the VI. The back panel, which is a block diagram, contains the graphical source code. All of the objects placed on the front panel will appear on the back panel as terminals. The back panel also contains structures and functions which perform operations on controls and supply data to indicators. The structures and functions are found on the Functions palette and can be placed on the back panel. Collectively controls, indicators, structures, and functions are referred to as nodes. Nodes are connected to one another using wires, e.g., two controls and an indicator can be wired to the addition function so that the indicator displays the sum of the two controls. Thus a virtual instrument can be run as either a program, with the front panel serving as a user interface, or, when dropped as a node onto the block diagram, the front panel defines the inputs and outputs for the node through the connector pane. This implies each VI can be easily tested before being embedded as a subroutine into a larger program.
The graphical approach also allows nonprogrammers to build programs by dragging and dropping virtual representations of lab equipment with which they are already familiar. The LabVIEW programming environment, with the included examples and documentation, makes it simple to create small applications. This is a benefit on one side, but there is also a certain danger of underestimating the expertise needed for high-quality G programming. For complex algorithms or large-scale code, it is important that a programmer possess an extensive knowledge of the special LabVIEW syntax and the topology of its memory management. The most advanced LabVIEW development systems offer the ability to build stand-alone applications. Furthermore, it is possible to create distributed applications, which communicate by a client–server model, and are thus easier to implement due to the inherently parallel nature of G.

Widely-accepted design patterns

Applications in LabVIEW are usually designed using well-known architectures, known as design patterns. The most common design patterns for graphical LabVIEW applications are listed in the table below.
Design patternPurposeImplementation detailsUse casesLimitations
Functional Global VariableExchange information without using global variablesA shift register of a while loop is used to store the data and the while loop runs only one iteration in a "non-reentrant" VI
  • Exchange information with less wiring
  • All owning VIs are kept in memory
  • State machineControlled execution that depends on past eventsCase structure inside a while loop pass an enumerated variable to a shift register, representing the next state; complex state machines can be designed using the Statechart module
  • User interfaces
  • Complex logic
  • Communication protocols
  • All possible states must be known in advance
  • Event-driven user interfaceLossless processing of user actionsGUI events are captured by an event structure queue, inside a while loop; the while loop is suspended by the event structure and resumes only when the desired events are captured
  • Graphical user interface
  • Only one event structure in a loop
  • Master-slaveRun independent processes simultaneouslySeveral parallel while loops, one of which functions as the "master", controlling the "slave" loops
  • Simple GUI for data acquisition and visualization
  • Attention to and prevention of race conditions is required
  • Producer-consumerAsynchronous of multithreaded execution of loopsA master loop controls the execution of two slave loops, that communicate using notifiers, queues and semaphores; data-independent loops are automatically executed in separate threads
  • Data sampling and visualization
  • Order of execution is not obvious to control
  • Queued state machine with event-driven producer-consumerHighly responsive user-interface for multithreaded applicationsAn event-driven user interface is placed inside the producer loop and a state machine is placed inside the consumer loop, communicating using queues between themselves and other parallel VIs
  • Complex applications
  • Benefits

    Interfacing to devices

    LabVIEW includes extensive support for interfacing to devices such as instruments, cameras, and other devices. Users interface to hardware by either writing direct bus commands or using high-level, device-specific drivers that provide native LabVIEW function nodes for controlling the device.
    LabVIEW includes built-in support for NI hardware platforms such as CompactDAQ and CompactRIO, with a large number of device-specific blocks for such hardware, the Measurement and Automation eXplorer and Virtual Instrument Software Architecture toolsets.
    National Instruments makes thousands of device drivers available for download on the NI Instrument Driver Network.

    Code compiling

    LabVIEW includes a compiler that produces native code for the CPU platform. The graphical code is converted into Dataflow Intermediate Representation, and then translated into chunks of executable machine code by a compiler based on LLVM. Run-time engine calls these chunks, allowing better performance. The LabVIEW syntax is strictly enforced during the editing process and compiled into the executable machine code when requested to run or upon saving. In the latter case, the executable and the source code are merged into a single binary file. The execution is controlled by LabVIEW run-time engine, which contains some pre-compiled code to perform common tasks that are defined by the G language. The run-time engine governs execution flow, and provides a consistent interface to various operating systems, graphic systems and hardware components. The use of run-time environment makes the source code files portable across supported platforms. LabVIEW programs are slower than equivalent compiled C code, though like in other languages, program optimization often allows to mitigate issues with execution speed.

    Large libraries

    Many libraries with a large number of functions for data acquisition, signal generation, mathematics, statistics, signal conditioning, analysis, etc., along with numerous for functions such as integration, filters, and other specialized abilities usually associated with data capture from hardware sensors is enormous. In addition, LabVIEW includes a text-based programming component named MathScript with added functions for signal processing, analysis, and mathematics. MathScript can be integrated with graphical programming using script nodes and uses a syntax that is compatible generally with MATLAB.

    Parallel programming

    LabVIEW is an inherently concurrent language, so it is very easy to program multiple tasks that are performed in parallel via multithreading. For example, this is done easily by drawing two or more parallel while loops and connecting them to two separate nodes. This is a great benefit for test system automation, where it is common practice to run processes like test sequencing, data recording, and hardware interfacing in parallel.

    Ecosystem

    Due to the longevity and popularity of the LabVIEW language, and the ability for users to extend its functions, a large ecosystem of third party add-ons has developed via contributions from the community. This ecosystem is available on the LabVIEW Tools Network, which is a marketplace for both free and paid LabVIEW add-ons.

    User community

    There is a low-cost LabVIEW Student Edition aimed at educational institutions for learning purposes. There is also an active community of LabVIEW users who communicate through several electronic mailing lists and Internet forums.

    Home Bundle Edition

    provides a low cost LabVIEW Home Bundle Edition.

    Free for Non-Commercial use, Edition

    National Instruments provides a free for non-commercial use version called LabVIEW Community Edition. This version includes everything in the Professional Editions of LabVIEW, has no watermarks, and includes the LabVIEW NXG Web Module for non-commercial use. These editions may also be used by K-12 schools.

    Criticism

    LabVIEW is a proprietary product of National Instruments. Unlike common programming languages such as C or Fortran, LabVIEW is not managed or specified by a third party standards committee such as American National Standards Institute, Institute of Electrical and Electronics Engineers, International Organization for Standardization, etc. Some users have criticised it for its tendency to freeze or crash during simple tasks, requiring the software to be shut down and restarted.

    Slow

    Very small applications still have to start the run-time environment which is a large and slow task. This tends to restrict LabVIEW to larger applications. Examples of this might be tiny programs
    to grab a single value from some hardware that can be used in a scripting language - the overhead of
    the run-time environment render this approach impractical with LabVIEW.

    Non-textual

    Since G language is non-textual, software tools such as versioning, side-by-side comparison, and version code change tracking cannot be applied in the same manner as for textual programming languages. There are some additional tools to make comparison and merging of code with source code control tools such as subversion, CVS and Perforce.

    No zoom function

    There was no ability to zoom in to a VI which will be hard to see on a large, high-resolution monitor. However, the ability to zoom has been added into LabVIEW NXG.

    Release history

    In 2005, starting with LabVIEW 8.0, major versions are released around the first week of August, to coincide with the annual National Instruments conference NI Week, and followed by a bug-fix release the following February.
    In 2009, National Instruments began naming releases after the year in which they are released. A bug-fix is termed a Service Pack, for example, the 2009 service pack 1 was released in February 2010.
    In 2017, National Instruments moved the annual conference to May and released LabVIEW 2017 alongside a completely redesigned LabVIEW NXG 1.0 built on Windows Presentation Foundation.
    Name-versionBuild numberDate
    LabVIEW project beginsApril 1983
    LabVIEW 1.0 ??October 1986
    LabVIEW 2.0??January 1990
    LabVIEW 2.5 ??August 1992
    LabVIEW 3.0 ??July 1993
    LabVIEW 3.0.1 ??1994
    LabVIEW 3.1??1994
    LabVIEW 3.1.1 ??1995
    LabVIEW 4.0??April 1996
    LabVIEW 4.1??1997
    LabVIEW 5.0??February 1998
    LabVIEW RT ??May 1999
    LabVIEW 6.0 6.0.0.400526 July 2000
    LabVIEW 6.16.1.0.400412 April 2001
    LabVIEW 7.0 7.0.0.4000April 2003
    LabVIEW PDA module first released??May 2003
    LabVIEW FPGA module first released??June 2003
    LabVIEW 7.17.1.0.40002004
    LabVIEW Embedded module first released??May 2005
    LabVIEW 8.08.0.0.4005September 2005
    LabVIEW 8.20 ??August 2006
    LabVIEW 8.2.18.2.1.400221 February 2007
    LabVIEW 8.58.5.0.40022007
    LabVIEW 8.68.6.0.400124 July 2008
    LabVIEW 8.6.18.6.0.400110 December 2008
    LabVIEW 2009 9.0.0.40224 August 2009
    LabVIEW 2009 SP19.0.1.40118 January 2010
    LabVIEW 201010.0.0.40324 August 2010
    LabVIEW 2010 f210.0.0.403316 September 2010
    LabVIEW 2010 SP110.0.1.400417 May 2011
    LabVIEW for LEGO MINDSTORMS August 2011
    LabVIEW 201111.0.0.402922 June 2011
    LabVIEW 2011 SP111.0.1.40151 March 2012
    LabVIEW 201212.0.0.4029August 2012
    LabVIEW 2012 SP112.0.1.4013December 2012
    LabVIEW 201313.0.0.4047August 2013
    LabVIEW 2013 SP113.0.1.4017March 2014
    LabVIEW 201414.0August 2014
    LabVIEW 2014 SP114.0.1.4008March 2015
    LabVIEW 201515.0f2August 2015
    LabVIEW 2015 SP115.0.1f1March 2016
    LabVIEW 201616.0.0August 2016
    LabVIEW 201717.0f1May 2017
    LabVIEW NXG 1.01.0.0May 2017
    LabVIEW 2017 SP117.0.1f1Jan 2018
    LabVIEW NXG 2.02.0.0Jan 2018
    LabVIEW 201818.0May 2018
    LabVIEW NXG 2.12.1.0May 2018
    LabVIEW 2018 SP118.0.1Sep 2018
    LabVIEW NXG 3.03.0.0Nov 2018
    LabVIEW 201919.0May 2019
    LabVIEW NXG 3.13.1.0May 2019
    LabVIEW 2019 SP119.0.1Nov 2019
    LabVIEW NXG 4.04.0.0Nov 2019
    LabVIEW 2020 and LabVIEW NXG 5.0 Community Editions first releasedApril 2020

    Repositories and libraries

    , as well as LAVA Code Repository, serve as repositories for a wide range of Open Source LabVIEW applications and libraries. SourceForge has LabVIEW listed as one of the possible languages in which code can be written.
    VI Package Manager has become the standard package manager for LabVIEW libraries. It is very similar in purpose to Ruby's RubyGems and Perl's CPAN, although it provides a graphical user interface similar to the Synaptic Package Manager. VI Package Manager provides access to a repository of the OpenG libraries for LabVIEW.
    Tools exist to convert MathML into G code.

    Related software

    National Instruments also offers a product named Measurement Studio, which offers many of the test, measurement, and control abilities of LabVIEW, as a set of classes for use with Microsoft Visual Studio. This allows developers to harness some of LabVIEW's strengths within the text-based.NET Framework. National Instruments also offers LabWindows/CVI as an alternative for ANSI C programmers.
    When applications need sequencing, users often use LabVIEW with TestStand test management software, also from National Instruments.
    The Ch interpreter is a C/C++ interpreter that can be embedded in LabVIEW for scripting.
    DSP Robotics' FlowStone DSP also uses a form of graphical programming similar to LabVIEW, but is limited to the robotics industry respectively.
    LabVIEW has a direct node with modeFRONTIER, a multidisciplinary and multi-objective optimization and design environment, written to allow coupling to almost any computer-aided engineering tool. Both can be part of the same process workflow description and can be virtually driven by the optimization technologies available in modeFRONTIER.

    Articles on specific uses

    Articles on education uses