private int CalculateMaxAirmassforcell(SymbolCollection symbols, string filename, int pedalposition, int rpm, int requestedQuantity, bool autogearbox, out limitType limiterType, bool torqueBased)
{
limiterType = limitType.None;
// check against torque limiter
SymbolHelper trqLimiter = GetSymbolLike(symbols, "Torque limiter", selectedBank);
int[] trqLimitMap = readIntdatafromfile(filename, (int)trqLimiter.Flash_start_address, trqLimiter.Length);
int[] trqXAxis = readIntdatafromfile(filename, trqLimiter.Y_axis_address, trqLimiter.Y_axis_length * 2);
int[] trqYAxis = readIntdatafromfile(filename, trqLimiter.X_axis_address, trqLimiter.X_axis_length * 2);
if (torqueBased)
{
int Nmlimit = Convert.ToInt32(GetInterpolatedTableValue(trqLimitMap, trqXAxis, trqYAxis, Convert.ToInt32(spinEdit1.EditValue) * 10, rpm));
//requestedairmass
if (requestedQuantity > Nmlimit)
{
Console.WriteLine("Torque is limited from " + requestedQuantity.ToString() + " to " + Nmlimit.ToString() + " at " + rpm.ToString() + " rpm");
requestedQuantity = Nmlimit;
limiterType = limitType.TorqueLimiterEngine;
}
}
else
{
int IQlimit = requestedQuantity;
if (trqXAxis.Length == 1)
{
// 2d map
IQlimit = Convert.ToInt32(GetInterpolatedTableValue(trqLimitMap, trqXAxis, trqYAxis, rpm, Convert.ToInt32(spinEdit1.EditValue) * 10));
}
else
{
IQlimit = Convert.ToInt32(GetInterpolatedTableValue(trqLimitMap, trqXAxis, trqYAxis, Convert.ToInt32(spinEdit1.EditValue) * 10, rpm));
}
//requestedairmass
if (requestedQuantity > IQlimit)
{
// Console.WriteLine("IQ is limited from " + requestedQuantity.ToString() + " to " + IQlimit.ToString() + " at " + rpm.ToString() + " rpm");
requestedQuantity = IQlimit;
limiterType = limitType.TorqueLimiterEngine;
}
}
// check against smoke limiter
return requestedQuantity; // no limits ...
}