Hello to all,

in Race Car Engineering of october 2007 and november 2008 are two similar articles about determining the rpm where gears are shifted with an example from 6'th to 7'th.

I am trying to implement this report into my evaluation with the aim to check consistency but i do not really unterstand the way it is working.
I thought that I have understood to create soft events for every shift event, but it is not really working out.

Maybe there is someone who can put some light into it.

Thank you!

Quote 0 0
Hi Andrei,

Unfortunately the details set out in the Databytes articles require the use of Metrics which would require an upgraded Dongle to access. It is still possible to do what I think you are trying to achieve with Math Channels and is something which I have done quite recently. My intention was to record the RPM when either an Upshift or Downshift was requested by the Driver. I then expanded on this by making it gear dependent.

Softs Events are a useful tool here which will allow you to jump through the data quickly to look at shift performance, however, in this case, you cannot use the Soft Events within a Math Channels.

I am aware that this may be a little confusing and intimidating. It took some time to setup but I have included the definitions of my Math Channels below. I will aim to upload a Pi Toolbox Workbook file in the future which you can open and use with minimal setup required.


register @new;
register @old;
register @newUpshift;
@new = [*trUpshiftSwitch] ;
@newUpshift = choose( @new == 1 && @old == 0, 1, 0 );
@old = @new;


register @new;
register @old;
register @newDownshift;
@new = [*trDownshiftSwitch] ;
@newDownshift = choose( ( @new == 1 ) && ( @old == 0) , 1, 0 );
@old = @new;


register @nextGear;
@nextGear = ceil( choose( [_trNewUpshift] == 1,  [*gear_pos] + 1 , choose( [_trNewDownshift] == 1, [*gear_pos] - 1 , @nextGear ) ) );


register @request;
@request = choose( [_trNewUpshift] , [RPM] , 0 );


register @request;
@request = choose( [_trNewDownshift] , [RPM] , 0 );

_trUpshiftRequestRPM 1-2

choose( ( [_trUpshiftRequestRPM] > 0 ) && ( [_trNextGear] == 3 ) , [_trUpshiftRequestRPM], 0);

_trDownshiftRequestRPM 2-1
choose( ( [_trDownshiftRequestRPM] > 0 ) && ( [_trNextGear] == 2 ) , [_trDownshiftRequestRPM], 0);

You will need to create one of these channels for each shift increment you wish to record. Pay attention to the [_trNextGear] == X statement as this is what determines which gear you are looking at. With some additional work you could create another set of Math Channels which calculated the average RPM for a shift request.

I have made a display page within Pi Toolbox which shows the shift RPMs quickly and conveniently with the Maximum RPM for a request as well as the averages. See screenshot below.


I have found this to be a really powerful tool in analyzing gearshifts especially when relating that the driver performance. Definitely worth the time investment in setting this up.

Let me know how you get on or if you have any other questions.

Thanks and kind regards,

James Bracken BEng (Hons)
Senior Applications Engineer
HiL Group and RCA

T:  +44 (0) 1954 253749
M: +44 (0) 7775 028513

Quote 0 0