diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index 8cfcec5b7c21d0b5c82d8bd33405da61f5bee7aa..b3901d1f6dc20b76b3231df2b80b5554936ac5bb 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs @@ -211,13 +211,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public IAngularGearInputData AngularGearInputData { - get - { - if (AngularGear == null) { - throw new InvalidFileFormatException("AngularGear not found"); - } - return AngularGear; - } + get { return AngularGear; } } IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs index d13b1314011b313f30f88d60dcd073ecb72e20a6..9edd4bbae188c5438d29664a7ab4ebcf3251210c 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs @@ -30,7 +30,6 @@ */ using System; -using System.Collections.Generic; using System.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; @@ -170,6 +169,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter }; } + /// <summary> + /// Creates an AngularGearData or returns null if there is no angular gear. + /// </summary> + /// <param name="data"></param> + /// <param name="useEfficiencyFallback">if true, the Efficiency value is used if no LossMap is found.</param> + /// <returns></returns> internal AngularGearData CreateAngularGearData(IAngularGearInputData data, bool useEfficiencyFallback) { try { @@ -178,47 +183,41 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter type = data.Type; } catch (Exception) { Log.Info("AngularGear not found. Assuming None."); - // ignored } - var angularGear = new AngularGearData { - SavedInDeclarationMode = data.SavedInDeclarationMode, - Vendor = data.Vendor, - ModelName = data.ModelName, - Creator = data.Creator, - Date = data.Date, - TypeId = data.TypeId, - DigestValue = data.DigestValue, - IntegrityStatus = data.IntegrityStatus, - Type = type, - AngularGear = new TransmissionData() - }; - - switch (angularGear.Type) { + switch (type) { case AngularGearType.SeparateAngularGear: + var angularGear = new AngularGearData { + SavedInDeclarationMode = data.SavedInDeclarationMode, + Vendor = data.Vendor, + ModelName = data.ModelName, + Creator = data.Creator, + Date = data.Date, + TypeId = data.TypeId, + DigestValue = data.DigestValue, + IntegrityStatus = data.IntegrityStatus, + Type = type, + AngularGear = new TransmissionData { Ratio = data.Ratio } + }; try { angularGear.AngularGear.LossMap = TransmissionLossMap.Create(data.LossMap, data.Ratio, "AngularGear"); - } catch (VectoException) { - if (useEfficiencyFallback) + } catch (VectoException ex) { + Log.Info("AngularGear Loss Map not found."); + if (useEfficiencyFallback) { + Log.Info("AngularGear Trying with Efficiency instead of Loss Map."); angularGear.AngularGear.LossMap = TransmissionLossMap.Create(data.Efficiency, data.Ratio, "AngularGear"); - else { - throw; + } else { + throw new VectoException("AngularGear: LossMap or Efficiency not found.", ex); } } - angularGear.AngularGear.Ratio = data.Ratio; - break; + return angularGear; case AngularGearType.LossesIncludedInGearbox: case AngularGearType.None: - angularGear.AngularGear.Ratio = 1; - // if no angular gear or already included: Create LossMap with 100% efficiency - angularGear.AngularGear.LossMap = TransmissionLossMap.Create(1, angularGear.AngularGear.Ratio, - "Zero Losses AngularGear"); - break; + return null; default: throw new ArgumentOutOfRangeException("data", "Unknown AngularGear Type."); } - return angularGear; } catch (Exception e) { throw new VectoException("Error while reading AngularGear data: {0}", e.Message); } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index cfb843741a4f1228226993209f4e77750fe5052c..01df33ae4f3dac5fc410a822c4a4e30e539a0657 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -104,7 +104,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl new PWheelCycle(container, data.Cycle, data.AxleGearData.AxleGear.Ratio, gearbox.ModelData.Gears.ToDictionary(g => g.Key, g => g.Value.Ratio)) .AddComponent(new AxleGear(container, data.AxleGearData)) - .AddComponent(new AngularGear(container, data.AngularGearData)) + .AddComponent(data.AngularGearData != null ? new AngularGear(container, data.AngularGearData) : null) .AddRetarderAndGearbox(data.Retarder, gearbox, container) .AddComponent(new CycleClutch(container)) .AddComponent(new CombustionEngine(container, data.EngineData, pt1Disabled: true)) @@ -128,7 +128,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl .AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia)) .AddComponent(new Brakes(container)) .AddComponent(new AxleGear(container, data.AxleGearData)) - .AddComponent(new AngularGear(container, data.AngularGearData)) + .AddComponent(data.AngularGearData != null ? new AngularGear(container, data.AngularGearData) : null) .AddRetarderAndGearbox(data.Retarder, GetGearbox(container, data.GearboxData), container) .AddComponent(new Clutch(container, data.EngineData, engine.IdleController)) .AddComponent(engine) @@ -151,7 +151,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl .AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia)) .AddComponent(new Brakes(container)) .AddComponent(new AxleGear(container, data.AxleGearData)) - .AddComponent(new AngularGear(container, data.AngularGearData)) + .AddComponent(data.AngularGearData != null ? new AngularGear(container, data.AngularGearData) : null) .AddRetarderAndGearbox(data.Retarder, new CycleGearbox(container, data.GearboxData), container) .AddComponent(new CycleClutch(container)) .AddComponent(new CombustionEngine(container, data.EngineData)) @@ -178,7 +178,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl .AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia)) .AddComponent(new Brakes(container)) .AddComponent(new AxleGear(container, data.AxleGearData)) - .AddComponent(new AngularGear(container, data.AngularGearData)) + .AddComponent(data.AngularGearData != null ? new AngularGear(container, data.AngularGearData) : null) .AddRetarderAndGearbox(data.Retarder, GetGearbox(container, data.GearboxData), container) .AddComponent(new Clutch(container, data.EngineData, engine.IdleController)) .AddComponent(engine) diff --git a/VectoCore/VectoCore/Utils/ProviderExtensions.cs b/VectoCore/VectoCore/Utils/ProviderExtensions.cs index 835d4448011e3397964899ffdcc30385fcf29561..294757a699bc4cb6545a429ca14541f2e034520f 100644 --- a/VectoCore/VectoCore/Utils/ProviderExtensions.cs +++ b/VectoCore/VectoCore/Utils/ProviderExtensions.cs @@ -83,6 +83,9 @@ namespace TUGraz.VectoCore.Utils public static IPowerTrainComponent AddComponent(this IPowerTrainComponent prev, IPowerTrainComponent next) { + if (next == null) + return prev; + prev.InPort().Connect(next.OutPort()); return next; }