diff --git a/VECTO/GUI/GearboxGearDialog.vb b/VECTO/GUI/GearboxGearDialog.vb index 98aaaae8b3bc0769176e32dea1cc1fb71684507c..e4b2381f3d279b79f962480bb137531e1a206573 100644 --- a/VECTO/GUI/GearboxGearDialog.vb +++ b/VECTO/GUI/GearboxGearDialog.vb @@ -73,7 +73,7 @@ Public Class GearboxGearDialog If(String.IsNullOrWhiteSpace(TbMaxTorque.Text), Nothing, TbMaxTorque.Text.ToDouble().SI(Of NewtonMeter)) } Dim results As IList(Of ValidationResult) = - gearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), GearboxType) + gearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), GearboxType, False) If (results.Any()) Then Return results.Select(Function(r) r.ErrorMessage + String.Join(", ", r.MemberNames.Distinct())).ToList() diff --git a/VECTO/GUI/VehicleAxleDialog.vb b/VECTO/GUI/VehicleAxleDialog.vb index fefd712c245e86d1999898e5ac5b943aa02a870a..dc6487f4a4009e396cc3f952d5712c79de3ab5bf 100644 --- a/VECTO/GUI/VehicleAxleDialog.vb +++ b/VECTO/GUI/VehicleAxleDialog.vb @@ -59,7 +59,7 @@ Public Class VehicleAxleDialog } Dim results As IList(Of ValidationResult) = - axleData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing) + axleData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing, False) If results.Any() Then Dim messages As IEnumerable(Of String) = diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb index 464423448d2265ccbf385815d814f42e168e65d5..e71df294414c2bd6ce05e0267018e4aa1c638ecb 100644 --- a/VECTO/Input Files/Engine.vb +++ b/VECTO/Input Files/Engine.vb @@ -149,7 +149,7 @@ Public Class Engine Public Function SaveFile() As Boolean Dim validationResults As IList(Of ValidationResult) = - Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing) + Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing, False) If validationResults.Count > 0 Then Dim messages As IEnumerable(Of String) = @@ -233,6 +233,11 @@ Public Class Engine ExecutionModeServiceContainer) Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) + Dim emsCycleService As EmsCycleServiceContainer = + TryCast(validationContext.GetService(GetType(EmsCycleServiceContainer)), + EmsCycleServiceContainer) + Dim emsCycle As Boolean = (emsCycleService IsNot Nothing) AndAlso emsCycleService.IsEmsCycle + Dim gbxtypeService As GearboxTypeServiceContainer = TryCast(validationContext.GetService(GetType(GearboxTypeServiceContainer)), GearboxTypeServiceContainer) Dim gbxType As GearboxType? = If(gbxtypeService Is Nothing, GearboxType.MT, gbxtypeService.Type) @@ -248,7 +253,7 @@ Public Class Engine End If Dim result As IList(Of ValidationResult) = - engineData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType) + engineData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle) If Not result.Any() Then Return ValidationResult.Success diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index 3b9b02216ca954729ff8d4559eab1a4f1d996e33..0b6f6edd2e4730a8f9e15871334c0ddd50d00ee1 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -109,7 +109,7 @@ Public Class Gearbox Public Function SaveFile() As Boolean Dim validationResults As IList(Of ValidationResult) = - Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Type) + Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Type, False) If validationResults.Count > 0 Then Dim messages As IEnumerable(Of String) = @@ -190,6 +190,11 @@ Public Class Gearbox ExecutionModeServiceContainer) Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) + Dim emsCycleService As EmsCycleServiceContainer = + TryCast(validationContext.GetService(GetType(EmsCycleServiceContainer)), + EmsCycleServiceContainer) + Dim emsCycle As Boolean = (emsCycleService IsNot Nothing) AndAlso emsCycleService.IsEmsCycle + Dim axlegearData As AxleGearData Dim gearboxData As GearboxData @@ -226,14 +231,14 @@ Public Class Gearbox End If Dim result As IList(Of ValidationResult) = - gearboxData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type) + gearboxData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type, emsCycle) If result.Any() Then Return _ New ValidationResult("Gearbox Configuration is invalid. ", result.Select(Function(r) r.ErrorMessage + String.Join(Environment.NewLine, r.MemberNames)).ToList()) End If - result = axlegearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type) + result = axlegearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type, emsCycle) If result.Any() Then Return _ New ValidationResult("Axlegear Configuration is invalid. ", diff --git a/VECTO/Input Files/VectoJob.vb b/VECTO/Input Files/VectoJob.vb index 69c8d1520097d1390d39db9985b7f0ca46aea8ef..94985746302e02bc9dc3dbca4d4238697e3bc3f1 100644 --- a/VECTO/Input Files/VectoJob.vb +++ b/VECTO/Input Files/VectoJob.vb @@ -109,7 +109,7 @@ Public Class VectoJob Public Function SaveFile() As Boolean Dim validationResults As IList(Of ValidationResult) = Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), - If(GearboxInputData Is Nothing, GearboxType.MT, GearboxInputData.Type)) + If(GearboxInputData Is Nothing, GearboxType.MT, GearboxInputData.Type), False) If validationResults.Count > 0 Then Dim messages As IEnumerable(Of String) = @@ -402,7 +402,7 @@ Public Class VectoJob result = jobData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), - jobData.GearboxData.Type) + jobData.GearboxData.Type, False) If result.Any() Then Return _ New ValidationResult("Vecto Job Configuration is invalid. ", result.Select(Function(r) r.ErrorMessage).ToList()) diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 283f575a72e5bcd043129d614f3e4f718cad44b7..337eebf737a84d935573fb3fbd4a8a84ba00ab55 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -98,6 +98,11 @@ Public Class Vehicle Dim modeService As ExecutionModeServiceContainer = TryCast(validationContext.GetService(GetType(ExecutionMode)), ExecutionModeServiceContainer) Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) + Dim emsCycleService As EmsCycleServiceContainer = + TryCast(validationContext.GetService(GetType(EmsCycleServiceContainer)), + EmsCycleServiceContainer) + Dim emsCycle As Boolean = (emsCycleService IsNot Nothing) AndAlso emsCycleService.IsEmsCycle + Dim gbxtypeService As GearboxTypeServiceContainer = TryCast(validationContext.GetService(GetType(GearboxTypeServiceContainer)), GearboxTypeServiceContainer) Dim gbxType As GearboxType? = If(gbxtypeService Is Nothing, Nothing, gbxtypeService.Type) @@ -120,14 +125,14 @@ Public Class Vehicle End If Dim result As IList(Of ValidationResult) = - vehicleData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType) + vehicleData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle) If result.Any() Then Return _ New ValidationResult("Vehicle Configuration is invalid. ", result.Select(Function(r) r.ErrorMessage + String.Join(Environment.NewLine, r.MemberNames)).ToList()) End If - result = retarderData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType) + result = retarderData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle) If result.Any() Then Return _ New ValidationResult("Retarder Configuration is invalid. ", @@ -135,7 +140,7 @@ Public Class Vehicle End If If vehicle.AngledriveType = AngledriveType.SeparateAngledrive Then - result = angledriveData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType) + result = angledriveData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle) If result.Any() Then Return _ New ValidationResult("AngleDrive Configuration is invalid. ", @@ -144,7 +149,7 @@ Public Class Vehicle End If If Not vehicle.PTOTransmissionType = "None" Then - result = ptoData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType) + result = ptoData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle) If result.Any() Then Return _ New ValidationResult("PTO Configuration is invalid. ", @@ -195,7 +200,7 @@ Public Class Vehicle SavedInDeclMode = Cfg.DeclMode Dim validationResults As IList(Of ValidationResult) = - Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing) + Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing, False) If validationResults.Count > 0 Then Dim messages As IEnumerable(Of String) = diff --git a/VectoCommon/VectoCommon/Utils/Validation.cs b/VectoCommon/VectoCommon/Utils/Validation.cs index c41577c4c1cf831ace657428b086cd296ffb9c84..c3a1fa07dbb7344be62f31cb917ab7e2013ef468 100644 --- a/VectoCommon/VectoCommon/Utils/Validation.cs +++ b/VectoCommon/VectoCommon/Utils/Validation.cs @@ -52,8 +52,10 @@ namespace TUGraz.VectoCommon.Utils /// <param name="entity">The entity.</param> /// <param name="mode">validate the entity for the given execution mode</param> /// <param name="gbxType"></param> + /// <param name="cycleType"></param> /// <returns>Null, if the validation was successfull. Otherwise a list of ValidationResults with the ErrorMessages.</returns> - public static IList<ValidationResult> Validate<T>(this T entity, ExecutionMode mode, GearboxType? gbxType) + public static IList<ValidationResult> Validate<T>(this T entity, ExecutionMode mode, GearboxType? gbxType, + bool emsCycle) { if (entity == null) { return new[] { new ValidationResult(string.Format("null value given for {0}", typeof(T))) }; @@ -61,6 +63,8 @@ namespace TUGraz.VectoCommon.Utils var context = new ValidationContext(entity); context.ServiceContainer.AddService(typeof(ExecutionMode), new ExecutionModeServiceContainer(mode)); context.ServiceContainer.AddService(typeof(GearboxTypeServiceContainer), new GearboxTypeServiceContainer(gbxType)); + context.ServiceContainer.AddService(typeof(EmsCycleServiceContainer), new EmsCycleServiceContainer(emsCycle)); + var results = new List<ValidationResult>(); Validator.TryValidateObject(entity, context, results, true); @@ -157,6 +161,16 @@ namespace TUGraz.VectoCommon.Utils public GearboxType? Type { get; protected set; } } + public class EmsCycleServiceContainer + { + public EmsCycleServiceContainer(bool isEmsCycle) + { + IsEmsCycle = isEmsCycle; + } + + public bool IsEmsCycle { get; protected set; } + } + /// <summary> /// Determines that the attributed object should be validated recursively. /// </summary> @@ -182,6 +196,9 @@ namespace TUGraz.VectoCommon.Utils var gbxTypeService = validationContext.GetService(typeof(GearboxTypeServiceContainer)) as GearboxTypeServiceContainer; var gbxType = gbxTypeService != null ? gbxTypeService.Type : GearboxType.MT; + var emsTypeService = validationContext.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer; + var isEmsCycle = emsTypeService != null && emsTypeService.IsEmsCycle; + var enumerable = value as IEnumerable; if (enumerable != null) { var i = 0; @@ -192,8 +209,8 @@ namespace TUGraz.VectoCommon.Utils var baseType = valueType.GetGenericTypeDefinition(); if (baseType == typeof(KeyValuePair<,>)) { var kvResults = new List<ValidationResult>(); - kvResults.AddRange(valueType.GetProperty("Key").GetValue(element).Validate(mode, gbxType)); - kvResults.AddRange(valueType.GetProperty("Value").GetValue(element).Validate(mode, gbxType)); + kvResults.AddRange(valueType.GetProperty("Key").GetValue(element).Validate(mode, gbxType, isEmsCycle)); + kvResults.AddRange(valueType.GetProperty("Value").GetValue(element).Validate(mode, gbxType, isEmsCycle)); if (kvResults.Any()) { return new ValidationResult( string.Format("{1}[{0}] in {1} invalid: {2}", valueType.GetProperty("Key").GetValue(element), @@ -203,7 +220,7 @@ namespace TUGraz.VectoCommon.Utils } } - var results = element.Validate(mode, gbxType); + var results = element.Validate(mode, gbxType, isEmsCycle); if (results.Any()) { return new ValidationResult( string.Format("{1}[{0}] in {1} invalid: {2}", i, validationContext.DisplayName, @@ -213,7 +230,7 @@ namespace TUGraz.VectoCommon.Utils i++; } } else { - var results = value.Validate(mode, gbxType); + var results = value.Validate(mode, gbxType, isEmsCycle); if (!results.Any()) { return ValidationResult.Success; } @@ -247,6 +264,7 @@ namespace TUGraz.VectoCommon.Utils public class SIRangeAttribute : RangeAttribute { private ExecutionMode? _mode; + private bool? _emsMission; private string _unit = "-"; /// <summary> @@ -255,9 +273,72 @@ namespace TUGraz.VectoCommon.Utils /// <param name="minimum">The minimum.</param> /// <param name="maximum">The maximum.</param> /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> - public SIRangeAttribute(int minimum, int maximum, ExecutionMode mode) : base(minimum, maximum) + public SIRangeAttribute(int minimum, int maximum, ExecutionMode mode) + : base(minimum, maximum) + { + _mode = mode; + } + + /// <summary> + /// Checks the Min-Max Range of SI Objects. + /// </summary> + /// <param name="minimum">The minimum.</param> + /// <param name="maximum">The maximum.</param> + public SIRangeAttribute(int minimum, int maximum) + : base(minimum, maximum) {} + + /// <summary> + /// Checks the Min-Max Range of SI Objects. + /// </summary> + /// <param name="minimum">The minimum.</param> + /// <param name="maximum">The maximum.</param> + /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> + public SIRangeAttribute(double minimum, double maximum, ExecutionMode mode) + : base(minimum, maximum) + { + _mode = mode; + } + + /// <summary> + /// Checks the Min-Max Range of SI Objects. + /// </summary> + /// <param name="minimum">The minimum.</param> + /// <param name="maximum">The maximum.</param> + public SIRangeAttribute(double minimum, double maximum) + : base(minimum, maximum) {} + + /// <summary> + /// Checks the Min-Max Range of SI Objects. + /// </summary> + /// <param name="minimum">The minimum.</param> + /// <param name="maximum">The maximum.</param> + /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> + public SIRangeAttribute(SI minimum, SI maximum, ExecutionMode mode) + : base(minimum.Value(), maximum.Value()) + { + _mode = mode; + } + + /// <summary> + /// Checks the Min-Max Range of SI Objects. + /// </summary> + /// <param name="minimum">The minimum.</param> + /// <param name="maximum">The maximum.</param> + public SIRangeAttribute(SI minimum, SI maximum) + : base(minimum.Value(), maximum.Value()) {} + + /// <summary> + /// Checks the Min-Max Range of SI Objects. + /// </summary> + /// <param name="minimum">The minimum.</param> + /// <param name="maximum">The maximum.</param> + /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> + /// <param name="emsMission">Validation only applies if the mission is an EMS mission</param> + public SIRangeAttribute(int minimum, int maximum, ExecutionMode mode, bool emsMission) + : base(minimum, maximum) { _mode = mode; + _emsMission = emsMission; } /// <summary> @@ -265,7 +346,11 @@ namespace TUGraz.VectoCommon.Utils /// </summary> /// <param name="minimum">The minimum.</param> /// <param name="maximum">The maximum.</param> - public SIRangeAttribute(int minimum, int maximum) : base(minimum, maximum) {} + /// <param name="emsMission">Validation only applies if the mission is an EMS mission</param> + public SIRangeAttribute(int minimum, int maximum, bool emsMission) : base(minimum, maximum) + { + _emsMission = emsMission; + } /// <summary> /// Checks the Min-Max Range of SI Objects. @@ -273,9 +358,12 @@ namespace TUGraz.VectoCommon.Utils /// <param name="minimum">The minimum.</param> /// <param name="maximum">The maximum.</param> /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> - public SIRangeAttribute(double minimum, double maximum, ExecutionMode mode) : base(minimum, maximum) + /// <param name="emsMission">Validation only applies if the mission is an EMS mission</param> + public SIRangeAttribute(double minimum, double maximum, ExecutionMode mode, bool emsMission) + : base(minimum, maximum) { _mode = mode; + _emsMission = emsMission; } /// <summary> @@ -283,7 +371,11 @@ namespace TUGraz.VectoCommon.Utils /// </summary> /// <param name="minimum">The minimum.</param> /// <param name="maximum">The maximum.</param> - public SIRangeAttribute(double minimum, double maximum) : base(minimum, maximum) {} + /// <param name="emsMission">Validation only applies if the mission is an EMS mission</param> + public SIRangeAttribute(double minimum, double maximum, bool emsMission) : base(minimum, maximum) + { + _emsMission = emsMission; + } /// <summary> /// Checks the Min-Max Range of SI Objects. @@ -291,9 +383,12 @@ namespace TUGraz.VectoCommon.Utils /// <param name="minimum">The minimum.</param> /// <param name="maximum">The maximum.</param> /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> - public SIRangeAttribute(SI minimum, SI maximum, ExecutionMode mode) : base(minimum.Value(), maximum.Value()) + /// <param name="emsMission">Validation only applies if the mission is an EMS mission</param> + public SIRangeAttribute(SI minimum, SI maximum, ExecutionMode mode, bool emsMission) + : base(minimum.Value(), maximum.Value()) { _mode = mode; + _emsMission = emsMission; } /// <summary> @@ -301,7 +396,11 @@ namespace TUGraz.VectoCommon.Utils /// </summary> /// <param name="minimum">The minimum.</param> /// <param name="maximum">The maximum.</param> - public SIRangeAttribute(SI minimum, SI maximum) : base(minimum.Value(), maximum.Value()) {} + /// <param name="emsMission">Validation only applies if the mission is an EMS mission</param> + public SIRangeAttribute(SI minimum, SI maximum, bool emsMission) : base(minimum.Value(), maximum.Value()) + { + _emsMission = emsMission; + } /// <summary> /// Validates that an SI Object is inside the min-max range. @@ -318,14 +417,20 @@ namespace TUGraz.VectoCommon.Utils if (si != null) { _unit = si.GetUnitString(); } + var emsService = validationContext.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer; + var emsMode = emsService != null && emsService.IsEmsCycle; var modeService = validationContext.GetService(typeof(ExecutionMode)) as ExecutionModeServiceContainer; var mode = modeService == null ? (ExecutionMode?)null : modeService.Mode; - if (mode == null) { - return base.IsValid(si != null ? si.Value() : value, validationContext); - } - if (_mode == null || (_mode != null && (_mode.Value == mode))) { - return base.IsValid(si != null ? si.Value() : value, validationContext); + + if (!_emsMission.HasValue || _emsMission.Value == emsMode) { + if (mode == null) { + return base.IsValid(si != null ? si.Value() : value, validationContext); + } + if (_mode == null || (_mode != null && (_mode.Value == mode))) { + return base.IsValid(si != null ? si.Value() : value, validationContext); + } + return ValidationResult.Success; } return ValidationResult.Success; } @@ -333,6 +438,7 @@ namespace TUGraz.VectoCommon.Utils public override string FormatErrorMessage(string name) { const string unitString = "{0} [{1}]"; + return string.Format(ErrorMessageString, name, string.Format(unitString, Minimum, _unit), string.Format(unitString, Maximum, _unit)); } diff --git a/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs b/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs index 5ec8508fa8fbb8da59db60a905c8b3b9599b5160..8c66898676d76c4c737461ba8a5b37b9014e08d2 100644 --- a/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs +++ b/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs @@ -90,8 +90,8 @@ namespace TUGraz.VectoCore.Models.Declaration /// </summary> public sealed class StandardBodies : LookupData<string, StandardBody> { - //public static readonly StandardBody Empty = new StandardBody("", 0.SI<Kilogram>(), 0.SI<Kilogram>(), - // new[] { 0.SI<SquareMeter>(), 0.SI<SquareMeter>() }, null, 0, 0.SI<CubicMeter>()); + public static readonly StandardBody Empty = new StandardBody("", 0.SI<Kilogram>(), 0.SI<Kilogram>(), + new[] { 0.SI<SquareMeter>(), 0.SI<SquareMeter>() }, null, 0, 0.SI<CubicMeter>()); protected override string ResourceId { @@ -103,10 +103,10 @@ namespace TUGraz.VectoCore.Models.Declaration get { return "StandardWeigths Lookup Error: No value found for ID '{0}'"; } } - //public override StandardBody Lookup(string id) - //{ - // return string.IsNullOrWhiteSpace(id) ? Empty : base.Lookup(id); - //} + public override StandardBody Lookup(string id) + { + return string.IsNullOrWhiteSpace(id) ? Empty : base.Lookup(id); + } protected override void ParseData(DataTable table) { diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs index b4f253b610418b585bdbd5d0b3465daa17a955e1..b5eba984bdc33441b90685c15f183b5ff7fd27dc 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs @@ -42,6 +42,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData; using TUGraz.VectoCore.InputData.Reader.Impl; +using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.OutputData.ModFilter; @@ -168,7 +169,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl throw new ArgumentOutOfRangeException("CycleType unknown:" + data.Cycle.CycleType); } - var validationErrors = run.Validate(_mode, data.GearboxData == null ? (GearboxType?)null : data.GearboxData.Type); + var validationErrors = run.Validate(_mode, data.GearboxData == null ? (GearboxType?)null : data.GearboxData.Type, data.Mission != null && data.Mission.MissionType.IsEMS()); if (validationErrors.Any()) { throw new VectoException("Validation of Run-Data Failed: " + string.Join("\n", validationErrors.Select(r => r.ErrorMessage + string.Join("; ", r.MemberNames)))); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs index bef80d665a8268563dd21d50cb1cbe3f5a28cc3d..64856e1d2bf3921864275f8cc253f47a630bfff3 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs @@ -83,11 +83,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox var gbxTypeService = context.GetService(typeof(GearboxTypeServiceContainer)) as GearboxTypeServiceContainer; var gbxType = gbxTypeService == null ? GearboxType.MT : gbxTypeService.Type; + var emsTypeService = context.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer; + var emsMission = emsTypeService != null && emsTypeService.IsEmsCycle; + if (gearData.HasTorqueConverter) { if (gearData.TorqueConverterShiftPolygon == null) { return new ValidationResult("Shift Polygon for Torque Converter Gear required!"); } - var result = gearData.TorqueConverterShiftPolygon.Validate(mode, gbxType); + var result = gearData.TorqueConverterShiftPolygon.Validate(mode, gbxType, emsMission); if (result.Any()) { return new ValidationResult(string.Format("Validation of GearData failed"), result.Select(x => x.ErrorMessage)); } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs index e52acfa68889644ba9fdbe4502350739ec92d1d5..d13afec5cd6d6849eac38bbf8daf335832bd04d5 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs @@ -109,13 +109,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data { var mode = GetExecutionMode(validationContext); //var gbxType = GetGearboxType(validationContext); + var emsMission = GetEmsMode(validationContext); var result = new List<ValidationResult>(); if (gearboxData.Type.AutomaticTransmission()) { gearboxData.TorqueConverterData.RequiredSpeedRatio = Math.Round(Constants.SimulationSettings.RequiredTorqueConverterSpeedRatio / gearboxData.Gears[1].Ratio * gearboxData.Gears[1].TorqueConverterRatio, 4); - result.AddRange(gearboxData.TorqueConverterData.Validate(mode, gearboxData.Type)); + result.AddRange(gearboxData.TorqueConverterData.Validate(mode, gearboxData.Type, emsMission)); //result.AddRange(gearboxData.PowershiftShiftTime.Validate(mode, gearboxData.Type)); //result.AddRange(gearboxData.PowershiftInertiaFactor.Validate(mode, gearboxData.Type)); validationContext.MemberName = "PowershiftInertiaFactor"; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs index 344747dfddadb6bc78702a81a3c19675f9a47abf..7142c1e34a5a4da8cc015dd1796e15f25d98a243 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs @@ -61,5 +61,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data return modeService == null ? ExecutionMode.Declaration : modeService.Mode; } + protected static bool GetEmsMode(ValidationContext context) + { + var emsService = context.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer; + return emsService != null && emsService.IsEmsCycle; + } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs index 48b7c1b670818aa4d63522374a53236d7e3c5392..d82e8aa0ab1dee168a68feba9e39704079f0e9a4 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs @@ -75,10 +75,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// (+ Curb Weight of Standard-Body if it has one) /// (+ Curb Weight of Trailer if it has one) /// </summary> - [Required, SIRange(500, 40000)] + [Required, SIRange(500, 40000, emsMission: false), + SIRange(0, 60000, emsMission: true)] public Kilogram CurbWeight { get; internal set; } - [Required, SIRange(0, 40000)] + [Required, SIRange(0, 40000, emsMission: false), + SIRange(0, 60000, emsMission: true)] public Kilogram Loading { get; internal set; } [SIRange(0, 500)] @@ -88,14 +90,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// The Gross Vehicle Weight of the Vehicle. /// </summary> [Required, - SIRange(3500, 40000, ExecutionMode.Declaration), + SIRange(3500, 40000, ExecutionMode.Declaration, emsMission: false), + SIRange(0, 60000, ExecutionMode.Declaration, emsMission: true), SIRange(0, 1000000, ExecutionMode.Engineering)] public Kilogram GrossVehicleWeight { get; internal set; } /// <summary> /// The Gross Vehicle Weight of the Trailer (if the vehicle has one). /// </summary> - [Required, SIRange(0, 40000)] + [Required, SIRange(0, 40000, emsMission: false), + SIRange(0, 60000, emsMission: true)] public Kilogram TrailerGrossVehicleWeight { get; internal set; } [Required, SIRange(0.1, 0.7)] @@ -178,6 +182,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public static ValidationResult ValidateVehicleData(VehicleData vehicleData, ValidationContext validationContext) { var mode = GetExecutionMode(validationContext); + var emsCycle = GetEmsMode(validationContext); if (vehicleData.AxleData.Count < 1) { return new ValidationResult("At least two axles need to be specified"); @@ -203,7 +208,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data // total gvw is limited by max gvw (40t) var gvwTotal = VectoMath.Min(vehicleData.GrossVehicleWeight + vehicleData.TrailerGrossVehicleWeight, - Constants.SimulationSettings.MaximumGrossVehicleWeight); + emsCycle + ? Constants.SimulationSettings.MaximumGrossVehicleWeightEMS + : Constants.SimulationSettings.MaximumGrossVehicleWeight); if (mode != ExecutionMode.Declaration) { return ValidationResult.Success; } diff --git a/VectoCore/VectoCore/OutputData/PDF/PDFDeclarationReport.cs b/VectoCore/VectoCore/OutputData/PDF/PDFDeclarationReport.cs index ac230b4cbcdefc13b77e4286f0f2c88bb61bdc15..2c372d3fa6f3aa92cf448d6e106940770dc61b29 100644 --- a/VectoCore/VectoCore/OutputData/PDF/PDFDeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/PDF/PDFDeclarationReport.cs @@ -152,7 +152,7 @@ namespace TUGraz.VectoCore.OutputData.PDF CreateTitlePage(Missions) }; //tasks.AddRange( - pages.AddRange(Missions.OrderBy(m => m.Key) + pages.AddRange(Missions.Where(m => !m.Key.IsEMS()).OrderBy(m => m.Key) .Select((m, i) => CreateCyclePage(m.Value, i + 2, Missions.Count + 1))); //Task.WaitAll(tasks.Cast<Task>().ToArray()); @@ -186,7 +186,7 @@ namespace TUGraz.VectoCore.OutputData.PDF { var stream = new MemoryStream(); var resourceName = string.Format("{0}.Report.title{1}CyclesTemplate.pdf", - DeclarationData.DeclarationDataResourcePrefix, missions.Count); + DeclarationData.DeclarationDataResourcePrefix, missions.Count(m => !m.Key.IsEMS())); var inputStream = RessourceHelper.ReadStream(resourceName); var reader = new PdfReader(inputStream); var stamper = new PdfStamper(reader, stream); @@ -208,7 +208,7 @@ namespace TUGraz.VectoCore.OutputData.PDF pdfFields.SetField("PageNr", string.Format("Page {0} of {1}", 1, missions.Count + 1)); var i = 1; - foreach (var results in missions.Values.OrderBy(m => m.Mission.MissionType)) { + foreach (var results in missions.Where(m => !m.Key.IsEMS()).Select(m => m.Value).OrderBy(m => m.Mission.MissionType)) { var trailerSuffix = results.Mission.Trailer.Count > 0 ? string.Format(" with {0} Trailer", string.Join(" + ", results.Mission.Trailer.Select(t => t.TrailerType.ToString()))) diff --git a/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv b/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv index 5deb37b1014496521890ad662584aa9d2d064796..1a3ff6b7f80bafa2442de6d1a6946cba11c271be 100644 --- a/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv +++ b/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv @@ -14,7 +14,7 @@ Valid,Vehicle Category,Axle Conf.,GVW_Min,GVW_Max,HDV class,Body,Trailer,EMS 1 ,RigidTruck ,6x2 ,0 ,99 ,9 ,B5 ,T2 ,D+ST1 ,Truck.vacc,RigidTrailer ,RigidSolo ,20/30/15 ,35/40/25 ,35 , ,15/20/10 ,17.5/20/10 ,22.5/32.5 ,22.5/30 ,19300 ,26500 ,7100 ,17500 ,- ,7100 ,- ,- ,- ,- ,- ,- , 1 ,Tractor ,6x2 ,0 ,99 ,10 , ,ST1 ,ST1+T2 ,Truck.vacc,TractorSemitrailer ,TractorSemitrailer ,15/10/20 ,20/10/20 ,55 ,50 ,12.5/15/10 ,15/15/10 ,37.5/25 ,35/25 ,19300 ,26500 ,12900 ,17500 ,- ,- ,- ,- ,- ,- ,- ,- , 1 ,RigidTruck ,6x4 ,0 ,99 ,11 ,B5 ,T2 ,D+ST1 ,Truck.vacc,RigidTrailer ,RigidSolo ,20/22.5/22.5 ,35/35/30 ,35 , ,15/20/10 ,17.5/20/10 ,22.5/32.5 ,22.5/30 ,19300 ,26500 ,7100 ,17500 ,- ,7100 ,7100 ,- ,- ,- ,- ,- ,8.5 -1 ,Tractor ,6x4 ,0 ,99 ,12 , ,ST1 ,ST1+T2 ,Truck.vacc,TractorSemitrailer ,TractorSemitrailer ,15/15/15 ,20/15/15 ,55 ,50 ,12.5/15/10 ,15/15/10 ,37.5/25 ,35/25 ,19300 ,26500 ,12900 ,17500 ,- , ,12900 ,- ,- ,- ,- ,- ,8.8 +1 ,Tractor ,6x4 ,0 ,99 ,12 , ,ST1 ,ST1+T2 ,Truck.vacc,TractorSemitrailer ,TractorSemitrailer ,15/15/15 ,20/15/15 ,55 ,50 ,12.5/15/10 ,15/15/10 ,37.5/25 ,35/25 ,19300 ,26500 ,12900 ,17500 ,- ,- ,12900 ,- ,- ,- ,- ,- ,8.8 0 ,RigidTruck ,6x6 ,0 ,99 ,13 , , , ,Truck.vacc, ,RigidSolo , , , , , , , , ,- ,- ,- ,- ,- ,- ,??? ,- ,- ,- ,- ,- , 0 ,Tractor ,6x6 ,0 ,99 ,14 , , , ,Truck.vacc, ,TractorSemitrailer , , , , , , , , ,- ,- ,- ,- ,- ,- ,??? ,- ,- ,- ,- ,- , 0 ,RigidTruck ,8x2 ,0 ,99 ,15 , , , ,Truck.vacc, ,RigidSolo , , , , , , , , ,- ,- ,??? ,- ,- ,- ,- ,- ,- ,- ,- ,- , diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index fa53eeaeb56113ab2ce419f1a4a8e4b67d4a8aa6..f47fb44a2e292b754dca61595672b9119ac5b739 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -568,7 +568,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x4, 40000, 0, VehicleClass.Class11, new[] { 101.4, 142.9, 51.9, 142.9, 51.9, 51.9 }), TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x4, 99000, 0, VehicleClass.Class12, - new[] { 91.0, 140.5, 91.0, 140.5, 91.0, 91.0 }), + new[] { 91.0, 140.5, 91.0, 140.5, 91.0 }), TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_8x4, 99000, 0, VehicleClass.Class16, new[] { 0.0 }) ] @@ -836,26 +836,26 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration Assert.AreEqual(4, segment.Missions.Length); AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul, - cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.25 }, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.1, 0.2 }, trailerAxleWeightDistribution: new[] { 0.55 }, trailerAxleCount: new[] { 3 }, bodyCurbWeight: 0, trailerCurbWeight: new[] { 7500.0 }, trailerType: new[] { TrailerType.ST1 }, minLoad: 0, refLoad: 19300, trailerGrossVehicleWeight: new[] { 24000.0 }, deltaCdA: 0, maxLoad: 25000); AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.LongHaulEMS, - cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.2 }, - trailerAxleWeightDistribution: new[] { 0.40, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.125, 0.15, 0.1 }, + trailerAxleWeightDistribution: new[] { 0.375, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0, trailerCurbWeight: new[] { 7500.0, 5400 }, trailerType: new[] { TrailerType.ST1, TrailerType.T2 }, minLoad: 0, refLoad: 26500, trailerGrossVehicleWeight: new[] { 24000.0, 18000 }, deltaCdA: 0.6, maxLoad: 39600, ems: true); AssertMission(segment.Missions[2], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery, - cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.25, 0.25 }, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.1, 0.2 }, trailerAxleWeightDistribution: new[] { 0.5 }, trailerAxleCount: new[] { 3 }, bodyCurbWeight: 0, trailerCurbWeight: new[] { 7500.0 }, trailerType: new[] { TrailerType.ST1 }, minLoad: 0, refLoad: 12900, trailerGrossVehicleWeight: new[] { 24000.0 }, deltaCdA: 0, maxLoad: 25000); AssertMission(segment.Missions[3], vehicleData: vehicleData, missionType: MissionType.RegionalDeliveryEMS, - cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.175, 0.25 }, - trailerAxleWeightDistribution: new[] { 0.35, 0.225 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.15, 0.1 }, + trailerAxleWeightDistribution: new[] { 0.35, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0, trailerCurbWeight: new[] { 7500.0, 5400 }, trailerType: new[] { TrailerType.ST1, TrailerType.T2 }, minLoad: 0, refLoad: 17500, trailerGrossVehicleWeight: new[] { 24000.0, 18000 }, deltaCdA: 0.6, maxLoad: 39600, ems: true); } @@ -921,14 +921,14 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration } /// <summary> - /// Segment 9: fixed reference weight, trailer always used + /// Segment 10: fixed reference weight, trailer always used /// </summary> [TestCase] - public void Segment16Test() + public void Segment12Test() { var vehicleData = new { VehicleCategory = VehicleCategory.Tractor, - AxleConfiguration = AxleConfiguration.AxleConfig_4x2, + AxleConfiguration = AxleConfiguration.AxleConfig_6x4, GrossVehicleMassRating = 18000.SI<Kilogram>(), CurbWeight = 7500.SI<Kilogram>() }; @@ -936,38 +936,68 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration var segment = DeclarationData.Segments.Lookup(vehicleData.VehicleCategory, vehicleData.AxleConfiguration, vehicleData.GrossVehicleMassRating, vehicleData.CurbWeight); - Assert.AreEqual(VehicleClass.Class5, segment.VehicleClass); + Assert.AreEqual(VehicleClass.Class12, segment.VehicleClass); var data = AccelerationCurveReader.ReadFromStream(segment.AccelerationFile); TestAcceleration(data); - Assert.AreEqual(4, segment.Missions.Length); + Assert.AreEqual(5, segment.Missions.Length); AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul, - cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.25 }, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.15, 0.15 }, trailerAxleWeightDistribution: new[] { 0.55 }, trailerAxleCount: new[] { 3 }, bodyCurbWeight: 0, trailerCurbWeight: new[] { 7500.0 }, trailerType: new[] { TrailerType.ST1 }, minLoad: 0, refLoad: 19300, trailerGrossVehicleWeight: new[] { 24000.0 }, deltaCdA: 0, maxLoad: 25000); AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.LongHaulEMS, - cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.2 }, - trailerAxleWeightDistribution: new[] { 0.40, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.125, 0.15, 0.1 }, + trailerAxleWeightDistribution: new[] { 0.375, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0, trailerCurbWeight: new[] { 7500.0, 5400 }, trailerType: new[] { TrailerType.ST1, TrailerType.T2 }, minLoad: 0, refLoad: 26500, trailerGrossVehicleWeight: new[] { 24000.0, 18000 }, deltaCdA: 0.6, maxLoad: 39600, ems: true); AssertMission(segment.Missions[2], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery, - cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.25, 0.25 }, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.15, 0.15 }, trailerAxleWeightDistribution: new[] { 0.5 }, trailerAxleCount: new[] { 3 }, bodyCurbWeight: 0, trailerCurbWeight: new[] { 7500.0 }, trailerType: new[] { TrailerType.ST1 }, minLoad: 0, refLoad: 12900, trailerGrossVehicleWeight: new[] { 24000.0 }, deltaCdA: 0, maxLoad: 25000); AssertMission(segment.Missions[3], vehicleData: vehicleData, missionType: MissionType.RegionalDeliveryEMS, - cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.175, 0.25 }, - trailerAxleWeightDistribution: new[] { 0.35, 0.225 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.15, 0.1 }, + trailerAxleWeightDistribution: new[] { 0.35, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0, trailerCurbWeight: new[] { 7500.0, 5400 }, trailerType: new[] { TrailerType.ST1, TrailerType.T2 }, minLoad: 0, refLoad: 17500, trailerGrossVehicleWeight: new[] { 24000.0, 18000 }, deltaCdA: 0.6, maxLoad: 39600, ems: true); } + /// <summary> + /// Segment 9: fixed reference weight, trailer always used + /// </summary> + [TestCase] + public void Segment16Test() + { + var vehicleData = new { + VehicleCategory = VehicleCategory.RigidTruck, + AxleConfiguration = AxleConfiguration.AxleConfig_8x4, + GrossVehicleMassRating = 24000.SI<Kilogram>(), + CurbWeight = 7500.SI<Kilogram>() + }; + + var segment = DeclarationData.Segments.Lookup(vehicleData.VehicleCategory, vehicleData.AxleConfiguration, + vehicleData.GrossVehicleMassRating, vehicleData.CurbWeight); + + Assert.AreEqual(VehicleClass.Class16, segment.VehicleClass); + + var data = AccelerationCurveReader.ReadFromStream(segment.AccelerationFile); + TestAcceleration(data); + + Assert.AreEqual(1, segment.Missions.Length); + + AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.Construction, + cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.25, 0.25, 0.25, 0.25 }, + trailerAxleWeightDistribution: new double[] { }, trailerAxleCount: new int[] { }, bodyCurbWeight: 0, + trailerCurbWeight: new double[] { }, trailerType: new TrailerType[] { }, minLoad: 0, refLoad: 12900, + trailerGrossVehicleWeight: new double[] { }, deltaCdA: 0, maxLoad: 16500); + } + public static void AssertMission(Mission m, dynamic vehicleData, MissionType missionType, string cosswindCorrection, double[] axleWeightDistribution, double[] trailerAxleWeightDistribution, int[] trailerAxleCount, double bodyCurbWeight, diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs index 02fa155a51be0e1bb66f478da39ba3cdd739cd7f..4b58e14ce017623ed4685fa598d5cd2a8ec072ca 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs @@ -138,7 +138,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var vehicle = new VehicleContainer(ExecutionMode.Engineering); var axleGearData = MockSimulationDataFactory.CreateAxleGearDataFromFile(AxleGearValidRangeDataFile); var axleGear = new AxleGear(vehicle, axleGearData); - Assert.AreEqual(0, axleGear.Validate(ExecutionMode.Declaration, null).Count); + Assert.AreEqual(0, axleGear.Validate(ExecutionMode.Declaration, null, false).Count); } [TestCase] @@ -147,7 +147,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var vehicle = new VehicleContainer(ExecutionMode.Engineering); var axleGearData = MockSimulationDataFactory.CreateAxleGearDataFromFile(AxleGearInvalidRangeDataFile); var axleGear = new AxleGear(vehicle, axleGearData); - var errors = axleGear.Validate(ExecutionMode.Declaration, null); + var errors = axleGear.Validate(ExecutionMode.Declaration, null, false); Assert.AreEqual(1, errors.Count); } diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs index 16c38c5376f75249f64844e5781c99deddeabe9a..321fbc7cfebf534b6fed750d60474558e27d0780 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs @@ -94,7 +94,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData }; data.FullLoadCurve.EngineData = data; - var results = data.Validate(ExecutionMode.Declaration, null); + var results = data.Validate(ExecutionMode.Declaration, null, false); Assert.IsFalse(results.Any(), "Validation Failed: " + string.Join("; ", results.Select(r => r.ErrorMessage))); Assert.IsTrue(data.IsValid()); } @@ -129,7 +129,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData var engineData = dao.CreateEngineData(data, null); - var results = engineData.Validate(ExecutionMode.Declaration, null); + var results = engineData.Validate(ExecutionMode.Declaration, null, false); Assert.IsFalse(results.Any(), "Validation failed: " + string.Join("; ", results.Select(r => r.ErrorMessage))); Assert.IsTrue(engineData.IsValid()); } @@ -167,7 +167,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData var engineData = dao.CreateEngineData(data, GearboxType.AMT); - var results = engineData.Validate(ExecutionMode.Declaration, null); + var results = engineData.Validate(ExecutionMode.Declaration, null, false); Assert.IsFalse(results.Any(), "Validation failed: " + string.Join("; ", results.Select(r => r.ErrorMessage))); Assert.IsTrue(engineData.IsValid()); @@ -206,10 +206,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData }, } }; - var result = vehicleData.Validate(ExecutionMode.Engineering, null); + var result = vehicleData.Validate(ExecutionMode.Engineering, null, false); Assert.IsTrue(!result.Any(), "validation should have succeded but failed." + string.Concat(result)); - result = vehicleData.Validate(ExecutionMode.Declaration, null); + result = vehicleData.Validate(ExecutionMode.Declaration, null, false); Assert.IsTrue(result.Any(), "validation should have failed, but succeeded."); } @@ -276,10 +276,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData AxleGearData = axleGearData }; - var results = data.Validate(ExecutionMode.Declaration, null); + var results = data.Validate(ExecutionMode.Declaration, null, false); Assert.IsTrue(results.Any(), "Validation should have failed, but succeded."); - results = vehicleData.Validate(ExecutionMode.Engineering, null); + results = vehicleData.Validate(ExecutionMode.Engineering, null, false); Assert.IsTrue(!results.Any()); } @@ -315,7 +315,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData AxleGearData = axleGearData }; - var results = data.Validate(ExecutionMode.Declaration, null); + var results = data.Validate(ExecutionMode.Declaration, null, false); Assert.IsTrue(results.Any(), "Validation should have failed, but succeded."); } @@ -325,7 +325,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData [TestMethod] public void Validation_Test() { - var results = new DataObject().Validate(ExecutionMode.Declaration, null); + var results = new DataObject().Validate(ExecutionMode.Declaration, null, false); // every field and property should be tested except private parent fields and properties and // (4*4+1) * 2 = 17*2= 34 - 4 private parent fields (+2 public field and property which are tested twice) = 32 @@ -343,7 +343,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData } }; - var results = container.Validate(ExecutionMode.Declaration, null); + var results = container.Validate(ExecutionMode.Declaration, null, false); Assert.AreEqual(1, results.Count); } @@ -366,7 +366,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData VectoCSVFile.ReadStream( InputDataHelper.InputDataAsStream("engine torque,downshift rpm [rpm],upshift rpm [rpm] ", vgbs))); - var results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.MT); + var results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.MT, false); Assert.IsFalse(results.Any()); // change columns @@ -375,7 +375,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData VectoCSVFile.ReadStream( InputDataHelper.InputDataAsStream("engine torque,upshift rpm [rpm], downshift rpm [rpm] ", vgbs))); - results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.MT); + results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.MT, false); Assert.IsTrue(results.Any()); } @@ -395,7 +395,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData VectoCSVFile.ReadStream( InputDataHelper.InputDataAsStream("engine torque,downshift rpm [rpm],upshift rpm [rpm] ", vgbs))); - var results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.ATSerial); + var results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.ATSerial, false); Assert.IsFalse(results.Any()); // change columns @@ -404,7 +404,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData VectoCSVFile.ReadStream( InputDataHelper.InputDataAsStream("engine torque,upshift rpm [rpm], downshift rpm [rpm] ", vgbs))); - results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.ATSerial); + results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.ATSerial, false); Assert.IsFalse(results.Any()); }