diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index dda9b5f9dd23ce6a4d4953f496d9e3a03e049557..47c75e8435fa7af39f7f5fa4a841ebb75ffbbb71 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -642,13 +642,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl if (data.ElectricMachinesData.Count > 1) { throw new VectoException("Electric motors on multiple positions not supported"); } - - var container = new VehicleContainer(data.ExecutionMode, _modData, _sumWriter) { RunData = data }; - if (data.BatteryData != null && data.SuperCapData != null) { throw new VectoException("Only one REESS is supported."); } + var container = new VehicleContainer(data.ExecutionMode, _modData, _sumWriter) { RunData = data }; var es = new ElectricSystem(container); if (data.BatteryData != null) { @@ -673,56 +671,50 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var powertrain = cycle .AddComponent(new Driver(container, data.DriverData, new DefaultDriverStrategy(container))) .AddComponent(new Vehicle(container, data.VehicleData, data.AirdragData)) - .AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, - data.VehicleData.WheelsInertia)) + .AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia)) .AddComponent(new Brakes(container)); var pos = data.ElectricMachinesData.First().Item1; IElectricMotor em; switch (pos) { - case PowertrainPosition.HybridPositionNotSet: - throw new VectoException("invalid powertrain position"); - case PowertrainPosition.HybridP0: - case PowertrainPosition.HybridP1: - case PowertrainPosition.HybridP2: - case PowertrainPosition.HybridP3: - case PowertrainPosition.HybridP4: - throw new VectoException("BatteryElectric Vehicle does not support parallel powertrain configurations"); case PowertrainPosition.BatteryElectricE4: + //-->Engine E4 em = GetElectricMachine(PowertrainPosition.BatteryElectricE4, data.ElectricMachinesData, container, es, ctl); powertrain.AddComponent(em); new DummyGearboxInfo(container); new DummyAxleGearInfo(container); new ATClutchInfo(container); break; + case PowertrainPosition.BatteryElectricE3: + //-->AxleGear-->Engine E3 em = GetElectricMachine(PowertrainPosition.BatteryElectricE3, data.ElectricMachinesData, container, es, ctl); powertrain.AddComponent(new AxleGear(container, data.AxleGearData)) .AddComponent(em); new DummyGearboxInfo(container); new ATClutchInfo(container); break; - case PowertrainPosition.BatteryElectricE2 when data.GearboxData.Type != GearboxType.APTN: - var strategy = new PEVAMTShiftStrategy(container); - em = GetElectricMachine(PowertrainPosition.BatteryElectricE2, data.ElectricMachinesData, - container, es, ctl); - powertrain.AddComponent(new AxleGear(container, data.AxleGearData)) - .AddComponent(new PEVGearbox(container, strategy)) - .AddComponent(em); - new ATClutchInfo(container); - break; - case PowertrainPosition.BatteryElectricE2 when data.GearboxData.Type == GearboxType.APTN: - var strategyAPTN = new APTNShiftStrategy(container); - em = GetElectricMachine(PowertrainPosition.BatteryElectricE2, data.ElectricMachinesData, - container, es, ctl); - powertrain.AddComponent(new AxleGear(container, data.AxleGearData)) - .AddComponent(new APTNGearbox(container, strategyAPTN)) - .AddComponent(em); + case PowertrainPosition.BatteryElectricE2: + //-->AxleGear-->APTNGearbox or PEVGearbox-->Engine E2 + powertrain = powertrain.AddComponent(new AxleGear(container, data.AxleGearData)); + + Gearbox gearbox; + if (data.GearboxData.Type == GearboxType.APTN) { + gearbox = new APTNGearbox(container, new APTNShiftStrategy(container)); + } else { + gearbox = new PEVGearbox(container, new PEVAMTShiftStrategy(container)); + } + powertrain = powertrain.AddComponent(gearbox); + + em = GetElectricMachine(PowertrainPosition.BatteryElectricE2, data.ElectricMachinesData, container, es, ctl); + powertrain.AddComponent(em); + new ATClutchInfo(container); break; - default: throw new ArgumentOutOfRangeException(nameof(pos), pos, null); + default: + throw new ArgumentOutOfRangeException(nameof(pos), pos, "Invalid engine powertrain position for BatteryElectric Vehicle"); } new DummyEngineInfo(container); @@ -733,14 +725,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } var auxCfg = data.BusAuxiliaries; - var busAux = new BusAuxiliariesAdapter(container, auxCfg); - var electricStorage = new NoBattery(container); busAux.ElectricStorage = electricStorage; - - var dcdc = new DCDCConverter(container, - data.BusAuxiliaries.ElectricalUserInputsConfig.DCDCEfficiency); + var dcdc = new DCDCConverter(container, data.BusAuxiliaries.ElectricalUserInputsConfig.DCDCEfficiency); busAux.DCDCConverter = dcdc; es.Connect(dcdc); em.BusAux = busAux;