« Close

Datasheets and User Guides

App Notes

Software & Driver


LabVIEW for LJM - Windows

LJM LabVIEW Examples (Software Platform)

LabVIEW example VIs for the LJM library.


LJM LabView Examples (Referencable)

The LJM library is the high level code library for T-Series devices. LabVIEW is one of the most popular programming languages used by our customers. LabVIEW is a graphical programming language, as demonstrated in the code snippet below, but understand that it is still a powerful programming language not a simple software tool.


Note that using a LabJack in LabVIEW is not identical to using NI hardware in LabVIEW.  The NI hardware is talked to through the NI-DAQ driver, while the T7 or T4 is talked to through the LabJack LJM library.  That means that you will not use measurement & automation explorer, DAQ assistant, or similar NI wizards.


Getting Started

  1. Go to the T4 or T7 Quickstart Tutorial and follow the steps to install Windows software and confirm basic operation.
  2. Download the LabVIEW_LJM archive (at the top of this page) and extract the entire archive.
  3. In LabVIEW you will be making calls to our LJM Library to write and read registers on the device.  Go to the main LJM Page for an introduction, and proceed to the LJM User's Guide for more details.
  4. For more information about what registers to write and read, see the T4 or T7 Datasheet and the Modbus Map.
  5. Navigate to the folder \LabVIEW_LJM\Examples\Basics and try out "LJM_eReadName Example.vi".
  6. Move on to the very useful example "Read Write Loop with Config.vi".


With the LJM library, pretty much everything you might want to do with a device is accomplished by writing and/or reading some registers.  Look at the device's datasheet (T7 or T4) or the Modbus Map to determine what registers you need to write and read, then use eWriteName (or eWriteNames) to write the desired registers and eReadName (or eReadNames) to read the desired registers.  The following examples are a great place to start:

  • LJM_eWriteName Example.vi
  • LJM_eWriteNames Example.vi
  • LJM_eReadName Example.vi
  • LJM_eReadNames Example.vi
  • Read Write Loop with Config.vi

LabVIEW_LJM Archive Contents

The downloadable zip file "LabVIEW_LJM.zip" extracts to a single folder called "LabVIEW_LJM" which contains a few subfolders.  The folder can be stored anywhere, but if you want icons to show up on the LabVIEW function palette (after restarting LabVIEW), place this folder under ...\national instruments\labview #\vi.lib\addons\.

Many people, including us, do not use the palette icons but rather just copy paste from examples and use the "Select a VI..." balloon from the function palette.  In that case you can put the LabVIEW_LJM folder wherever you want.

We recommend not having more than one copy of the VIs, and not changing these VIs.  If you want to make your own variation of one of the examples, make a copy in a different location and modify that.

If you download new VIs from labjack.com, delete and replace the entire LabVIEW_LJM folder.

The \Functions folder contains simple VIs that do little more than call functions from LJM.  Most of these need a valid Handle input so are intended to be sub-VIs not standalone top level VIs.

The \LVUtilities folder contains VIs that encapsulate some useful functions.  These are used by other VIs from the \Functions\ and \Examples\ folders to handle things unique to LabVIEW.

The \Examples\Basics folder contains core examples that demonstrate the basics of interfacing LabVIEW with our LJM library.  Included here is the very useful "Read Write Loop with Config.vi" example which forms the basis for most customer applications.  Use the device datasheet (and/or Modbus Map) to determine what registers you need to write and read and the plug those register names into "Read Write Loop with Config.vi".

The \Examples\More folder has many more examples that demonstrate specific tasks.  Some of these demonstrate unique techniques, but many are simply variations of the "Read Write Loop with Config.vi" example with different default register names and values.

The \LJLogM and \LJStreamM folders contain the source code for those sample programs.  The executable versions (.exe) are part of the main LabJack software installer for Windows.  Advanced LabVIEW programmers might find this source code useful, but most users are better off starting with a more basic example.

Code Snippet

This example uses 5 calls to the LJM library:

    • LJM_OpenS specifies which device you want to open and returns a handle for that device.
    • LJM_GetHandleInfo returns information about the device we just opened.
    • We pass a register name to LJM_eReadName and it reads the value of that register.  In this case we are reading the register named "SERIAL_NUMBER" which returns the serial number of the device.  For more names refer to the T7 Datasheet or Modbus Map.
    • LJM_Close closes the connection to the device so it is available to other processes.
    • LJM_ErrorToString converts the numeric error code to a readable string.


      6000 is added to the LabJack errorcodes to shift them into the LabVIEW user range of 5000-9999.  For example, if the open call cannot find the device you requested it will return LabVIEW-LJM errorcode 7227, which is LabJack-LJM errorcode 1227.  Many errorcodes are listed in Section 4 of the LJM User's Guide, but no need to look there for the basic string as every LabVIEW program should use LJM_ErrorToString.vi to convert the errorcode to a readable string.


      **Note**:  2 substantial changes were made to the LabVIEW_LJM archive with the 2015_01_23 release:

      1.  In LJM function call VIs that have the NumFrames parameter, that parameter is now optional with a default value of -1 which means "Auto-Detect the Number of Frames".  If you do not wire anything to NumFrames, or pass -1, this signals the VI to use the size of aNames or aAddresses to determine the number of frames.  This should not break any code using previous versions of these VIs.

      2.  A few changes were made to the inputs & outputs of LJM_eStreamStart.vi, and these changes will break code using a previous version of this VI.  See the front panel of LJM_eStreamStart.vi for more details.



      when I run "DIO EF Config 1 PWM and 1 Counter.vi" I have an error message: "LabJack Error #2508:  HW_CNTR0_NOT_AVAILABLE occured at LJM_eWriteAddresses.vi"

      The problem is that that example enables Clock0 for the PWM output.  Clock0 uses CounterA & CounterB so they are not available:


      We will change the example to use CounterC on CIO2.

      In the config list use:


      ... and then read:


      Forgot to click the "List" box.  Now it is showing.

      "LabJack Error #1298:  LJME_ATTR_LOAD_COMM_FAILURE occured at LJM_OpenS.vi"

      LV2014, 64bit machine.  The LJControlPanel and LJStreamUD work just fine.

      The .dll is installed in the systems32 folder.

      What LabJack are you using? The LJM driver and examples only support the LabJack T7 and Digit. For UD devices (U3/U6/UE9) use the UD driver and examples: