FuelTech ManualsGlossarySearch

11. Reading the log: the VE channels

Version 1.1Software: FuelTech Vision 3.0Firmware: 00.03.00.54Products: FT700, FT470, VisionFT2026-10-14

The log shows whether the VE is right and why the loop acted or did not act. This chapter says what each VE mode channel shows, when it is zeroed or stuck and how to set up the log screen for tuning. The channels are listed with the name the log shows in English.

#Before recording: what the log needs to have

Record at 100 Hz or more. The FT700 records up to 1 kHz; the FT470, up to 100 Hz.

Leave Individual sampling rate off (the default): this way all channels follow the general Sampling rate.

If you turn on the individual rate, check the Rate of each VE channel: by default the O2 sensor comes at 10 ms, and the target, the VE, the STFT and the LTFT come at 100 ms.

In the new FT700 map, the channels in the list below already come marked as Enabled (they are recorded), but only VE - Efficiency %, VE - O2 closed loop target, Lambda error (O2 sensor vs target), Primary injectors deadtime and Differential fuel pressure (the screen shows Base fuel pressure) come marked as Visible.

The new FT470 map created by the wizard comes with the log at 50 Hz and only 48 essential channels enabled, besides the time, launch and lap channels that the log always records; none of the channels in the list below is among them.

On the FT470, before running, raise the Sampling rate to 100 Hz and mark Enabled and Visible on these channels. On the FT700, mark Visible on the ones you will use:

Closed Loop / VE Probe, Engine RPM, MAP, TPS, Battery voltage, Injection time A, Engine temperature, Air temperature - intake and Fuel pressure are already among the 48 channels of the FT470 and come visible on the FT700.

When opening a log, FuelTech Vision turns off by itself every channel that stayed at zero from start to end, such as VE closed loop - Active LTFT with the LTFT not applied.

If a channel does not appear, look for it in Search channel and enable it.

Datalogger settings filtered by VE closed loop: Record, Enabled and Visible for each channel.
Datalogger settings filtered by VE closed loop: Record, Enabled and Visible for each channel.

#The VE channels

Channel (as in the log)UnitWhat it showsWhen it is zero or stuck
VE - Efficiency %%VE from the table at the current RPM and MAP, before the loop correctionOutside VE mode it is not published
VE - Effective efficiency %%VE used in the calculation: VE from the table × VE closed loop - VE factorOutside VE mode it is not published
VE - O2 closed loop targetlambdaTarget from the lambda target table, without subtracting enrichmentOutside VE mode it is not published
Closed Loop / VE ProbelambdaAverage of the O2 sensors marked in Sensor selection for average value; it is the O2 sensor that the loop reads0 when no marked O2 sensor has a valid reading
Lambda error (O2 sensor vs target)%Difference between O2 sensor and target at the same instant0 when the O2 sensor has no valid reading: a zero alone does not prove the tune is right
VE - Total enrichment%Sum of the VE mode enrichments: acceleration, post-start, engine temperature, gear and event compensations; it does not include the bank compensation0 with none of these terms active
VE closed loop - StatenumberWhy the loop corrects, freezes or learns (table further on)Always published
VE closed loop - STFT%Fast correction that the loop is applying0 with the loop off
VE closed loop - Active LTFT%Learning applied at the current position0 with Apply the learned LTFT off, which is the default
VE closed loop - VE factorfactorTotal correction that multiplies the VE from the table1.000 with the loop off
VE closed loop - Estimated delaymsEstimated time between the injection and the O2 sensor readingLoop off: does not change (stays at Maximum delay considered if it was already off when the VCU was turned on). Engine stopped or all injection cut: goes to that maximum
Injection time AmsPulse of bank A, already with deadtime and enrichments0 with the engine stopped or with all injection cut
Primary injectors deadtimemsDeadtime of bank A, from the battery voltage and the differential pressure0 with the bank off
Differential fuel pressure (the screen shows Base fuel pressure)barFuel pressure (low-pressure line) minus the MAPWith Use fuel pressure sensor off, it stays fixed at the failsafe
VE total flowl/minFuel flow calculated by the model; basis of the VE closed loop - Estimated delay0 with the engine stopped or with all injection cut

Other channels appear in the log and confuse whoever reads the VE:

ChannelWhat to know
MAPGauge pressure, in bar, as the screen shows it: vacuum is negative. It is one of the VE axes.
Air temperature - intakeIt enters the calculation. With the sensor failed or off, the VCU uses the failsafe and this channel does not show that.
Fuel temperatureIt appears in the log, but does not enter the VE calculation.
Acceleration fuel enrichment and decayThe value is in ms, but the channel does not show a unit. If it appears rounded, increase the channel Decimal places.
O2 targetIn VE mode it repeats the VE - O2 closed loop target and is already on the same scale as the O2 sensor.
O2 average value and O2 closed loop correctionThey belong to the pulsewidth mode. In VE mode they stay at 0: the VE correction is in VE closed loop - STFT and VE closed loop - Active LTFT.
Injection time Cylinder 01 - A and followingThey include the individual cylinder trim and the linearization, which Injection time A does not include.
VE power and VE torqueEstimates from the fuel flow, not measured.
Active cut (ign)The value 15 is the 4000 rpm limiter of VE mode for an external MAP sensor failure, with Use MAP sensor on, and it only appears while it is cutting.
Generic Channel 0 to Generic Channel FThey carry no VE loop data. With electronic throttle configured, the VCU occupies them: do not use them as a CAN destination or for a custom function.

#Sign: which way each channel points

Lambda error (O2 sensor vs target) positive: the O2 sensor is leaner than the target. Negative: richer.

VE closed loop - STFT positive: the VCU is adding fuel. Negative: it is removing. A positive error (lean) pulls the STFT positive.

VE closed loop - VE factor at 1.000 means no correction; 1.050 is 5% more fuel; 0.950 is 5% less.

Lambda error (%) = (O2 sensor − target) ÷ target × 100
VE factor        = (1 + active LTFT ÷ 100) × (1 + STFT ÷ 100)
effective VE     = VE from the table × VE factor

The VE closed loop - VE factor does not go beyond the Total authority (STFT + LTFT) (default 25%: from 0.750 to 1.250); at that limit it stops and the formula above can go past it.

To check a log: VE - Effective efficiency % divided by VE - Efficiency % must give the VE closed loop - VE factor.

With the loop on and the factory defaults, it learns without applying: VE closed loop - Active LTFT stays at 0.0% and the STFT carries the whole correction: the zero does not prove that nothing was learned, and what was learned only appears on the live VE learning (LTFT) screen, with the VCU connected.

#Log target and table target

VE - O2 closed loop target is the lambda that the target table asks for at the point (for example 0.85), not an AFR. With flex, it already includes the target correction for the ethanol blend.

It does not subtract any compensation: post-start, engine temperature, acceleration fuel enrichment, gear, air conditioning, fan and the other terms of VE - Total enrichment stay outside the target.

While VE - Total enrichment is different from zero, the Lambda error (O2 sensor vs target) adds up two things: the VE error and the enrichment.

To judge the VE, use segments with VE - Total enrichment at zero, or subtract the enrichment with the required VE calculation, further on.

With the loop on, leave the steady-state compensations at zero in the range where it acts: the reason is in Enrichments and compensations in VE mode.

By default the target comes with a scale of 0 to 29.4 and the O2 sensor, from 0 to 2: the target trace is flattened. Put both on the same scale, or use the O2 target.

The Lambda error (O2 sensor vs target) compares the O2 sensor with the target of the same instant, with no dead band.

The loop compares the O2 sensor with the target delayed by the VE closed loop - Estimated delay (the new target enters gradually, over that time) and ignores an error smaller than the Lambda error dead band. When the target changes, the two disagree.

#The O2 sensor delay

The O2 sensor reads what was injected a little earlier: the gas takes time to reach it and the O2 sensor takes time to respond.

The VCU estimates this time at every instant and records it in VE closed loop - Estimated delay. It is an estimate, not a measurement.

In an RPM, MAP or TPS ramp, comparing the O2 sensor and the target at the same instant shows an error that does not exist.

To read the VE, use only steady-state segments (steady pedal and MAP, as defined in Step-by-step tuning method) and only start counting after the time of VE closed loop - Estimated delay has passed since the start of the segment.

The loop itself does the same: it does not learn in a transient or with the target moving, and waits out the delay before going back (states 9, 10 and 13).

The channel table above shows when the channel stays stuck; the typical values and where the calculation comes from are in VE closed loop.

#Loop and learning states

The VE closed loop - State channel records a number. The live VE learning (LTFT) screen shows the same state as text.

When there is more than one reason at the same time, the channel shows only one. Resolve the one that appears and check again.

In the Correction column: zeroes, the STFT goes to zero (immediately with the loop off); drops, the STFT goes down in a ramp to zero; freezes, the STFT stays fixed; corrects, the STFT keeps acting.

Only in states 14 and 22 can the LTFT learn.

No.Text on the screenCorrectionWhen it appears (factory values)
0DisabledzeroesLoop off, engine stopped, start or during post-start
1O2 sensor failuredropsO2 sensor without a valid reading or stuck, or invalid target
2O2 sensor heatingfreezesSome O2 sensor in the average still warming up
3Cold enginefreezesEngine below the Minimum engine temperature (70 °C) or temperature sensor failure
4Post startzeroesUp to 15 s after the end of the post-start (Time after start to begin)
5Out of RPM rangezeroes below, freezes aboveOutside Minimum RPM (500 rpm) to Maximum RPM (8000 rpm)
6Fuel injection cutfreezesDuring injection cut, including on a gear change with cut
7Launch / ALS / pit limitfreezesLaunch, anti-lag (ALS) or pit limit active
8Enrichment activefreezesAcceleration fuel enrichment active (by default, any value) or bank compensation different from zero
9TransientfreezesTPS varied more than 5% or MAP more than 0.05 bar in the recent window, of one to two times (one delay plus 0.3 s)
10Target movingcorrectsThe current target differs from the delayed target that the loop uses by more than 0.007
11Injectors saturatedfreezesPulse plus deadtime fills the whole cycle
No.Text on the screenCorrectionWhen it appears (factory values)
12Test modefreezesTest mode or compression test active
13Waiting to stabilizefreezesOne delay plus 0.3 s after one of the states 1 to 8, 11 or 12 ends; at least 2 s after a cut
14Total authority reachedcorrects at the limitVE factor reached the Total authority (STFT + LTFT) (25%); the LTFT can still learn
15STFT saturated (VE probably wrong)corrects at the limitSTFT at the limit for more than 30 s: the VE needs more correction than the loop can give
16VE model sensor in failsafecorrectsUse MAP sensor off or MAP invalid; air temperature or fuel pressure invalid with their Use ... sensor option on
17Fuel pressure out of rangecorrectsOnly with Use fuel pressure sensor on: differential pressure more than 10% away from the rated pressure of the injectors of the first enabled bank that is not direct injection
18Air temperature out of rangecorrectsIntake air outside 15 to 45 °C
19Ethanol changingcorrectsEthanol varied more than 2% in 10 s
20Battery voltage out of rangecorrectsBattery below 10.5 V or above 15 V
21Correcting (waiting for cell to stabilize)correctsNormal state at steady state, while the STFT does not yet ask for a transfer to the LTFT
22LearningcorrectsOnly at the instant when part of the STFT passes to the LTFT
23Correcting (waiting for acceleration fuel enrichment to end)correctsDoes not appear with the factory default

At steady state, with the loop correcting, the normal thing is to see state 21.

State 13, Waiting to stabilize, is the wait after a lockout, with the correction frozen: do not confuse it with state 21, in which the loop corrects.

State 14 has high priority and hides states 10 and 15 to 23 that are active at the same time.

State 22 lasts only an instant at each transfer, which happens after 4 s with STFT of at least 1.5%, positive or negative, in the same region: the log may not record it.

With the factory values, from 1.0 bar up the LTFT does not learn, even if the state passes through 22. With Long term learning (LTFT) off, 22 appears without anything being learned.

In state 16, check the Use ... sensor options: they are on by default, and the one for the sensor the car does not have must be turned off (see Before you start: engine, fuel, injectors and sensors).

The lockouts active at the same time and the cell that is learning appear only on the live screen (see Self-learning: VE learning (LTFT)).

Build five groups, in this order, from Group #1 to Group #5, and save with Build a preset to use again in other logs.

On the FT470, also enable Acceleration fuel enrichment and decay, VE total flow and, with flex, FlexFuel: Ethanol %: they are not among the 48 channels of the new map.

GroupChannelsWhat for
1 Where the engine isEngine RPM, MAP, TPS, Air temperature - intake, Engine temperature, Battery voltageVE axes, transient and lockout reasons
2 MixtureClosed Loop / VE Probe, VE - O2 closed loop target, Lambda error (O2 sensor vs target), VE - Total enrichmentMixture error and how much of it is enrichment
3 LoopVE closed loop - STFT, VE closed loop - Active LTFT, VE closed loop - VE factor, VE closed loop - State, VE closed loop - Estimated delayWhat the loop did and why
4 VE and pulseVE - Efficiency %, VE - Effective efficiency %, Injection time A, Primary injectors deadtime, Injection duty A, Differential fuel pressureVE used, pulse, deadtime and injector headroom
5 ContextActive cut (inj), Active cut (ign), Acceleration fuel enrichment and decay, VE total flow, FlexFuel: Ethanol % (with flex)Cuts, transient and basis of the delay

Put O2 sensor and target on the same scale, for example 0.70 to 1.30. For Lambda error (O2 sensor vs target) and VE closed loop - STFT, −15 to 15; for VE closed loop - VE factor, 0.85 to 1.15. The scale is adjusted in the channel Advanced settings (Ctrl + right-click on the channel), in the Minimum and Maximum fields.

Log: probe, target, VE closed loop - STFT and VE closed loop - VE factor on the same chart.
Log: probe, target, VE closed loop - STFT and VE closed loop - VE factor on the same chart.

#The range of the VE - Efficiency % channel

The VE value has no ceiling: the VCU calculates it, the log records it and the log file stores 130% as 130%.

What can cut it is the drawing: the chart goes from the Minimum to the Maximum of the channel scale, and the trace above the Maximum is cut off at the top of the chart, or of the group range; if the trace seems to have a ceiling, check the Maximum. The number in the channel list stays right: when in doubt, read the number, not the height of the line.

In a new map, VE - Efficiency % comes with a scale of 0 to 179% and Fix scales checked. In a map created by an earlier software version, check the Maximum.

Advanced settings of the VE - Efficiency % channel: Fix scales, Minimum 0.0 and Maximum 179.0.
Advanced settings of the VE - Efficiency % channel: Fix scales, Minimum 0.0 and Maximum 179.0.

If you uncheck Fix scales, the scale goes back to 0 to 100%, and a VE above 100% sits above the Maximum.

If your table has VE above the Maximum, leave Fix scales checked and put the Maximum above the highest value in the table (the VE table goes up to 300%). VE - Effective efficiency % comes hidden, with a scale of 0 to 200%.

In the Dashboard, a graphic VE gauge comes in with Maximum 100, and needle, bar and arc stop there. Change the Maximum or use the digital gauge, which writes the real number.

#Calculated channels

The viewer creates calculated channels on the computer, from the samples of a log already recorded.

Use Create new channel, give it a name and build the formula in Expression, clicking on the Channels and the Operations. The formula accepts the four operations, power and parentheses, with normal precedence.

Except for the integral and the derivative, the channel combines values of the same instant: there is no shift in time, comparison or condition.

The mixture error does not need a calculated channel: it is already the Lambda error (O2 sensor vs target).

#Required VE

required VE = effective VE × O2 sensor ÷ target × (1 + enrichment ÷ 100)

Effective VE is VE - Effective efficiency %; O2 sensor, Closed Loop / VE Probe; target, VE - O2 closed loop target; enrichment, VE - Total enrichment.

The result is the VE, in %, that would make the model match the engine at that instant, with the enrichment subtracted.

Example: effective VE 80%, O2 sensor 0.90, target 0.85 and enrichment 10% give a required VE of 93.18%.

The calculation is valid for segments with no bank compensation and no individual cylinder trim acting; in direct injection, also without the fuel pressure compensation.

#Deadtime fraction and useful time

Deadtime fraction (%) = Primary injectors deadtime ÷ Injection time A × 100
Useful time (ms)       = Injection time A − Primary injectors deadtime

The fraction shows how much of the bank A pulse is deadtime. Where to use this number is in Step-by-step tuning method.

#Care with the calculated channel

#Reading the error per cell

The ready-made error-per-cell table exists live, on the VE learning (LTFT) screen, with the VCU connected (see Self-learning: VE learning (LTFT)).

FuelTech Vision does not build this table from a recorded log. In the log, the per-cell calculation is done with the Overlay, the calculated channel and the Average between cursors:.

The Overlay opens with the Overlay button of the chart and shows a cross on the VE table at the RPM and MAP of the cursor instant, between cells when the point is between them.

It uses the map that is open in FuelTech Vision, which may not be the one from the log.

  1. Open the log and the map that ran in it, with Open map from log. Without an open map, the Overlay offers to open the one from the log.
  2. Check that the map O2 sensor unit is in lambda and create the required VE channel.
  3. Turn on the Overlay, choose Engine tune and the VE table, and turn on Follow RealTime so the table follows the cross.
  4. Find a segment with RPM, MAP and TPS steady, VE - Total enrichment near zero and the cross stopped near the center of a cell.
  5. Right-click the chart and, in Cursors, use Set cursor 1 at the start of the segment plus the time of VE closed loop - Estimated delay, and Set cursor 2 at the end.
  6. In Average between cursors:, check whether the required VE appears and read its average; if it does not appear, use there the averages of O2 sensor, target, effective VE and enrichment in the same formula. Compare with the cell.
  7. To correct in the Overlay, confirm the change in the panel: it takes effect when you save or send the map.

Near the edge of the cell, the VE used is the blend of four cells: the average corrects the point, not the cell. That is why the cross must be near the center.

For many cells at once, use Export to CSV with RPM, MAP, O2 sensor, target, effective VE and enrichment, group them in a spreadsheet and redo the calculation there.