static public VehicleResult CreateVehicleStateData(Helpers Helper,
CEP currCep,
double time,
double inputSpeed,
double inputAcc,
double Gradient = 0,
Correction DataCor = null)
{
//Declaration
double speed = Math.Max(inputSpeed, 0);
double acc;
double P_pos;
//Speed/Acceleration limitation
if (speed == 0)
{
acc = 0;
}
else
{
acc = Math.Min(inputAcc, currCep.GetMaxAccel(speed, Gradient, (Helper.pClass == Constants.strBEV | Helper.uClass == Constants.strHybrid)));
}
//Calculate the power
double power = currCep.CalcPower(speed, acc, Gradient, (Helper.pClass == Constants.strBEV | Helper.uClass == Constants.strHybrid));
double P_eng = currCep.CalcEngPower(power);
double Pwheel = 0;
if (Helper.uClass == Constants.strHybrid)
{
Pwheel = currCep.CalcWheelPower(speed, acc, Gradient);
}
//Power limitation
if (P_eng >= 0)
{
P_pos = power;
}
else
{
P_pos = 0;
}
//Calculate the result values (BEV)
if (Helper.pClass == Constants.strBEV)
{
return(new VehicleResult(Helper.gClass,
"",
time,
speed,
Gradient,
P_eng,
P_pos,
P_eng / currCep.RatedPower,
P_eng / currCep.DrivingPower,
acc,
currCep.GetAllEmission(P_eng, speed, Helper)));
}
//Calculate the decel costing
double decelCoast = currCep.GetDecelCoast(speed, acc, Gradient);
//Calculate the result values (Zero emissions by costing, Idling emissions by v <= 0.5m / s²)
if (acc >= decelCoast || speed <= Constants.ZERO_SPEED_ACCURACY)
{
if (Helper.uClass == Constants.strHybrid)
{
return(new VehicleResult(Helper.gClass,
"",
time,
speed,
Gradient,
P_eng,
P_pos,
P_eng / currCep.RatedPower,
P_eng / currCep.DrivingPower,
acc,
currCep.GetAllEmission(Pwheel, speed, Helper)));
}
else
{
return(new VehicleResult(Helper.gClass,
"",
time,
speed,
Gradient,
P_eng,
P_pos,
P_eng / currCep.RatedPower,
P_eng / currCep.DrivingPower,
acc,
currCep.GetAllEmission(P_eng, speed, Helper)));
}
}
else
{
if (Helper.uClass == Constants.strHybrid)
{
return(new VehicleResult(Helper.gClass,
"",
time,
speed,
Gradient,
P_eng,
P_pos,
P_eng / currCep.RatedPower,
P_eng / currCep.DrivingPower,
acc,
currCep.GetAllEmission(Pwheel, speed, Helper, true)));
}
else
{
return(new VehicleResult(Helper.gClass,
"",
time,
speed,
Gradient,
P_eng,
P_pos,
P_eng / currCep.RatedPower,
P_eng / currCep.DrivingPower,
acc,
currCep.GetAllEmission(P_eng, speed, Helper, true)));
}
}
}