Using "Revolutions" variable in cranking tables

I have a start delay table set up based on engine coolant temperature, 2s @ 20C, 0.5s @ 50C, 0s @ 60C.

I have a Cranking/Fuel/Volume Correction table configured with Revolutions on the X axis.

I’m seeing that as soon as I hit the start button, even if there’s a start delay, “Revolutions” starts increasing. On the one hand I understand yes, the motor is spinning, revolutions should reflect this. On the other hand, my table is configured under the assumption that 0 (or 1) revolution = the first cycle when we’re injecting fuel. The taper in the table is dependent on the profile of fuel needed to correctly start the engine regardless of how long we waited to even try.

Would it make sense to change the variable “Engine Revolutions” to reflect this? Or maybe make a new variable that reflected the time we actually tried to run the engine?

I guess I can use Project Tree variables to note the first value of Engine Revolutions when Cranking State changes to 2, and then use Engine Revolutions minus that value as the axis in my table (so thank you for having a complete enough math system to allow this) but I can’t be the only person who is/was caught out by the discrepancy…

Hi,

We recently changed the start delay from a single value to a table. So the issue was non-existent before that update, and we missed this consequence when making the change.

Unfortunately, we can’t change how the “Engine Revolutions” channel is calculated. Making a change like that would mean that tunes that use that channel can stop working correctly after making an update.

We probably have to introduce a new channel and use it as the new default axis for the cranking tables. We will discuss this and decide on a solution.

Thanks for the feedback.

@ScottSmith

Could you use the table as 4d and use a dual qualifier, coolant over revolutions over cranking state?

A 4d table wouldn’t help, as soon as state is 0 or 2 it’ll use that slice of the table but Revolutions will already be high.

I was able to get what I want using two variables, although the logic is convoluted.

Here’s what I tried:

Basically RevSinceFirstFuel = choose(RevAllowFuel, min(engine/Revolutions, RevSinceFirstFuel), engine/Revolutions). But since you can’t have nested functions I used multiply-by-a-boolean and multiply-by-1 minus boolean to simulate it.

If logic functions supported comparing two channels (rather than a channel vs a constant) then the logic could be simplified to:

RevUpdate = ((state != 2) AND (state != 0)) OR (revolutions < RevSinceFirstFuel) RevSinceFirstFuel = choose(RevUpdate, revolutions, RevSinceFirstFuel)

but either way I need to burn a status variable to accomplish what I want.

I should note the above solution is only half the solution - RevSinceFirstFuel is really RevOfFirstFuel, so I still need another variable to be EngineRevolutions - RevOfFirstFuel. Still doable with the math features of Project Tree, and it’s nice that there’s a Group function to put all the substeps together in one place.

I have a similar “issue” with my GDI engine.
I could not (yet) figure out how to reliably start the engine with low fuelpressure (especially at low temps). So i used the min rail pressure for start option. But sadly this makes the revolution based cranking injection also useless cause first injection event is hyper varying depending on initial fuelpressure.
I would appreciate something like an injection event counter channel.

Ran into a problem implementing my solution. Everytime time I restart the PRO-8 software with my tune I get the following error:

Found errors in unpackTables:

  • cranking/fuelVolumeCorr: signed/unsigned mismatch for xBins

I’m not really sure how that came about, it seems the table has reconfigurable axis but maybe not? FWIW my variable is a signed 32-bit integer; I can’t make it unsigned and it doesn’t seem appropriate to make it a float. How can one even get an unsigned number in the software?

It probably is an issue with a custom 32-bit variable as an axis channel.
Please post your project or send it to me at marek.kuklis@ecumaster.com

We will check what is going on.

Sent a private email. Also I could probably just change this to a 32-bit float, that is good for up to 16M revolutions (when counting one by one) which would be 2000 minutes at 8000 RPM, or 33 hours? I’ll run out of gas before that.