diff --git a/VectoCore/Exceptions/VectoExceptions.cs b/VectoCore/Exceptions/VectoExceptions.cs index f8d2788729c93587b39e011d6554055345385b64..818972fb275fb0add42d373a2c7027e2872ce48a 100644 --- a/VectoCore/Exceptions/VectoExceptions.cs +++ b/VectoCore/Exceptions/VectoExceptions.cs @@ -1,4 +1,5 @@ using System; +using System.IO; namespace TUGraz.VectoCore.Exceptions { @@ -29,6 +30,10 @@ namespace TUGraz.VectoCore.Exceptions { public UnsupportedFileVersionException(string message) : base(message) {} public UnsupportedFileVersionException(string message, Exception inner) : base(message, inner) {} + + public UnsupportedFileVersionException(string filename, int version, Exception inner = null) + : base(string.Format("Unsupported Version of {0} file. Got Version {1}", + Path.GetExtension(filename), version), inner) {} } /// <summary> diff --git a/VectoCore/FileIO/InputFileReader.cs b/VectoCore/FileIO/InputFileReader.cs index 8c91cd6e93933b3ac33648a1cde7a06122cce64a..fb1543c2bef9de4cd733625ba51b79bdb273086d 100644 --- a/VectoCore/FileIO/InputFileReader.cs +++ b/VectoCore/FileIO/InputFileReader.cs @@ -21,7 +21,7 @@ namespace TUGraz.VectoCore.FileIO protected VersionInfo GetFileVersion(string jsonStr) { var data = new { Header = new { FileVersion = -1 }, Body = new { SavedInDeclMode = false } }; - JsonConvert.PopulateObject(jsonStr, data); + data = JsonConvert.DeserializeAnonymousType(jsonStr, data); return new VersionInfo { SavedInDeclarationMode = data.Body.SavedInDeclMode, Version = data.Header.FileVersion }; } diff --git a/VectoCore/Models/DeclarationData.cs b/VectoCore/Models/DeclarationData.cs index 569e6b0091d2f3092f3c620c1e015dd57caeccca..9bd99b5e22b848739df91187896f7c365d6f3517 100644 --- a/VectoCore/Models/DeclarationData.cs +++ b/VectoCore/Models/DeclarationData.cs @@ -1,4 +1,10 @@ -using TUGraz.VectoCore.Models.Declaration; +using System; +using System.Collections.Generic; +using System.Data; +using System.Globalization; +using System.Linq; +using System.Reflection; +using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Utils; @@ -8,6 +14,8 @@ namespace TUGraz.VectoCore.Models { private static DeclarationData _instance; + public Segments Segments; + public Wheels Wheels { get; private set; } public Rims Rims { get; private set; } @@ -16,6 +24,7 @@ namespace TUGraz.VectoCore.Models { Wheels = new Wheels(); Rims = new Rims(); + Segments = new Segments(); } public static DeclarationData Instance() @@ -23,13 +32,110 @@ namespace TUGraz.VectoCore.Models return _instance ?? (_instance = new DeclarationData()); } - public static Segment GetSegment(VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration, - Kilogram grossVehicleMassRating) + public Segment GetSegment(VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration, + Kilogram grossVehicleMassRating, Kilogram curbWeight) + { + return Segments.Lookup(vehicleCategory, axleConfiguration, grossVehicleMassRating, curbWeight); + } + } + + public enum MissionType + { + LongHaul, + RegionalDelivery, + UrbanDelivery, + MunicipalDelivery, + Construction, + HeavyUrban, + Urban, + Suburban, + Interurban, + Coach + } + + public class Segments + { + private const string ResourceId = "TUGraz.VectoCore.Resources.Declaration.SegmentTable.csv"; + + private readonly DataTable _segmentTable; + + internal Segments() + { + var myAssembly = Assembly.GetExecutingAssembly(); + var file = myAssembly.GetManifestResourceStream(ResourceId); + _segmentTable = VectoCSVFile.ReadStream(file); + + // normalize column names, remove whitespaces and lowercase + foreach (DataColumn col in _segmentTable.Columns) { + _segmentTable.Columns[col.ColumnName].ColumnName = col.ColumnName.ToLower().Replace(" ", ""); + } + } + + public Segment Lookup(VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration, + Kilogram grossVehicleMassRating, Kilogram curbWeight) { - throw new System.NotImplementedException(); + var row = _segmentTable.Rows.Cast<DataRow>().First(r => r.Field<string>("tvehcat") == vehicleCategory.ToString() + && r.Field<string>("taxleconf") == axleConfiguration.ToString() + && r.Field<double>("ggw_min").SI<Ton>() <= grossVehicleMassRating.Double() + && r.Field<double>("ggw_max").SI<Ton>() > grossVehicleMassRating.Double()); + var segment = new Segment(); + segment.HDVClass = row.Field<string>("hdv_class"); + segment.VACC = row.Field<string>("vacc"); + + var missions = new List<Mission>(); + + foreach (var missionType in Enum.GetValues(typeof(MissionType)).Cast<MissionType>()) { + if (row.Field<bool>(missionType.ToString())) { + var mission = new Mission(); + mission.MissionType = missionType; + + List<double> axles; + string[] trailerAxles; + + if (missionType == MissionType.LongHaul) { + mission.VCDV = row.Field<string>("vcdv-" + missionType.ToString().ToLower()); + axles = row.Field<string>("rigid/truckaxles-longhaul").Split('/').Select(double.Parse).ToList(); + trailerAxles = row.Field<string>("traileraxles-" + missionType.ToString().ToLower()).Split('/'); + } else { + mission.VCDV = row.Field<string>("vcdv-other"); + axles = row.Field<string>("rigid/truckaxles-other").Split('/').Select(double.Parse).ToList(); + trailerAxles = row.Field<string>("traileraxles-" + missionType.ToString().ToLower()).Split('/'); + } + + var weightPercent = double.Parse(trailerAxles[0]); + var count = int.Parse(trailerAxles[1]); + if (count > 0) { + axles.AddRange(Enumerable.Repeat(weightPercent / count, count)); + } + + mission.AxleWeightDistribution = axles.ToArray(); + + mission.MassExtra = row.Field<double>("massextra-" + missionType.ToString().ToLower()).SI<Kilogram>(); + + mission.MinLoad = 0.SI<Kilogram>(); + + if (row.Field<string>("refload-" + missionType.ToString().ToLower()) == "f") { + if (mission.MissionType == MissionType.LongHaul) { + mission.RefLoad = 588.2 * grossVehicleMassRating - 2511.8; + } else { + mission.RefLoad = 394.1 * grossVehicleMassRating - 1705.9; + } + } else { + mission.RefLoad = row.Field<double>("refload-" + missionType.ToString().ToLower()).SI<Kilogram>(); + } + + mission.MaxLoad = grossVehicleMassRating - mission.MassExtra - curbWeight; + //todo: rename cycle files to equal the enumeration + mission.CycleFile = missionType + ".vdri"; + missions.Add(mission); + } + } + segment.Missions = missions.ToArray(); + return segment; } } + public class Segment { public string HDVClass { get; internal set; } @@ -39,12 +145,13 @@ namespace TUGraz.VectoCore.Models public class Mission { + public MissionType MissionType { get; set; } public string VCDV { get; set; } - public string Name { get; set; } public double[] AxleWeightDistribution { get; set; } - public double MassExtra { get; set; } + public Kilogram MassExtra { get; set; } public Kilogram RefLoad { get; set; } + public Kilogram MinLoad { get; set; } + public Kilogram MaxLoad { get; set; } public string CycleFile { get; set; } - public Kilogram[] Loadings { get; set; } } } \ No newline at end of file diff --git a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs index d56f4ac81bbd75fefd8987cf97a018a016af1267..6915fb646286326f9cedbfb4692ee4eeef0d9541 100644 --- a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs +++ b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs @@ -218,7 +218,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl return; } - var vehicleData = EngineeringModeSimulationComponentFactory.Instance().CreateVehicleData(vehicleFile); + var vehicleData = EngineeringModeFactory.Instance().CreateVehicleData(vehicleFile); //VehicleData.ReadFromFile(vehicleFile); _vehicle = new Vehicle(_container, vehicleData); } diff --git a/VectoCore/Models/SimulationComponent/Factories/DeclarationModeFactory.cs b/VectoCore/Models/SimulationComponent/Factories/DeclarationModeFactory.cs index 7f6f568f11de181318d6d8e7757d6d8dfd512bbc..a54ef5873cc63e130afbd11fa4ca7a34e696e80e 100644 --- a/VectoCore/Models/SimulationComponent/Factories/DeclarationModeFactory.cs +++ b/VectoCore/Models/SimulationComponent/Factories/DeclarationModeFactory.cs @@ -33,8 +33,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Factories case 5: return CreateVehicleData(Path.GetDirectoryName(filename), Deserialize<VehicleFileV5Declaration>(json)); default: - throw new UnsupportedFileVersionException(string.Format("Unsupported Version of {0} file. Got Version {1}", - Path.GetExtension(filename), fileInfo.Version)); + throw new UnsupportedFileVersionException(filename, fileInfo.Version); } } @@ -62,8 +61,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Factories case 5: return CreateVectoJobData(Path.GetDirectoryName(filename), Deserialize<VectoJobFileV2Declaration>(json)); default: - throw new UnsupportedFileVersionException(string.Format("Unsupported Version of {0} file. Got Version {1}", - Path.GetExtension(filename), fileInfo.Version)); + throw new UnsupportedFileVersionException(filename, fileInfo.Version); } } diff --git a/VectoCore/Models/SimulationComponent/Factories/EngineeringModeSimulationComponentFactory.cs b/VectoCore/Models/SimulationComponent/Factories/EngineeringModeFactory.cs similarity index 80% rename from VectoCore/Models/SimulationComponent/Factories/EngineeringModeSimulationComponentFactory.cs rename to VectoCore/Models/SimulationComponent/Factories/EngineeringModeFactory.cs index 310604e719f46febc67edb9a64b1bf21ab3ac5ed..786d0279312d8689a384b5fc0afa7d5054186ce3 100644 --- a/VectoCore/Models/SimulationComponent/Factories/EngineeringModeSimulationComponentFactory.cs +++ b/VectoCore/Models/SimulationComponent/Factories/EngineeringModeFactory.cs @@ -8,33 +8,38 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.SimulationComponent.Factories { - public class EngineeringModeSimulationComponentFactory : InputFileReader + public class EngineeringModeFactory : InputFileReader { - protected static EngineeringModeSimulationComponentFactory _instance; + protected static EngineeringModeFactory _instance; - public static EngineeringModeSimulationComponentFactory Instance() + public static EngineeringModeFactory Instance() { - return _instance ?? (_instance = new EngineeringModeSimulationComponentFactory()); + return _instance ?? (_instance = new EngineeringModeFactory()); + } + + private void CheckEngineeringMode(string fileName, VersionInfo fileInfo) + { + if (fileInfo.SavedInDeclarationMode) { + Log.WarnFormat("File {0} was saved in Declaration Mode but is used for Engineering Mode!", fileName); + } } public VehicleData CreateVehicleData(string fileName) { var json = File.ReadAllText(fileName); var fileInfo = GetFileVersion(json); + CheckEngineeringMode(fileName, fileInfo); - if (fileInfo.Item2) { - Log.WarnFormat("File {0} was saved in Declaration Mode but is used for Engineering Mode!", fileName); - } - - switch (fileInfo.Item1) { + switch (fileInfo.Version) { case 5: var data = JsonConvert.DeserializeObject<VehicleFileV5Engineering>(json); return CreateVehicleData(Path.GetDirectoryName(fileName), data.Body); default: - throw new UnsupportedFileVersionException("Unsupported Version of .vveh file. Got Version " + fileInfo.Item1); + throw new UnsupportedFileVersionException(fileName, fileInfo.Version); } } + protected VehicleData CreateVehicleData(string basePath, VehicleFileV5Engineering.DataBodyEng data) { return new VehicleData { diff --git a/VectoCore/Resources/Declaration/SegmentTable.csv b/VectoCore/Resources/Declaration/SegmentTable.csv new file mode 100644 index 0000000000000000000000000000000000000000..ed3ff4b8c2e8b72a1d0cbb58da7af290114ba932 --- /dev/null +++ b/VectoCore/Resources/Declaration/SegmentTable.csv @@ -0,0 +1,26 @@ +Valid,tVehCat,tAxleConf,GVW_Min,GVW_Max,HDV_Class,VACC,VCDV - Long Haul,VCDV - Other,Rigid/Truck Axles - Long haul,Rigid/Truck Axles - Other,Trailer Axles - Long haul,Trailer Axles - Other,LongHaul,RegionalDelivery,UrbanDelivery,MunicipalUtility,Construction,HeavyUrban,Urban,Suburban,Interurban,Coach,MassExtra - LongHaul,MassExtra - RegionalDelivery,MassExtra - UrbanDelivery,MassExtra - MunicipalUtility,MassExtra - Construction,MassExtra - HeavyUrban,MassExtra - Urban,MassExtra - Suburban,MassExtra - Interurban,MassExtra - Coach,RefLoad - LongHaul,RefLoad - RegionalDelivery,RefLoad - UrbanDelivery,RefLoad - MunicipalUtility,RefLoad - Construction,RefLoad - HeavyUrban,RefLoad - Urban,RefLoad - Suburban,RefLoad - Interurban,RefLoad - Coach,WHTCWF - LongHaul,WHTCWF - RegionalDelivery,WHTCWF - UrbanDelivery,WHTCWF - MunicipalUtility,WHTCWF - Construction,WHTCWF - HeavyUrban,WHTCWF - Urban,WHTCWF - Suburban,WHTCWF - Interurban,WHTCWF - Coach +0,RigidTruck,4x2,0,7.5,0,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,1,1,0,0,0,0,0,0,0,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +1,RigidTruck,4x2,7.5,10,1,Truck.vacc,-,RigidSolo.vcdv,-,45/55,0/0,0/0,0,1,1,0,0,0,0,0,0,0,-,1600,1600,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +1,RigidTruck,4x2,10,12,2,Truck.vacc,RigidSolo.vcdv,RigidSolo.vcdv,40/60,45/55,0/0,0/0,1,1,1,0,0,0,0,0,0,0,1900,1900,1900,-,-,-,-,-,-,-,f,f,f,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +1,RigidTruck,4x2,12,16,3,Truck.vacc,-,RigidSolo.vcdv,-,40/60,0/0,0/0,0,1,1,0,0,0,0,0,0,0,-,2000,2000,-,-,-,-,-,-,-,-,f,f,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +1,RigidTruck,4x2,16,99,4,Truck.vacc,RigidTrailer.vcdv,RigidSolo.vcdv,20/30,45/55,50/2,0/0,1,1,0,1,0,0,0,0,0,0,7500,2100,-,2100,-,-,-,-,-,-,14000,4400,-,4400,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +1,Tractor,4x2,16,99,5,Truck.vacc,TractorSemitrailer.vcdv,TractorSemitrailer.vcdv,20/25,25/25,55/3,50/3,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19300,12900,-,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,RigidTruck,4x4,7.5,16,6,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,1,1,0,0,0,0,0,-,-,-,???,???,-,-,-,-,-,-,-,-,???,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,RigidTruck,4x4,16,99,7,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,B5,-,-,-,-,-,-,-,-,-,4300,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,Tractor,4x4,16,99,8,Truck.vacc,-,TractorSemitrailer.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +1,RigidTruck,6x2,0,99,9,Truck.vacc,RigidTrailer.vcdv,RigidSolo.vcdv,20/30/15,35/40/25,35/2,0/0,1,1,0,1,0,0,0,0,0,0,7600,2200,-,2200,-,-,-,-,-,-,17900,7100,-,7100,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +1,Tractor,6x2,0,99,10,Truck.vacc,TractorSemitrailer.vcdv,TractorSemitrailer.vcdv,15/10/20,20/10/20,55/2,50/2,1,1,0,0,0,0,0,0,0,0,7500,7500,-,-,-,-,-,-,-,-,19000,12700,-,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,RigidTruck,6x4,0,99,11,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,B7,-,-,-,-,-,-,-,-,-,7600,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,Tractor,6x4,0,99,12,Truck.vacc,-,TractorSemitrailer.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,ST2,-,-,-,-,-,-,-,-,-,12100,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,RigidTruck,6x6,0,99,13,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,0,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,Tractor,6x6,0,99,14,Truck.vacc,-,TractorSemitrailer.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,0,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,RigidTruck,8x2,0,99,15,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,1,0,0,0,0,0,0,0,0,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,RigidTruck,8x4,0,99,16,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,B9,-,-,-,-,-,-,-,-,-,11600,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,RigidTruck,8x6,0,99,17,Truck.vacc,-,RigidSolo.vcdv,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,RigidTruck,8x8,0,99,17,Truck.vacc,-,-,???,???,0/0,0/0,0,0,0,0,1,0,0,0,0,0,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,CityBus,4x2,0,18,B1,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,InterurbanBus,4x2,0,18,B2,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,Coach,4x2,0,18,B3,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,CityBus,6x2,18,99,B4,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,1,1,1,0,0,-,-,-,-,-,???,???,???,-,-,-,-,-,-,-,???,???,???,-,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,InterurbanBus,6x2,18,99,B5,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,1,0,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,-,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 +0,Coach,6x2,18,99,B6,N/A,-,CoachBus.vcdv,???,???,0/0,0/0,0,0,0,0,0,0,0,0,0,1,-,-,-,-,-,-,-,-,-,???,-,-,-,-,-,-,-,-,-,???,11/0/89,17/30/53,69/27/4,98/0/2,62/32/6,100/0/0,100/0/0,100/0/0,45/36/19,0/22/78 diff --git a/VectoCore/VectoCore.csproj b/VectoCore/VectoCore.csproj index de31a10e38d54565c203bc733b5da7ab2603f692..e94212d1d4eb916b0cc11e45be961bef3d3744a4 100644 --- a/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore.csproj @@ -142,7 +142,7 @@ <Compile Include="Models\SimulationComponent\Data\RetarderLossMap.cs" /> <Compile Include="Models\SimulationComponent\Data\VehicleData.cs" /> <Compile Include="Models\SimulationComponent\Factories\DeclarationModeFactory.cs" /> - <Compile Include="Models\SimulationComponent\Factories\EngineeringModeSimulationComponentFactory.cs" /> + <Compile Include="Models\SimulationComponent\Factories\EngineeringModeFactory.cs" /> <Compile Include="Models\SimulationComponent\IClutch.cs" /> <Compile Include="Models\SimulationComponent\IEngineOnlyDrivingCycle.cs" /> <Compile Include="Models\SimulationComponent\IDriverDemandDrivingCycle.cs" /> @@ -207,6 +207,7 @@ <None Include="packages.config" /> <EmbeddedResource Include="Resources\Declaration\Rims.csv" /> <EmbeddedResource Include="Resources\Declaration\Wheels.csv" /> + <EmbeddedResource Include="Resources\Declaration\SegmentTable.csv" /> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. diff --git a/VectoCoreTest/Models/DeclarationDataTest.cs b/VectoCoreTest/Models/DeclarationDataTest.cs index dacd84f8c23e5872c246bd66e83c8ff237e12b00..04408e500a253ea42780df8eafb3116bb92d8bd2 100644 --- a/VectoCoreTest/Models/DeclarationDataTest.cs +++ b/VectoCoreTest/Models/DeclarationDataTest.cs @@ -43,6 +43,7 @@ namespace TUGraz.VectoCore.Tests.Models //var job = factory.ReadJobFile("12t Delivery Truck.vecto"); //var vehicleData = factory.ReadVehicleData(job.VehicleFile); + //mock vehicleData var vehicleData = new { VehicleCategory = VehicleCategory.RigidTruck, AxleConfiguration = AxleConfiguration.AxleConfig4x2, @@ -50,8 +51,8 @@ namespace TUGraz.VectoCore.Tests.Models CurbWeight = 5850.SI<Kilogram>() }; - var segment = DeclarationData.GetSegment(vehicleData.VehicleCategory, vehicleData.AxleConfiguration, - vehicleData.GrossVehicleMassRating); + var segment = DeclarationData.Instance().GetSegment(vehicleData.VehicleCategory, vehicleData.AxleConfiguration, + vehicleData.GrossVehicleMassRating, vehicleData.CurbWeight); Assert.AreEqual(2, segment.HDVClass); @@ -59,49 +60,41 @@ namespace TUGraz.VectoCore.Tests.Models Assert.AreEqual(3, segment.Missions.Length); var longHaulMission = segment.Missions[0]; - Assert.AreEqual("LongHaul", longHaulMission.Name); + Assert.AreEqual(MissionType.LongHaul, longHaulMission.MissionType); Assert.AreEqual("RigidSolo.vcdv", longHaulMission.VCDV); Assert.AreEqual(new[] { 40, 60 }, longHaulMission.AxleWeightDistribution); - Assert.AreEqual(1900, longHaulMission.MassExtra); - Assert.AreEqual(588.2 * vehicleData.GrossVehicleMassRating - 2511.8, longHaulMission.RefLoad); + Assert.AreEqual(1900.SI<Kilogram>(), longHaulMission.MassExtra); Assert.AreEqual("Long_Haul.vdri", longHaulMission.CycleFile); - - Assert.AreEqual( - new[] { - 0.SI<Kilogram>(), longHaulMission.RefLoad, - vehicleData.GrossVehicleMassRating - longHaulMission.MassExtra - vehicleData.CurbWeight - }, - longHaulMission.Loadings); + Assert.AreEqual(0.SI<Kilogram>(), longHaulMission.MinLoad); + Assert.AreEqual(588.2 * vehicleData.GrossVehicleMassRating - 2511.8, longHaulMission.RefLoad); + Assert.AreEqual(vehicleData.GrossVehicleMassRating - longHaulMission.MassExtra - vehicleData.CurbWeight, + longHaulMission.MaxLoad); var regionalDeliveryMission = segment.Missions[1]; - Assert.AreEqual("RegionalDelivery", regionalDeliveryMission.Name); + Assert.AreEqual("RegionalDelivery", regionalDeliveryMission.MissionType); Assert.AreEqual("RigidSolo.vcdv", regionalDeliveryMission.VCDV); Assert.AreEqual(new[] { 45, 55 }, regionalDeliveryMission.AxleWeightDistribution); - Assert.AreEqual(1900, regionalDeliveryMission.MassExtra); - Assert.AreEqual(394.1 * vehicleData.GrossVehicleMassRating - 1705.9, regionalDeliveryMission.RefLoad); + Assert.AreEqual(1900.SI<Kilogram>(), regionalDeliveryMission.MassExtra); + Assert.AreEqual("Regional_Delivery.vdri", regionalDeliveryMission.CycleFile); - Assert.AreEqual( - new[] { - 0.SI<Kilogram>(), regionalDeliveryMission.RefLoad, - vehicleData.GrossVehicleMassRating - regionalDeliveryMission.MassExtra - vehicleData.CurbWeight - }, - regionalDeliveryMission.Loadings); + Assert.AreEqual(0.SI<Kilogram>(), regionalDeliveryMission.MinLoad); + Assert.AreEqual(394.1 * vehicleData.GrossVehicleMassRating - 1705.9, regionalDeliveryMission.RefLoad); + Assert.AreEqual(vehicleData.GrossVehicleMassRating - regionalDeliveryMission.MassExtra - vehicleData.CurbWeight, + regionalDeliveryMission.MaxLoad); var urbanDeliveryMission = segment.Missions[1]; - Assert.AreEqual("UrbanDelivery", urbanDeliveryMission.Name); + Assert.AreEqual("UrbanDelivery", urbanDeliveryMission.MissionType); Assert.AreEqual("RigidSolo.vcdv", urbanDeliveryMission.VCDV); Assert.AreEqual(new[] { 45, 55 }, urbanDeliveryMission.AxleWeightDistribution); - Assert.AreEqual(1900, urbanDeliveryMission.MassExtra); - Assert.AreEqual(394.1 * vehicleData.GrossVehicleMassRating - 1705.9, urbanDeliveryMission.RefLoad); + Assert.AreEqual(1900.SI<Kilogram>(), urbanDeliveryMission.MassExtra); + Assert.AreEqual("Urban_Delivery.vdri", urbanDeliveryMission.CycleFile); - Assert.AreEqual( - new[] { - 0.SI<Kilogram>(), urbanDeliveryMission.RefLoad, - vehicleData.GrossVehicleMassRating - urbanDeliveryMission.MassExtra - vehicleData.CurbWeight - }, - urbanDeliveryMission.Loadings); + Assert.AreEqual(0.SI<Kilogram>(), urbanDeliveryMission.MinLoad); + Assert.AreEqual(394.1 * vehicleData.GrossVehicleMassRating - 1705.9, urbanDeliveryMission.RefLoad); + Assert.AreEqual(vehicleData.GrossVehicleMassRating - urbanDeliveryMission.MassExtra - vehicleData.CurbWeight, + urbanDeliveryMission.MaxLoad); //var runs = new List<IVectoSimulator>(); diff --git a/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs b/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs index 71fae28a04951b850088933aeb3fb5c024593418..30c5ea32495d94fa710064c44a1c316250b36053 100644 --- a/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs @@ -19,7 +19,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent { var container = new VehicleContainer(); - var vehicleData = EngineeringModeSimulationComponentFactory.Instance().CreateVehicleData(VehicleDataFile); + var vehicleData = EngineeringModeFactory.Instance().CreateVehicleData(VehicleDataFile); //VehicleData.ReadFromFile(VehicleDataFile); //vehicleData.CrossWindCorrection = VehicleData.CrossWindCorrectionMode.NoCorrection; var vehicle = new Vehicle(container, vehicleData, 17.210535); diff --git a/VectoCoreTest/Models/SimulationComponent/WheelsTest.cs b/VectoCoreTest/Models/SimulationComponent/WheelsTest.cs index 8d5c1056c1c0454405c39b43f0a8f1ec39fe0b2e..9a874c5931e895f3ed3d28f4b77cd8b164b4424f 100644 --- a/VectoCoreTest/Models/SimulationComponent/WheelsTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/WheelsTest.cs @@ -19,7 +19,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent public void WheelsRequestTest() { var container = new VehicleContainer(); - var vehicleData = EngineeringModeSimulationComponentFactory.Instance().CreateVehicleData(VehicleDataFile); + var vehicleData = EngineeringModeFactory.Instance().CreateVehicleData(VehicleDataFile); IWheels wheels = new Wheels(container, vehicleData.DynamicTyreRadius); var mockPort = new MockTnOutPort(); diff --git a/VectoCoreTest/Models/SimulationComponentData/VehicleDataTest.cs b/VectoCoreTest/Models/SimulationComponentData/VehicleDataTest.cs index ba8e708d358a118eaa1dc0d1cc58386fbbb00936..1ec79b7715cd6dddd8743bb288a21a37d2765b42 100644 --- a/VectoCoreTest/Models/SimulationComponentData/VehicleDataTest.cs +++ b/VectoCoreTest/Models/SimulationComponentData/VehicleDataTest.cs @@ -12,7 +12,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData [TestMethod] public void ReadVehicleFileTest() { - var vehicleData = EngineeringModeSimulationComponentFactory.Instance().CreateVehicleData(VehicleDataFile); + var vehicleData = EngineeringModeFactory.Instance().CreateVehicleData(VehicleDataFile); //VehicleData.ReadFromFile(VehicleDataFile); Assert.AreEqual(VehicleCategory.Coach, vehicleData.VehicleCategory);