01 / 07 — MDX · Live instrumentsRunning on real data
Six instruments. Three real logs.
One toolchain, running live in this page.
A measurement configuration is not one plot type. Two of these are strip oscilloscopes comparing runs sample by sample; the other four answer what a strip view answers badly — how often, against what, how much of the run, and why the controller did that.
- 01Two runs, eleven signals, one cursor pairY-t oscilloscope
- 02Crank, enrichment, light-off Y-t oscilloscope
- 03Four cut-off events, found not eyeballedEvent list
- 04Alternator load, signal against signalX-Y oscilloscope
- 05Where the run actually spent its timeHistogram
- 06What the idle controller asked for, and what it was allowedController decomposition
- Y-t scopes
- Two runs overlaid, dual cursors, per-run time shift
- Analysis
- Event list, X-Y, histogram, controller decomposition
- Reads
- Hold-last-sample, each signal at its own raster
- Data
- Recorded MDF4 logs, LTTB-downsampled for the browser
01 — Y-t oscilloscope · transient fuelling
Two runs, eleven signals, one cursor pair.
The strip surface. A baseline fuelling run and a 30 % reduced-fuel run overlaid on a shared time base, every strip carrying its own axis, and a value pane that recomputes on every cursor move — hold-last-sample, never interpolated.
- Base fuelbase_fuel.mf4 Reference
- 30 % reduced fuelreduced_fuel_30pct.mf4 Comparison
Hotkeys — Transient fuelling
| Ctrl + 1 | Cursors | Switch the active cursor |
| Arrow Left / Right | Cursors | Move the active cursor sample-wise, on the selected signal |
| Ctrl + Shift + B | Cursors | Enter a time for the active cursor; again for the other cursor |
| Ctrl + Alt + R | Cursors | Delete cursors (reset to the window edges) |
| Ctrl + Page Up / Down | Strips | Move between strips |
| Arrow Up / Down | Signal list | Move between signals |
| Ctrl + B | Navigation | Enter a time to centre the view on |
| Ctrl + Z | Global | Undo the last run-time nudge |
| Ctrl + F1 | Global | Show this list |
| Esc | Global | Close this list |
Enter a time
- 01.1
Hold-last-sample reads
An ECU signal keeps its value until the next update, so a cursor reports the last sample at or before it — never an interpolation. A held read is marked with an asterisk so you can tell a measured value from a carried one.
- 01.2
Per-run time shift
Drag any strip horizontally and the whole of run 2 slides against run 1. A time offset belongs to the file, not to a signal, so every strip moves together. Undo with Ctrl + Z, clear with a double-click.
- 01.3
Mixed rasters, one time base
The strips carry 1 ms and 10 ms channels side by side. Nothing is resampled to a common rate — each signal keeps its own raster, and the cursor resolves each one independently.
- 01.4
Sample-wise navigation
Arrow Left / Right steps the active cursor across the samples of the selected signal only. The cursor line is solid on a sample and dashed between two.
02 — Y-t oscilloscope · cold start
Crank, enrichment, light-off — same instrument.
The same strip surface on a different question. Two real cold starts from one vehicle programme, soaked nine degrees apart. Ninety seconds from key-on: the crank voltage dip, the enrichment excursion, the ignition retard that heats the catalyst, and the thermal curves that follow.
- 25 °C soakcoldstart_soak_25C.mf4 Reference
- 34 °C soakcoldstart_soak_34C.mf4 Comparison
Hotkeys — Cold start
| Ctrl + 1 | Cursors | Switch the active cursor |
| Arrow Left / Right | Cursors | Move the active cursor sample-wise, on the selected signal |
| Ctrl + Shift + B | Cursors | Enter a time for the active cursor; again for the other cursor |
| Ctrl + Alt + R | Cursors | Delete cursors (reset to the window edges) |
| Ctrl + Page Up / Down | Strips | Move between strips |
| Arrow Up / Down | Signal list | Move between signals |
| Ctrl + B | Navigation | Enter a time to centre the view on |
| Ctrl + Z | Global | Undo the last run-time nudge |
| Ctrl + F1 | Global | Show this list |
| Esc | Global | Close this list |
Enter a time
- 02.1
The crank is a voltage event
Battery voltage collapses to roughly 8.8 V while the starter turns, then recovers past 15 V once the alternator picks up. Put cursor A in the dip and cursor B after recovery and the Δ column reads the whole event.
- 02.2
The two runs start apart
These are separate recordings, so run 2 cranks about 0.75 s earlier in its own file. Slide run 2 until the cranks line up and every comparison is read at the same point in the start.
- 02.3
Retard is what heats the catalyst
Ignition advance is pulled back hard after start and enrichment drives lambda rich — heat dumped into the exhaust, walking the catalyst up while the coolant is still cold.
- 02.4
The thermal strips diverge
Catalyst, exhaust, coolant and oil all separate between the runs — though these are different sessions, so soak is not the only variable. Step the cursor to read when each crosses a light-off threshold.
03 — Event list · fuel cut-off
Four cut-off events, found not eyeballed.
Deceleration fuel cut-off is an event question, not a trace question. The detector sweeps the run for windows where injection is zero while the engine is still turning, and hands back a table you can sort, total and export.
- Fuel quantity = 0, speed > 700 rpmDetector
- 4 events · 5.39 s · 10.6 % of runResult
04 — X-Y oscilloscope · alternator
Alternator load, signal against signal.
Plot torque loss against engine speed instead of against time and the machine’s character appears as a shape. Colour carries a third channel — alternator current — and the signals behind the efficiency figure are calculated in the backend, not exported to a spreadsheet.
- 4 signals, 0 exportsCalculated in backend
- 59.3 %Median efficiency
05 — Histogram · residence time
Where the run actually spent its time.
A trace tells you the engine reached 3,875 rpm. It does not tell you it spent under a second there. Residence time binned by engine speed answers that in one read, split by fuelling state.
- 250 rpm, sample-wiseBinning
- 5.4 s of 51 sFuel-free
06 — Controller decomposition · idle regulation
What the idle controller asked for, and what it was allowed.
A calibration review of idle control asks how the controller got there. The regulated quantity sits over its setpoint, and the applied correction splits into the terms that produced it, drawn against the limits the loop may use. Where the applied line leaves the sum of its terms, the limiter is binding.
- Engine speed to idle setpointRegulated
- PI — derivative term is zeroLoop
About this data
Real logs. Nothing modelled, nothing simulated.
Three recorded measurement files feed these six instruments: a transient fuelling pair, a cold-start pair, and a 51 second engine test with pedal sweeps to 3,875 rpm and a loaded alternator. Signal names are generic throughout; the underlying programme-specific ECU labels appear nowhere on this page.
Traces are LTTB-downsampled for the browser. LTTB selects samples rather than averaging them, so every point a cursor lands on is a genuine recorded value, and the Raster column still reports each channel’s true source rate. Calculated signals are labelled as such, and the controller panel states plainly that its derivative term is zero in this dataset.
Next step
Bring your own measurement.
These are our files. Send one of yours and we will open it in the same instruments, on a call, with your engineers.
