The post In-process gauging of bearing balls: nanometric measurement with Python in 10 minutes appeared first on ADDI-DATA.
]]>
A manufacturer of spherical rolling elements, bearing balls and rollers, produces at high volume against tight dimensional tolerances. Diameter and length are checked after the part leaves the process, on a sampling basis. Every out-of-tolerance part found at that point has already been mixed with good parts, already moved downstream, and sometimes already shipped. Scrap is discovered late, rework is expensive, and a customer complaint costs more than either.
Gauging a part while it moves is a different problem from gauging it on a bench.
The tolerance is the first constraint: on a precision rolling element, the differences that matter sit well below the micrometre, so the measurement chain has to resolve dimensional change at a scale where cable noise, temperature drift and a slow ADC all become the dominant error. The second constraint is timing, the part is in the measurement zone briefly, and there is no dwell time in which to take a careful reading. The third is architecture: several probes must be acquired together and attributed to the same part as it passes, then reduced to a single pass/fail number fast enough for the PLC to act on it in the same cycle.
Most integrations solve this by adding hardware, a presence sensor to say when the part is there, a PC to do the maths, a conditioning rack between probes and acquisition. Each addition is another item to wire, align, power and maintain, and another place for the measurement to go wrong.
Put the acquisition on the machine, and let it do the reduction itself.
The ADDI-DATA MSX-E3701 is a rugged IP 65 metal-housed Ethernet system (−40 to +85 °C) that drives 8 or 16 inductive displacement transducers directly (Half-Bridge, LVDT, Mahr-compatible or Knaebel) with no external conditioner. It generates the transducer supply itself (differential sine, 5 to 50 kHz) and digitises at 24-bit.
In this application six probes are mounted as three facing pairs on a ring the part is pulled through. The module runs a peak-hold (min/max) acquisition: it tracks the extremum on every channel in hardware while the part passes, and this is the part that removes components from the bill of materials, it can stop itself on a threshold crossing. When a watched probe falls back past a configured value, the part has cleared, and the acquisition ends. No presence sensor. No polling loop deciding when the part arrived.
Where does it fit in your architecture? Your probes stay yours. Your PLC and your IT stack stay yours, unchanged. The MSX-E3701 owns the level in between acquisition – reduction, and hands over a result that is already a measurement, not a raw signal.
The measurement range is not fixed by the module. It is set by the transducer fitted and selected in software, which is why the same hardware serves a micrometric gauging job and a millimetre-range positioning job.
Accuracy is 16-bit over whatever range you choose. The datasheet’s worked example: a TESA GT21 with a ±2 mm range (Δ 4 mm) gives 4 mm ÷ 2¹⁶ = ±61 nm, or 0.061 µm. Fit a narrower-range probe and the same 16 bits resolve proportionally finer. That relationship accuracy scales with the range you select is the whole reason tight-tolerance in-process gauging is viable on a general-purpose platform.
Key features
Connect the MSX-E3701 to your Ethernet network. The module ships with a default IP address; set it to match your network with ADDI-DATA ConfigTools (included in delivery).


Clone the open-source samples from github.com/ADDI-DATA/msxe-samples and install the runtime dependencies:
pip install zeep numpy
The WSDL service definitions are bundled with the API. The client starts fully offline, no internet access and no proxy configuration.
Before anything else, find out which transducer types this module knows and what range each one covers. The selection_index printed here is the value every acquisition call needs.
from msxe_api import MSXE370xAPI
from msxe_api.msxe370x import TYPE_NAMES
msxe = MSXE370xAPI("192.168.99.99") # SOAP control on :5555
for index in range(msxe.get_number_of_types()):
info = msxe.get_type_information(index)
print(f"[{info['selection_index']}] {info['name']} "
f"({TYPE_NAMES.get(info['type'])})")
print(f" range : {info['range_mm']} mm")
print(f" sensitivity : {info['sensitivity_mv_v_mm']} mV/V/mm")
print(f" frequency : {info['frequency_hz']} Hz")
Reading the range from the device rather than hardcoding it matters: a fixed constant silently produces wrong millimetre values the day someone fits a different probe.
This is the classic gauging pattern. Start a min/max acquisition, let the part pass, read the extremum per channel. No data travels to the data server in this mode, the values come back from the status call.
import time
from msxe_api import MSXE370xAPI
from msxe_api.msxe370x import counts_to_mm
TRANSDUCER = 1 # selection_index from Step 3
PAIR = [0, 1] # one facing pair of probes
msxe = MSXE370xAPI("192.168.99.99")
range_mm = next(
i["range_mm"]
for i in (msxe.get_type_information(n)
for n in range(msxe.get_number_of_types()))
if i["selection_index"] == TRANSDUCER
)
msxe.minmax_start(TRANSDUCER, PAIR, division_factor=12)
try:
time.sleep(5.0) # let the part pass
state = msxe.minmax_get_status()
for ch in PAIR:
low = counts_to_mm(state["min_values"][ch], range_mm)
high = counts_to_mm(state["max_values"][ch], range_mm)
print(f"Ch{ch}: min={low:+9.6f} mm max={high:+9.6f} mm "
f"span={high - low:.6f} mm")
finally:
msxe.minmax_stop() # always release the acquisition
With no part present the probes sit at maximum deflection. Give the acquisition a stop channel and a threshold, and the module ends the sequence on its own the moment the part clears, the presence sensor disappears from the design.
from msxe_api.msxe370x import STOP_CONDITION_LESS, MINMAX_END
THRESHOLD_COUNTS = 0x400000 # 24-bit value; set it from your own reference run
msxe.minmax_start(
TRANSDUCER,
channels=[0, 1, 2, 3, 4, 5], # three facing pairs, six probes
division_factor=12,
stop_channels=[0, 1], # the pair that watches for the part
stop_condition=STOP_CONDITION_LESS,
stop_value=THRESHOLD_COUNTS,
)
while msxe.minmax_get_status()["flag"] != MINMAX_END:
time.sleep(0.01)
print("part has passed — peaks are held on the module")
One transducer selection applies to all channels of a min/max acquisition. If your probes are of different types, gauge them in separate acquisitions.
Each facing pair gives you two extrema. The pair sum, plus the offset established when you master the system against a known reference part, is the diameter.
MASTER_OFFSET_MM = 0.0 # from mastering: gauge a certified reference ball once
state = msxe.minmax_get_status()
for a, b in ((0, 1), (2, 3), (4, 5)):
peak_a = counts_to_mm(state["max_values"][a], range_mm)
peak_b = counts_to_mm(state["max_values"][b], range_mm)
diameter = peak_a + peak_b + MASTER_OFFSET_MM
print(f"pair {a}-{b}: max diameter = {diameter:.6f} mm")
# Raw counts stay visible — calibration is what ties them to a physical
# position, so the counts are the traceable value.
print(f" raw counts: {state['max_values'][a]}, {state['max_values'][b]}")
counts_to_mm() is deliberately opt-in. The API always returns raw counts, because the real count-to-position relationship is established by calibration, not by a formula. Verify the mapping against a calibrated transducer before relying on millimetre values for measurement.
A gauging station that silently loses a probe produces confident, wrong numbers. The module tests its own wiring.
msxe.init_primary_connection_test()
msxe.test_primary_connection() # transducer supply present?
msxe.test_primary_short_circuit()
for ch in range(6):
msxe.test_secondary_connection(ch) # line break on this probe?
msxe.test_secondary_short_circuit(ch)
See sample_connection_diagnostic.py for the full status decoding and the rearm_primary() recovery path.

Install matplotlib and run sample_length_dashboard.py for a live chart of every probe, useful when aligning the ring and choosing the threshold value for Step 5.
More advanced applications can look like this :

The repository ships a complete, runnable sample suite for the MSX-E 3701/3700. Every sample reads the device address from the environment and is commented step by step.
| Sample | What it shows |
|---|---|
| sample_transducer_types.py | Supported transducer types and the selection_index every other sample needs |
| sample_transducer_database.py | Reading, adding and saving transducer definitions on the module |
| sample_minmax_measurement.py | Peak-hold gauging, the pattern behind this article |
| sample_length_polling.py | Timed position polling, tabular output |
| sample_length_continuous.py | Live display of every channel until Ctrl+C |
| sample_length_stream.py | sample_length_stream.py |
| sample_length_csv_logger.py | Data logger with CSV export straight into pandas, Excel or Grafana |
| sample_length_dashboard.py | Live matplotlib chart |
| sample_acquisition_finite.py | Finite capture of N sequences |
| sample_acquisition_continuous.py | Unbounded streaming into your own callback |
| sample_calibration.py | Guided calibration procedure, step by step |
| sample_connection_diagnostic.py | Line break and short-circuit detection per channel |
| Operation | What it does |
|---|---|
| get_number_of_types() / get_type_information(i) | Ask the module which transducers it supports: name, type, range, sensitivity, excitation frequency, impedance, and the selection_index used everywhere else. |
| minmax_start(…) / minmax_get_status() / minmax_stop() | Peak-hold gauging computed on the module. Optional self-stop when a watched channel crosses a threshold. Status returns min and max raw counts for all 16 channels. |
| auto_refresh_start() / auto_refresh_get_values() / auto_refresh_stop() | Continuous position polling over SOAP, for live display and setup. |
| acquire_finite(…) / acquire_continuous(callback, …) | Block capture and unbounded streaming over the dedicated data server, so control traffic and measurement data never compete. |
| Connection diagnosis | Primary and per-channel secondary connection and short-circuit tests, plus rearm_primary() recovery. |
| Calibration | calibration_start() / calibration_get_status() / calibration_next_step(), one guided run through primary feedback, 0 mm null point and displaced user position. |
| Transducer database | Add, delete and persist transducer definitions on the module itself, so the configuration travels with the hardware. |
| Offline by design | WSDLs bundled with the package; the client constructs with no internet access. |
| Version | Transducers | Transducer Type | Protection |
|---|---|---|---|
| MSX-E3701-HB-16 | 16 | Half-Bridge | IP 65 |
| MSX-E3701-HB-8 | 8 | Half-Bridge | IP 65 |
| MSX-E3701-LVDT-16 | 16 | LVDT | IP 65 |
| MSX-E3701-LVDT-8 | 8 | LVDT | IP 65 |
| MSX-E3701-K-8 | 8 | Knaebel | IP 65 |
| MSX-E3701-M-8 | 8 | Mahr-compatible | IP 65 |
| MSX-E3700-HB-16 | 16 | Half-Bridge | IP 40 |
| MSX-E3700-HB-8 | 8 | Half-Bridge | IP 40 |
| MSX-E3700-LVDT-16 | 16 | LVDT | IP 40 |
| MSX-E3700-LVDT-8 | 8 | LVDT | IP 40 |
All versions operate from −40 °C to +85 °C. Knaebel and Mahr-compatible are offered on the MSX-E3701 only, in 8-channel form, if you already run those probes, the variant is decided for you.
Validate the technology on your own application before committing budget.
We provide a free loan unit with a working example tailored to your measurement task, support you in meeting your target performance, and provide the documentation required for your internal validation process.
Prove the concept first. Invest later.
Start with a documented and proven building block.
Request our reference architecture, including hardware, Python API, sample code and integration guidance. You benefit from predictable commissioning, clearly defined interfaces, and lifecycle commitments.
Reduce risk. Accelerate deployment.
Integrate once and rely on it for the lifetime of your machine.
We support your design-in with product variants, dedicated part numbers and custom firmware whenever the standard offering does not fully match your requirements. Long-term availability and lifecycle commitments are provided in writing.
A measurement platform designed for long-term machine programmes.
Download the Python API and samples from our GitHub repository:
For technical support, please contact: info@addi-data.com
If you want to learn more about the MSX-E3701, you can find additional information directly on the product page.
DAQ cards
• For various signal types
• High precision
• Robust and interference-resistant

Real-time systems
• EtherCAT and Profinet
• Linux systems including real-time extension
• PC boards with RTX real-time drivers

Ethernet systems
• Direct sensor connection
• Onboard calculation of the acquired data
• For use in the field, up to IP 67

Data loggers
• Long-term data acquisition of numerous signal types
• Setup of the measurement device without programming knowledge
• Visualisation of the live data

The best solution often is customized. As a manufacturer, we are able to adapt our solutions as closely as possible to your requirements. We are pleased to advise you on finding the best solution for your applications and to perform the necessary adaptations for you.
Just ask us!
The post In-process gauging of bearing balls: nanometric measurement with Python in 10 minutes appeared first on ADDI-DATA.
]]>The post Predictive maintenance for rotating equipment: rugged vibration acquisition with Python in 10 minutes appeared first on ADDI-DATA.
]]>
An operator of critical rotating machinery specialized in rail rolling stock running assets such as bearings, gearboxes and drivetrains around the clock. Uptime and safety are non-negotiable: an unplanned stop halts production or takes an asset out of service, with direct cost, contractual penalties and reputational impact.
Reliable vibration monitoring is difficult in harsh industrial environments such as those encountered with rail rolling stock. Long analog cables can degrade sensitive accelerometer signals, while advanced machine diagnostics require simultaneous, phase-true acquisition across multiple channels.
Measurement points are distributed across the asset, installation space is scarce, and the environment is rough: vibration, temperature swings, dirt and water. And there is a second, quieter cost: every engineering hour spent taming the measurement chain is an hour not spent on the diagnosis itself.
What is needed is acquisition that is rugged, compact and mounted close to the sensors.
Instead of pulling long cables back to a cabinet, the acquisition is placed directly at the machine.
The ADDI-DATA MSX-E3601 provides a rugged, IP65 metal-housed node (−40 to +85 °C) accepts the ICP®/IEPE accelerometers directly, without external signal conditioner and digitises every channel simultaneously in 24-bit, up to 128 kHz with anti-aliasing, so the vibration signature is captured phase-true.
Nodes connect over standard Ethernet, are synchronized to the microsecond and cascade through an integrated switch, so coverage scales from a couple of points to the whole asset. On-board processing buffers and pre-conditions the data at the edge before it reaches the maintenance/analytics layer, turning raw vibration into an early-warning signal.
Where does it fit in your architecture? Your sensors stay yours. Your control system and your IT stack stay yours, unchanged. The MSX-E3601 owns the level in between (acquisition) and hands over data that is already correct: in volts, phase-true, timestamped.
Combined with our open-source Python SOAP API, users go from unboxing to live data acquisition in under 5 minutes without proprietary software required.
Key features
Connect the MSX-E3601 to your Ethernet network. The module ships with a default IP address. Configure it to match your network using the ADDI-DATA Config Tools.


Clone the open-source samples from github.com/ADDI-DATA/msxe-samples and install the two runtime dependencies:
pip install zeep numpy
The WSDL service definitions are bundled with the API, the client starts fully offline, with no internet access and no proxy configuration.
This is the real API, not pseudocode. One call opens the data stream, captures a phase-true block on four ICP®/IEPE accelerometers at 50 kS/s per channel, then stops and cleans up:
from msxe_api import MSXE3601API
from msxe_api.msxe3601 import GAIN_X1, COUPLING_AC, INPUT_SE
msxe = MSXE3601API("192.168.99.99") # SOAP control :5555, data stream TCP :8989
volts, meta = msxe.acquire_finite(
channels=[0, 1, 2, 3],
frequency_hz=50000.0,
n_sequences=4096, # samples per channel
gains=GAIN_X1,
coupling=COUPLING_AC, # AC coupling for accelerometers
input_type=INPUT_SE,
icp=True, # sensor powered by the module
)
print(volts.shape) # (4096, 4) float32 — already in volts
The heavy sample data does not travel over SOAP: it streams over the module’s dedicated data server (raw TCP), so control traffic and measurement data never compete.
For monitoring, register a callback and stream without limit. Each block arrives as a NumPy array already in volts, run your FFT, envelope or band-RMS analysis directly on it:
import numpy as np
def on_block(volts, meta):
rms = np.sqrt((volts.astype(np.float64) ** 2).mean(axis=0))
print(" ".join(f"Ch{c}: {r:.4f} Vrms" for c, r in enumerate(rms)))
# your FFT / envelope / band-RMS analysis goes here
# return False to stop; None keeps streaming
msxe.acquire_continuous(
on_block, channels=[0, 1, 2, 3], frequency_hz=50000.0,
block_sequences=2048, gains=GAIN_X1, coupling=COUPLING_AC, icp=True,
)
The stream always shuts down cleanly, on a callback stop, on an exception, or on Ctrl+C the sequence is stopped and the socket closed, so the next start never finds the module blocked.
Install matplotlib and run the dashboard sample for visualization:

import numpy as np
import matplotlib.pyplot as plt
volts, _ = msxe.acquire_finite(
channels=[0], frequency_hz=50000.0, n_sequences=8192,
gains=GAIN_X1, coupling=COUPLING_AC, input_type=INPUT_SE, icp=True,
)
signal = volts[:, 0] - volts[:, 0].mean() # remove the DC offset
# Hann window with amplitude correction — peaks read in true volts
window = np.hanning(len(signal))
amplitude = np.abs(np.fft.rfft(signal * window)) / (len(signal) * window.mean())
amplitude[1:] *= 2
amplitude[-1] /= 2 # Nyquist bin is not mirrored
frequency = np.fft.rfftfreq(len(signal), d=1 / 50000.0)
fig, (ax_t, ax_f) = plt.subplots(2, 1, figsize=(11, 7))
ax_t.plot(np.arange(len(signal)) / 50.0, signal, lw=0.6)
ax_t.set(xlabel="time (ms)", ylabel="amplitude (V)", title="Time domain")
ax_f.plot(frequency, amplitude, lw=0.8)
ax_f.set(xlabel="frequency (Hz)", ylabel="amplitude (V)",
title="Amplitude spectrum — Hann window, \u0394f \u2248 6 Hz")
plt.tight_layout(); plt.show()
A live chart window opens showing all vibration channels updating in real time. Close the window to stop acquisition.
The repository ships a complete, runnable sample suite for the MSX-E3601. Every sample reads the device address from the environment and is commented step by step:
| Sample | What it shows |
|---|---|
| sample_acquisition_finite.py | Finite capture saved to capture.npy / capture.csv, straight into pandas, Excel or any BI tool |
| sample_acquisition_continuous.py | Continuous streaming with live per-channel RMS |
| sample_acquisition_callback.py | Streaming into your own callback |
| sample_iepe_accelerometer.py | ICP®/IEPE accelerometer capture, sensor powered by the module |
| sample_advanced_acquisition.py | Mixed gains, differential inputs and hardware timestamps |
| sample_triggered_acquisition.py | Capture gated on the 24 V hardware trigger input |
The CSV output imports into Excel, pandas or Grafana as-is; the continuous stream feeds a time-series database or ML pipeline directly.
The Python API is designed for simplicity. A few operations that do exactly what they say:
| Operation | What it does |
|---|---|
| acquire_finite(…) | 1. open stream 2. capture exactly N sequences 3. stop 4. close. 5. Returns (volts, meta) as NumPy float32 in volts. |
| acquire_continuous(callback, …) | Unbounded streaming; every block delivered to your callback; sequence stopped and socket closed on any exit path. |
| init_and_start_sequence() / get_sequence_status() / stop_and_release_sequence() | Full manual control when you need custom acquisition logic. |
| Per-channel configuration | Gain ×1/×10/×100, AC/DC coupling, single-ended/differential, ICP® on/off (one value for all channels or a per-channel dict) |
| Metadata | Optional hardware timestamps, sequence counter and trigger flags delivered alongside the samples. |
| Offline by design | WSDLs bundled with the package, the client constructs with no internet access |
| Version | Channels | Sensor Types | Typical Applications |
|---|---|---|---|
| MSX-E3601 | 8 SE/diff. inputs | ICP® or IEPE sensors | Noise & vibration measurement |
| MSX-E3601-2 | 2 SE/diff. inputs | ICP® or IEPE sensors | Noise & vibration measurement |
Because the data leaves the module as clean and timestamped, it feeds an AI-based monitoring layer without any preparation. For example, combined with Grafana and its machine-learning tooling:
Validate the technology on your own application before committing budget.
We provide a free loan unit with a working example tailored to your measurement task, support you in meeting your target performance, and provide the documentation required for your internal validation process.
Prove the concept first. Invest later.
Start with a documented and proven building block.
Request our reference architecture, including hardware, Python API, sample code and integration guidance. You benefit from predictable commissioning, clearly defined interfaces, and lifecycle commitments.
Reduce risk. Accelerate deployment.
Integrate once and rely on it for the lifetime of your machine.
We support your design-in with product variants, dedicated part numbers and custom firmware whenever the standard offering does not fully match your requirements. Long-term availability and lifecycle commitments are provided in writing.
A measurement platform designed for long-term machine programmes.
Download the Python API and samples from our GitHub repository:
For technical support, please contact: info@addi-data.com
If you want to learn more about the MSX-E3601, you can find additional information directly on the product page.
DAQ cards
• For various signal types
• High precision
• Robust and interference-resistant

Real-time systems
• EtherCAT and Profinet
• Linux systems including real-time extension
• PC boards with RTX real-time drivers

Ethernet systems
• Direct sensor connection
• Onboard calculation of the acquired data
• For use in the field, up to IP 67

Data loggers
• Long-term data acquisition of numerous signal types
• Setup of the measurement device without programming knowledge
• Visualisation of the live data

The best solution often is customized. As a manufacturer, we are able to adapt our solutions as closely as possible to your requirements. We are pleased to advise you on finding the best solution for your applications and to perform the necessary adaptations for you.
Just ask us!
The post Predictive maintenance for rotating equipment: rugged vibration acquisition with Python in 10 minutes appeared first on ADDI-DATA.
]]>The post Industrial High-Precision Temperature Monitoring on Production Lines in 10 minutes with MSX-E3211 and Python appeared first on ADDI-DATA.
]]>
Industrial production lines like food processing, chemical plants, plastics extrusion, and metal treatment require continuous, high-precision temperature monitoring across multiple zones. Curing ovens, cooling tunnels, extrusion dies, and chemical reactors all demand accurate, real-time temperature data to ensure product quality and process safety.
Integrators and Machine Builders need a fast, open, and cost-effective approach that integrates seamlessly with modern data analysis tools.
The ADDI-DATA MSX-E3211 module provides 16 channels of industrial-grade temperature measurement over Ethernet. Available in two versions, the module covers virtually any industrial temperature monitoring scenario:
Combined with our open-source Python SOAP API, users go from unboxing to live data acquisition in under 5 minutes without proprietary software required.
Key features:
Connect the MSX-E3211 to your Ethernet network. The module ships with a default IP address. Configure it to match your network using the ADDI-DATA Config Tools.
1. Automatic search for the MSX-E systems
4. Firmware update

5. System configuration through web interface

6. ConfigTools for acquisition systems with inductive transducers

Install the Python SOAP client library:
pip install zeep
Run the following Python code to read temperatures from all 16 channels:
"""Sample: Temperature polling on the MSX-E 3211.
Demonstrates:
- Querying the number of temperature channels
- Auto-detecting sensor class (RTD, TC, or NTC) per channel
- Configuring channels with appropriate types
- Starting auto-refresh acquisition
- Polling temperature values at regular intervals
- Stopping acquisition
Works with both thermocouple (TC) and RTD versions of the MSX-E 3211.
"""
import sys
import time
sys.path.insert(0, "../..")
from msxe_api import MSXE3211API
from msxe_api.msxe import MSXEError
from msxe_api.msxe3211 import TC_TYPE_K, RTD_PT100, REFRESH_UNIT_MS
MSXE_ADDRESS = "192.168.99.99"
MSXE_PORT = 5555
POLL_INTERVAL_S = 1.0 # seconds between each poll
POLL_COUNT = 10 # number of readings
def main():
msxe = MSXE3211API(MSXE_ADDRESS, MSXE_PORT)
# ── Auto-detect sensor class and configure all channels ──────
counts = msxe.configure_all_channels(tc_type=TC_TYPE_K, rtd_type=RTD_PT100)
print(f"Configured: {counts}")
# ── Show current configuration ───────────────────────────────
num_channels = msxe.temperature_get_number_of_channels()
msxe.print_channel_configuration()
# ── Start auto-refresh (all channels, 500 ms refresh) ───────
channel_mask = (1 << num_channels) - 1
msxe.auto_refresh_start(
channel_mask=channel_mask,
refresh_time=500,
refresh_time_unit=REFRESH_UNIT_MS,
force_start=1,
)
print(f"\nAuto-refresh started (mask=0x{channel_mask:04X}, 500 ms)")
# ── Poll temperature values ──────────────────────────────────
print(f"\nPolling {POLL_COUNT} readings, {POLL_INTERVAL_S}s apart:")
print("-" * 60)
header = " Time |" + "".join(f" Ch{ch:2d} " for ch in range(num_channels))
print(header)
print("-" * 60)
for i in range(POLL_COUNT):
ts_low, ts_high, counter, values = msxe.auto_refresh_get_values(blocking=1)
row = f" {i * POLL_INTERVAL_S:5.1f}s |"
for ch in range(min(num_channels, len(values))):
row += f" {values[ch]:6.1f}°"
print(row)
time.sleep(POLL_INTERVAL_S)
# ── Stop auto-refresh ────────────────────────────────────────
msxe.auto_refresh_stop()
print("\nAuto-refresh stopped")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\nInterrupted — stopping acquisition")
msxe = MSXE3211API(MSXE_ADDRESS, MSXE_PORT)
msxe.auto_refresh_stop()
except MSXEError as e:
print(f"MSXE error: {e}")
except Exception as e:
print(f"Connection error: {e}")
Get below our Live Dashboard sample on Github:
Install matplotlib and run the dashboard sample for real-time visualization:
pip install matplotlib
python sample_temperature_dashboard.py
A live chart window opens showing all 16 temperature channels updating in real time. Close the window to stop acquisition.
Get below our Live Dashboard sample on Github:
Log all channels to CSV for analysis in Excel, pandas, or any BI tool:
python sample_temperature_csv_logger.py
Outputs a timestamped CSV file with one row per reading and one column per channel, ready for import into any analysis tool.
The system architecture is simple and modular:

Multiple MSX-E 3211 modules can be connected to the same network. Each module is addressed by its IP address. The Python API handles SOAP communication transparently.
The Python API is designed for simplicity. Here are the key operations:
All operations raise MSXEError with clear error codes on failure. The API supports both RTD and Thermocouple versions with the same code.

Download the Python API and samples from our GitHub repository:
For technical support, please contact: info@addi-data.com
If you want to learn more about the MSX-E3211, you can find additional information directly on the product page.
DAQ cards
• For various signal types
• High precision
• Robust and interference-resistant

Real-time systems
• EtherCAT and Profinet
• Linux systems including real-time extension
• PC boards with RTX real-time drivers

Ethernet systems
• Direct sensor connection
• Onboard calculation of the acquired data
• For use in the field, up to IP 67

Data loggers
• Long-term data acquisition of numerous signal types
• Setup of the measurement device without programming knowledge
• Visualisation of the live data

The best solution often is customized. As a manufacturer, we are able to adapt our solutions as closely as possible to your requirements. We are pleased to advise you on finding the best solution for your applications and to perform the necessary adaptations for you.
Just ask us!
The post Industrial High-Precision Temperature Monitoring on Production Lines in 10 minutes with MSX-E3211 and Python appeared first on ADDI-DATA.
]]>The post MSX-BOX-IPC-2 – Machine and Test Bench Migration to PCIe and Modern Operating Systems for High-Performance DAQ appeared first on ADDI-DATA.
]]>
Over past years, data acquisition systems themselves have evolved, but many existing machines and factory setups still rely on outdated components, making maintenance, scalability, and compatibility increasingly difficult. Without modernization effort, the customer could faced longer downtimes, rising maintenance costs, and a real risk for the future projects.
Our customers approach us with a range of technical and operational situations when expressing their needs.
The customer is still operating systems based on aging hardware architectures, originally built around the ISA bus and later largely migrated to the PCI bus. While ISA has long been obsolete and spare parts are now virtually unavailable, PCI is following the same path. It is increasingly being phased out of modern mainboards, and the availability of compatible components continues to decline steadily. This dual constraint makes hardware modernization essential to ensure long-term system reliability, operational continuity, and sustainable infrastructure support.
The customer still uses a mix of PCI and PCIe-based hardware combined with a 32-bit system. With support for Windows 10 and older operating systems discontinued, there is a strong desire to upgrade to 64-bit Windows 11. Since this transition is virtually impossible without new hardware, a full system upgrade becomes necessary.
In many industrial projects, multiple critical components are often sourced from different suppliers, creating procurement complexity and increasing operational costs due to multiple points of contact. By integrating high-performance IPCs into our DAQ portfolio, we provide a unified solution that centralizes responsibility, simplifies sourcing, and reduces coordination overhead through a single, coherent system approach.
Across industries, aligning with stakeholder needs and expectations, structured around three key considerations:
A major challenge arises when customers need access to the source code of their application or at least the ability to involve the original software provider. If access is no longer available or the vendor refuses to provide support, adapting the hardware becomes nearly impossible.
As a solution, ADDI-DATA offers to develop a functionally equivalent application, ensuring continued system usability.
Replacing outdated hardware can lead to unexpected behavior in connected systems. This is often due to newer hardware operating with higher speed or efficiency, which can cause timing or signal mismatches.
In such cases, signal types or communication patterns may need adjustment either through hardware modifications or via software/firmware tuning.
In some situations, new hardware must be integrated with older, existing software.
This is possible in principle, but only if the required functions and driver calls used by the legacy system are still supported by the new hardware platform. A careful technical review is essential to ensure compatibility and avoid unexpected issues.
The MSX-BOX-IPC-2 directly addresses the operational challenges and evolving needs faced by organizations today:
If you want to learn more about the MSX-BOX-IPC-2, you can find additional information directly on the product page.
DAQ cards
• For various signal types
• High precision
• Robust and interference-resistant

Real-time systems
• EtherCAT and Profinet
• Linux systems including real-time extension
• PC boards with RTX real-time drivers

Ethernet systems
• Direct sensor connection
• Onboard calculation of the acquired data
• For use in the field, up to IP 67

Data loggers
• Long-term data acquisition of numerous signal types
• Setup of the measurement device without programming knowledge
• Visualisation of the live data

The best solution often is customized. As a manufacturer, we are able to adapt our solutions as closely as possible to your requirements. We are pleased to advise you on finding the best solution for your applications and to perform the necessary adaptations for you.
Just ask us!
The post MSX-BOX-IPC-2 – Machine and Test Bench Migration to PCIe and Modern Operating Systems for High-Performance DAQ appeared first on ADDI-DATA.
]]>The post Industrial measurement : technology for automation appeared first on ADDI-DATA.
]]>
To optimise automation processes in a sustainable way, at first their weak points must be detected: A challenge for modern measurement technology :
These are just some of the optimizations that can be achieved with ADDI-DATA’s high-precision intelligent measurement systems!
Modern measurement technology can be used for various tasks, as many signal types can be acquired. Thus it is possible to identify the different weakness in the automation chain. Here are some examples:
Temperature measurement
Pressure measurement
Analog signal acquisition
Position acquisition
Lenght measurement
Vibration measurement
With high-precision DAQ cards and distributed systems by ADDI-DATA you can acquire and process numerous signal types, control and readjust processes directly and loop signals for readjustments and regulation to control units via standard interfaces. The acquired data can also be transferred to super-ordinate databases and software for evaluation and visualisation.
Position acquisition of glass components at a welding process
Challenge:
At the construction of glass components two parts are welded with hot air. As the material is very fragile the welding process must be carried out very carefully and precisely (1 µm) despite of the speed in order to avoid the breaking of the parts.
Furthermore it must be made sure that the glass components are close enough to guarantee a good quality of the weld seam. Thus the components’ position shall be acquired in intervals of 200 ms.
Solution:
For the position detection of the glass components the Ethernet counter system MSX-E1731 via EnDat 2.2 sensors has been chosen due to its speed and precision.
At the beginning of the welding process the SPS triggers the MSXE1731 system to start the measurement process. As soon as the glass components are in the correct position the system sends two signals: One for the digital output to stop the axes and via Ethernet the start signal for the welding process. When the welding phase is over all acquired data is transferred to a Linux server for archival storage.
DAQ cards
• For various signal types
• High precision
• Robust and interference-resistant

Real-time systems
• EtherCAT and Profinet
• Linux systems including real-time extension
• PC boards with RTX real-time drivers

Ethernet systems
• Direct sensor connection
• Onboard calculation of the acquired data
• For use in the field, up to IP 67

Data loggers
• Long-term data acquisition of numerous signal types
• Setup of the measurement device without programming knowledge
• Visualisation of the live data

Customized solutions
The best solution often is customized. As a manufacturer, we are able to adapt our solutions as closely as possible to your requirements. We are pleased to advise you on finding the best solution for your applications and to perform the necessary adaptations for you.
Just ask us!
The post Industrial measurement : technology for automation appeared first on ADDI-DATA.
]]>The post Position acquisition with EnDat 2.2 appeared first on ADDI-DATA.
]]>
With ADDI-DATA measurement solutions you can connect up to 8 EnDat 2.2 encoders and acquire the position values of absolute encoders. In combination with the digital bidirectional interface EnDat 2.2 absolute encoders provide the position value directly, without reference run. EnDat 2.2 is preferentially used for applications with highly precise positioning and high repeat accuracy. Diagnostic data like temperature, line break, etc. can also be transferred.
More and more, measurement devices and machine tools transfer position data through EnDat 2.2 interfaces to the subsequent electronics. This helps the engine builders to increase the machines’ productivity and to improve the competitive ability of the devices in which the machines are integrated.
To guarantee a reliable classification of the position value even in case of long lines, EnDat 2.2 features signal delay-time compensation. At the start of the positioning process, the time for each cycle until the response of the EnDat 2.2 data package is acquired.
As additional data like for example temperature values can be sent, it is possible to effect corrections in the process quickly in order to guarantee a constant accuracy during the positioning process. This is important for small production lots or in case of different use of tools.
EnDat 2.2 is a bidirectional synchronous-serial interface for position measurement devices. This interface allows to read out absolute position values and parameters, to write status and initialisation registers and to transfer additional information about the position value. In addition, ADDI-DATA EnDat 2.2 solutions support the evaluation of diagnostic values and access to the OEM memory. Data is transferred serially.
• Fast data transfer, frequency depends on the subsequent electronics
• Signal delay time compensation
• High contour accuracy
• High transmission safety
• No need for additional sensors: Evaluation (temperature, limit switch, etc.)
• Serial transmission: only 4 lines necessary
• Single-line wiring (M12, 8-pin)
• Automatic parameterisation through electronic type plate
High requirements for the subsequent electronics
Whether PC-based or distributed – the EnDat 2.2 interface has high requirements to the subsequent electronics: Precise position detection at high frequency, velocity, robustness and interference-resistance are significant for the subsequent electronics.
ADDI-DATA offers four different solutions for the position acquisition:
• PCI-Express counter board with a high input frequency up to 10 MHz (optional)
• Intelligent motion control board for complex positioning tasks
• Intelligent Ethernet counter system for direct use inside machines
• Motion Box for real-time positioning tasks
Functional principle

Exact positioning of axes for the regulation of surface measurement devices for
rotationally symmetric parts (e.g. gear wheels)
Challenge:
For the measurement of the surfaces of rotationally symmetric parts numerous axes must be positioned. Furthermore the signals must be fastly transferred in order to detect the position as exactly as possible. To safe time, absolute encoders are used because they do not need any reference runs when started.
Solution:
The measurement device consists of a measurement table with a gate. The rotationally symmetric parts are fixed on the measurement table and their surface is tested with a sensor connected to the gate. To move the sensor around the parts the gate has several axes equipped with EnDat 2.2 absolute encoders. The precision of the axis position is assured by the PCI Express counter board APCIe-1711: Thanks to its high input speed of 10 MHz (optional APCIe-1711-10MHZ version) and its resistance to interferences, the board is able to move the axes precisely even at high speed.

Position acquisition of glass components at a welding process
Challenge:
For the construction of glass components two parts are welded with hot air. As the material is very fragile the welding process must be carried out very carefully and precisely (1 µm) despite of the speed in order to avoid the breaking of the parts. Furthermore it must be made sure that the glass components are close enough to guarantee a good quality of the weld seam. Thus the position of the component shall be acquired in intervals of 200 ms.
Solution:
For the position detection of the glass components the Ethernet counter system MSX-E1731 with EnDat 2.2 sensors has been chosen due to its speed and precision. At the beginning of the welding process the SPS triggers the MSX-E1731 system to start the measurement process. As soon as the glass components are in the correct position the system sends two signals: One for the digital output to stop the axes and via Ethernet the start signal for the welding process. When the welding phase is over all acquired data is transferred to a Linux server for archival storage.

Automatic measurement device for clutch disks
Challenge:
The functional reliability of the pull-back springs on clutch disks shall be tested. Thereby the force in relation to the distance shall be measured. How can the relation force / distance be exactly established?
Solution:
For establishing correctly the relation force / distance, position acquisition plays an important role. A clutch disc is positioned and locked in place on a conveyor belt. A plunger gets down until it reaches the clutch disc. The plunger turns and thereby force and distance are measured. In order to find the absolute positions as fast and as accurately as possible, EnDat 2.2 encoders are used for the positioning of the axes. An APCI-8008 board acquires data from the EnDat 2.2 encoders and the position values are included in the regulating process. To get the force values, the APCI-8008 reads the measured values of the PCI pressure measurement board APCI-3300 directly via bus master access.

Counter board PCI-Express
• Fast counter inputs (up to 10 MHz)
• Can be combined with functions like PWM, incremental
• 64-bit drivers for Windows 7/Vista/XP

Intelligent motion control board
• Controling up to 8 axes
• Mixed mode servo / stepper motors
• Ethernet/EtherCAT interfaces

Intelligent Ethernet counter system
• 4 counter inputs
• Direct sensor connection
• For use in the field, IP 65

Customized solutions
The best solution often is customized. As a manufacturer, we are able to adapt our solutions as closely as possible to your requirements.
We are pleased to advise you on finding the best solution for your applications and to perform the necessary adaptations for you.
Just ask us!
The post Position acquisition with EnDat 2.2 appeared first on ADDI-DATA.
]]>