Troubleshooting¶
This page decodes dtol-diag output and walks through the most
common DataAcq SDK install issues.
Start by running:
The output has two sections — sdk (DLL load + versions) and
boards (enumeration). Each line is [OK] or [FAIL] followed by
a one-line summary. Failures dump the candidate paths and the
underlying OS error to stderr.
[FAIL] sdk: failed to load DataAcq SDK¶
The loader tried every path on its resolution chain and could not
load either oldaapi64.dll or olmem64.dll. The error message
names every candidate it tried.
Common causes:
| Symptom | Cause | Fix |
|---|---|---|
file not found against C:\Windows\System32\oldaapi64.dll |
DataAcq SDK not installed | Install it from Data Translation's website |
WinDLL: [WinError 126] The specified module could not be found |
DLL exists but a dependency is missing (rare; DT-Open Layers usually ships standalone) | Re-install the SDK with administrator privileges |
bitness mismatch: Python is 32-bit but candidate ... names a 64-bit DLL |
32-bit Python + 64-bit SDK install (or vice versa) | Install the matching bitness — usually means switching to 64-bit Python |
Windows-only |
Running on Linux / macOS | Expected — the real backend is Windows-only; tests still run via FakeDtolBackend |
If the SDK is installed in a non-default location, set:
$env:DTOLLIB_OLDAAPI_DLL = "C:\path\to\oldaapi64.dll"
$env:DTOLLIB_OLMEM_DLL = "C:\path\to\olmem64.dll"
dtol-diag
[FAIL] boards: board enumeration failed¶
The SDK loaded and the version query succeeded, but
olDaEnumBoardsEx returned a non-zero status. Possible causes:
- The Open Layers Control Panel doesn't see the board — start there. Plug in the USB cable, reboot the DAQ if necessary, and re-launch the Control Panel.
- Driver service (
Dt9800) is not running. Checkservices.msc → "DT9800 Service"and restart it. - Permissions: try running an elevated terminal (Run as Administrator).
[OK] boards: 0 board(s) enumerated¶
The SDK loaded and enumeration succeeded but no boards were reported. This is not an error — it means the SDK is healthy but no DT-Open Layers device is currently visible. Check:
- Open Layers Control Panel — does it list the board?
- USB cable seated; LED on the front panel.
- For DT9805 specifically: the USB ID changes if you move it to a different USB port — re-register through the Control Panel after moving the cable.
ECODE decoding¶
When the SDK reports an error in a runtime call (not enumeration),
the typed exception's .context.ecode field carries the raw
OLSTATUS value and .context.ecode_message carries the SDK's
decoded string.
The DtolError subclass is selected by:
- Per-code table — documented async-error sentinels
(
OLDA_WM_OVERRUN_ERROR,OLDA_WM_UNDERRUN_ERROR,OLDA_WM_TRIGGER_ERROR) map to dedicated subclasses (DtolBufferOverrunErroretc.). - Range fallback — the SDK groups codes by category (device, init, config, operation, buffer, memory). Unknown codes within a range route to the category's typed exception.
For a full list see dtollib.errors and the
OLERRORS.H cross-reference in
decisions.md.
DtolDependencyError on a freshly installed system¶
If pip install dtollib worked but the very first call to a
DataAcqBackend raises DtolDependencyError:
- Run
dtol-diag— the output names every path the loader tried. - If
python_bitness≠ DLL bitness, switch interpreters. - If the path table shows the right DLLs but
WinDLLfailed, rundependency walkeragainstoldaapi64.dllto find the missing dependency (usually a Visual C++ runtime).
Getting help¶
The repo's decisions.md records bench-verified
findings against specific SDK versions. When filing an issue,
include the full dtol-diag --json output so reviewers see your
exact SDK version, DLL paths, and bitness.