diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 50c83e932ae8d57d09a891b20b1742b132e29b02..5a58c9925b2ea11bd4beac456c9060497791efec 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -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 diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs index 995657d34f499d09c251757d5aeae66d910c89e2..b1d3dc264cd8cf38d11acdc7aad9c290c903a575 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs @@ -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, diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs index 050fb5131fe1b047906568ca3a0d109e22f8a2bf..e4e8201281fa09cd9b75f27985b14745fe50598f 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs @@ -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) diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs index 708d2bea47cdcd628ee100b8ed066be136a4c7d0..cad675364b627272d250e7e989eea2aba07b744e 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs @@ -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); diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs index c5009da17ccad4ea863366b2766caf121f67a069..881efce570b3e54386fc3d9d4b7baa3fd879e4fd 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs @@ -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); } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs index 752d41eebb4dc634a95f9288b148f560cd1350b1..7992176204012ef512ea2e5230182f4fcf77a66f 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs @@ -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 diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs index 32521cfccf78504722b23f908cde10d009933d46..8d5aeb42ee3767f4fe02ee54661322a8f52ce800 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs @@ -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); } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs index 80e86ff70b9ba9e2ab56ea526d5ed2accb429cb9..8321b1a078a80109dedfd2482039d929bb205ad1 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs @@ -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) diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs index 91c90bde955d236339a504a737c96732495343dd..1a348ac91e8195a7496ba415ecfe84b6880c20d4 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs @@ -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; diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs index 91db54397b4ec100a0bf0a4c19149e9f14c43e8d..2fece9f79c53d2570011b30475d9a138f68a553b 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs @@ -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); diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs index 26b1f6d8a8bf9537e2e825b5e837edcd956549da..a9b9070b168a59e0cfb491466807d8d1324a758b 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs @@ -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); diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs index c57b849d2ed35b391d67fcc7d2e79ce13f85c370..9e8c75f8eb0df9e38df8f526244f14fc08ed6ea6 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs @@ -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; diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs index e00a87601051c0ae69a03f5e834838d5969695eb..47f6b3f70c5edf22159a7b12b86446df79ba8d29 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/SingleBus/DeclarationModeSingleBusVectoRunDataFactory.cs @@ -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; diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs index 9462bba0acd889d281f037f5be8634fd990f5ebe..8868836b34bb19e2b76c83d7a0736f33e29dccff 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs @@ -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); diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs index e78425531873458f19eb82c2e2a55b6abb29fb0b..3a063422cfa13710ae13afadc9e549454230fbec 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs @@ -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); diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/RetarderDataAdapterTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/RetarderDataAdapterTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..bed3af2eee73bd010fb28f81c186a8450af6e7dd --- /dev/null +++ b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/RetarderDataAdapterTest.cs @@ -0,0 +1,230 @@ +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; + } + + } +}