diff --git a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs index a56c9cade93e42ce4b591a80f36d507b9c486b89..378cefc69598c6aa0607fd72a638d3d8f05e067e 100644 --- a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs +++ b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs @@ -18,7 +18,7 @@ namespace TUGraz.VectoCommon.InputData { BatteryElectricE4, BatteryElectricE3, BatteryElectricE2, - Generator + } public static class PowertrainPositionHelper diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index d2464bf61cfe163e07df4be19075c9b6b2e7b9fe..406c88de0aeff494daa42ead97e3cefc8f25c519 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -703,7 +703,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var ctl = new SimpleHybridController(container, es); - var pos = data.ElectricMachinesData.Select(x => x.Item1).First(x => x != PowertrainPosition.Generator); + var pos = data.ElectricMachinesData.Select(x => x.Item1).First(x => x != PowertrainPosition.GEN); var vehicle = new Vehicle(container, data.VehicleData, data.AirdragData); var powertrain = vehicle @@ -779,7 +779,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl //var ctl = new SimpleHybridController(container, es); var ctl = new GensetMotorController(container, es); - var genSet = GetElectricMachine(PowertrainPosition.Generator, data.ElectricMachinesData, container, es, ctl) + var genSet = GetElectricMachine(PowertrainPosition.GEN, data.ElectricMachinesData, container, es, ctl) .AddComponent(new StopStartCombustionEngine(container, data.EngineData)); new ATClutchInfo(container); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs index 27ea9d711b7b819cfb60d564d155131799534193..5187049328680ca1d04dc739e246368537428ae7 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs @@ -298,7 +298,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } - if (Position == PowertrainPosition.Generator && emOff && !DataBus.EngineCtl.CombustionEngineOn) { + if (Position == PowertrainPosition.GEN && emOff && !DataBus.EngineCtl.CombustionEngineOn) { emTorqueDt = 0.SI<NewtonMeter>(); } var inTorqueDt = outTorque + emTorqueDt; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/SerialHybridController.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SerialHybridController.cs index 98c7bf2139b64b7e4ee0c8bd8dfbb645dc4a7918..2318a8ca84e9ece210ad7e05a718a9ad2cf01351 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/SerialHybridController.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SerialHybridController.cs @@ -111,7 +111,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl // } //} - var gensetResponse = GenSetPort.Request(absTime, dt, 0.SI<NewtonMeter>(), _electricMotorTorque[PowertrainPosition.Generator].Item1, dryRun); + var gensetResponse = GenSetPort.Request(absTime, dt, 0.SI<NewtonMeter>(), _electricMotorTorque[PowertrainPosition.GEN].Item1, dryRun); if (!(gensetResponse is ResponseSuccess || gensetResponse is ResponseDryRun)) { throw new VectoException("Invalid operating point for Genset provided by strategy! {0}", gensetResponse); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs index d59ac9aefc691246e420c6f661fb860be0b82e30..f910fa535413d41bf50afa4c4151199798964654 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs @@ -101,7 +101,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (DataBus.PowertrainInfo.HasElectricMotor) { - var positions = DataBus.PowertrainInfo.ElectricMotorPositions.Where(x => x != PowertrainPosition.Generator).ToArray(); + var positions = DataBus.PowertrainInfo.ElectricMotorPositions.Where(x => x != PowertrainPosition.GEN).ToArray(); ; if (positions.Length > 1) { throw new VectoException("Multiple electrical machines are currently not supported"); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs index fbbeb321cf482dedb2ac6945d6793f3bb6b9273d..8a14331f40a5ff94f10564f3f2923135fef2e2de 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs @@ -43,7 +43,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies public override IHybridStrategyResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity) { EmPosition = DataBus.PowertrainInfo.ElectricMotorPositions.FirstOrDefault(x => - x != PowertrainPosition.Generator); + x != PowertrainPosition.GEN); var retVal = new HybridStrategyResponse() { MechanicalAssistPower = new Dictionary<PowertrainPosition, Tuple<PerSecond, NewtonMeter>>() }; @@ -53,7 +53,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } GenSetCharacteristics.ContinuousTorque = - (DataBus.ElectricMotorInfo(PowertrainPosition.Generator) as ElectricMotor).ContinuousTorque; + (DataBus.ElectricMotorInfo(PowertrainPosition.GEN) as ElectricMotor).ContinuousTorque; PreviousState.AngularVelocity = outAngularVelocity; PreviousState.GearboxEngaged = true; @@ -135,7 +135,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies emTorque = GetMechanicalAllsistPower(absTime, dt, emResponse.TorqueRequest, emResponse, emResponse.AngularVelocity /* potentially not correct! */); break; case StateMachineState.Acc_S1: - var optimalPoint = DataBus.ElectricMotorInfo(PowertrainPosition.Generator).DeRatingActive ? + var optimalPoint = DataBus.ElectricMotorInfo(PowertrainPosition.GEN).DeRatingActive ? GenSetCharacteristics.OptimalPointDeRated : GenSetCharacteristics.OptimalPoint; genSetOperatingPoint = ApproachGensetOperatingPoint(absTime, dt, optimalPoint); @@ -189,7 +189,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies EmPosition, Tuple.Create(drivetrainDemand.AvgEmDrivetrainSpeed, emTorque) }, { - PowertrainPosition.Generator, + PowertrainPosition.GEN, Tuple.Create(genSetOperatingPoint.ICESpeed, genSetOperatingPoint.ICETorque) }, } @@ -237,7 +237,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies return StateMachineState.Acc_S3; } - var optimalGensetPoint = DataBus.ElectricMotorInfo(PowertrainPosition.Generator).DeRatingActive + var optimalGensetPoint = DataBus.ElectricMotorInfo(PowertrainPosition.GEN).DeRatingActive ? GenSetCharacteristics.OptimalPointDeRated : GenSetCharacteristics.OptimalPoint; switch (PreviousState.SMState) { @@ -336,7 +336,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies { DataBus = container; ModelData = runData; - if (ModelData.ElectricMachinesData.Select(x => x.Item1).Where(x => x != PowertrainPosition.Generator).Distinct().Count() > 1) { + if (ModelData.ElectricMachinesData.Select(x => x.Item1).Where(x => x != PowertrainPosition.GEN).Distinct().Count() > 1) { throw new VectoException("More than one electric motors are currently not supported"); } StrategyParameters = ModelData.HybridStrategyParameters; @@ -364,7 +364,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies container.AddPreprocessor(new GensetPreprocessor(GenSetCharacteristics ,TestGenSet, runData.EngineData, - runData.ElectricMachinesData.FirstOrDefault(x => x.Item1 == PowertrainPosition.Generator)?.Item2)); + runData.ElectricMachinesData.FirstOrDefault(x => x.Item1 == PowertrainPosition.GEN)?.Item2)); } #region Implementation of IHybridControlStrategy @@ -375,7 +375,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies { var electricPowerDemand = drivetrainDemand.ElectricPowerDemand; - var gensetLimit = DataBus.ElectricMotorInfo(PowertrainPosition.Generator).DeRatingActive + var gensetLimit = DataBus.ElectricMotorInfo(PowertrainPosition.GEN).DeRatingActive ? GenSetCharacteristics.MaxPowerDeRated : GenSetCharacteristics.MaxPower; if (maxPowerGenset.ElectricPower.IsSmaller(gensetLimit.ElectricPower)) { @@ -474,7 +474,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies protected GenSetOperatingPoint GetMaxElectricPowerGenerated(Second absTime, Second dt) { - var genDerated = DataBus.ElectricMotorInfo(PowertrainPosition.Generator).DeRatingActive; + var genDerated = DataBus.ElectricMotorInfo(PowertrainPosition.GEN).DeRatingActive; return ApproachGensetOperatingPoint(absTime, dt, genDerated ? GenSetCharacteristics.MaxPowerDeRated : GenSetCharacteristics.MaxPower); } @@ -517,9 +517,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies break; } TestGenSet.ElectricMotor.ThermalBuffer = - (DataBus.ElectricMotorInfo(PowertrainPosition.Generator) as ElectricMotor).ThermalBuffer; + (DataBus.ElectricMotorInfo(PowertrainPosition.GEN) as ElectricMotor).ThermalBuffer; TestGenSet.ElectricMotor.DeRatingActive = - (DataBus.ElectricMotorInfo(PowertrainPosition.Generator) as ElectricMotor).DeRatingActive; + (DataBus.ElectricMotorInfo(PowertrainPosition.GEN) as ElectricMotor).DeRatingActive; var iceSpeed = op.ICESpeed; var emTqDt = op.ICETorque; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs index 45011d3dcacf8c0214b26894d33adccbd209a3c8..3c88358aae90d30b7fe262d844017c6a49417b10 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs @@ -26,7 +26,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies { Container = container; CombustionEngine = Container.EngineInfo as StopStartCombustionEngine; - ElectricMotor = container.ElectricMotors.FirstOrDefault(x => x.Key == PowertrainPosition.Generator).Value as ElectricMotor; + ElectricMotor = container.ElectricMotors.FirstOrDefault(x => x.Key == PowertrainPosition.GEN).Value as ElectricMotor; ElectricMotorCtl = ElectricMotor.Control as GensetMotorController; } } diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs index 7687c6c80ce98b1ddd64df8975a86524e4786f97..1bcd37e3a6e84891061074ad23f5a61a8a38662e 100644 --- a/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs @@ -8,11 +8,14 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.FileIO.JSON; using TUGraz.VectoCore.InputData.Impl; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory; using TUGraz.VectoCore.Models.SimulationComponent; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; @@ -227,25 +230,25 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid // ================================================= [ - TestCase(30, 0.7, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.7, level"), - TestCase(50, 0.7, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 50km/h SoC: 0.7, level"), - TestCase(80, 0.7, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 80km/h SoC: 0.7, level"), + TestCase(30, 0.7, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.7, level"), + TestCase(50, 0.7, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 50km/h SoC: 0.7, level"), + TestCase(80, 0.7, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 80km/h SoC: 0.7, level"), - TestCase(30, 0.25, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.25, level"), - TestCase(50, 0.25, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 50km/h SoC: 0.25, level"), - TestCase(80, 0.25, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 80km/h SoC: 0.25, level"), + TestCase(30, 0.25, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.25, level"), + TestCase(50, 0.25, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 50km/h SoC: 0.25, level"), + TestCase(80, 0.25, 0, 0, TestName = "S4 Serial Hybrid ConstantSpeed 80km/h SoC: 0.25, level"), - TestCase(30, 0.5, 5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.5, UH 5%"), - TestCase(50, 0.5, 5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 50km/h SoC: 0.5, UH 5%"), - TestCase(80, 0.5, 5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 80km/h SoC: 0.5, UH 5%"), + TestCase(30, 0.5, 5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.5, UH 5%"), + TestCase(50, 0.5, 5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 50km/h SoC: 0.5, UH 5%"), + TestCase(80, 0.5, 5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 80km/h SoC: 0.5, UH 5%"), - TestCase(30, 0.5, -5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.5, DH 5%"), - TestCase(50, 0.5, -5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 50km/h SoC: 0.5, DH 5%"), - TestCase(80, 0.5, -5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 80km/h SoC: 0.5, DH 5%"), + TestCase(30, 0.5, -5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.5, DH 5%"), + TestCase(50, 0.5, -5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 50km/h SoC: 0.5, DH 5%"), + TestCase(80, 0.5, -5, 0, TestName = "S4 Serial Hybrid ConstantSpeed 80km/h SoC: 0.5, DH 5%"), - TestCase(30, 0.25, 0, 1000, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 1kW"), - TestCase(30, 0.25, 0, 5000, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 5kW"), -] + TestCase(30, 0.25, 0, 1000, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 1kW"), + TestCase(30, 0.25, 0, 5000, TestName = "S4 Serial Hybrid ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 5kW"), + ] public void S4HybridConstantSpeed(double vmax, double initialSoC, double slope, double pAuxEl) { var cycleData = string.Format( @@ -397,6 +400,48 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid + // ================================================= + + [TestCase(@"TestData\Hybrids\GenericVehicle_Sx_Job\SerialHybrid_S4.vecto", 0, TestName = "Generic Serial Hybrid S4 Job, LongHaul")] + public void S4SerialHybridJob(string jobFile, int runIdx) + { + RunHybridJob(jobFile, runIdx); + } + + private void RunHybridJob(string jobFile, int runIdx, int? startDistance = null) + { + var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile); + + var writer = new FileOutputWriter(jobFile); + var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputProvider, writer); + factory.Validate = false; + factory.WriteModalResults = true; + + var sumContainer = new SummaryDataContainer(writer); + var jobContainer = new JobContainer(sumContainer); + + factory.SumData = sumContainer; + + var run = factory.SimulationRuns().ToArray()[runIdx]; + + if (startDistance != null) { + //(run.GetContainer().BatteryInfo as Battery).PreviousState.StateOfCharge = 0.317781; + (run.GetContainer().RunData.Cycle as DrivingCycleProxy).Entries = run.GetContainer().RunData.Cycle + .Entries.Where(x => x.Distance >= startDistance.Value).ToList(); + //run.GetContainer().MileageCounter.Distance = startDistance; + //run.GetContainer().DrivingCycleInfo.CycleStartDistance = startDistance; + } + + Assert.NotNull(run); + + var pt = run.GetContainer(); + + Assert.NotNull(pt); + + run.Run(); + Assert.IsTrue(run.FinishedWithoutErrors); + } + // ================================================= public static JobContainer CreateEngineeringRun(DrivingCycleData cycleData, string modFileName, @@ -433,7 +478,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid var genFile = GeneratorFile; electricMotorData.AddRange( - MockSimulationDataFactory.CreateElectricMotorData(genFile, 1, PowertrainPosition.Generator, 2.6, 1)); + MockSimulationDataFactory.CreateElectricMotorData(genFile, 1, PowertrainPosition.GEN, 2.6, 1)); var batFile = BatFile; var batteryData = MockSimulationDataFactory.CreateBatteryData(batFile, initialBatCharge); @@ -558,7 +603,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid throw new ArgumentOutOfRangeException(nameof(pos), pos, null); } - ctl.GenSet.AddComponent(GetElectricMachine(PowertrainPosition.Generator, runData.ElectricMachinesData, container, + ctl.GenSet.AddComponent(GetElectricMachine(PowertrainPosition.GEN, runData.ElectricMachinesData, container, es, ctl)) .AddComponent(engine, idleController) .AddAuxiliaries(container, runData); @@ -649,7 +694,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid container.ModData.AddElectricMotor(pos); ctl.AddElectricMotor(pos, motorData.Item2); var motor = new ElectricMotor(container, motorData.Item2, ctl.ElectricMotorControl(pos), pos); - if (pos == PowertrainPosition.Generator) { + if (pos == PowertrainPosition.GEN) { es.Connect(new GensetChargerAdapter(motor)); } else { motor.Connect(es); diff --git a/VectoCore/VectoCoreTest/TestData/Integration/ADAS-HEV/Group5PCCEng/Class5_P25_PCC123EcoRollEngineStop.vveh b/VectoCore/VectoCoreTest/TestData/Integration/ADAS-HEV/Group5PCCEng/Class5_P25_PCC123EcoRollEngineStop.vveh index bef381c8d63a451a678c317ca760f78d5b466f76..5b38a20ff6d694904d980e790d638aa146bb60cf 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/ADAS-HEV/Group5PCCEng/Class5_P25_PCC123EcoRollEngineStop.vveh +++ b/VectoCore/VectoCoreTest/TestData/Integration/ADAS-HEV/Group5PCCEng/Class5_P25_PCC123EcoRollEngineStop.vveh @@ -100,7 +100,7 @@ "Position": "P2.5", "MotorFile": "GenericEMotor_140kW_936Nm.vem", "MechanicalEfficiency": 1.0, - "RatioPerGear": [ 1.0259, 0.8125, 1.0259, 0.8125, 1.0259, 0.8125, 1.0259, 0.8125, 1.0259, 0.8125, 1.0259, 0.8125 ], + "RatioPerGear": [ 1.0259, 0.8125, 1.0259, 0.8125, 1.0259, 0.8125, 1.0259, 0.8125, 1.0259, 0.8125, 1.0259, 0.8125 ] } ], "Batteries": [ diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index d6b86607419097f0cd7c1b9741b9870b631361e0..7e0b0d9e94f57365e4e925b2f0de54966c88bdd2 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -2030,6 +2030,60 @@ <None Include="TestData\Hybrids\GenericVehicle_Sx\Urban.vdri"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\209kW_7c7l.veng"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\209kW_ICE_fld.vfld"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\209kW_ICE_Map.vmap"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\EM_drag.vemd"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\EM_fld.vemp"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\EM_Map.vemo"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\GenericBattery.vbatr"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\GenericBattery.vreess"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\GenericEM.vem"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\GenericGen.vem"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\Gen_drag.vemd"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\Gen_fld.vemp"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\Gen_Map.vemo"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\MaxCurrent.vimax"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\REESS_SOC_curve.vbatv"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\SerialHybrid_S4.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\SerialHybrid_S4.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\GenericVehicle_Sx_Job\Truck.vacc"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\175kW.vfld"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None>