diff --git a/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AAuxTests.cs b/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AAuxTests.cs index 4f17a888a4209b5ca3631c226a4d28ef99817a46..315945fad239c327c0d82b9f21ec7e37af358597 100644 --- a/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AAuxTests.cs +++ b/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AAuxTests.cs @@ -117,12 +117,12 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries } [Category("ComparisonAAUX"), - TestCase(40, 0, 25), TestCase(40, 0, 20), TestCase(40, 0, 15), + TestCase(40, 0, 20), TestCase(40, 0, 15), TestCase(40, 0, 10), TestCase(40, 0, 5), TestCase(40, 0, 1), TestCase(40, 0, 0), TestCase(40, 0, -1), TestCase(40, 0, -5), TestCase(40, 0, -10), TestCase(40, 0, -15), TestCase(40, 0, -20), TestCase(40, 0, -25), - TestCase(60, 0, 25), TestCase(60, 0, 20), TestCase(60, 0, 15), + TestCase(60, 0, 20), TestCase(60, 0, 15), TestCase(60, 0, 10), TestCase(60, 0, 5), TestCase(60, 0, 1), TestCase(60, 0, 0), TestCase(60, 0, -1), TestCase(60, 0, -5), TestCase(60, 0, -10), @@ -132,7 +132,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries TestCase(85, 0, 0), TestCase(85, 0, -1), TestCase(85, 0, -5), TestCase(85, 0, -10), TestCase(85, 0, -15), TestCase(85, 0, -20), TestCase(85, 0, -25), - TestCase(80, 0, 3), TestCase(80, 0, 5), TestCase(80, 0, 15), TestCase(80, 0, 25), + TestCase(80, 0, 3), TestCase(80, 0, 5), TestCase(80, 0, 15), TestCase(22, 20, -5), ] public void Coach_Decelerate_AAux(double v1, double v2, double slope) @@ -148,7 +148,24 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries } [Category("ComparisonAAUX"), - TestCase(10, 10, 25), TestCase(10, 10, 20), TestCase(10, 10, 15), + TestCase(40, 0, 25), + TestCase(60, 0, 25), + TestCase(80, 0, 25)] + public void Coach_Decelerate_AAux_Low(double v1, double v2, double slope) + { + var cycle = string.Format(CultureInfo.InvariantCulture, "0, {0}, {1}, {2}\n1000, {3}, {4}, {5}", v1, slope, + v1.IsEqual(0) ? 2 : 0, v2, slope, v2.IsEqual(0) ? 2 : 0); + + var slopeStr = GetSlopeString(slope); + var modFileName = string.Format(CultureInfo.InvariantCulture, @"Coach_{0}_{1}_{2}.vmod", v1, v2, slopeStr); + + Coach_BusAuxiliaries(cycle, modFileName, + string.Format(CultureInfo.InvariantCulture, "24t Coach_AAux_Cycle_Decelerate_{0}_{1}_{2}.vmod", v1, v2, slopeStr), + false); + } + + [Category("ComparisonAAUX"), + TestCase(10, 10, 20), TestCase(10, 10, 15), TestCase(10, 10, 10), TestCase(10, 10, 5), TestCase(10, 10, 1), TestCase(10, 10, 0), TestCase(10, 10, -1), TestCase(10, 10, -5), TestCase(10, 10, -10), @@ -163,7 +180,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries TestCase(30, 30, 0), TestCase(30, 30, -1), TestCase(30, 30, -5), TestCase(30, 30, -10), TestCase(30, 30, -15), TestCase(30, 30, -20), TestCase(30, 30, -25), - TestCase(40, 40, 25), TestCase(40, 40, 20), TestCase(40, 40, 15), + TestCase(40, 40, 20), TestCase(40, 40, 15), TestCase(40, 40, 10), TestCase(40, 40, 5), TestCase(40, 40, 1), TestCase(40, 40, 0), TestCase(40, 40, -1), TestCase(40, 40, -5), TestCase(40, 40, -10), @@ -173,12 +190,12 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries TestCase(50, 50, 0), TestCase(50, 50, -1), TestCase(50, 50, -5), TestCase(50, 50, -10), TestCase(50, 50, -15), TestCase(50, 50, -20), TestCase(50, 50, -25), - TestCase(60, 60, 25), TestCase(60, 60, 20), TestCase(60, 60, 15), + TestCase(60, 60, 20), TestCase(60, 60, 15), TestCase(60, 60, 10), TestCase(60, 60, 5), TestCase(60, 60, 1), TestCase(60, 60, 0), TestCase(60, 60, -1), TestCase(60, 60, -5), TestCase(60, 60, -10), TestCase(60, 60, -15), TestCase(60, 60, -20), TestCase(60, 60, -25), - TestCase(80, 80, 25), TestCase(80, 80, 20), TestCase(80, 80, 15), + TestCase(80, 80, 20), TestCase(80, 80, 15), TestCase(80, 80, 10), TestCase(80, 80, 5), TestCase(80, 80, 1), TestCase(80, 80, 0), TestCase(80, 80, -1), TestCase(80, 80, -5), TestCase(80, 80, -10), @@ -201,6 +218,25 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries string.Format(CultureInfo.InvariantCulture, "24t Coach_AAux_Cycle_Drive_{0}_{1}_{2}.vmod", v1, v2, slopeStr)); } + [Category("ComparisonAAUX"), + TestCase(10, 10, 25), + TestCase(40, 40, 25), + TestCase(60, 60, 25), + TestCase(80, 80, 25), + ] + public void Coach_Drive_AAux_Low(double v1, double v2, double slope) + { + var cycle = string.Format(CultureInfo.InvariantCulture, "0, {0}, {1}, {2}\n1000, {3}, {4}, {5}", v1, slope, + v1.IsEqual(0) ? 2 : 0, v2, slope, v2.IsEqual(0) ? 2 : 0); + + var slopeStr = GetSlopeString(slope); + var modFileName = string.Format(CultureInfo.InvariantCulture, @"Coach_{0}_{1}_{2}.vmod", v1, v2, slopeStr); + + Coach_BusAuxiliaries(cycle, modFileName, + string.Format(CultureInfo.InvariantCulture, "24t Coach_AAux_Cycle_Drive_{0}_{1}_{2}.vmod", v1, v2, slopeStr), + false); + } + [Category("ComparisonAAUX"), TestCase(SimpleDrivingCycles.CycleDrive_80_Increasing_Slope, "Coach_AAux_Drive_80_slope_inc.vmod", "24t Coach_AAux_Cycle_Drive_80_Increasing_Slope.vmod", @@ -246,10 +282,16 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries "Coach_AAux_Drive_stop_85_stop_85_level.vmod", "24t Coach_AAux_Cycle_Drive_stop_85_stop_85_level.vmod", TestName = "CoachBusAux CycleDrive_stop_85_stop_85_level"), ] - public void Coach_BusAuxiliaries(string cycleData, string modFileName, string compareFileName) + public void Coach_AAux_Special(string cycleData, string modFileName, string compareFileName) + { + Coach_BusAuxiliaries(cycleData, modFileName, compareFileName); + } + + private void Coach_BusAuxiliaries(string cycleData, string modFileName, string compareFileName, + bool highEnginePower = true) { var cycle = SimpleDrivingCycles.CreateCycleData(cycleData); - var run = CoachAdvancedAuxPowertrain.CreateEngineeringRun(cycle, modFileName); + var run = CoachAdvancedAuxPowertrain.CreateEngineeringRun(cycle, modFileName, highEnginePower: highEnginePower); run.Run(); Assert.IsTrue(run.FinishedWithoutErrors); diff --git a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs index 8d6587d16dac4abaf6aa8b6f6b32e741fedc77c6..7053d13658f4a399028c36b51cafe91e65e08109 100644 --- a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs +++ b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs @@ -54,6 +54,7 @@ namespace TUGraz.VectoCore.Tests.Integration { public const string AccelerationFile = @"TestData\Components\Truck.vacc"; public const string EngineFile = @"TestData\Components\24t Coach.veng"; + public const string EngineFileHigh = @"TestData\Components\24t Coach_high.veng"; public const string AxleGearLossMap = @"TestData\Components\Axle.vtlm"; public const string GearboxIndirectLoss = @"TestData\Components\Indirect Gear.vtlm"; public const string GearboxDirectLoss = @"TestData\Components\Direct Gear.vtlm"; @@ -63,23 +64,23 @@ namespace TUGraz.VectoCore.Tests.Integration public const string AdvancedAuxFile = @"Testdata\Integration\BusAuxiliaries\AdvAuxTest.aaux"; public static VectoRun CreateEngineeringRun(DrivingCycleData cycleData, string modFileName, - bool overspeed = false) + bool overspeed = false, bool highEnginePower = true) { - var container = CreatePowerTrain(cycleData, modFileName.Replace(".vmod", ""), overspeed); + var container = CreatePowerTrain(cycleData, modFileName.Replace(".vmod", ""), overspeed, highEnginePower); return new DistanceRun(container); } - public static VehicleContainer CreatePowerTrain(DrivingCycleData cycleData, string modFileName, - bool overspeed = false) + public static VehicleContainer CreatePowerTrain(DrivingCycleData cycleData, string modFileName, bool overspeed = false, + bool highEnginePower = true) { var fileWriter = new FileOutputWriter(modFileName); - var modData = new ModalDataContainer(modFileName, fileWriter) { WriteAdvancedAux = true }; + var modData = new ModalDataContainer(modFileName, fileWriter) { WriteAdvancedAux = true, WriteModalResults = true }; var container = new VehicleContainer(ExecutionMode.Engineering, modData) { RunData = new VectoRunData { JobName = modFileName, Cycle = cycleData } }; - var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile); + var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(highEnginePower ? EngineFileHigh : EngineFile); var axleGearData = CreateAxleGearData(); var gearboxData = CreateGearboxData(); var vehicleData = CreateVehicleData(3300.SI<Kilogram>()); diff --git a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs index 7e4aac905d1b8a766195b9758449d76db01242e6..1ef7c5b6f672105c82c02c2f9f73c7c5f3192f68 100644 --- a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs +++ b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs @@ -56,6 +56,7 @@ namespace TUGraz.VectoCore.Tests.Integration { public const string AccelerationFile = @"TestData\Components\Truck.vacc"; public const string EngineFile = @"TestData\Components\24t Coach.veng"; + public const string EngineFileHigh = @"TestData\Components\24t Coach_high.veng"; public const string AxleGearLossMap = @"TestData\Components\Axle.vtlm"; public const string GearboxIndirectLoss = @"TestData\Components\Indirect Gear.vtlm"; public const string GearboxDirectLoss = @"TestData\Components\Direct Gear.vtlm"; @@ -63,14 +64,15 @@ namespace TUGraz.VectoCore.Tests.Integration //public const string GearboxFullLoadCurveFile = @"TestData\Components\Gearbox.vfld"; public static VectoRun CreateEngineeringRun(DrivingCycleData cycleData, string modFileName, - bool overspeed = false, KilogramSquareMeter gearBoxInertia = null) + bool overspeed = false, KilogramSquareMeter gearBoxInertia = null, bool highEnginePower = true) { - var container = CreatePowerTrain(cycleData, Path.GetFileNameWithoutExtension(modFileName), overspeed, gearBoxInertia); + var container = CreatePowerTrain(cycleData, Path.GetFileNameWithoutExtension(modFileName), overspeed, gearBoxInertia, + highEnginePower); return new DistanceRun(container); } - public static VehicleContainer CreatePowerTrain(DrivingCycleData cycleData, string modFileName, - bool overspeed = false, KilogramSquareMeter gearBoxInertia = null) + public static VehicleContainer CreatePowerTrain(DrivingCycleData cycleData, string modFileName, bool overspeed = false, + KilogramSquareMeter gearBoxInertia = null, bool engineHighPower = true) { var fileWriter = new FileOutputWriter(modFileName); var modData = new ModalDataContainer(modFileName, fileWriter); @@ -78,7 +80,7 @@ namespace TUGraz.VectoCore.Tests.Integration RunData = new VectoRunData { JobName = modFileName, Cycle = cycleData } }; - var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile); + var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(engineHighPower ? EngineFileHigh : EngineFile); var axleGearData = CreateAxleGearData(); var gearboxData = CreateGearboxData(); if (gearBoxInertia != null) { @@ -117,15 +119,15 @@ namespace TUGraz.VectoCore.Tests.Integration return new GearboxData { Gears = ratios.Select((ratio, i) => - Tuple.Create((uint)i, - new GearData { - //MaxTorque = 2300.SI<NewtonMeter>(), - LossMap = ratio.IsEqual(1) - ? TransmissionLossMapReader.ReadFromFile(GearboxIndirectLoss, ratio, string.Format("Gear {0}", i)) - : TransmissionLossMapReader.ReadFromFile(GearboxDirectLoss, ratio, string.Format("Gear {0}", i)), - Ratio = ratio, - ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile) - })) + Tuple.Create((uint)i, + new GearData { + //MaxTorque = 2300.SI<NewtonMeter>(), + LossMap = ratio.IsEqual(1) + ? TransmissionLossMapReader.ReadFromFile(GearboxIndirectLoss, ratio, string.Format("Gear {0}", i)) + : TransmissionLossMapReader.ReadFromFile(GearboxDirectLoss, ratio, string.Format("Gear {0}", i)), + Ratio = ratio, + ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile) + })) .ToDictionary(k => k.Item1 + 1, v => v.Item2), ShiftTime = 2.SI<Second>(), Inertia = 0.SI<KilogramSquareMeter>(), diff --git a/VectoCore/VectoCoreTest/Integration/DriverStrategy/SimpleCycles.cs b/VectoCore/VectoCoreTest/Integration/DriverStrategy/SimpleCycles.cs index 4cb58403e0d1d5619f9771369f0345d0b1b5a30c..a74e1585efcd1fb91dd5e183a78dad464601b109 100644 --- a/VectoCore/VectoCoreTest/Integration/DriverStrategy/SimpleCycles.cs +++ b/VectoCore/VectoCoreTest/Integration/DriverStrategy/SimpleCycles.cs @@ -354,7 +354,6 @@ namespace TUGraz.VectoCore.Tests.Integration.DriverStrategy TestCase(10, 10, -5), TestCase(10, 10, 0), TestCase(10, 10, 15), - TestCase(10, 10, 25), TestCase(10, 10, 5), TestCase(20, 20, -15), TestCase(30, 30, -15), @@ -370,8 +369,20 @@ namespace TUGraz.VectoCore.Tests.Integration.DriverStrategy var cycle = string.Format(CultureInfo.InvariantCulture, "0, {0}, {1}, {2}\n1000, {3}, {4}, {5}", v1, slope, v1.IsEqual(0) ? 2 : 0, v2, slope, v2.IsEqual(0) ? 2 : 0); - Coach_Special(cycle, string.Format(CultureInfo.InvariantCulture, "24t Coach_Cycle_Drive_{0}_{1}_{2}.vmod", - v1, v2, GetSlopeString(slope))); + Coach(cycle, string.Format(CultureInfo.InvariantCulture, "24t Coach_Cycle_Drive_{0}_{1}_{2}.vmod", + v1, v2, GetSlopeString(slope)), true); + } + + [Category("ComparisonV2"), + TestCase(10, 10, 25) + ] + public void Coach_Drive_low(double v1, double v2, double slope) + { + var cycle = string.Format(CultureInfo.InvariantCulture, "0, {0}, {1}, {2}\n1000, {3}, {4}, {5}", v1, slope, + v1.IsEqual(0) ? 2 : 0, v2, slope, v2.IsEqual(0) ? 2 : 0); + + Coach(cycle, string.Format(CultureInfo.InvariantCulture, "24t Coach_Cycle_Drive_{0}_{1}_{2}.vmod", + v1, v2, GetSlopeString(slope)), false); } [Category("ComparisonV2"), @@ -419,9 +430,14 @@ namespace TUGraz.VectoCore.Tests.Integration.DriverStrategy TestName = "CoachSpecial CycleDriver_FrequentSlopChange"), ] public void Coach_Special(string cycleData, string modFileName) + { + Coach(cycleData, modFileName, true); + } + + private void Coach(string cycleData, string modFileName, bool highEnginePower) { var cycle = SimpleDrivingCycles.CreateCycleData(cycleData); - var run = CoachPowerTrain.CreateEngineeringRun(cycle, modFileName); + var run = CoachPowerTrain.CreateEngineeringRun(cycle, modFileName, highEnginePower: highEnginePower); run.Run(); Assert.IsTrue(run.FinishedWithoutErrors); diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs index bb0cb1f0dd22eb29346a916660f4b76ed3856c3d..c15e0c7a63f113ace345d0ea54196bfe364b8f05 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs @@ -319,6 +319,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent // actual test... gearbox.Gear = 0; + gearbox.SetClutch(false); torque = 0.SI<NewtonMeter>(); response = (ResponseSuccess)gearbox.Request(absTime, dt, torque, angularVelocity); diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs index 4791a3128d9693ba6d119480531446fdf9f91f95..e7e6a1b6944ff8c728e3bde692c78440d12777cd 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs @@ -57,6 +57,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent { public const string JobFile = @"TestData\Jobs\24t Coach EngineOnly.vecto"; public const string EngineFile = @"TestData\Components\24t Coach.veng"; + public const string EngineFileHigh = @"TestData\Components\24t Coach_high.veng"; public const string AccelerationFile = @"TestData\Components\Coach.vacc"; public const double Tolerance = 0.001; @@ -178,7 +179,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent [TestMethod] public void DriverOverloadTest() { - var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile); + var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFileHigh); var vehicleData = CreateVehicleData(33000.SI<Kilogram>()); diff --git a/VectoCore/VectoCoreTest/TestData/Components/24t Coach.vfld b/VectoCore/VectoCoreTest/TestData/Components/24t Coach.vfld index 10432365037cbe5567a5d96f5364d56452970ade..60e935e117e1181e2d6a11f7ecedd6db7e35cc39 100644 --- a/VectoCore/VectoCoreTest/TestData/Components/24t Coach.vfld +++ b/VectoCore/VectoCoreTest/TestData/Components/24t Coach.vfld @@ -1,11 +1,11 @@ engine speed [1/min],full load torque [Nm],motoring torque [Nm],PT1 [s] -560,1500,-149,0.6 -600,1600,-148,0.6 -799.9999999,2150,-149,0.6 +560,1180,-149,0.6 +600,1282,-148,0.6 +799.9999999,1791,-149,0.6 1000,2300,-160,0.6 1200,2300,-179,0.6 1400,2300,-203,0.6 1599.999999,2079,-235,0.49 1800,1857,-264,0.25 2000.000001,1352,-301,0.25 -2100,1100,-320,0.25 +2100,1100,-320,0.25 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Components/24t Coach_high.veng b/VectoCore/VectoCoreTest/TestData/Components/24t Coach_high.veng new file mode 100644 index 0000000000000000000000000000000000000000..769e70bdcf10bef91babe5fbad2c42d8a44fc130 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Components/24t Coach_high.veng @@ -0,0 +1,20 @@ +{ + "Header": { + "CreatedBy": "Raphael Luz IVT TU-Graz (14fea510-e457-4bf6-860f-a9514dc327f1)", + "Date": "25.06.2015 11:23:22", + "AppVersion": "2.2 beta", + "FileVersion": 3 + }, + "Body": { + "SavedInDeclMode": false, + "ModelName": "Generic 24t Coach", + "Displacement": 12730.0, + "IdlingSpeed": 560.0, + "Inertia": 3.8, + "FullLoadCurve": "24t Coach_high.vfld", + "FuelMap": "24t Coach.vmap", + "WHTC-Urban": 1.0, + "WHTC-Rural": 1.0, + "WHTC-Motorway": 1.0 + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Components/24t Coach_high.vfld b/VectoCore/VectoCoreTest/TestData/Components/24t Coach_high.vfld new file mode 100644 index 0000000000000000000000000000000000000000..10432365037cbe5567a5d96f5364d56452970ade --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Components/24t Coach_high.vfld @@ -0,0 +1,11 @@ +engine speed [1/min],full load torque [Nm],motoring torque [Nm],PT1 [s] +560,1500,-149,0.6 +600,1600,-148,0.6 +799.9999999,2150,-149,0.6 +1000,2300,-160,0.6 +1200,2300,-179,0.6 +1400,2300,-203,0.6 +1599.999999,2079,-235,0.49 +1800,1857,-264,0.25 +2000.000001,1352,-301,0.25 +2100,1100,-320,0.25 diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index a7b4f91555ddb86a4495c513e8bf5827364c080e..62828254c2ca3e6b982ca71bfbb1db7f2a42ed69 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -203,9 +203,15 @@ <None Include="TestData\Components\12t Delivery Truck Efficiency.vgbx"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Components\24t Coach_high.veng"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Components\24t Coach_Ang_Efficiency.vveh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Components\24t Coach_high.vfld"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Components\24t Coach_NoAng.vveh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None>