diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index 4c223d09fad53705b26fb72c3ccc3eca95eb2af8..6293973db8944da269fa6d63e340dd6eaa4eed50 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -94,20 +94,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdaper } var retVal = SetCommonVehicleData(data); - retVal.GrossVehicleMassRating = data.GrossVehicleMassRating; - retVal.TrailerGrossVehicleMassRating = mission.TrailerGrossVehicleMassRating; - retVal.CurbWeigthExtra = mission.MassExtra; + retVal.TrailerGrossVehicleMassRating = mission.TrailerGrossVehicleWeight; + retVal.CurbWeigthExtra = mission.BodyCurbWeight + mission.TrailerCurbWeight; retVal.Loading = loading; retVal.DynamicTyreRadius = DeclarationData.DynamicTyreRadius(data.Axles[DeclarationData.PoweredAxle()].Wheels, data.Rim); - var aerodynamicDragAera = mission.UseCdA2 - ? data.AirDragAreaRigidTruck - : data.AirDragArea; + var aerodynamicDragArea = data.AirDragArea + mission.DeltaCdA; retVal.CrossWindCorrectionCurve = - new CrosswindCorrectionCdxALookup(GetDeclarationAirResistanceCurve(retVal.VehicleCategory, aerodynamicDragAera), + new CrosswindCorrectionCdxALookup(GetDeclarationAirResistanceCurve(retVal.VehicleCategory, aerodynamicDragArea), CrossWindCorrectionMode.DeclarationModeCorrection); var axles = data.Axles; if (axles.Count < mission.AxleWeightDistribution.Length) { diff --git a/VectoCore/VectoCore/Models/Declaration/Mission.cs b/VectoCore/VectoCore/Models/Declaration/Mission.cs index e4d228e97523fb0383b01434997daeb3ba4fedca..0e66c15eded9f25b5dfd58618ab20cbc9d9d61d5 100644 --- a/VectoCore/VectoCore/Models/Declaration/Mission.cs +++ b/VectoCore/VectoCore/Models/Declaration/Mission.cs @@ -29,6 +29,7 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ +using System; using System.Collections.Generic; using System.IO; using TUGraz.VectoCommon.Utils; @@ -46,23 +47,37 @@ namespace TUGraz.VectoCore.Models.Declaration { public static string GetShortName(this LoadingType loadingType) { - return loadingType.ToString().Substring(0, 1); + switch (loadingType) { + case LoadingType.FullLoading: + return "F"; + case LoadingType.ReferenceLoad: + return "R"; + case LoadingType.EmptyLoading: + return "E"; + default: + throw new ArgumentOutOfRangeException("loadingType", loadingType, null); + } } } public class Mission { - public MissionType MissionType { get; set; } - public string CrossWindCorrection { get; set; } - public double[] AxleWeightDistribution { get; set; } - public double[] TrailerAxleWeightDistribution { get; set; } + public MissionType MissionType; + public string CrossWindCorrection; + public double[] AxleWeightDistribution; + public double[] TrailerAxleWeightDistribution; - public Kilogram MassExtra { get; set; } - public Kilogram TrailerGrossVehicleMassRating { get; set; } + public Kilogram CurbWeight; + public Kilogram BodyCurbWeight; + public Kilogram BodyGrossVehicleWeight; + public Kilogram TrailerCurbWeight; + public Kilogram TrailerGrossVehicleWeight; + public Stream CycleFile; + public SquareMeter DeltaCdA; - public Kilogram MinLoad { get; set; } - public Kilogram RefLoad { get; set; } - public Kilogram MaxLoad { get; set; } + public Kilogram MinLoad; + public Kilogram RefLoad; + public Kilogram MaxLoad; public Dictionary<LoadingType, Kilogram> Loadings { @@ -75,15 +90,5 @@ namespace TUGraz.VectoCore.Models.Declaration }; } } - - public Stream CycleFile { get; set; } - - public bool UseCdA2 { get; set; } - - public class LoadingEntry - { - public Kilogram LoadingWeight; - public string Name; - } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/Declaration/Segments.cs b/VectoCore/VectoCore/Models/Declaration/Segments.cs index ce8985fdbc8c36948b8f083559912f324c3b898c..128843bbe5c2e068f7e13632b41d424daf82195c 100644 --- a/VectoCore/VectoCore/Models/Declaration/Segments.cs +++ b/VectoCore/VectoCore/Models/Declaration/Segments.cs @@ -102,78 +102,78 @@ namespace TUGraz.VectoCore.Models.Declaration return segment; } + //mk 2016-06-28 remove param curbWeight private static Mission[] CreateMissions(ref Kilogram grossVehicleWeight, Kilogram curbWeight, DataRow row) { - var trailerOnlyInLongHaul = row.Field<string>("vehiclecategory") == VehicleCategory.RigidTruck.ToString() && - !string.IsNullOrWhiteSpace(row.Field<string>("traileraxles-longhaul")) && - string.IsNullOrWhiteSpace(row.Field<string>("traileraxles-other")); - var missionTypes = Enum.GetValues(typeof(MissionType)).Cast<MissionType>(); var missions = new List<Mission>(); foreach (var missionType in missionTypes.Where(m => row.Field<string>(m.ToString()) == "1")) { - string vcdvField; - string axleField; - string trailerField; + var body = DeclarationData.StandardWeights.Lookup(row.Field<string>("body")); + + var trailer = ShouldTrailerBeUsed(row, missionType) + ? DeclarationData.StandardWeights.Lookup(row.Field<string>("trailer")) + : DeclarationData.StandardWeights.Empty; - if (missionType == MissionType.LongHaul) { - vcdvField = "crosswindcorrection-longhaul"; - axleField = "truckaxles-longhaul"; - trailerField = "traileraxles-longhaul"; - } else { - vcdvField = "crosswindcorrection-other"; - axleField = "truckaxles-other"; - trailerField = "traileraxles-other"; - } + var gvw = VectoMath.Min(grossVehicleWeight + trailer.GrossVehicleWeight, DeclarationData.MaximumGrossVehicleWeight); + var maxLoad = gvw - curbWeight - body.CurbWeight - trailer.CurbWeight; + var refLoadValue = + row.Field<string>("payload-" + missionType.GetName()).Replace("+T", "").ToDouble(double.NaN); + var refLoad = VectoMath.Min(!double.IsNaN(refLoadValue) + ? refLoadValue.SI<Kilogram>() + : DeclarationData.PayloadForGVW(grossVehicleWeight, missionType) + + DeclarationData.PayloadForTrailer(trailer.GrossVehicleWeight, trailer.CurbWeight), maxLoad); var mission = new Mission { MissionType = missionType, - CrossWindCorrection = row.Field<string>(vcdvField), - MassExtra = row.ParseDouble("massextra-" + missionType.ToString().ToLower()).SI<Kilogram>(), + CrossWindCorrection = row.Field<string>("crosswindcorrection" + GetMissionSuffix(missionType)), CycleFile = RessourceHelper.ReadStream(RessourceHelper.Namespace + "MissionCycles." + missionType + ".vdri"), - AxleWeightDistribution = row.Field<string>(axleField).Split('/').ToDouble().Select(x => x / 100.0).ToArray(), - UseCdA2 = trailerOnlyInLongHaul && missionType != MissionType.LongHaul, + AxleWeightDistribution = GetAxleWeightDistribution(row, missionType), + CurbWeight = curbWeight, + BodyCurbWeight = body.CurbWeight, + BodyGrossVehicleWeight = grossVehicleWeight, + TrailerCurbWeight = trailer.CurbWeight, + TrailerGrossVehicleWeight = trailer.GrossVehicleWeight, + DeltaCdA = trailer.DeltaCrossWindArea, + MinLoad = 0.SI<Kilogram>(), + MaxLoad = maxLoad, + RefLoad = refLoad, + TrailerAxleWeightDistribution = GetTrailerAxleWeightDistribution(row, missionType), }; + missions.Add(mission); + } + return missions.ToArray(); + } - var trailerAxles = row.Field<string>(trailerField).Split('/'); - var count = 0; - var weightPercent = 0.0; - - if (!string.IsNullOrWhiteSpace(trailerAxles[0])) { - count = int.Parse(trailerAxles[1]); - weightPercent = trailerAxles[0].ToDouble(); - } - mission.TrailerAxleWeightDistribution = (weightPercent / 100.0 / count).Repeat(count).ToArray(); - mission.TrailerGrossVehicleMassRating = 0.SI<Kilogram>(); - mission.MinLoad = 0.SI<Kilogram>(); - mission.MaxLoad = grossVehicleWeight - curbWeight - mission.MassExtra; - - var refLoadField = row.Field<string>("payload-" + missionType.ToString().ToLower()); - switch (refLoadField) { - case "pc(R)": - mission.RefLoad = VectoMath.Min(DeclarationData.PayloadForGVW(grossVehicleWeight, missionType), mission.MaxLoad); - break; - case "pc(R)+T": - // VECTO-262 - var trailerCurbWeight = DeclarationData.StandardWeights.Lookup(row.Field<string>("Trailer")).CurbWeight; - mission.TrailerGrossVehicleMassRating = - DeclarationData.StandardWeights.Lookup(row.Field<string>("Trailer")).GrossVehicleWeight; - mission.MaxLoad += mission.TrailerGrossVehicleMassRating - trailerCurbWeight; + /// <summary> + /// Checks if a trailer should be used for the current missionType. + /// </summary> + private static bool ShouldTrailerBeUsed(DataRow row, MissionType missionType) + { + var payloadText = row.Field<string>("payload-" + missionType.GetName()); + return payloadText.Contains("+T"); + } - // mass extra doesn't need to be changed: trailer curb weight already included in segment table! - //mission.MassExtra += trailerCurbWeight; + private static double[] GetTrailerAxleWeightDistribution(DataRow row, MissionType missionType) + { + var trailerAxles = + row.Field<string>("traileraxles" + GetMissionSuffix(missionType)).Split('/'); + if (!string.IsNullOrWhiteSpace(trailerAxles[0])) { + var count = int.Parse(trailerAxles[1]); + return (trailerAxles[0].ToDouble() / 100.0 / count).Repeat(count).ToArray(); + } + return new double[0]; + } - var payload = DeclarationData.PayloadForGVW(grossVehicleWeight, missionType) + - (mission.TrailerGrossVehicleMassRating - trailerCurbWeight) * 3 / 4; + private static double[] GetAxleWeightDistribution(DataRow row, MissionType missionType) + { + return + row.Field<string>("truckaxles" + GetMissionSuffix(missionType)) + .Split('/').ToDouble().Select(x => x / 100.0).ToArray(); + } - mission.RefLoad = VectoMath.Min(payload, mission.MaxLoad); - break; - default: - mission.RefLoad = VectoMath.Min(refLoadField.ToDouble().SI<Kilogram>(), mission.MaxLoad); - break; - } - missions.Add(mission); - } - return missions.ToArray(); + private static string GetMissionSuffix(MissionType missionType) + { + return (missionType == MissionType.LongHaul ? "-longhaul" : "-other"); } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv b/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv index 9f4979f17d4c1039e769a471f6a5660c6cb08215..35d9373906f0d4f8ae84ffd9af28c1744c0e4e9d 100644 --- a/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv +++ b/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv @@ -1,29 +1,30 @@ -Valid,Vehicle Category,Axle Conf.,GVW_Min,GVW_Max,HDV class,Body,Trailer,Semitrailer,.vacc file,Cross Wind Correction - Long haul,Cross Wind Correction - Other,Truck Axles - Long haul ,Truck Axles - Other,Trailer Axles - Long haul,Trailer Axles - Other,Long haul,Regional delivery,Urban delivery,Municipal utility,Construction,Heavy Urban,Urban,Suburban,Interurban,Coach,Mass Extra - Long haul,Mass Extra - Regional delivery,Mass Extra - Urban delivery,Mass Extra - Municipal utility,Mass Extra - Construction,Mass Extra - Heavy Urban,Mass Extra - Urban,Mass Extra - Suburban,Mass Extra - Interurban,Mass Extra - Coach,Payload - Long haul ,Payload - Regional delivery,Payload - Urban delivery,Payload - Municipal utility,Payload - Construction,Payload - Heavy Urban,Payload - Urban,Payload - Suburban,Payload - Interurban,Payload - Coach -0 ,RigidTruck ,4x2 ,0 ,7.5 ,0 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -1 ,RigidTruck ,4x2 ,7.5 ,10 ,1 ,B1 , , ,Truck.vacc, ,RigidSolo , ,45/55 , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , ,1600 ,1600 , , , , , , , , ,pc(R) ,pc(R) , , , , , , , -1 ,Tractor ,4x2 ,7.5 ,10 ,1 ,B1 , , ,Truck.vacc, ,RigidSolo , ,45/55 , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , ,1600 ,1600 , , , , , , , , ,pc(R) ,pc(R) , , , , , , , -1 ,RigidTruck ,4x2 ,10 ,12 ,2 ,B2 ,T1 , ,Truck.vacc,RigidSolo ,RigidSolo ,22.5/32.5 ,45/55 ,45/1 , ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,5300 ,1900 ,1900 , , , , , , , ,pc(R)+T ,pc(R) ,pc(R) , , , , , , , -1 ,Tractor ,4x2 ,10 ,12 ,2 ,B2 ,T1 , ,Truck.vacc,RigidSolo ,RigidSolo ,22.5/32.5 ,45/55 ,45/1 , ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,5300 ,1900 ,1900 , , , , , , , ,pc(R)+T ,pc(R) ,pc(R) , , , , , , , -1 ,RigidTruck ,4x2 ,12 ,16 ,3 ,B3 , , ,Truck.vacc, ,RigidSolo , ,40/60 , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , ,2000 ,2000 , , , , , , , , ,pc(R) ,pc(R) , , , , , , , -1 ,Tractor ,4x2 ,12 ,16 ,3 ,B3 , , ,Truck.vacc, ,RigidSolo , ,40/60 , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , ,2000 ,2000 , , , , , , , , ,pc(R) ,pc(R) , , , , , , , -1 ,RigidTruck ,4x2 ,16 ,99 ,4 ,B4 ,T2 , ,Truck.vacc,RigidTrailer ,RigidSolo ,20/30 ,45/55 ,50/2 , ,1 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,7500 ,2100 , ,2100 , , , , , , ,14000 ,4400 , ,4400 , , , , , , -1 ,Tractor ,4x2 ,16 ,99 ,5 , , ,ST1 ,Truck.vacc,TractorSemitrailer ,TractorSemitrailer ,20/25 ,25/25 ,55/3 ,50/3 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,7500 ,7500 , , , , , , , , ,19300 ,12900 , , , , , , , , -0 ,RigidTruck ,4x4 ,7.5 ,16 ,6 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,RigidTruck ,4x4 ,16 ,99 ,7 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,Tractor ,4x4 ,16 ,99 ,8 , , , ,Truck.vacc, ,TractorSemitrailer , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -1 ,RigidTruck ,6x2 ,0 ,99 ,9 ,B5 ,T2 , ,Truck.vacc,RigidTrailer ,RigidSolo ,20/30/15 ,35/40/25 ,35/2 , ,1 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,7600 ,2200 , ,2200 , , , , , , ,19300 ,7100 , ,7100 , , , , , , -1 ,Tractor ,6x2 ,0 ,99 ,10 , , ,ST1 ,Truck.vacc,TractorSemitrailer ,TractorSemitrailer ,15/10/20 ,20/10/20 ,55/2 ,50/2 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,7500 ,7500 , , , , , , , , ,19300 ,12900 , , , , , , , , -0 ,RigidTruck ,6x4 ,0 ,99 ,11 , , , ,Truck.vacc, ,RigidSolo , ,35/35/30 , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , ,7100 , , , , , -0 ,Tractor ,6x4 ,0 ,99 ,12 , , , ,Truck.vacc, ,TractorSemitrailer , ,20/15/15 , ,50/2 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , ,12900 , , , , , -0 ,RigidTruck ,6x6 ,0 ,99 ,13 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,Tractor ,6x6 ,0 ,99 ,14 , , , ,Truck.vacc, ,TractorSemitrailer , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,RigidTruck ,8x2 ,0 ,99 ,15 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,RigidTruck ,8x4 ,0 ,99 ,16 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , ,12900 , , , , , -0 ,RigidTruck ,8x6 ,0 ,99 ,17 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,RigidTruck ,8x8 ,0 ,99 ,17 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,CityBus ,4x2 ,0 ,18 ,B1 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,InterurbanBus ,4x2 ,0 ,18 ,B2 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,Coach ,4x2 ,0 ,18 ,B3 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 , , , , , , , , , , , , , , , , , , , , -0 ,CityBus ,6x2 ,18 ,99 ,B4 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,InterurbanBus ,6x2 ,18 ,99 ,B5 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 , , , , , , , , , , , , , , , , , , , , -0 ,Coach ,6x2 ,18 ,99 ,B6 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 , , , , , , , , , , , , , , , , , , , , \ No newline at end of file +Valid,Vehicle Category,Axle Conf.,GVW_Min,GVW_Max,HDV class,Body,Trailer,Semitrailer,.vacc file,Cross Wind Correction - Long haul,Cross Wind Correction - Other,Truck Axles - Long haul ,Truck Axles - Other,Trailer Axles - Long haul,Trailer Axles - Other,Long haul,Regional delivery,Urban delivery,Municipal utility,Construction,Heavy Urban,Urban,Suburban,Interurban,Coach,Payload - Long haul ,Payload - Regional delivery,Payload - Urban delivery,Payload - Municipal utility,Payload - Construction,Payload - Heavy Urban,Payload - Urban,Payload - Suburban,Payload - Interurban,Payload - Coach +0 ,RigidTruck ,4x2 ,0 ,7.5 ,0 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +1 ,RigidTruck ,4x2 ,7.5 ,10 ,1 ,B1 , , ,Truck.vacc, ,RigidSolo , ,45/55 , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +1 ,Tractor ,4x2 ,7.5 ,10 ,1 ,B1 , , ,Truck.vacc, ,RigidSolo , ,45/55 , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +1 ,RigidTruck ,4x2 ,10 ,12 ,2 ,B2 ,T1 , ,Truck.vacc,RigidSolo ,RigidSolo ,22.5/32.5 ,45/55 ,45/1 , ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,+T , , , , , , , , , +1 ,Tractor ,4x2 ,10 ,12 ,2 ,B2 ,T1 , ,Truck.vacc,RigidSolo ,RigidSolo ,22.5/32.5 ,45/55 ,45/1 , ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,+T , , , , , , , , , +1 ,RigidTruck ,4x2 ,12 ,16 ,3 ,B3 , , ,Truck.vacc, ,RigidSolo , ,40/60 , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +1 ,Tractor ,4x2 ,12 ,16 ,3 ,B3 , , ,Truck.vacc, ,RigidSolo , ,40/60 , , ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +1 ,RigidTruck ,4x2 ,16 ,99 ,4 ,B4 ,T2 , ,Truck.vacc,RigidTrailer ,RigidSolo ,20/30 ,45/55 ,50/2 , ,1 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,14000+T ,4400 , ,4400 , , , , , , +1 ,Tractor ,4x2 ,16 ,99 ,5 , , ,ST1 ,Truck.vacc,TractorSemitrailer ,TractorSemitrailer ,20/25 ,25/25 ,55/3 ,50/3 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,19300 ,12900 , , , , , , , , +0 ,RigidTruck ,4x4 ,7.5 ,16 ,6 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +0 ,RigidTruck ,4x4 ,16 ,99 ,7 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +0 ,Tractor ,4x4 ,16 ,99 ,8 , , , ,Truck.vacc, ,TractorSemitrailer , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +1 ,RigidTruck ,6x2 ,0 ,99 ,9 ,B5 ,T2 , ,Truck.vacc,RigidTrailer ,RigidSolo ,20/30/15 ,35/40/25 ,35/2 , ,1 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,19300 ,7100 , ,7100 , , , , , , +1 ,Tractor ,6x2 ,0 ,99 ,10 , , ,ST1 ,Truck.vacc,TractorSemitrailer ,TractorSemitrailer ,15/10/20 ,20/10/20 ,55/2 ,50/2 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,19300 ,12900 , , , , , , , , +0 ,RigidTruck ,6x4 ,0 ,99 ,11 , , , ,Truck.vacc, ,RigidSolo , ,35/35/30 , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , ,7100 , , , , , +0 ,Tractor ,6x4 ,0 ,99 ,12 , , , ,Truck.vacc, ,TractorSemitrailer , ,20/15/15 , ,50/2 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , ,12900 , , , , , +0 ,RigidTruck ,6x6 ,0 ,99 ,13 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +0 ,Tractor ,6x6 ,0 ,99 ,14 , , , ,Truck.vacc, ,TractorSemitrailer , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +0 ,RigidTruck ,8x2 ,0 ,99 ,15 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +0 ,RigidTruck ,8x4 ,0 ,99 ,16 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , ,12900 , , , , , +0 ,RigidTruck ,8x6 ,0 ,99 ,17 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +0 ,RigidTruck ,8x8 ,0 ,99 ,17 , , , ,Truck.vacc, ,RigidSolo , , , , ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 , , , , , , , , , , +0 ,CityBus ,4x2 ,0 ,18 ,B1 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,0 , , , , , , , , , , +0 ,InterurbanBus ,4x2 ,0 ,18 ,B2 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 , , , , , , , , , , +0 ,Coach ,4x2 ,0 ,18 ,B3 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 , , , , , , , , , , +0 ,CityBus ,6x2 ,18 ,99 ,B4 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,0 , , , , , , , , , , +0 ,InterurbanBus ,6x2 ,18 ,99 ,B5 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 , , , , , , , , , , +0 ,Coach ,6x2 ,18 ,99 ,B6 , , , , , ,CoachBus , , , , ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 , , , , , , , , , , + \ No newline at end of file