« Close

Datasheets and User Guides

App Notes

Software & Driver


LJLogUD - Windows Only

Supported devices

  • U3
  • U6
  • UE9


The application LJLogUD is included with the main installation package.

For LabVIEW programmers, the source code is available in the LabVIEW_LJUD archive.


LJLogUD is a simple ready-to-run executable that logs up to 16 input channels from a single device. It displays selected channels on a graph and writes data to file. Generally used for ≤100 scans/second.

LJLogUD uses command-response mode which is typically used at 100 scans/second or slower.  See Section 3.1 of the applicable user's guide for details about command-response data rates. Also see the analog input section (2.x).

Most of the user settings are saved in ljlogud.cfg.  This file is read when the program is first run, and this file is written when the program is closed.  To make a backup of the settings, simply make a copy of ljlogud.cfg.  Then later to use those settings again, close LJLogUD, delete or rename ljlogud.cfg, rename the backup file to ljlogud.cfg, and then run LJLogUD.

If you have changed some settings and are having problems, close the program and delete "ljlogud.cfg", then open again and you will have the default settings.  If you have problems related to opening the device, also delete "ljlogud_open.cfg".



LJLog vs. LJStream: We suggest that you use LJLogUD if possible, and only if you need to go too fast for LJLogUD do you then switch to LJStreamUD.  LJLogUD uses command-response mode, so it acquires and processes 1 scan at a time at the specified interval and is generally used for ≤100 scans/second.  LJStreamUD uses stream mode, so each iteration it retrieves and processes 1 seconds worth of scans and is generally used for >100 scans/second.  For more discussion of command-response mode and stream mode see Section 3.0 of the applicable user's guide:  U3, U6, or UE9.

LJLogUD vs. LJLogM: LJLogUD supports the U3, U6, and UE9.  LJLogM supports the T-series.


Control Descriptions

# Channels: 1-16.

Interval (ms): Interval at which this program scans all channels, updates the screen, and writes to file.  If LJLogUD cannot complete all those things within the specified time, it will start the next iteration as soon as possible, so your actual interval could be longer.  Set Interval to a small value, even 0, to run as fast possible.

Resolution: For the U3, a value of 0 disables QuickSample and a value of 1 enables QuickSample.  See Section 3.1 of the U3 User's Guide for how this affects speed and Appendix A of the U3 User's Guide for how this affects noise.  The U6 expects resolution settings from 0-12 while the UE9 expects settings from 0-18.  A value of 0 equates to 8 on a U6, 9 on a U6-Pro, and 12 on a UE9.  To see how this setting affects speed and noise see Section 3.1 (U6 or UE9) and Appendix B (U6 or UE9) of the applicable user's guide.

SettlingFactor: This parameter affects settling time, which is the time allowed for the analog input voltage to settle after switching from one channel to another.  For the U3, a value of 0 disables LongSettling and a value of 1 enables LongSettling.  See Section 3.1 of the U3 User's Guide for how this affects speed and Appendix A of the U3 User's Guide for how this affects max source impedance.  For the U6, a value of 0 means Automatic which provides settling sufficient for at least 1k of source impedance.  The times from Section 3.1 of the U6 User's Guide are measured with a SettlingFactor of 0.  All allowed values are 0=Auto, 1=20us, 2=50us, 3=100us, 4=200us, 5=500us, 6=1ms, 7=2ms, 8=5ms, and 9=10ms.  For the UE9, settling time is discussed towards the end of Section 2.7.0 of the UE9 User's Guide, and a SettlingFactor of 0-255 is multiplied by 5 microseconds to determine an amount of extra settling time added to the normal settling time.

Device Type & Address (Opening):  In the working directory there is a file called LJLogUD_open.cfg.  If you don't see it, make sure you have opened & closed LJLogUD at least once after installation.  In the 2nd line of this config file, if DeviceType=ANY, the application will search USB and then Ethernet for the first U3/U6/UE9 it can find.  If DeviceType is not ANY, then a call to OpenLabJackS() is made with the specified strings (FirstFound=FALSE).  See Section 4.3.1 of the U3/U6/UE9 User's Guide.  Example:  [Main] (1st line of config file), DeviceType=LJ_dtUE9 (2nd line), ConnectionType=LJ_ctUSB (3rd line), Identifier=1 (4th line).  If you mess up the config file, just delete it and then open & close the application so it will make a new default one.

This provides a way to run multiple instances at the same time talking to different devices.  Make a copy of LJLogUD.exe called LJLogUD2.exe, run LJLogUD2, set the working directly as desired, and close LJLogUD2.  Now edit both LJLogUD_open.cfg and LJLogUD2_open.cfg to get rid of all "ANY" strings and instead specify the device for each to open.  Requires LJLogUD 1.19 or higher.

Getting an errorcode 1007?  That means LJLogUD can't find the device it is looking for.  Could be a problem with the LJLogUD_open.cfg file described above, but the most common reason is that some other process (e.g. LJControlPanel) has the device open and thus LJLogUD can't claim it.

+Ch/-Ch: Put in the desired positive and negative channel numbers.  This specifies which analog input to read.  To read other types of channels (DI, Timers, Counters), see the special channel support described in Section 3.2.1 or 3.2.2 (stream mode section) of the applicable User's Guide.

Ranges: Select the desired range, which is related to gain.  Not all devices support all ranges, but starting with UD V3.19 the driver will select the best range available (next higher range) rather than throwing an error.  For more information, see the AIN section in Section 2 of the U3/U6/UE9 User's Guide, and also see Section 4.3.3 of the applicable user's guide.  The U3 does not have normal range options, but does have the "Special" range which is enabled by setting the negative channel to 32.  Note that due to the way this program and the UD driver parse the channels list, all rows with the same number in +Ch will use the range set by the last row with that same +Ch.

Scaling Equations: Should be something like "y=a", where "y" is the scaled output and "a" is the input voltage of the 1st row.  "b" through "p" would be the input voltage of the rest of the rows.  Everything after "//" is ignored, so use for comments.  A few examples:

y=c                      // Scaled value equal to raw value from 3rd row
y=100*c                  // EI-1034/LM34 voltage to deg F
y=c-273.15               // deg K to deg C
y=((c-273.15)*9/5)+32    // deg K to deg F
y=TCVoltsToTemp[K:c:a]   // Type K, t/c voltage from 3rd row, CJ temp from 1st row

For more details see the LJLog/Stream Scaling Equations page.

Write To File:  Click this to start and stop writing to file.  The resulting file is a tab-delimited ASCII file.  Files are written with a .dat extension.  To quickly open in Excel or Open Office Calc, change the extension to .xls or .ods.  To import to a Google Spreadsheet, make the extension .tsv before uploading.

The first column in the file is a timestamp of seconds since midnight January 1st (Universal Time), 1904.  For more information about presenting this timestamp in Microsoft Excel or Open Office Calc see the LJLogUD & LJLogM Timestamps page.

Each row of logged data typically requires ~18 bytes for the timestamp plus ~11 bytes per channel.  So it you log 8 channels once per second for 60 seconds that would be about (18 + 11*8) * 60 = 6360 bytes on the hard drive, and a 1 TB hard drive could hold a few hundreds of years of such data.

Data File Prefix:  LJLogUD uses this as the base string when it makes a file name.  When LJLogUD starts a new file, it appends a "_#" to the specified prefix, where "#" is the first unused number from 0-99999.

Max File Size (Bytes):  When the current data file exceeds this limit, it is closed and a new file is started.

Change Working Directory:  Click this to select the directory where the config file and data files will be saved.  After navigating to the desired directory in the pop-up window, click "Select Cur Dir" at the bottom-right.

Graph History: Controls how many scans are shown on the graph.  The graph is similar to a strip chart, and simply shows the last n scans.


Revision History

1.04: Not compatible with older config files, so delete ljlogud.cfg before running the first time!  Changed config file delimiter to "#!#" instead of "," for better international compatibility.  Made maximum file size a user control.

1.05: Turned on scroll bars, for use on smaller monitors.

1.06:  No longer disables timers and counters.  Makes error display red if there is an error.

1.07:  Fixed the jumbled looking screen in Windows 7.  Fixed problem where Ch- was not set to analog resulting in errorcode #16.

1.12:  Added support for registry storage of working directory.  Fixed problem where Graph History setting was not remembered.  Comments now allowed in scaling equations starting with "//".

1.15:  Two changes.  The first is that it now supports a config file that lets you specify a particular device to open.  See the description of "Device Type & Address" above.  The second is that it now uses the filename of the application to specify the names of the config files and to specify the location of the working directory registry key.  The former means if you make a copy of LJLogUD.exe called LJLogUD2.exe, the config files will be LJLogUD2.cfg and LJLogUD2_open.cfg and thus each copy has its own config files.  The latter means you can use a different working directory for each copy, although you don't have to.

1.16:  Added "Write To File" control to items saved in config file, so the application will now remember how this control was last set.

1.17:  Changed all text to Segoe UI font so screen items are aligned regardless of system font size.  Changed to show scroll bars.

1.18:  Added support for SignedLSWMSW[lsw:msw] function in scaling equations to handle quadrature reads.  For efficiency, scaling equations now skipped if no scaling is needed (e.g. y=a).

1.19:  Set minimum value of #Channels to 1.  Fixed problem where name of the exe was not detected properly.  Fixed issue where you could never decrease the number of channels shown on graph.  Changed version check sub-vi so it only shows prompt when new version available ... not on version check errors.

1.20:  Changed to grab the timestamp after data is read but before scaling is applied, rather than after scaling.  Fixed problem where -Ch array was not handled properly when non-analog channels (193+) were used, resulting in other analog channels sometimes returning binary values.




When using the UE9 Pro with the LJLogUD what is the maximum resolution that is possible?  I noticed the lop/iteration count gets bogged down when you increase the resolution above 17.  Is 17 the realistic max resolution that should be used with LJLogUD or LJStreamUD? Or is that just something with my setup?

Thanks, PS both programs are awesome

You can use any resolution setting, but depending on the number of channels you might want to increase "Interval".  Look at the times in Section 3.1 to determine how long it will take to collect data.  For example, if you collect 10 channels on a UE9-Pro with resolution=18 it will take about 1.25 seconds to collect the 10 readings each iteration.


Hi, is there a time stamp available with the log file? Also, I'm wondering if that's what the first column represents in my log files, but it comes out as a 3.38E+09 all the way down. Do I need to convert this column? Thx.

See the description of "Write To File" above.

I just installed LabJack U3-HV, went thru test program, all seems ok.  Device is USB local address 1.  Start LJLogUD (V1.06), get 1007 error every time, LabJack not found,  device type and address boxes greyed out.  Running Windows XP Professional 2002 SP3  LJStreamUD has same problem

First make sure no other program is running that might be holding the device open, such as LJControlPanel.

Please,My LabJack OK Installation,but when I start streame voltage change change between mV to .5 or 0.7V with no input voltage,when I input 1.3V in FIO0 the voltage OK read 1.3V, but if input 10mV I can sensor this value because the voltage normally change from 10micro Volt to 0.6V.

Help me please.



Which LabJack are you using?  The readings from floating channels are often not predictable.  For more discussion about your particular signal I suggest you start a topic on our forum.

Is there a way to change the graph y axis to a logarithmic scale?  And can I get some more decimal points in the data?  After scaling the input voltage my scaled output data ranges from 10E-8 to 10E-3.

LJLogUD does not support either of those things.  One thing I have done if I wanted to see really small signals on the graph is multiply them by 1000 or whatever it takes to make them appear bigger.

I have used "y=log(a)" (for example) on LJLogUD attached to a U6 successfully to capture high dynamic range signals on the y-axis.


Can I connect several LabJacks to one computer (e.g., 1 U3 and 1 U6, or 2 U6)?

Can I log both using LJLogUD at the same time, or even better, start two LJLogUD applications and use one for each LabJack to have two separate graphs?

Yes, you can connect multiple LabJacks.

LJLogUD is a basic program that simply opens the first-found U3/U6/UE9, and only that 1 device.  If you made a copy called LJLogUD2.exe and ran that, it can't open the same device so will open the next found, and so that might work for you, but both programs will share the same registry key that specifies the working directory, and thus will share the same ljlogud.cfg file.

Besides writing your own program, a good option for using multiple LabJacks on the same computer is DAQFactory.

Try LJLogUD V1.15 attached above.  Download and unzip the archive, then find your current LJLogUD.exe and replace it with the new one.  See Revision History above for a description of the changes.

I tried the method you mentioned. Start one LJLogUD.exe first, then start the other one with a different name. I can open two of them, but the second one, after launched, will report error "LabVIEW Error #1007:  Error 1007 occurred at OpenAny".

Don't know how to solve this. I think I have to change some value in the "LJlogUD_open" file, but don't know how. Could you please help me with that? Thank you.

See the description for "Device Type & Address (Opening):" above.

I assume you have LJLogUD.exe and LJLogUD2.exe.  First, I suggest you use LJControlPanel to change the Local IDs of your 2 U3s.  Change one of them to 2 and the other to 3.  Then edit LJLogUD_open.cfg such that DeviceType=LJ_dtU3, ConnectionType=LJ_ctUSB, and Identifier=2.  Then edit LJLogUD2_open.cfg such that DeviceType=LJ_dtU3, ConnectionType=LJ_ctUSB, and Identifier=3.

I tried the method described above, but am still getting the original error that was reported in comment #7. Any additional guidance on this issue?


Keep in mind this is kind of a hack method to use LJLogUD with multiple devices.  A better solution would be to move to software that is designed for multiple devices, such as DAQFactory.

We will correspond more via direct email about your details here.

If I'm wanting to sample more than 16 channels using a U6-PRO connected to your guys Mux80 Expansion Board, would I be able to do this in LJStream and output to an excel file? thanks.

LJLogUD and LJStreamUD are both limited to 16 channels.  To acquire more channels you will have to consider other things from the "Software Options" section on the U6 Support Homepage.  If you don't want to do any programming, then DAQFactory Lite or higher is a likely option for you.

If i want to make scaling equation for the channel 16 how i can do that while the screen show 15 channel only

LJLogUD has 16 rows.  These rows default to channels 0 to 15, but you can set +Ch and -Ch to whatever you want in any row.

dalmaraz09's picture

I am gathering data from a rotary encoder using LJLogUD. I wish to determine the RPM. how do I use the data from LJLogUD to determine that?

LabJack Support's picture

To bring digital data in using special analog channel numbers see Section 3.2.1 of the U3 Datasheet:


For example, if you are using Timer0 you want to read channels 200 and 224 and then combine them.  For more detail go to the "Scaling Equations" section above and follow the link " ... for more details see the LJLog/Stream Scaling Equations page."