Technology
The desktop application and the command line use the same measurement engine, written in Rust. This page describes the architecture, the data flow of a measurement, performance figures and the main vehicle network terms.
Architecture
Measuring, decoding, simulating and logging happen in the engine. The user interface receives batched data at a fixed maximum rate, so it cannot slow down the measurement.
Solid border: part of Arnodiqa. Dashed border: via the manufacturer's driver.
Rust
Rust has no garbage collector, so there are no collection pauses at high frame rates. The engine is multithreaded.
Tauri 2 + React
A native window with a small installation. Docking, virtualised tables and canvas rendering handle large data volumes.
YAML + JSON Schema
Projects are text files that you can diff and merge in git. The schema provides autocompletion and validation in the editor.
Logs and support
Every binary writes a rotating log file; a crash produces a local crash report. The support bundle (zip) contains logs, version, system and hardware information, with user names, host name and serial numbers anonymised. Keys, bus data and CAPL sources are never included. Nothing is uploaded.
Data flow of a measurement
- Frames come from an interface, the virtual bus or a log file. Each event receives a timestamp in nanoseconds since the start of the measurement.
- The I/O thread sorts events from several channels by time (reorder window) and groups them into batches.
- The batches go into a bounded queue. In real time the measurement never waits: under overload, batches are dropped, counted and reported. In "as fast as possible" mode the producer waits and nothing is lost.
- The analysis thread updates the statistics and runs the measurement setup graph: filters, triggers with pre- and post-trigger time, and branches to logging and windows.
- Each logging block writes in parallel in its own thread. The UI receives at most 30 to 60 batches per second; when it falls behind, it drops the oldest events and counts them.
Performance
| Live Trace | 20,000 frames/s at 60 fps display, including with a filter or in fixed-position mode |
|---|---|
| BLF read | > 6 million frames/s; memory use independent of file size |
| BLF write | 0.7 to 1 million frames/s (zlib level 6) |
| DBC decoding | < 1 µs per message with 20 signals |
| Virtual bus | 1 Mbit/s in real time without frame loss |
Typical values on a current Windows workstation; actual figures depend on hardware and configuration.
Glossary
A vehicle contains dozens of electronic control units (ECUs) that exchange messages over bus systems. These are the terms used most often on this site.
- ECU
- Electronic Control Unit: a controller such as engine, brake or battery management. A car has 30 to more than 100 of them.
- CAN
- Controller Area Network: the most widely used vehicle bus, in use since the 1980s. Two wires, messages with an 11- or 29-bit ID and up to 8 data bytes. Typically 500 kbit/s.
- CAN FD / CAN XL
- Faster successors. CAN FD carries up to 64 bytes with a faster data phase (e.g. 2 Mbit/s); CAN XL carries up to 2048 bytes at about 10 to 20 Mbit/s.
- Arbitration
- When two ECUs transmit at the same time, the message with the lowest ID wins and nothing is lost. The ID is therefore also the priority.
- Error frame, bus-off
- When an ECU detects an error, it destroys the frame with an error frame. A node that causes too many errors becomes "error passive" and eventually "bus-off", which means it disconnects itself.
- Message and signal
- A message (frame) contains several signals, e.g.
EngineDatawithEngineSpeed(rpm) andCoolantTemp(°C), at fixed bit positions with a factor and an offset. - DBC
- The de facto file format that describes which messages and signals exist on a CAN network. Without a DBC you see hex bytes; with one you see readable values.
- LDF, ARXML, FIBEX
- Description files for LIN, AUTOSAR networks (XML, all buses) and FlexRay/Ethernet respectively.
- LIN, FlexRay, Automotive Ethernet
- Other vehicle buses. LIN is low-cost and slow (windows, seats), FlexRay is deterministic (chassis), Ethernet is fast (cameras, central computers) and uses SOME/IP as middleware.
- J1939
- A standard on top of CAN for trucks, buses, agricultural and construction machinery, built on parameter groups (PGNs). Nodes claim their address with a 64-bit NAME; messages longer than 8 bytes use transport protocols (BAM, CMDT); DM1 reports active fault codes.
- Trace
- The main window: a live list of every frame on the bus, with time, channel, ID, name, data and decoded signals.
- Measurement Setup
- A graph of blocks that decides what happens with the data: filtering, triggering ("log 50 ms before and 200 ms after 800 rpm"), logging to a file and display in windows.
- Rest-bus simulation
- You test one real ECU while software emulates the rest of the bus (all other ECUs), so the ECU behaves as if it were installed in a complete vehicle.
- Interaction Layer (IL), NM
- The IL sends messages according to the rules in the database (cyclic, on change, counters, checksums). Network management (NM) coordinates ECUs going to sleep and waking up together.
- CAPL
- An event-driven, C-like scripting language by Vector Informatik (
on message,on timer…), widely used on test benches. The Arnodiqa script VM runs existing CAPL programs. - UDS, ISO-TP, DoIP
- Diagnostics. UDS (ISO 14229) is the protocol used to query an ECU (fault codes, sessions, flashing). ISO-TP splits long messages for CAN; DoIP does the same over Ethernet.
- BLF, ASC, MF4
- Log file formats. BLF is binary and compact (Vector), ASC is readable text, MF4/MDF is the ASAM standard for measurement data.
- XCP
- Protocol to measure and calibrate an ECU's internal variables while driving.
- SIL / HIL
- Software-in-the-loop (everything virtual, well suited to CI) and hardware-in-the-loop (a real ECU on a test bench with a simulated environment).
- E2E, SecOC
- AUTOSAR mechanisms that protect messages. E2E adds a counter and a CRC against corrupted or lost messages; SecOC adds freshness and a MAC against forgery and replay. In a rest-bus simulation both must be calculated correctly, otherwise the ECU rejects the messages.
- Flashing
- Loading new software into an ECU, usually via UDS: switch session, security access, erase memory, download data, verify and reset. Firmware comes as Intel HEX, S-record, binary file or ODX-F.
- Air-gapped
- A network physically cut off from the internet, for example in test, defence or security labs. Software there must work fully offline, including installation, licensing, updates and AI. See Air-gapped operation.
- CI
- Continuous integration: tests run automatically on a server on every code change. This needs a tool that works without a GUI and without internet access.