Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit ffb08664 authored by Harald Martini's avatar Harald Martini
Browse files

added tests for RetarderType wrt to powertrain architecture,

implemented checks for PEV, S_HEV, P_HEV, S_IEPC
parent 4b25c3b7
No related branches found
No related tags found
No related merge requests found
Showing
with 375 additions and 76 deletions
......@@ -163,7 +163,7 @@ Public Class Vehicle
vehicleData = New LorryVehicleDataAdapter().CreateVehicleData(vehicle, segment, segment.Missions.First(),
segment.Missions.First().Loadings.First(), True)
airdragData = New AirdragDataAdapter().CreateAirdragData(vehicle, segment.Missions.First(), segment)
retarderData = New RetarderDataAdapter().CreateRetarderData(vehicle)
retarderData = New RetarderDataAdapter().CreateRetarderData(vehicle, PowertrainPosition.HybridPositionNotSet)
angledriveData = New AngledriveDataAdapter().CreateAngledriveData(vehicle)
ptoData = New PTODataAdapterLorry().CreatePTOTransmissionData(vehicle, vehicle.Components.GearboxInputData)
Else
......
......@@ -103,9 +103,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Gener
return GearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount);
}
public RetarderData CreateRetarderData(IRetarderInputData retarderData, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet)
public RetarderData CreateRetarderData(IRetarderInputData retarderData, ArchitectureID archID)
{
return _retarderDataAdapter.CreateRetarderData(retarderData, position);
return _retarderDataAdapter.CreateRetarderData(retarderData, archID);
}
public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits,
......
......@@ -172,9 +172,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
return GearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount);
}
public RetarderData CreateRetarderData(IRetarderInputData retarderData, PowertrainPosition position)
public RetarderData CreateRetarderData(IRetarderInputData retarderData, ArchitectureID archID)
{
return _retarderDataAdapter.CreateRetarderData(retarderData, position);
return _retarderDataAdapter.CreateRetarderData(retarderData, archID);
}
public virtual PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto)
......
......@@ -26,7 +26,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount);
RetarderData CreateRetarderData(IRetarderInputData retarderData, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet);
RetarderData CreateRetarderData(IRetarderInputData retarderData, ArchitectureID archID);
AxleGearData CreateAxleGearData(IAxleGearInputData axleGearInputData);
......
......@@ -124,9 +124,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
}
public virtual RetarderData CreateRetarderData(IRetarderInputData retarderData, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet)
public virtual RetarderData CreateRetarderData(IRetarderInputData retarderData, ArchitectureID archID)
{
return _retarderDataAdapter.CreateRetarderData(retarderData, position);
return _retarderDataAdapter.CreateRetarderData(retarderData, archID);
}
......
......@@ -5,6 +5,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
{
public interface IRetarderDataAdapter
{
RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet);
RetarderData CreateRetarderData(IRetarderInputData retarder, ArchitectureID architecture);
}
}
\ No newline at end of file
......@@ -12,47 +12,120 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
{
public class RetarderDataAdapter : IRetarderDataAdapter
{
public RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet)
public RetarderData CreateRetarderData(IRetarderInputData retarder, ArchitectureID architecture)
{
return SetCommonRetarderData(retarder, position);
return SetCommonRetarderData(retarder, architecture);
}
internal static RetarderData SetCommonRetarderData(IRetarderInputData retarderInputData,
PowertrainPosition position = PowertrainPosition.HybridPositionNotSet)
private bool TypeValid(RetarderType type, ArchitectureID archId, out string errorMsg)
{
try
{
var retarder = new RetarderData { Type = retarderInputData?.Type ?? RetarderType.None};
var valid = true;
errorMsg = "";
if (archId == ArchitectureID.UNKNOWN) {
//Conventional vehicle
return true;
}
switch (retarder.Type)
{
case RetarderType.TransmissionInputRetarder:
case RetarderType.TransmissionOutputRetarder:
if (!(position.IsParallelHybrid() || position.IsOneOf(PowertrainPosition.HybridPositionNotSet, PowertrainPosition.BatteryElectricE2)))
{
throw new ArgumentException("Transmission retarder is only allowed in powertrains that " +
"contain a gearbox: Conventional, HEV-P, and PEV-E2.", nameof(retarder));
}
retarder.LossMap = RetarderLossMapReader.Create(retarderInputData.LossMap);
retarder.Ratio = retarderInputData.Ratio;
break;
case RetarderType.AxlegearInputRetarder:
if (!position.IsOneOf(PowertrainPosition.BatteryElectricE3, PowertrainPosition.IEPC) )
throw new ArgumentException("AxlegearInputRetarder is only allowed for PEV-E3, HEV-S3, S-IEPC, E-IEPC. ", nameof(retarder));
retarder.LossMap = RetarderLossMapReader.Create(retarderInputData.LossMap);
retarder.Ratio = retarderInputData.Ratio;
break;
case RetarderType.None:
case RetarderType.LossesIncludedInTransmission:
case RetarderType.EngineRetarder:
retarder.Ratio = 1;
break;
default:
throw new ArgumentOutOfRangeException(nameof(retarder), retarder.Type, "RetarderType unknown");
}
switch (type) {
case RetarderType.None:
valid = true;
break;
case RetarderType.TransmissionInputRetarder:
case RetarderType.TransmissionOutputRetarder:
valid = archId.IsParallelHybridVehicle() || archId.IsOneOf(ArchitectureID.P_IHPC, ArchitectureID.S2, ArchitectureID.E2);
break;
case RetarderType.EngineRetarder:
valid = archId.IsParallelHybridVehicle() || archId.IsOneOf(ArchitectureID.P_IHPC);
break;
case RetarderType.LossesIncludedInTransmission:
valid = archId.IsParallelHybridVehicle() || archId.IsOneOf(ArchitectureID.P_IHPC, ArchitectureID.S2, ArchitectureID.S_IEPC, ArchitectureID.E2);
break;
case RetarderType.AxlegearInputRetarder:
valid = archId.IsOneOf(ArchitectureID.E3, ArchitectureID.S3, ArchitectureID.S_IEPC);
break;
default:
throw new ArgumentOutOfRangeException(nameof(type), type, null);
}
if (!valid) {
errorMsg = $"Invalid retardertype for architecture [{type} - {archId}";
}
return valid;
}
private void SetRatioAndLossMap(IRetarderInputData inputData, RetarderData retarderData)
{
switch (inputData.Type) {
case RetarderType.TransmissionInputRetarder:
case RetarderType.TransmissionOutputRetarder:
case RetarderType.AxlegearInputRetarder:
retarderData.LossMap = RetarderLossMapReader.Create(inputData.LossMap);
retarderData.Ratio = inputData.Ratio;
break;
case RetarderType.LossesIncludedInTransmission:
case RetarderType.EngineRetarder:
case RetarderType.None:
retarderData.Ratio = 1.0;
break;
default:
throw new ArgumentOutOfRangeException();
}
}
internal RetarderData SetCommonRetarderData(IRetarderInputData retarderInputData,
ArchitectureID architecture)
{
if (!TypeValid(retarderInputData.Type, architecture, out var errorMsg)) {
throw new VectoException("Error while Reading Retarder Data: {0}", errorMsg);
}
var retarder = new RetarderData { Type = retarderInputData?.Type ?? RetarderType.None };
SetRatioAndLossMap(retarderInputData, retarder);
//try
//{
// position
// switch (retarder.Type)
// {
// case RetarderType.TransmissionInputRetarder:
// case RetarderType.TransmissionOutputRetarder:
// if (!(position.IsParallelHybrid() || position.IsOneOf(PowertrainPosition.HybridPositionNotSet, PowertrainPosition.BatteryElectricE2)))
// {
// }
// retarder.LossMap = RetarderLossMapReader.Create(retarderInputData.LossMap);
// retarder.Ratio = retarderInputData.Ratio;
// break;
// case RetarderType.AxlegearInputRetarder:
// if (!position.IsOneOf(PowertrainPosition.BatteryElectricE3, PowertrainPosition.IEPC) )
// throw new ArgumentException("AxlegearInputRetarder is only allowed for PEV-E3, HEV-S3, S-IEPC, E-IEPC. ", nameof(retarder));
// retarder.LossMap = RetarderLossMapReader.Create(retarderInputData.LossMap);
// retarder.Ratio = retarderInputData.Ratio;
// break;
// case RetarderType.None:
// case RetarderType.LossesIncludedInTransmission:
// case RetarderType.EngineRetarder:
// retarder.Ratio = 1;
// break;
// default:
// throw new ArgumentOutOfRangeException(nameof(retarder), retarder.Type, "RetarderType unknown");
// }
if (retarder.Type.IsDedicatedComponent())
{
......@@ -67,17 +140,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
return retarder;
}
catch (Exception e)
{
throw new VectoException("Error while Reading Retarder Data: {0}", e.Message);
}
}
}
public class GenericRetarderDataAdapter : IRetarderDataAdapter
{
private readonly GenericBusRetarderData _genericRetarderData = new GenericBusRetarderData();
public RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet)
public RetarderData CreateRetarderData(IRetarderInputData retarder, ArchitectureID architecture)
{
return _genericRetarderData.CreateGenericBusRetarderData(retarder);
}
......
......@@ -118,9 +118,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus
SupportedGearboxTypes);
}
public virtual RetarderData CreateRetarderData(IRetarderInputData retarderData, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet)
public virtual RetarderData CreateRetarderData(IRetarderInputData retarderData, ArchitectureID archID)
{
return _retarderDataAdapter.CreateRetarderData(retarderData, position);
return _retarderDataAdapter.CreateRetarderData(retarderData, archID);
}
public virtual PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData)
......
......@@ -259,7 +259,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
primarySegment.VehicleClass, mission.BusParameter.VehicleLength,
PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
simulationRunData.Retarder =
DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
simulationRunData.EngineData.FuelMode = 0;
simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
......@@ -298,7 +298,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
PrimaryVehicle.Components.AuxiliaryInputData,
PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
simulationRunData.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
simulationRunData.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
simulationRunData.EngineData.FuelMode = 0;
simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
simulationRunData.BusAuxiliaries =
......@@ -470,7 +470,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
primarySegment.VehicleClass, mission.BusParameter.VehicleLength,
PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
rd.Retarder =
DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
rd.EngineData.FuelMode = 0;
rd.VehicleData.VehicleClass = _segment.VehicleClass;
rd.BusAuxiliaries =
......@@ -536,7 +536,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
PrimaryVehicle.Components.AuxiliaryInputData,
PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
rd.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
rd.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
rd.EngineData.FuelMode = 0;
rd.VehicleData.VehicleClass = _segment.VehicleClass;
rd.BusAuxiliaries =
......@@ -687,7 +687,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
primarySegment.VehicleClass, mission.BusParameter.VehicleLength,
PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
rd.Retarder =
DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
rd.EngineData.FuelMode = 0;
rd.VehicleData.VehicleClass = _segment.VehicleClass;
......@@ -752,7 +752,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
PrimaryVehicle.Components.AuxiliaryInputData,
PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
rd.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
rd.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
rd.EngineData.FuelMode = 0;
rd.VehicleData.VehicleClass = _segment.VehicleClass;
rd.BusAuxiliaries =
......@@ -890,7 +890,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles,
PrimaryVehicle.VehicleType);
result.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
result.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
result.MaxChargingPower = PrimaryVehicle.MaxChargingPower;
//result.EngineData.FuelMode = 0;
......@@ -938,7 +938,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles,
PrimaryVehicle.VehicleType);
result.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
result.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
result.MaxChargingPower = PrimaryVehicle.MaxChargingPower;
//result.EngineData.FuelMode = 0;
......
......@@ -269,7 +269,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
_segment.VehicleClass, Vehicle.Length,
Vehicle.Components.AxleWheels.NumSteeredAxles, Vehicle.VehicleType);
simulationRunData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData);
simulationRunData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID);
simulationRunData.DriverData = DriverData;
simulationRunData.PTO = mission.MissionType == MissionType.MunicipalUtility
? DataAdapter.CreatePTOCycleData(Vehicle.Components.GearboxInputData, Vehicle.Components.PTOTransmissionInputData)
......@@ -394,7 +394,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
if (Vehicle.Components.RetarderInputData != null) {
result.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData,
result.ElectricMachinesData.First(e => e.Item1 != PowertrainPosition.GEN).Item1);
Vehicle.ArchitectureID);
}
CreateGearboxAndGearshiftData(result);
......
......@@ -134,7 +134,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
runData.AxleGearData = DataAdapter.CreateAxleGearData(Vehicle.Components.AxleGearInputData);
}
runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData);
runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID);
runData.Aux = DataAdapter.CreateAuxiliaryData(Vehicle.Components.AuxiliaryInputData, null, mission.MissionType,
_segment.VehicleClass, Vehicle.Length, Vehicle.Components.AxleWheels.NumSteeredAxles,
......@@ -222,7 +222,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
runData.AxleGearData = DataAdapter.CreateAxleGearData(Vehicle.Components.AxleGearInputData);
}
runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData);
runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID);
runData.Aux = DataAdapter.CreateAuxiliaryData(Vehicle.Components.AuxiliaryInputData, null, mission.MissionType,
_segment.VehicleClass, Vehicle.Length, Vehicle.Components.AxleWheels.NumSteeredAxles,
VectoSimulationJobType.ParallelHybridVehicle);
......
......@@ -178,7 +178,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
Vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
Vehicle.Length ?? mission.BusParameter.VehicleLength,
Vehicle.Components.AxleWheels.NumSteeredAxles, Vehicle.VehicleType);
simulationRunData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData);
simulationRunData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID);
simulationRunData.DriverData = DriverData;
......@@ -289,7 +289,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
runData.AxleGearData = DataAdapter.CreateAxleGearData(Vehicle.Components.AxleGearInputData);
}
runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData);
runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID);
runData.Aux = DataAdapter.CreateAuxiliaryData(Vehicle.Components.AuxiliaryInputData,
Vehicle.Components.BusAuxiliaries, mission.MissionType,
......@@ -475,7 +475,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
Vehicle.Length ?? mission.BusParameter.VehicleLength,
Vehicle.Components.AxleWheels.NumSteeredAxles,
VectoSimulationJobType.ParallelHybridVehicle);//Hardcode to override IHPC
runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData);
runData.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID);
runData.DriverData = DriverData;
......@@ -642,7 +642,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
Vehicle.Length ?? mission.BusParameter.VehicleLength,
Vehicle.Components.AxleWheels.NumSteeredAxles, Vehicle.VehicleType);
var emPos = result.ElectricMachinesData.First(x => x.Item1 != PowertrainPosition.GEN).Item1;
result.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, emPos);
result.Retarder = DataAdapter.CreateRetarderData(Vehicle.Components.RetarderInputData, Vehicle.ArchitectureID);
result.DriverData = DriverData;
result.VehicleData.VehicleClass = _segment.VehicleClass;
......
......@@ -167,7 +167,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus
PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType,
_segment.VehicleClass, PrimaryVehicle.Length ?? mission.BusParameter.VehicleLength,
PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
runData.Retarder = DataAdapter.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
runData.Retarder = DataAdapter.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
runData.EngineData.FuelMode = modeIdx.Value;
runData.VehicleData.VehicleClass = _segment.VehicleClass;
......@@ -307,7 +307,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus
runData.AxleGearData = DataAdapter.CreateAxleGearData(PrimaryVehicle.Components.AxleGearInputData);
}
runData.Retarder = DataAdapter.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
runData.Retarder = DataAdapter.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
runData.Aux = DataAdapter.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData,
PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType,
......@@ -504,7 +504,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus
PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
PrimaryVehicle.Length ?? mission.BusParameter.VehicleLength,
PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
runData.Retarder = DataAdapter.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
runData.Retarder = DataAdapter.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
runData.DriverData = DriverData;
......@@ -674,7 +674,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.SingleBus
vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
vehicle.Length ?? mission.BusParameter.VehicleLength,
vehicle.Components.AxleWheels.NumSteeredAxles, vehicle.VehicleType);
result.Retarder = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData);
result.Retarder = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData, PrimaryVehicle.ArchitectureID);
result.DriverData = DriverData;
result.VehicleData.VehicleClass = _segment.VehicleClass;
......
......@@ -70,7 +70,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
GearboxData = DataAdapter.CreateGearboxData(
vehicle, new VectoRunData() { EngineData = EngineData, AxleGearData = AxlegearData, VehicleData = tempVehicle },
null);
RetarderData = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData);
RetarderData = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData, vehicle.ArchitectureID);
//PTOTransmissionData =
// DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData);
......
......@@ -105,7 +105,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
GearboxData = DataAdapter.CreateGearboxData(
vehicle, new VectoRunData() { EngineData = EngineData, AxleGearData = AxlegearData, VehicleData = tempVehicle },
null);
RetarderData = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData);
RetarderData = DataAdapter.CreateRetarderData(vehicle.Components.RetarderInputData, vehicle.ArchitectureID);
PTOTransmissionData =
DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData, vehicle.Components.GearboxInputData);
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Moq;
using NUnit.Framework;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
using TUGraz.VectoCore.Models.SimulationComponent.Impl;
namespace TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter
{
[TestFixture]
internal class RetarderDataAdapterTest
{
private RetarderDataAdapter _retarderDataAdapter;
[SetUp]
public void Setup()
{
_retarderDataAdapter = new RetarderDataAdapter();
}
[Test]
[Combinatorial]
public void TestTypeApplicableToArchP_HEV([Values]RetarderType retarderType, [Values(ArchitectureID.P1, ArchitectureID.P2, ArchitectureID.P2_5, ArchitectureID.P3, ArchitectureID.P4, ArchitectureID.P_IHPC)]ArchitectureID archID)
{
var retarderMoq = RetarderMoq(retarderType);
var shouldWork = P_HEVRetarderShouldWork(retarderType, archID);
CreateRetarderData(archID, shouldWork, retarderMoq);
}
[Test]
[Combinatorial]
public void TestTypeApplicableToArchS_HEV([Values] RetarderType retarderType,
[Values(ArchitectureID.S_IEPC, ArchitectureID.S2, ArchitectureID.S3, ArchitectureID.S4)]
ArchitectureID archID)
{
var retarderMoq = RetarderMoq(retarderType);
var shouldWork = S_HEVRetarderShouldWork(retarderType, archID);
CreateRetarderData(archID, shouldWork, retarderMoq);
}
[Test]
[Combinatorial]
public void TestTypeApplicableToArchPEV([Values] RetarderType retarderType,
[Values(ArchitectureID.E2, ArchitectureID.E3, ArchitectureID.E4)]
ArchitectureID archID)
{
var retarderMoq = RetarderMoq(retarderType);
var shouldWork = PEVRetarderShouldWork(retarderType, archID);
CreateRetarderData(archID, shouldWork, retarderMoq);
}
[Test]
[Combinatorial]
public void TestTypeApplicableToArch_IEPC_E([Values] RetarderType retarderType,
[Values]bool differentialIncluded, [Values]bool designTypeWheelMotor)
{
var retarderMoq = RetarderMoq(retarderType);
var iepcMoq = IEPCMoq(differentialIncluded, designTypeWheelMotor);
var shouldWork = IEPCShouldWork(retarderType, differentialIncluded, designTypeWheelMotor);
CreateRetarderData(ArchitectureID.E_IEPC, shouldWork, retarderMoq);
}
private void CreateRetarderData(ArchitectureID archID, bool shouldWork, Mock<IRetarderInputData> retarderMoq)
{
if (shouldWork) {
TestContext.Progress.WriteLine("Should work");
var data = _retarderDataAdapter.CreateRetarderData(retarderMoq.Object, archID);
Assert.NotNull(data, "Should work");
} else {
Assert.Throws<VectoException>((() => { _retarderDataAdapter.CreateRetarderData(retarderMoq.Object, archID); }), "Should not work - but does!");
TestContext.Progress.WriteLine("Doesnt work");
}
}
private bool PEVRetarderShouldWork(RetarderType retarderType, ArchitectureID archId)
{
if (retarderType == RetarderType.None)
{
return true;
}
var s_hev_supported_types = new Dictionary<ArchitectureID, HashSet<RetarderType>>() {
{ ArchitectureID.E2,
new HashSet<RetarderType>() {
RetarderType.LossesIncludedInTransmission,
RetarderType.TransmissionInputRetarder,
RetarderType.TransmissionOutputRetarder,
}},
{ ArchitectureID.E3, new HashSet<RetarderType>() {
RetarderType.AxlegearInputRetarder,
}},
{ArchitectureID.E4, new HashSet<RetarderType>()},
};
return s_hev_supported_types.ContainsKey(archId) && s_hev_supported_types[archId].Contains(retarderType);
}
private bool S_HEVRetarderShouldWork(RetarderType retarderType, ArchitectureID archId)
{
if (retarderType == RetarderType.None) {
return true;
}
var s_hev_supported_types = new Dictionary<ArchitectureID, HashSet<RetarderType>>() {
{ ArchitectureID.S2,
new HashSet<RetarderType>() {
RetarderType.LossesIncludedInTransmission,
RetarderType.TransmissionInputRetarder,
RetarderType.TransmissionOutputRetarder,
}},
{ ArchitectureID.S3, new HashSet<RetarderType>() {
RetarderType.AxlegearInputRetarder,
}},
{ArchitectureID.S4, new HashSet<RetarderType>()},
{ ArchitectureID.S_IEPC , new HashSet<RetarderType>() {
RetarderType.AxlegearInputRetarder,
RetarderType.LossesIncludedInTransmission
}}
};
return s_hev_supported_types.ContainsKey(archId) && s_hev_supported_types[archId].Contains(retarderType);
}
public bool P_HEVRetarderShouldWork(RetarderType type, ArchitectureID arch)
{
if (type == RetarderType.TransmissionInputRetarder && arch == ArchitectureID.P_IHPC) {
return false;
}
if (type != RetarderType.AxlegearInputRetarder) {
return true;
}
return false;
}
//bool DifferentialIncluded { get; }
//bool DesignTypeWheelMotor { get; }
//int? NrOfDesignTypeWheelMotorMeasured { get; }
public bool IEPCShouldWork(RetarderType retarderType, bool differentialIncluded, bool DesignTypeWheelMotor)
{
if (DesignTypeWheelMotor) {
//This property "wins"!
return false;
}
if (retarderType == RetarderType.LossesIncludedInTransmission) {
return true;
}
if (retarderType == RetarderType.AxlegearInputRetarder && !differentialIncluded) {
return true;
}
return false;
}
private Mock<IRetarderInputData> RetarderMoq(RetarderType retarderType)
{
var retarderMoq = new Mock<IRetarderInputData>();
retarderMoq.Setup(m => m.Type).Returns(retarderType);
retarderMoq.Setup(m => m.LossMap).Returns(MockLossMap());
return retarderMoq;
}
TableData MockLossMap()
{
var tableData = new TableData("Mock")
{
Columns = { "c_1", "c_2" }
};
for (int i = 0; i < 2; i++)
{
var row = tableData.NewRow();
row[0] = 3.0;
row[1] = 42.0;
tableData.Rows.Add(row);
}
return tableData;
}
private Mock<IIEPCDeclarationInputData> IEPCMoq(bool differentialIncluded, bool designTypeWheelMotor)
{
var iepcMoq = new Mock<IIEPCDeclarationInputData>();
iepcMoq.SetupGet(m => m.DesignTypeWheelMotor).Returns(designTypeWheelMotor);
iepcMoq.SetupGet(m => m.DifferentialIncluded).Returns(differentialIncluded);
return iepcMoq;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment