https://github.com/chmarti1/lconfig

Laboratory configuration system for LabJack DAQs

https://github.com/chmarti1/lconfig

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.2%) to scientific vocabulary

Keywords

acquisition-devices configuration labjack
Last synced: 5 months ago · JSON representation

Repository

Laboratory configuration system for LabJack DAQs

Basic Info
  • Host: GitHub
  • Owner: chmarti1
  • Language: C
  • Default Branch: master
  • Size: 1.02 MB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Topics
acquisition-devices configuration labjack
Created almost 7 years ago · Last pushed 6 months ago
Metadata Files
Readme

README.md

LCONFIG README

Headers and utilities for laboratory measurements and machine control with the LabJack T4 and T7

By Christopher R. Martin
Assistant Professor of Mechanical Engineering
Penn State University
crm28@psu.edu

Version 4.05

Foreword

This README is a preliminary introduciton intended to help users decide if LConfig is right for them and to get started. The detailed documentation is contained in the docs folder: General Documentation


Contents of this README

About

In the summer of 2016, I realized I needed to be able to adjust my data acquisition parameters day-by-day as I was tweaking and optimizing an experiment. I love my LabJacks, and the folks at LabJack do a great job of documenting their intuitive interface. HOWEVER, the effort involved in tweaking DAQ properties on the fly AND documenting them with each experiment can be cumbersome.

This little Laboratory CONFIGuration system is designed to work with text-based configuration files using an intuitive human readable format on Linux systems. Configuration and meta data about the experiment are all embedded together in one place as a long term record for easy distribution and sharing of data.

The installation includes three top-level binaries that do just about all the jobs I require: lcrun, lcburst, and lcstat. lcburst collects high speed data in short bursts. lcrun streams data from up to 8 parallel devices directly into data files until stopped with a keystroke. It will run as long as you have hard drive space, so tests that last for days, months, or years become possible. lcstat prints a continuously updating display of the measurements from multiple parallel devices (respecting the channel calibration).

If these binaries don't work for you, the back-end configuration is contained in lconfig.c, lconfig.h, lctools.c, and lctools.h. It has been years since I've needed to build a custom binary, and I've taken some relatively sophisticated measurements with these codes.

While I do my best to keep this README up to date, the authoritative documentation for the behavior of LCONFIG is contained in the headers, lconfig.h and lctools.h. Each function has comments that defines its behavior, and there are even some examples that indicate how the functions should be used. The comments to the lc_load_config() function give a detailed description for each configuration parameter. There is also a changelog commented at the top of the header.

Features

LCONFIG allows automatic configuration and control of most of the T4/T7's advanced features with a few added features for easier post-processing of the data.

  • Stream sample rate configuration
  • Analog input streaming
    • Input range
    • Settling time and resolution
    • Single-ended vs differential
    • Channel labeling
    • Linear calibration to engineering units (e.g. Volts to psi for pressure sensors)
    • Built-in buffer (no dynamic data management required)
    • Non-blocking service for parallel device streaming
  • Digital input streaming
  • Static digital output
  • Software trigger
    • Rising/falling/any edge on any AI channel
    • Supports pretrigger buffering
  • Hardware trigger
    • On device-supported DIO channels
    • Rising/falling/any edge
  • Analog output function generator
    • Constant value
    • Sine wave offset, amplitude, frequency
    • Square wave offset, amplitude, frequency, duty cycle
    • Sawtooth offset, amplitude, frequency, duty cycle
    • White noise offset, amplitude, repetition frequency
    • Channel labeling
  • Flexible Input/Output extended features
    • Two-channel encoder quadrature
    • Frequency input
    • Digital counter w/ configurable debounce filter
    • Line-to-line phase measurement
    • Pulse width measurement
    • Pulse width output with configurable phase
    • Channel labeling
  • Digital Communication Interface
    • UART interface
    • (future support for other interfaces planned)
  • Automatic generation of data files
    • The active configuration is embedded in the data
    • Stream directly to a file for simplicity
    • Stream to buffer then to file for speed
  • Tools for real time applications in lctools.h
    • Tools for formatted printing to a POSIX terminal
    • Tools for handling keyboard interrupts without external libraries
    • Tools for real-time signal statistics like
      • mean
      • peak-to-peak amplitude
      • max and min
      • root-mean-square (RMS) value
      • standard deviation
    • Tools for idle time in service loops
  • Post processing in Python
    • lconfig.py package loads configurations and data automatically
    • Applies calibrations
    • Index by channel number or channel label
  • Error handling
    • Messages to STDERR include the funciton's name and a description of the failure
    • Each error message uniquely identifies a location in the code

License

This software is released under the GNU General Public License version 3.0. LCONFIG is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Getting started

To get the repository,

bash $ git clone http://github.com/chmarti1/lconfig $ cd lconfig $ sudo make install # Installs binaries to /usr/local/bin $ lcrun -h # Prints help $ lcburst -h lcrun and lcburst are binaries built on the LCONFIG system. lcrun continuously streams data to a file, but the read/write times for most hard drives prevents realizing the full speed of the T7. lcburst collects a high speed burst of data and then writes it to a file. Both executables use the LCONFIG library to load a configuration file, open the appropriate device connections, initiate the data transfer, and write data files automatically.

For writing your own executables, a quick tutorial on programming with the LCONFIG system is laid out in LCONFIG_README with the gritty details in this README. The absolute authoritative documentation for LCONFIG is the comments in the prototype section of the header itself. It is always updated with each version change. Versions 2.03 and older used a different system for streaming than version 3.00 and later, so older branches are still available on the git page.

Once you produce your data, there's a good chance that you'll want to analyze it. If you're a Python user, the lconfig.py module will get you up and running quickly. Its documentation is inline.

Anatomy of an LCONFIG configuration file

A configuration file has MANY optional contents, but all configuration files will have a few things in common. ALL configuration directives have the same format; a parameter followed by a value separated by whitespace. ```bash

Configuration files can contain comments

The first directive always has to be a conneciton type. The connection

directive tells LCONFIG what interface to use to reach the T7. It

also tells LCONFIG to start configuring a new device. This allows a

single configuration file to specify connections to multiple devices.

connection eth

If the connection is over tcp/ip, then the IP address is used to

specify which device is being configured. If the connection is over

USB, then the ip address is treated like any other parameter, and will

be written to the device.

ip 192.168.10.10

We can also set some global acquisition options

samplehz 100 nsample 32 settleus 100

Just like the connection parameter indicates that we've started new

device connection, aichannel indicates that we're talking about a new

analog input channel. This indicates the physical port from which

analog data should be collected. MUX80 channel numbers are not

supported yet

aichannel 0

To put the channel in differential mode, the negative can be specified

to the neighboring odd channel number.

ainegative 1

Now that we specify aichannel 2, all following analog input directives

will be applied to this analog input and not the last one. Oh, by the

way, LCONFIG is case insensitive.

AIchAnnEl 2 ainegative 3 AIRANGE 0.1

The exception is when quotes are used. Inside of quotes, whitespace

and case are treated verbatim.

ailabel "Ambient Temperature" aiunits "degC"

Configuration files end when the file ends or when the loadconfig() function encounters ##. This text isn't commented because it will never be read by loadconfig() ```

Anatomy of a data file

Data files are written with the device configuration that was used to collect the data embedded in the file's header. Because ## ends the configuration section, load_config() can open a data file just as easily as it can a configuration file. That means an experiment can be run to repeat prior data simply by specifying the prior data file as the configuration file.

Below are the first 26 lines of a data file. The configuration section is terminated by the ## flag, and the date and time at which the measurement was started is recorded behind a #: prefix.

From there, each line represents a scan of all the configured channels. Data are separated by whitespace. Time values are not listed since they can be reconstructed from the SAMPLEHZ parameter. ```

Configuration automatically generated by WRITE_CONFIG()

connection eth ip 192.168.0.11 samplehz 100.000000 settleus 1.000000 nsample 64

Analog Inputs

aichannel 0 ainegative 199 airange 10.000000 airesolution 0

aichannel 2 ainegative 3 airange 0.100000 airesolution 0

Analog Outputs

End Configuration

: Wed Apr 19 16:25:50 2017

3.988376e-01 -2.633701e-04 4.060992e-01 2.164717e-04 4.023106e-01 -3.075610e-04 4.019948e-01 -6.766737e-05 ... ```

Future Improvements

Some of the parameters have not been thoroughly tested; especailly the extended features. I have done some basic testing, but I would not be surprised to learn that there are bugs that need attention there. Please contact me if you find any!

As of version 4.00, only the UART digital COM interface is implemented. It is not currently a high priority to implement the other interfaces, but one day...

Known Bugs

No persisting known bugs.

Owner

  • Name: Chris Martin
  • Login: chmarti1
  • Kind: user
  • Location: Altoona, PA
  • Company: Penn State University

Associate Professor of Mechanical Engineering at Penn State Altoona

GitHub Events

Total
  • Push event: 10
Last Year
  • Push event: 10