From 2c8f0a51e80dca7818a1e252a483252d3a3e5f6a Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Thu, 23 Jan 2020 19:39:00 +0100 Subject: [PATCH] more work on filling parameters for bus auxiliaries --- VECTO/Input Files/Engine.vb | 1 + VECTO/Input Files/Gearbox.vb | 1 + VECTO/Input Files/MockVehicleInputData.vb | 1 + VECTO/Input Files/Vehicle.vb | 1 + .../M0_5_SmartAlternatorSetEfficiencyTests.vb | 14 +- ..._NonSmart_AlternatorsSetEfficiencyTests.vb | 29 ++- .../M1_AverageHVACLoadDemandTests.vb | 5 +- .../M2_AverageElectricalLoadTests.vb | 8 +- .../M5_SmartAlternatorSetGenerationTests.vb | 16 +- .../VectoAuxiliariesTests/UnitTests/Utils.vb | 2 +- .../IPneumaticUserInputsConfig.cs | 42 +++- .../InputData/DeclarationInputData.cs | 7 +- .../Resources/XMLNames.Designer.cs | 171 ++++++++++++++++ .../VectoCommon/Resources/XMLNames.resx | 45 +++++ VectoCommon/VectoCommon/VectoCommon.csproj | 2 - .../FileIO/JSON/BusAuxiliaryInputData.cs | 1 + .../FileIO/JSON/JSONComponentInputData.cs | 1 + .../InputData/FileIO/JSON/JSONVehicleData.cs | 10 +- .../FileIO/XML/Common/AbstractXMLType.cs | 15 ++ ...MLDeclarationBusAuxiliariesDataProvider.cs | 189 +++++++++++++++++- .../XMLDeclarationVehicleDataProvider.cs | 5 +- .../XMLDeclarationInputDataV26InjectModule.cs | 4 +- .../XMLEngineeringVehicleDataProvider.cs | 1 + .../ComponentData/ElectricConsumerReader.cs | 5 +- .../DeclarationDataAdapterPrimaryBus.cs | 141 ++++++++++--- .../BusAuxiliaries/AdvancedAuxiliaries.cs | 12 +- .../Impl/Electrics/ElectricalConsumer.cs | 15 +- .../Impl/Electrics/M00Impl.cs | 18 +- .../Impl/Electrics/M02Impl.cs | 17 +- .../Impl/Electrics/M0_1Impl.cs | 24 --- .../Impl/Electrics/M0_5Impl.cs | 19 +- .../Impl/Electrics/ResultCard.cs | 25 ++- .../Impl/Electrics/SimpleAlternator.cs | 30 +++ .../DownstreamModules/Impl/HVAC/M01Impl.cs | 1 - .../IM0_1_AverageElectricLoadDemand.cs | 10 - .../Declaration/BusAlternatorTechnologies.cs | 27 +++ .../Models/Declaration/BusSegments.cs | 60 ++++-- .../Models/Declaration/DeclarationData.cs | 4 +- .../VectoCore/Models/Declaration/Mission.cs | 3 + .../Buses/AlternatorTechnologies.csv | 2 + .../Declaration/HeavyBusSegmentationTable.csv | 42 ++-- .../VectoOutputPrimaryVehicleInformation.xsd | 8 +- VectoCore/VectoCore/VectoCore.csproj | 5 +- .../Utils/MockDeclarationVehicleInputData.cs | 2 + 44 files changed, 818 insertions(+), 223 deletions(-) delete mode 100644 VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_1Impl.cs create mode 100644 VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleAlternator.cs delete mode 100644 VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/IM0_1_AverageElectricLoadDemand.cs create mode 100644 VectoCore/VectoCore/Models/Declaration/BusAlternatorTechnologies.cs create mode 100644 VectoCore/VectoCore/Resources/Declaration/Buses/AlternatorTechnologies.csv diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb index 0904ab94d3..8e87c3b3a6 100644 --- a/VECTO/Input Files/Engine.vb +++ b/VECTO/Input Files/Engine.vb @@ -656,6 +656,7 @@ Public Class DummyVehicle Public ReadOnly Property IVehicleDeclarationInputData_Height As Meter Implements IVehicleDeclarationInputData.Height Public ReadOnly Property Length As Meter Implements IVehicleDeclarationInputData.Length Public ReadOnly Property Width As Meter Implements IVehicleDeclarationInputData.Width + Public ReadOnly Property EntranceHeight As Meter Implements IVehicleDeclarationInputData.EntranceHeight Public readonly Property Components As IVehicleComponentsDeclaration Implements IVehicleDeclarationInputData.Components get diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index b53660c418..771b29b61e 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -844,6 +844,7 @@ Public Class MockEngineeringVehicle Public Property Height As Meter Implements IVehicleEngineeringInputData.Height Public ReadOnly Property Length As Meter Implements IVehicleDeclarationInputData.Length Public ReadOnly Property Width As Meter Implements IVehicleDeclarationInputData.Width + Public ReadOnly Property EntranceHeight As Meter Implements IVehicleDeclarationInputData.EntranceHeight Public Property Components As IVehicleComponentsDeclaration Implements IVehicleDeclarationInputData.Components Public ReadOnly Property XMLSource As XmlNode Implements IVehicleDeclarationInputData.XMLSource diff --git a/VECTO/Input Files/MockVehicleInputData.vb b/VECTO/Input Files/MockVehicleInputData.vb index 71ea965995..1cca56259f 100644 --- a/VECTO/Input Files/MockVehicleInputData.vb +++ b/VECTO/Input Files/MockVehicleInputData.vb @@ -48,6 +48,7 @@ Public Class MockVehicleInputData Public ReadOnly Property Height As Meter Implements IVehicleDeclarationInputData.Height Public ReadOnly Property Length As Meter Implements IVehicleDeclarationInputData.Length Public ReadOnly Property Width As Meter Implements IVehicleDeclarationInputData.Width + Public ReadOnly Property EntranceHeight As Meter Implements IVehicleDeclarationInputData.EntranceHeight Public Property Components As IVehicleComponentsDeclaration Implements IVehicleDeclarationInputData.Components Public ReadOnly Property XMLSource As XmlNode Implements IVehicleDeclarationInputData.XMLSource End Class \ No newline at end of file diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 887a949383..4ea96dbdb0 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -426,6 +426,7 @@ Public Class Vehicle Public ReadOnly Property Length As Meter Implements IVehicleDeclarationInputData.Length Public ReadOnly Property Width As Meter Implements IVehicleDeclarationInputData.Width + Public ReadOnly Property EntranceHeight As Meter Implements IVehicleDeclarationInputData.EntranceHeight Public ReadOnly Property IVehicleEngineeringInputData_Components As IVehicleComponentsEngineering Implements IVehicleEngineeringInputData.Components get diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_5_SmartAlternatorSetEfficiencyTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_5_SmartAlternatorSetEfficiencyTests.vb index 6c1c60ce86..20056afdd6 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_5_SmartAlternatorSetEfficiencyTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_5_SmartAlternatorSetEfficiencyTests.vb @@ -63,22 +63,20 @@ Namespace UnitTests Dim auxConfig = Utils.GetAuxTestConfig() 'Dim hvacMap As New HVACMap("testFiles\TestHvacMap.csv") 'hvacMap.Initialise() - dim m01 = New M0_1Impl(auxConfig) - Dim m0 As New M00Impl(m01, auxConfig.ElectricalUserInputsConfig.AlternatorMap, 26.3.SI (Of Volt), auxConfig.Signals, ssm) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = 26.3.SI (Of Volt) + Dim m0 As New M00Impl(auxConfig.ElectricalUserInputsConfig, auxConfig.Signals, ssm) 'Results Cards Dim readings = New List(Of SmartResult) readings.Add(New SmartResult(10.SI (of Ampere), 8.SI (of Ampere))) readings.Add(New SmartResult(70.SI (of Ampere), 63.SI (of Ampere))) - Dim idleResult As New ResultCard(readings) - Dim tractionResult As New ResultCard(readings) - Dim overrunResult As New ResultCard(readings) - + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ResultCardIdle = New ResultCard(readings) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ResultCardTraction = New ResultCard(readings) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ResultCardOverrun = New ResultCard(readings) - target = New M0_5Impl(m0, m01, auxConfig.ElectricalUserInputsConfig.AlternatorMap, idleResult, tractionResult, - overrunResult, auxConfig.Signals) + target = New M0_5Impl(m0, auxConfig.ElectricalUserInputsConfig, auxConfig.Signals) End Sub <Test()> diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb index a5ac8efa76..90c81129b9 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb @@ -71,8 +71,10 @@ Namespace UnitTests Dim auxConfig = utils.GetAuxTestConfig() CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) - Dim m01 As IM0_1_AverageElectricLoadDemand = New M0_1Impl(Utils.GetAuxTestConfig()) - Dim target As IM0_NonSmart_AlternatorsSetEfficiency = New M00Impl(m01, alternatorMap, powernetVoltage, + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap + + Dim target As IM0_NonSmart_AlternatorsSetEfficiency = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputs)) Assert.IsNotNull(target) End Sub @@ -83,7 +85,10 @@ Namespace UnitTests Dim target As IM0_NonSmart_AlternatorsSetEfficiency Dim auxConfig = utils.GetAuxTestConfig() CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) - Assert.That(Sub() target = New M00Impl(Nothing, alternatorMap, powernetVoltage, signals, New SSMTOOL(auxconfig.SSMInputs)), + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap + + Assert.That(Sub() target = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputs)), Throws.InstanceOf (Of ArgumentException)) End Sub @@ -92,9 +97,10 @@ Namespace UnitTests Dim target As IM0_NonSmart_AlternatorsSetEfficiency Dim auxConfig = utils.GetAuxTestConfig() CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap = Nothing - Dim m01 As IM0_1_AverageElectricLoadDemand = New M0_1Impl(auxConfig) - Assert.That(Sub() target = New M00Impl(m01, Nothing, powernetVoltage, signals, New SSMTOOL(auxconfig.SSMInputs)), + Assert.That(Sub() target = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputs)), Throws.InstanceOf (Of ArgumentException)) End Sub @@ -108,9 +114,11 @@ Namespace UnitTests CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AverageCurrentDemandInclBaseLoad = 0.5.SI(Of Ampere) CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) - Dim m01 As IM0_1_AverageElectricLoadDemand = New M0_1Impl(auxConfig) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap - Dim target As M00Impl = New M00Impl(m01, alternatorMap, powernetVoltage, signals, New SSMTOOL(auxconfig.SSMInputs)) + + Dim target As M00Impl = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputs)) Dim actual As Double = target.AlternatorsEfficiency @@ -123,10 +131,11 @@ Namespace UnitTests Public Sub HVAC_PowerDemandAmpsTest() Dim auxConfig = utils.GetAuxTestConfig() CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) - Dim m01 As IM0_1_AverageElectricLoadDemand = New M0_1Impl(auxConfig) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap + - Dim target As IM0_NonSmart_AlternatorsSetEfficiency = New M00Impl(m01, alternatorMap, powernetVoltage, - signals, New SSMTOOL(auxconfig.SSMInputs)) + Dim target As IM0_NonSmart_AlternatorsSetEfficiency = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputs)) Dim actual As Ampere Dim expected As Single = 0 diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M1_AverageHVACLoadDemandTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M1_AverageHVACLoadDemandTests.vb index 9ad62f8faa..3757debf09 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M1_AverageHVACLoadDemandTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M1_AverageHVACLoadDemandTests.vb @@ -58,9 +58,10 @@ Namespace UnitTests For Each entry As ISSMTechnology In ssm.TechList.TechLines entry.OnVehicle = True Next - Dim m01 As IM0_1_AverageElectricLoadDemand = New M0_1Impl(auxConfig) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap - m0 = New M00Impl(m01,alternatorMap, powernetVoltage, signals, ssm) + m0 = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, ssm) End Sub Private Function GETM1Instance() As IM1_AverageHVACLoadDemand diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb index 141225a7e9..c13e134ed7 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb @@ -58,14 +58,16 @@ Namespace UnitTests Dim altMap As IAlternatorMap = AlternatorReader.ReadMap( "testfiles\testAlternatorMap.aalt") 'altMap.Initialise() + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = 26.3.SI(Of Volt) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =altMap + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorGearEfficiency = 0.8 - Dim m01 As IM0_1_AverageElectricLoadDemand = New M0_1Impl(auxConfig) - Dim m0 As New M00Impl(m01, altMap, 26.3.SI(Of Volt), signals, New SSMTOOL(auxConfig.SSMInputs)) + Dim m0 As New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxConfig.SSMInputs)) 'Get Consumers. - Return New M02Impl(m01, m0, 0.8, 26.3.SI(Of Volt)) + Return New M02Impl(m0, auxConfig.ElectricalUserInputsConfig) End Function #End Region diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb index 2836d53c58..3cef3d1c56 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb @@ -65,11 +65,10 @@ Namespace UnitTests Dim auxConfig = Utils.GetAuxTestConfig() CType(CType(auxConfig.SSMInputs,SSMInputs).Vehicle, VehicleData).Height = 0.SI(of Meter) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = _powerNetVoltage + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap = alternatoMap - Dim m0_1 = New M0_1Impl(auxConfig) - Dim _ - m0 As _ - New M00Impl(m0_1, alternatoMap, _powerNetVoltage, _signals, + Dim m0 As New M00Impl(auxConfig.ElectricalUserInputsConfig, _signals, New SSMTOOL(auxConfig.SSMInputs)) 'Results Cards @@ -77,15 +76,14 @@ Namespace UnitTests readings.Add(New SmartResult(10.SI(Of Ampere), 8.SI(Of Ampere))) readings.Add(New SmartResult(70.SI(Of Ampere), 63.SI(Of Ampere))) - Dim idleResult As New ResultCard(readings) - Dim tractionResult As New ResultCard(readings) - Dim overrunResult As New ResultCard(readings) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ResultCardIdle = New ResultCard(readings) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ResultCardTraction = New ResultCard(readings) + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ResultCardOverrun = New ResultCard(readings) Dim signals As ISignals = New Signals signals.EngineSpeed = 2000.RPMtoRad() - _m05 = New M0_5Impl(m0, m0_1, alternatoMap, idleResult, tractionResult, - overrunResult, signals) + _m05 = New M0_5Impl(m0, auxConfig.ElectricalUserInputsConfig, signals) End Sub <TestCase()> diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb index b21b3b0022..d74dd17674 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb @@ -81,7 +81,7 @@ Public Class Utils } End function - public Shared Function GetAuxTestConfig(Optional retarder As boolean = true) as IAuxiliaryConfig + public Shared Function GetAuxTestConfig(Optional retarder As boolean = true) as AuxiliaryConfig Dim signals = New Signals() signals.EngineSpeed = 2000.RPMtoRad() diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IPneumaticUserInputsConfig.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IPneumaticUserInputsConfig.cs index 74e8984e25..d93ab63a69 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/IPneumaticUserInputsConfig.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/IPneumaticUserInputsConfig.cs @@ -6,16 +6,19 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { public interface IPneumaticUserInputsConfig { - ICompressorMap CompressorMap { get; } - double CompressorGearEfficiency { get; } - double CompressorGearRatio { get; } - bool SmartAirCompression { get; } - bool SmartRegeneration { get; } + ICompressorMap CompressorMap { get; } + double CompressorGearEfficiency { get; } + double CompressorGearRatio { get; } + bool SmartAirCompression { get; } + + bool SmartRegeneration { get; } + //bool RetarderBrake { get; } - Meter KneelingHeight { get; } - ConsumerTechnology AirSuspensionControl { get; } // mechanical or electrical - ConsumerTechnology AdBlueDosing { get; } // pnmeumatic or electric - ConsumerTechnology Doors { get; } // pneumatic or electric + Meter KneelingHeight { get; } + + ConsumerTechnology AirSuspensionControl { get; } // mechanical or electrical + ConsumerTechnology AdBlueDosing { get; } // pnmeumatic or electric + ConsumerTechnology Doors { get; } // pneumatic or electric } public enum ConsumerTechnology @@ -25,4 +28,25 @@ namespace TUGraz.VectoCommon.BusAuxiliaries Electrically, Pneumatically, } + + public static class ConsumerTechnologyHelper + { + public static ConsumerTechnology Parse(string technology) + { + switch (technology.ToLowerInvariant()) { + case "mechanically": + case "mechanic": + return ConsumerTechnology.Mechanically; + case "electrically": + case "electric": + case "electronically": + return ConsumerTechnology.Electrically; + case "pneumatically": + case "pneumatic": + return ConsumerTechnology.Pneumatically; + default: + return ConsumerTechnology.Unknown; + } + } + } } diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 3c200b57cd..5ed766e5b1 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -181,6 +181,8 @@ namespace TUGraz.VectoCommon.InputData Meter Width { get; } + Meter EntranceHeight { get; } + // components IVehicleComponentsDeclaration Components { get; } @@ -742,6 +744,10 @@ namespace TUGraz.VectoCommon.InputData double Ratio { get; } string CompressorSize { get; } + + bool SmartAirCompression { get; } + + bool SmartRegeneration { get; } } public interface IPneumaticConsumersDeclarationData @@ -750,7 +756,6 @@ namespace TUGraz.VectoCommon.InputData ConsumerTechnology AdBlueDosing { get; } ConsumerTechnology DoorDriveTechnology { get; } - Meter EntranceHeight { get; } } public interface IHVACBusAuxiliariesDeclarationData diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs index 4dfd882404..1ce46301d1 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs +++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs @@ -402,6 +402,159 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to ElectricSystem. + /// </summary> + public static string BusAux_ElectricSystem { + get { + return ResourceManager.GetString("BusAux_ElectricSystem", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ratio. + /// </summary> + public static string BusAux_ElectricSystem_Alternator_Ratio_Attr { + get { + return ResourceManager.GetString("BusAux_ElectricSystem_Alternator_Ratio_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AlternatorTechnology. + /// </summary> + public static string BusAux_ElectricSystem_AlternatorTechnology { + get { + return ResourceManager.GetString("BusAux_ElectricSystem_AlternatorTechnology", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ResultCards. + /// </summary> + public static string BusAux_ElectricSystem_ResultCards { + get { + return ResourceManager.GetString("BusAux_ElectricSystem_ResultCards", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SmartElectrics. + /// </summary> + public static string BusAux_ElectricSystem_SmartElectrics { + get { + return ResourceManager.GetString("BusAux_ElectricSystem_SmartElectrics", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PneumaticSystem. + /// </summary> + public static string BusAux_PneumaticSystem { + get { + return ResourceManager.GetString("BusAux_PneumaticSystem", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AdBlueDosing. + /// </summary> + public static string BusAux_PneumaticSystem_AdBlueDosing { + get { + return ResourceManager.GetString("BusAux_PneumaticSystem_AdBlueDosing", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AirsuspensionControl. + /// </summary> + public static string BusAux_PneumaticSystem_AirsuspensionControl { + get { + return ResourceManager.GetString("BusAux_PneumaticSystem_AirsuspensionControl", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CompressorRatio. + /// </summary> + public static string BusAux_PneumaticSystem_CompressorRatio { + get { + return ResourceManager.GetString("BusAux_PneumaticSystem_CompressorRatio", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SizeOfAirSupply. + /// </summary> + public static string BusAux_PneumaticSystem_CompressorSize { + get { + return ResourceManager.GetString("BusAux_PneumaticSystem_CompressorSize", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DoorDriveTechnology. + /// </summary> + public static string BusAux_PneumaticSystem_DoorDriveTechnology { + get { + return ResourceManager.GetString("BusAux_PneumaticSystem_DoorDriveTechnology", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SmartCompressionSystem. + /// </summary> + public static string BusAux_PneumaticSystem_SmartcompressionSystem { + get { + return ResourceManager.GetString("BusAux_PneumaticSystem_SmartcompressionSystem", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SmartRegenerationSystem. + /// </summary> + public static string BusAux_PneumaticSystem_SmartRegenerationSystem { + get { + return ResourceManager.GetString("BusAux_PneumaticSystem_SmartRegenerationSystem", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string BusAux_ResultCard_Entry { + get { + return ResourceManager.GetString("BusAux_ResultCard_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Idle. + /// </summary> + public static string BusAux_ResultCard_Idle { + get { + return ResourceManager.GetString("BusAux_ResultCard_Idle", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Overrun. + /// </summary> + public static string BusAux_ResultCard_Overrun { + get { + return ResourceManager.GetString("BusAux_ResultCard_Overrun", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Traction. + /// </summary> + public static string BusAux_ResultCard_Traction { + get { + return ResourceManager.GetString("BusAux_ResultCard_Traction", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to AirDrag. /// </summary> @@ -2247,6 +2400,24 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to current. + /// </summary> + public static string ResultCard_Entry_CurrentAttr { + get { + return ResourceManager.GetString("ResultCard_Entry_CurrentAttr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to smartCurrent. + /// </summary> + public static string ResultCard_Entry_SmartCurrent_Attr { + get { + return ResourceManager.GetString("ResultCard_Entry_SmartCurrent_Attr", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to RetarderLossMap. /// </summary> diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx index 91860e88ed..69f3da494c 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.resx +++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx @@ -1170,4 +1170,49 @@ <data name="Gearbox_AxlegearRatio" xml:space="preserve"> <value>AxlegearRatio</value> </data> + <data name="BusAux_ElectricSystem" xml:space="preserve"> + <value>ElectricSystem</value> + </data> + <data name="BusAux_ElectricSystem_ResultCards" xml:space="preserve"> + <value>ResultCards</value> + </data> + <data name="BusAux_ResultCard_Traction" xml:space="preserve"> + <value>Traction</value> + </data> + <data name="BusAux_ResultCard_Overrun" xml:space="preserve"> + <value>Overrun</value> + </data> + <data name="BusAux_ResultCard_Idle" xml:space="preserve"> + <value>Idle</value> + </data> + <data name="BusAux_ResultCard_Entry" xml:space="preserve"> + <value>Entry</value> + </data> + <data name="ResultCard_Entry_SmartCurrent_Attr" xml:space="preserve"> + <value>smartCurrent</value> + </data> + <data name="ResultCard_Entry_CurrentAttr" xml:space="preserve"> + <value>current</value> + </data> + <data name="BusAux_ElectricSystem_SmartElectrics" xml:space="preserve"> + <value>SmartElectrics</value> + </data> + <data name="BusAux_ElectricSystem_AlternatorTechnology" xml:space="preserve"> + <value>AlternatorTechnology</value> + </data> + <data name="BusAux_ElectricSystem_Alternator_Ratio_Attr" xml:space="preserve"> + <value>ratio</value> + </data> + <data name="BusAux_PneumaticSystem" xml:space="preserve"> + <value>PneumaticSystem</value> + </data> + <data name="BusAux_PneumaticSystem_AirsuspensionControl" xml:space="preserve"> + <value>AirsuspensionControl</value> + </data> + <data name="BusAux_PneumaticSystem_AdBlueDosing" xml:space="preserve"> + <value>AdBlueDosing</value> + </data> + <data name="BusAux_PneumaticSystem_DoorDriveTechnology" xml:space="preserve"> + <value>DoorDriveTechnology</value> + </data> </root> \ No newline at end of file diff --git a/VectoCommon/VectoCommon/VectoCommon.csproj b/VectoCommon/VectoCommon/VectoCommon.csproj index 841c4bfe9b..eaf17f4ceb 100644 --- a/VectoCommon/VectoCommon/VectoCommon.csproj +++ b/VectoCommon/VectoCommon/VectoCommon.csproj @@ -58,8 +58,6 @@ <Compile Include="BusAuxiliaries\IAuxiliaryConfig.cs" /> <Compile Include="BusAuxiliaries\ICombinedAlternatorMapRow.cs" /> <Compile Include="BusAuxiliaries\ICompressorMap.cs" /> - <Compile Include="BusAuxiliaries\IElectricalConsumer.cs" /> - <Compile Include="BusAuxiliaries\IElectricalConsumerList.cs" /> <Compile Include="BusAuxiliaries\IElectricsUserInputsConfig.cs" /> <Compile Include="BusAuxiliaries\IEnvironmentalConditionsMapEntry.cs" /> <Compile Include="BusAuxiliaries\IEnvironmentalConditionsMap.cs" /> diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs index cba1a204df..96da2833e5 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs @@ -72,6 +72,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON // DoorActuationTimeSecond electricalUserInputsConfig.DoorActuationTimeSecond = elData.GetEx<double>("DoorActuationTimeSecond").SI<Second>(); + electricalUserInputsConfig.AverageCurrentDemandInclBaseLoad = elData["ElectricalConsumers"] .GetEx<double>("AverageCurrentDemandInclBaseLoad").SI<Ampere>(); electricalUserInputsConfig.AverageCurrentDemandWithoutBaseLoad = elData["ElectricalConsumers"] diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs index c4ea9883e3..083d03a68d 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -248,6 +248,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public Meter Length { get { return VehicleData.Length; } } public Meter Width { get { return VehicleData.Width; } } + public Meter EntranceHeight { get { return null; } } IVehicleComponentsEngineering IVehicleEngineeringInputData.Components { diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index c4a57b0725..44fbaf4b8e 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -164,13 +164,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } public virtual ConsumerTechnology DoorDriveTechnology { get { return ConsumerTechnology.Unknown; } } - public virtual Meter EntranceHeight - { - get { - return null; - } - } - + #endregion #region Implementation of IHVACBusAuxiliariesDeclarationData @@ -373,6 +367,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return null; } } + public virtual Meter EntranceHeight { get { return null; } } + IVehicleComponentsEngineering IVehicleEngineeringInputData.Components { get { return this; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs index 156f38b33c..4e3b279524 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs @@ -21,10 +21,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Common { return GetNode(nodeName, BaseNode, required:false) != null; } + protected bool ElementExists(string[] nodePath) + { + return GetNode(nodePath, BaseNode, required: false) != null; + } + + protected string GetString(string nodeName, XmlNode basenode = null, bool required = true) { return GetNode(nodeName, basenode, required)?.InnerText; } + protected string GetString(string[] nodePath, XmlNode basenode = null, bool required = true) + { + return GetNode(nodePath, basenode, required)?.InnerText; + } protected double GetDouble(string nodeName, double? fallbackValue = null) { @@ -53,6 +63,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Common { return XmlConvert.ToBoolean(GetNode(nodeName).InnerText); } + protected bool GetBool(string[] nodePath) + { + return XmlConvert.ToBoolean(GetNode(nodePath).InnerText); + } + protected XmlNode GetNode(string[] nodeName, XmlNode baseNode = null, bool required = true) { return DoGetNode(XMLHelper.QueryLocalName(nodeName), baseNode, required); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs index fd157ffb39..1b914e4dcd 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs @@ -2,14 +2,20 @@ using System.Linq; using System.Xml; using System.Xml.Linq; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Common; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.InputData.Impl; using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { - public class XMLDeclarationBusAuxiliariesDataProviderV26 : AbstractXMLType, IXMLBusAuxiliariesDeclarationData +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider +{ + public class XMLDeclarationPrimaryBusAuxiliariesDataProviderV26 : AbstractXMLType, IXMLBusAuxiliariesDeclarationData, + IElectricSupplyDeclarationData, IResultCardDeclarationInputData, IPneumaticConsumersDeclarationData, + IPneumaticSupplyDeclarationData { public static XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26; @@ -17,12 +23,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - public XMLDeclarationBusAuxiliariesDataProviderV26( + public XMLDeclarationPrimaryBusAuxiliariesDataProviderV26( IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode) { } #region Implementation of IBusAuxiliariesDeclarationData - public XmlNode XMLSource { get { return BaseNode; } } + public XmlNode XMLSource + { + get { return BaseNode; } + } public string FanTechnology { @@ -31,15 +40,175 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { public IList<string> SteeringPumpTechnology { - get { return GetNodes(new[] { "SteeringPump", XMLNames.Auxiliaries_Auxiliary_Technology }).Cast <XmlNode>().Select(x => x.InnerText).ToList(); } + get { + return GetNodes(new[] { "SteeringPump", XMLNames.Auxiliaries_Auxiliary_Technology }) + .Cast<XmlNode>().Select(x => x.InnerText).ToList(); + } + } + + public IElectricSupplyDeclarationData ElectricSupply + { + get { return this; } + } + + public IElectricConsumersDeclarationData ElectricConsumers + { + get { return null; } + } + + public IPneumaticSupplyDeclarationData PneumaticSupply + { + get { return this; } + } + + public IPneumaticConsumersDeclarationData PneumaticConsumers + { + get { return this; } } - public IElectricSupplyDeclarationData ElectricSupply { get; } - public IElectricConsumersDeclarationData ElectricConsumers { get; } - public IPneumaticSupplyDeclarationData PneumaticSupply { get; } - public IPneumaticConsumersDeclarationData PneumaticConsumers { get; } public IHVACBusAuxiliariesDeclarationData HVACAux { get; } #endregion + + #region Implementation of IElectricSupplyDeclarationData + + public IList<IAlternatorDeclarationInputData> Alternators + { + get { + return GetNodes(new[] { XMLNames.BusAux_ElectricSystem, XMLNames.BusAux_ElectricSystem_AlternatorTechnology }) + .Cast<XmlNode>().Select( + x => new AlternatorInputData( + x.InnerText, GetAttribute(x, XMLNames.BusAux_ElectricSystem_Alternator_Ratio_Attr).ToDouble())) + .Cast<IAlternatorDeclarationInputData>().ToList(); + } + } + + public IResultCardDeclarationInputData ResultCards + { + get { + return ElementExists(new[] { XMLNames.BusAux_ElectricSystem, XMLNames.BusAux_ElectricSystem_ResultCards }) + ? this + : null; + } + } + + public bool SmartElectrics + { + get { return GetBool(new[] { XMLNames.BusAux_ElectricSystem, XMLNames.BusAux_ElectricSystem_SmartElectrics }); } + } + + #endregion + + #region Implementation of IResultCardDeclarationInputData + + public IList<IResultCardEntry> Idle + { + get { + return GetNodes( + new[] { + XMLNames.BusAux_ElectricSystem, XMLNames.BusAux_ElectricSystem_ResultCards, XMLNames.BusAux_ResultCard_Idle, + XMLNames.BusAux_ResultCard_Entry + }) + .Cast<XmlNode>().Select( + x => new ResultCardEntry( + GetAttribute(x, XMLNames.ResultCard_Entry_CurrentAttr).ToDouble().SI<Ampere>(), + GetAttribute(x, XMLNames.ResultCard_Entry_SmartCurrent_Attr).ToDouble().SI<Ampere>())) + .Cast<IResultCardEntry>() + .ToList(); + } + } + + public IList<IResultCardEntry> Traction + { + get { + return GetNodes( + new[] { + XMLNames.BusAux_ElectricSystem, XMLNames.BusAux_ElectricSystem_ResultCards, XMLNames.BusAux_ResultCard_Traction, + XMLNames.BusAux_ResultCard_Entry + }) + .Cast<XmlNode>().Select( + x => new ResultCardEntry( + GetAttribute(x, XMLNames.ResultCard_Entry_CurrentAttr).ToDouble().SI<Ampere>(), + GetAttribute(x, XMLNames.ResultCard_Entry_SmartCurrent_Attr).ToDouble().SI<Ampere>())) + .Cast<IResultCardEntry>() + .ToList(); + } + } + + public IList<IResultCardEntry> Overrun + { + get { + return GetNodes( + new[] { + XMLNames.BusAux_ElectricSystem, XMLNames.BusAux_ElectricSystem_ResultCards, XMLNames.BusAux_ResultCard_Overrun, + XMLNames.BusAux_ResultCard_Entry + }) + .Cast<XmlNode>().Select( + x => new ResultCardEntry( + GetAttribute(x, XMLNames.ResultCard_Entry_CurrentAttr).ToDouble().SI<Ampere>(), + GetAttribute(x, XMLNames.ResultCard_Entry_SmartCurrent_Attr).ToDouble().SI<Ampere>())) + .Cast<IResultCardEntry>() + .ToList(); + } + } + + #endregion + + #region Implementation of IPneumaticConsumersDeclarationData + + public ConsumerTechnology AirsuspensionControl + { + get { + return ConsumerTechnologyHelper.Parse( + GetString(new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_AirsuspensionControl })); + } + } + + public ConsumerTechnology AdBlueDosing + { + get { + return ConsumerTechnologyHelper.Parse( + GetString( + new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_AdBlueDosing })); + } + } + + public ConsumerTechnology DoorDriveTechnology + { + get { + return ConsumerTechnologyHelper.Parse( + GetString(new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology })); + } + } + + #endregion + + #region Implementation of IPneumaticSupplyDeclarationData + + public double Ratio + { + get { return GetDouble(new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_CompressorRatio }); } + } + + public string CompressorSize + { + get { return GetString(new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_CompressorSize }); } + } + + public bool SmartAirCompression + { + get { + return GetBool(new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_SmartcompressionSystem }); + } + } + + public bool SmartRegeneration + { + get { + return GetBool(new[] { XMLNames.BusAux_PneumaticSystem, XMLNames.BusAux_PneumaticSystem_SmartRegenerationSystem }); + } + } + + #endregion } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index 86632066d0..9c094ac359 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -278,6 +278,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual Meter Height { get { return null; } } public virtual Meter Length { get { return null; } } public virtual Meter Width { get { return null; } } + public virtual Meter EntranceHeight { get { return null; } } public virtual IVehicleComponentsDeclaration Components { @@ -622,7 +623,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public override Kilogram GrossVehicleMassRating { get { return GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>(); } } - + public override Meter EntranceHeight { get { return null; } } + + #endregion #region Overrides of AbstractXMLResource diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs index d3bde412f8..814dd3f262 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs @@ -19,8 +19,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules { Bind<IXMLVehicleComponentsDeclaration>().To<XMLDeclarationPrimaryBusComponentsDataProviderV26>() .Named(XMLDeclarationPrimaryBusComponentsDataProviderV26.QUALIFIED_XSD_TYPE); - Bind<IXMLBusAuxiliariesDeclarationData>().To<XMLDeclarationBusAuxiliariesDataProviderV26>() - .Named(XMLDeclarationBusAuxiliariesDataProviderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLBusAuxiliariesDeclarationData>().To<XMLDeclarationPrimaryBusAuxiliariesDataProviderV26>() + .Named(XMLDeclarationPrimaryBusAuxiliariesDataProviderV26.QUALIFIED_XSD_TYPE); Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationMediumLorryVehicleDataProviderV26>() diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs index b045f37da4..0734e05b54 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs @@ -173,6 +173,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider public virtual Meter Width { get { return null; } } + public virtual Meter EntranceHeight { get { return null; } } IVehicleComponentsDeclaration IVehicleDeclarationInputData.Components { diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs index 9ec66bad98..64ad194473 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs @@ -9,6 +9,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; +using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.ComponentData @@ -43,8 +44,8 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData NumberInActualVehicle = row.Field<string>(Fields.NuminVehicle) }; foreach (var mission in EnumHelper.GetValues<MissionType>()) { - if (data.Columns.Contains(mission.ToString())) { - consumer[mission] = row.ParseDouble(mission.ToString()).SI<Ampere>(); + if (data.Columns.Contains(mission.ToXMLFormat())) { + consumer[mission] = row.ParseDouble(mission.ToXMLFormat()).SI<Ampere>(); } } retVal.Add(consumer); diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs index 8862cbd162..b3bf9b8a32 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs @@ -7,6 +7,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.Models.BusAuxiliaries; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC; @@ -14,6 +15,7 @@ using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter { @@ -71,7 +73,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter #endregion - public IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData vehicleData, VectoRunData runData) + public IAuxiliaryConfig CreateBusAuxiliariesData( + Mission mission, IVehicleDeclarationInputData vehicleData, VectoRunData runData) { var actuations = DeclarationData.BusAuxiliaries.ActuationsMap.Lookup(runData.Mission.MissionType); @@ -86,19 +89,57 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter FuelMap = runData.EngineData.Fuels.First().ConsumptionMap }; + return retVal; + } + private IElectricsUserInputsConfig GetElectricalUserConfig( + Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations) + { + var currentDemand = CalculateAverageCurrent(mission, vehicleData, actuations); + var busAux = vehicleData.Components.BusAuxiliaries; - return retVal; + return new ElectricsUserInputsConfig() { + SmartElectrical = busAux.ElectricSupply.SmartElectrics, + AverageCurrentDemandInclBaseLoad = currentDemand.Item1, + AverageCurrentDemandWithoutBaseLoad = currentDemand.Item2, + AlternatorMap = new SimpleAlternator(CalculateAlternatorEfficiency(busAux.ElectricSupply.Alternators)), + PowerNetVoltage = Constants.BusAuxiliaries.ElectricSystem.PowernetVoltage, + ResultCardIdle = busAux.ElectricSupply.ResultCards != null + ? new ResultCard( + busAux.ElectricSupply.ResultCards.Idle.Select(x => new SmartResult(x.Current, x.SmartCurrent)).ToList()) + : (IResultCard)new DummyResultCard(), + ResultCardOverrun = busAux.ElectricSupply.ResultCards != null + ? new ResultCard( + busAux.ElectricSupply.ResultCards.Overrun.Select(x => new SmartResult(x.Current, x.SmartCurrent)).ToList()) + : (IResultCard)new DummyResultCard(), + ResultCardTraction = busAux.ElectricSupply.ResultCards != null + ? new ResultCard( + busAux.ElectricSupply.ResultCards.Traction.Select(x => new SmartResult(x.Current, x.SmartCurrent)).ToList()) + : (IResultCard) new DummyResultCard(), + AlternatorGearEfficiency = Constants.BusAuxiliaries.ElectricSystem.AlternatorGearEfficiency, + }; + } + + private double CalculateAlternatorEfficiency(IList<IAlternatorDeclarationInputData> alternators) + { + var sum = 0.0; + foreach (var entry in alternators) { + sum += DeclarationData.BusAuxiliaries.AlternatorTechnologies.Lookup(entry.Technology); + } + + return sum / alternators.Count; } - private IElectricsUserInputsConfig GetElectricalUserConfig(Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations) + private Tuple<Ampere, Ampere> CalculateAverageCurrent( + Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations) { var avgInclBase = 0.SI<Ampere>(); var avgWithoutBase = 0.SI<Ampere>(); var doorDutyCycleFraction = (actuations.ParkBrakeAndDoors * Constants.BusAuxiliaries.ElectricalConsumers.DoorActuationTimeSecond) / actuations.CycleTime; - var electricDoors = vehicleData.Components.BusAuxiliaries.PneumaticConsumers.DoorDriveTechnology == + var busAux = vehicleData.Components.BusAuxiliaries; + var electricDoors = busAux.PneumaticConsumers.DoorDriveTechnology == ConsumerTechnology.Electrically; foreach (var consumer in DeclarationData.BusAuxiliaries.DefaultElectricConsumerList.Items) { var nbr = CalcNumberInVehicle(consumer.NumberInActualVehicle, mission); @@ -109,7 +150,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter : consumer.PhaseIdleTractionOn; var current = consumer.NominalCurrent(mission.MissionType) * dutyCycle * nbr; - if (consumer.Bonus && !VehicleHasConsumer(consumer.ConsumerName, vehicleData.Components.BusAuxiliaries)) { + if (consumer.Bonus && !VehicleHasConsumer(consumer.ConsumerName, busAux)) { current = 0.SI<Ampere>(); } @@ -119,29 +160,21 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter } } - - return new ElectricsUserInputsConfig() { - SmartElectrical = false, - AverageCurrentDemandInclBaseLoad = avgInclBase, - AverageCurrentDemandWithoutBaseLoad = avgWithoutBase, - AlternatorMap = new AlternatorMap(new List<ICombinedAlternatorMapRow>() {new CombinedAlternatorMapRow("test", 1000.RPMtoRad(), 10.SI<Ampere>(), 0.8, 1.0) }, ""), - PowerNetVoltage = Constants.BusAuxiliaries.ElectricSystem.PowernetVoltage, - ResultCardIdle = new ResultCard(new List<SmartResult>()), - ResultCardOverrun = new ResultCard(new List<SmartResult>()), - ResultCardTraction = new ResultCard(new List<SmartResult>()), - AlternatorGearEfficiency = 0.9, - }; + return Tuple.Create(avgInclBase, avgWithoutBase); } private bool VehicleHasConsumer(string consumerName, IBusAuxiliariesDeclarationData busAux) { switch (consumerName) { - case "Interior lights LED bonus": return busAux.ElectricConsumers.InteriorLightsLED; - case "Day running lights LED bonus": return busAux.ElectricConsumers.DayrunninglightsLED; - case "Position lights LED bonus": return busAux.ElectricConsumers.PositionlightsLED; - case "Brake lights LED bonus": return busAux.ElectricConsumers.BrakelightsLED; - case "Headlights LED bonus": return busAux.ElectricConsumers.HeadlightsLED; - default: return false; + case "Day running lights LED bonus": + case "Position lights LED bonus": + case "Brake lights LED bonus": + return false; + case "Interior lights LED bonus": + case "Headlights LED bonus": + return true; + default: + return false; } } @@ -151,18 +184,60 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter return DeclarationData.BusAuxiliaries.CalculateLengthInteriorLights( mission.VehicleLength, mission.DoubleDecker, mission.FloorType, mission.NumberPassengersLowerDeck).Value(); } + return nbr.ToDouble(); } private IPneumaticUserInputsConfig GetPneumaticUserConfig(IVehicleDeclarationInputData vehicleData) { + var busAux = vehicleData.Components.BusAuxiliaries; //throw new NotImplementedException(); return new PneumaticUserInputsConfig() { - SmartRegeneration = false, - KneelingHeight = 0.SI<Meter>() + KneelingHeight = 0.SI<Meter>(), + CompressorGearEfficiency = Constants.BusAuxiliaries.PneumaticUserConfig.CompressorGearEfficiency, + CompressorGearRatio = busAux.PneumaticSupply.Ratio, + CompressorMap = GetCompressorMap(busAux.PneumaticSupply.CompressorSize), + SmartAirCompression = busAux.PneumaticSupply.SmartAirCompression, + SmartRegeneration = busAux.PneumaticSupply.SmartRegeneration, }; } + private ICompressorMap GetCompressorMap(string compressorSize) + { + var resource = ""; + switch (compressorSize) { + case "Small": + case "Small + visco clutch": + case "Small + mech. clutch": + resource = "DEFAULT_1-Cylinder_1-Stage_393ccm.ACMP"; + break; + case "Medium Supply 1-stage": + case "Medium Supply 1-stage + visco clutch": + case "Medium Supply 1-stage + mech. clutch": + resource = "DEFAULT_1-Cylinder_1-Stage_393ccm.ACMP"; + break; + case "Medium Supply 2-stage": + case "Medium Supply 2-stage + visco clutch": + case "Medium Supply 2-stage + mech. clutch": + resource = "DEFAULT_2-Cylinder_1-Stage_650ccm.ACMP"; + break; + case "Large Supply 1-stage": + case "Large Supply 1-stage + visco clutch": + case "Large Supply 1-stage + mech. clutch": + resource = "DEFAULT_2-Cylinder_2-Stage_398ccm.ACMP"; + break; + case "Large Supply 2-stage": + case "Large Supply 2-stage + visco clutch": + case "Large Supply 2-stage + mech. clutch": + resource = "DEFAULT_3-Cylinder_2-Stage_598ccm.ACMP"; + break; + default: throw new ArgumentException(string.Format("unkown compressor size {0}"), compressorSize); + } + + return CompressorMapReader.ReadStream( + RessourceHelper.ReadStream(DeclarationData.DeclarationDataResourcePrefix + ".VAUXBuses." + resource)); + } + public virtual ISSMInputs CreateSSMModelParameters(IVehicleData vehicleData, IFuelProperties heatingFuel) { var retVal = new SSMInputs(vehicleData, null, heatingFuel) { @@ -191,6 +266,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter VentilationOnDuringHeating = true, VentilationWhenBothHeatingAndACInactive = true, VentilationDuringAC = true, + //VentilationDuringHeating = VentilationLevel.High, //VentilationDuringCooling = VentilationLevel.High, //VentilationFlowSettingWhenHeatingAndACInactive = VentilationLevel.High, @@ -208,15 +284,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter return new PneumaticsConsumersDemand() { AdBlueInjection = Constants.BusAuxiliaries.PneumaticConsumersDemands.AdBlueInjection, AirControlledSuspension = Constants.BusAuxiliaries.PneumaticConsumersDemands.AirControlledSuspension, - Braking = retarderType == RetarderType.None ? - Constants.BusAuxiliaries.PneumaticConsumersDemands.BrakingNoRetarder : - Constants.BusAuxiliaries.PneumaticConsumersDemands.BrakingWithRetarder, + Braking = retarderType == RetarderType.None + ? Constants.BusAuxiliaries.PneumaticConsumersDemands.BrakingNoRetarder + : Constants.BusAuxiliaries.PneumaticConsumersDemands.BrakingWithRetarder, BreakingWithKneeling = Constants.BusAuxiliaries.PneumaticConsumersDemands.BreakingAndKneeling, DeadVolBlowOuts = Constants.BusAuxiliaries.PneumaticConsumersDemands.DeadVolBlowOuts, DeadVolume = Constants.BusAuxiliaries.PneumaticConsumersDemands.DeadVolume, - NonSmartRegenFractionTotalAirDemand = Constants.BusAuxiliaries.PneumaticConsumersDemands.NonSmartRegenFractionTotalAirDemand, - SmartRegenFractionTotalAirDemand = Constants.BusAuxiliaries.PneumaticConsumersDemands.SmartRegenFractionTotalAirDemand, - OverrunUtilisationForCompressionFraction = Constants.BusAuxiliaries.PneumaticConsumersDemands.OverrunUtilisationForCompressionFraction, + NonSmartRegenFractionTotalAirDemand = + Constants.BusAuxiliaries.PneumaticConsumersDemands.NonSmartRegenFractionTotalAirDemand, + SmartRegenFractionTotalAirDemand = + Constants.BusAuxiliaries.PneumaticConsumersDemands.SmartRegenFractionTotalAirDemand, + OverrunUtilisationForCompressionFraction = + Constants.BusAuxiliaries.PneumaticConsumersDemands.OverrunUtilisationForCompressionFraction, DoorOpening = Constants.BusAuxiliaries.PneumaticConsumersDemands.DoorOpening, StopBrakeActuation = Constants.BusAuxiliaries.PneumaticConsumersDemands.StopBrakeActuation, }; diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/AdvancedAuxiliaries.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/AdvancedAuxiliaries.cs index 3137d52ef1..06cae02596 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/AdvancedAuxiliaries.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/AdvancedAuxiliaries.cs @@ -117,15 +117,12 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries { //if ((ssmTool.Load(ssmPath) == false || ssmToolModule14.Load(ssmPath) == false)) //throw new Exception(string.Format("Unable to load the ssmTOOL with file {0}", ssmPath)); - var m0_1 = new M0_1Impl(auxConfig); - - M0 = new M00Impl(m0_1, alternatorMap, auxConfig.ElectricalUserInputsConfig.PowerNetVoltage, Signals, ssmTool); + + M0 = new M00Impl(auxConfig.ElectricalUserInputsConfig, Signals, ssmTool); var M0_5tmp = new M0_5Impl( - M0, m0_1, alternatorMap, - auxConfig.ElectricalUserInputsConfig.ResultCardIdle, auxConfig.ElectricalUserInputsConfig.ResultCardTraction, - auxConfig.ElectricalUserInputsConfig.ResultCardOverrun, Signals); + M0, auxConfig.ElectricalUserInputsConfig, Signals); M0_5 = M0_5tmp; M1 = new M01Impl( @@ -133,8 +130,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries { auxConfig.PneumaticUserInputsConfig.CompressorGearEfficiency, ssmTool); - M2 = new M02Impl(m0_1, M0, - auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency, auxConfig.ElectricalUserInputsConfig.PowerNetVoltage); + M2 = new M02Impl(M0, auxConfig.ElectricalUserInputsConfig); M3 = new M03Impl(auxConfig, compressorMap, auxCfg.Actuations, Signals); diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumer.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumer.cs index f9d0dad651..c705e35a78 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumer.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumer.cs @@ -7,6 +7,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics; +using TUGraz.VectoCore.Models.Declaration; // Copyright 2017 European Union. // Licensed under the EUPL (the 'Licence'); @@ -130,15 +131,13 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric // PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(p)); //} - public Ampere this[MissionType mission] + public Ampere NominalCurrent(MissionType mission) { - get { - if (_missions.ContainsKey(mission)) { - return _missions[mission]; - } + return _missions.ContainsKey(mission) ? _missions[mission] : 0.SI<Ampere>(); + } - return 0.SI<Ampere>(); - } + public Ampere this[MissionType mission] + { set { if (_missions.ContainsKey(mission)) { throw new VectoException("key {0} already exists!", mission.ToString()); @@ -147,5 +146,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric _missions[mission] = value; } } + + } } diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M00Impl.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M00Impl.cs index 396db0c7e3..220833b204 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M00Impl.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M00Impl.cs @@ -14,14 +14,15 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric protected Volt _powernetVoltage; protected ISignals _signals; protected Watt _ElectricalPowerW; - private IM0_1_AverageElectricLoadDemand _m0_1; - public M00Impl(IM0_1_AverageElectricLoadDemand m0_1, IAlternatorMap alternatorEfficiencyMap, Volt powernetVoltage, - ISignals signals, ISSMTOOL ssmHvac) + private Ampere _totalAverageDemandAmpsIncludingBaseLoad; + + //private IM0_1_AverageElectricLoadDemand _m0_1; + + public M00Impl(IElectricsUserInputsConfig electricConfig, ISignals signals, ISSMTOOL ssmHvac) { - if (m0_1 == null) { - throw new ArgumentException("No ElectricalConsumersList Supplied"); - } + var alternatorEfficiencyMap = electricConfig.AlternatorMap; + var powernetVoltage = electricConfig.PowerNetVoltage; if (alternatorEfficiencyMap == null) { throw new ArgumentException("No Alternator Efficiency Map Supplied"); @@ -35,12 +36,11 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric throw new ArgumentException("No Signals reference was supplied."); } - _m0_1 = m0_1; - _alternatorEfficiencyMap = alternatorEfficiencyMap; _powernetVoltage = powernetVoltage; + _totalAverageDemandAmpsIncludingBaseLoad = electricConfig.AverageCurrentDemandInclBaseLoad; _signals = signals; _ElectricalPowerW = ssmHvac.ElectricalWAdjusted; @@ -56,7 +56,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric public double AlternatorsEfficiency { get { - var baseCurrentDemandAmps = _m0_1.TotalAverageDemandAmpsIncludingBaseLoad; // _electricalConsumersList.GetTotalAverageDemandAmps(false); + var baseCurrentDemandAmps = _totalAverageDemandAmpsIncludingBaseLoad; // _electricalConsumersList.GetTotalAverageDemandAmps(false); var totalDemandAmps = baseCurrentDemandAmps + GetHVACElectricalCurrentDemand; return _alternatorEfficiencyMap.GetEfficiency(_signals.EngineSpeed, totalDemandAmps); } diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M02Impl.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M02Impl.cs index 3f1cc9c919..8a288aeb9a 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M02Impl.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M02Impl.cs @@ -1,4 +1,5 @@ using System; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules; @@ -9,17 +10,15 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric public class M02Impl : AbstractModule, IM2_AverageElectricalLoadDemand { private Volt _powerNetVoltage; - private IM0_1_AverageElectricLoadDemand _m0_1; + private IM0_NonSmart_AlternatorsSetEfficiency _module0; private double _alternatorPulleyEffiency; + private Ampere _totalAverageDemandAmpsIncludingBaseLoad; - public M02Impl( - IM0_1_AverageElectricLoadDemand m0_1, IM0_NonSmart_AlternatorsSetEfficiency m0, double altPulleyEfficiency, - Volt powerNetVoltage) + public M02Impl(IM0_NonSmart_AlternatorsSetEfficiency m0, IElectricsUserInputsConfig electricConfig) { - if (m0_1 == null) { - throw new ArgumentException("Electrical Consumer List must be supplied"); - } + var altPulleyEfficiency = electricConfig.AlternatorGearEfficiency; + var powerNetVoltage = electricConfig.PowerNetVoltage; if (m0 == null) { throw new ArgumentException("Must supply module 0"); } @@ -31,7 +30,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric } _powerNetVoltage = powerNetVoltage; - _m0_1 = m0_1; + _totalAverageDemandAmpsIncludingBaseLoad = electricConfig.AverageCurrentDemandInclBaseLoad; _module0 = m0; _alternatorPulleyEffiency = altPulleyEfficiency; } @@ -40,7 +39,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric public Watt GetAveragePowerAtCrankFromElectrics() { - var electricalPowerDemandsWatts = _powerNetVoltage * _m0_1.TotalAverageDemandAmpsIncludingBaseLoad; + var electricalPowerDemandsWatts = _powerNetVoltage * _totalAverageDemandAmpsIncludingBaseLoad; var alternatorsEfficiency = _module0.AlternatorsEfficiency; var electricalPowerDemandsWattsDividedByAlternatorEfficiency = electricalPowerDemandsWatts * (1 / alternatorsEfficiency); diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_1Impl.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_1Impl.cs deleted file mode 100644 index 7651b07a43..0000000000 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_1Impl.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Diagnostics; -using System.Linq; -using TUGraz.VectoCommon.BusAuxiliaries; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules; - -namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics -{ - public class M0_1Impl : IM0_1_AverageElectricLoadDemand - { - - public M0_1Impl(IAuxiliaryConfig config) - { - - TotalAverageDemandAmpsIncludingBaseLoad = config.ElectricalUserInputsConfig.AverageCurrentDemandInclBaseLoad; - TotalAverageDemandAmpsWithoutBaseLoad = config.ElectricalUserInputsConfig.AverageCurrentDemandWithoutBaseLoad; - } - - public Ampere TotalAverageDemandAmpsIncludingBaseLoad { get; } - - public Ampere TotalAverageDemandAmpsWithoutBaseLoad { get; } - } -} diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_5Impl.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_5Impl.cs index 40ade8dbf0..7d53a16f4f 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_5Impl.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_5Impl.cs @@ -20,17 +20,22 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric protected IResultCard _resultCardTraction; protected IResultCard _resultCardOverrun; protected ISignals _signals; - private IM0_1_AverageElectricLoadDemand _m0_1; - public M0_5Impl(IM0_NonSmart_AlternatorsSetEfficiency m0, IM0_1_AverageElectricLoadDemand m0_1, IAlternatorMap alternatorMap, IResultCard resultCardIdle, IResultCard resultCardTraction, IResultCard resultCardOverrun, ISignals signals) + private Ampere _totalAverageDemandAmpsWithoutBaseLoad; + + //private IM0_1_AverageElectricLoadDemand _m0_1; + + public M0_5Impl(IM0_NonSmart_AlternatorsSetEfficiency m0, IElectricsUserInputsConfig electricConfig, ISignals signals) { + var alternatorMap = electricConfig.AlternatorMap; + var resultCardIdle = electricConfig.ResultCardIdle; + var resultCardTraction = electricConfig.ResultCardTraction; + var resultCardOverrun = electricConfig.ResultCardOverrun; + //'Sanity Check on supplied arguments, throw an argument exception if (m0 == null) { throw new ArgumentException("Module 0 must be supplied");} - if (m0_1 == null) { - throw new ArgumentException("ElectricalConsumablesList must be supplied even if empty"); - } if (alternatorMap ==null) {throw new ArgumentException("Must supply a valid alternator map"); } if (resultCardIdle == null) { @@ -49,8 +54,8 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric //'Assignments to private variables. _m0 = m0; - _m0_1 = m0_1; _alternatorMap = alternatorMap; + _totalAverageDemandAmpsWithoutBaseLoad = electricConfig.AverageCurrentDemandWithoutBaseLoad; _resultCardIdle = resultCardIdle; _resultCardTraction = resultCardTraction; _resultCardOverrun = resultCardOverrun; @@ -61,7 +66,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric private Ampere HvacPlusNonBaseCurrents() { - return _m0.GetHVACElectricalCurrentDemand + _m0_1.TotalAverageDemandAmpsWithoutBaseLoad; + return _m0.GetHVACElectricalCurrentDemand + _totalAverageDemandAmpsWithoutBaseLoad; } public Ampere SmartIdleCurrent diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ResultCard.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ResultCard.cs index 472cd57ba2..c08dab04fc 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ResultCard.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ResultCard.cs @@ -17,6 +17,18 @@ using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics { + public class DummyResultCard : IResultCard + { + #region Implementation of IResultCard + + public Ampere GetSmartCurrentResult(Ampere amps) + { + return 0.SI<Ampere>(); + } + + #endregion + } + public class ResultCard : IResultCard { private readonly List<SmartResult> _results; @@ -24,9 +36,13 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric // Constructor public ResultCard(List<SmartResult> results) { - if (results == null) + if (results == null) { throw new ArgumentException("A list of smart results must be supplied."); + } + if (results.Count < 2) { + throw new ArgumentException("At least two smart result entries must be provided."); + } _results = results.OrderBy(x => x.Amps).ToList(); } @@ -39,11 +55,6 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric public Ampere GetSmartCurrentResult(Ampere Amps) { - // TODO: MQ 2019-10-29 - keep this? - if (_results.Count < 2) { - return 10.SI<Ampere>(); - } - return GetOrInterpolate(Amps); } @@ -57,8 +68,6 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric /// ''' <remarks></remarks> private Ampere GetOrInterpolate(Ampere amps) { - // TODO: MQ 2019-10-29 - simplify? - var s = _results.GetSection(x => amps > x.Amps); return VectoMath.Interpolate(s.Item1.Amps, s.Item2.Amps, s.Item1.SmartAmps, s.Item2.SmartAmps, amps); diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleAlternator.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleAlternator.cs new file mode 100644 index 0000000000..81732e9172 --- /dev/null +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleAlternator.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics; + +namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics +{ + public class SimpleAlternator : IAlternatorMap + { + protected double _efficiency; + + + + public SimpleAlternator(double efficiency) + { + _efficiency = efficiency; + } + + #region Implementation of IAlternatorMap + + public double GetEfficiency(PerSecond rpm, Ampere currentDemand) + { + return _efficiency; + } + + public string Source { get { return null; } } + + #endregion + } +} diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/M01Impl.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/M01Impl.cs index 0b2bfb01a9..427c313d85 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/M01Impl.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/M01Impl.cs @@ -43,7 +43,6 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC _m0 = m0; _alternatorGearEfficiency = altGearEfficiency; - _compressorGearEfficiency = compressorGearEfficiency; _ElectricalPowerW = ssm.ElectricalWAdjusted; diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/IM0_1_AverageElectricLoadDemand.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/IM0_1_AverageElectricLoadDemand.cs deleted file mode 100644 index 761c3cf65f..0000000000 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/IM0_1_AverageElectricLoadDemand.cs +++ /dev/null @@ -1,10 +0,0 @@ -using TUGraz.VectoCommon.Utils; - -namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules -{ - public interface IM0_1_AverageElectricLoadDemand - { - Ampere TotalAverageDemandAmpsIncludingBaseLoad { get; } - Ampere TotalAverageDemandAmpsWithoutBaseLoad { get; } - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/Declaration/BusAlternatorTechnologies.cs b/VectoCore/VectoCore/Models/Declaration/BusAlternatorTechnologies.cs new file mode 100644 index 0000000000..c0156498dc --- /dev/null +++ b/VectoCore/VectoCore/Models/Declaration/BusAlternatorTechnologies.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.Declaration { + public sealed class BusAlternatorTechnologies : LookupData<string, double> + { + #region Overrides of LookupData + + protected override string ResourceId { get { return DeclarationData.DeclarationDataResourcePrefix + ".Buses.AlternatorTechnologies.csv"; } } + + protected override string ErrorMessage + { + get { return "Bus-Alternator Technology Lookup Error: No value found for Technology. Key: '{0}'"; } + } + protected override void ParseData(DataTable table) + { + Data = table.Rows.Cast<DataRow>() + .Select(row => Tuple.Create(row.Field<string>("technology"), row.ParseDouble("efficiency"))) + .ToDictionary(e => e.Item1, e => e.Item2); + } + + #endregion + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/Declaration/BusSegments.cs b/VectoCore/VectoCore/Models/Declaration/BusSegments.cs index f4c4d99e4f..e75901dbc1 100644 --- a/VectoCore/VectoCore/Models/Declaration/BusSegments.cs +++ b/VectoCore/VectoCore/Models/Declaration/BusSegments.cs @@ -8,12 +8,13 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.Models.Declaration { +namespace TUGraz.VectoCore.Models.Declaration +{ public sealed class BusSegments : LookupData<VehicleCategory, AxleConfiguration, bool, FloorType, bool, bool, Segment> { private DataTable _segmentTable; - + #region Overrides of LookupData protected override string ResourceId @@ -21,28 +22,34 @@ namespace TUGraz.VectoCore.Models.Declaration { get { return DeclarationData.DeclarationDataResourcePrefix + ".HeavyBusSegmentationTable.csv"; } } - protected override string ErrorMessage { + protected override string ErrorMessage + { get { return "ERROR: Could not find the declaration segment for vehicle. Category: {0}, AxleConfiguration: {1}, GrossVehicleWeight: {2}"; } } + protected override void ParseData(DataTable table) { _segmentTable = table.Copy(); } - public override Segment Lookup(VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration, bool articulated, FloorType entrance, bool doubleDecker, bool primaryVehicle) + public override Segment Lookup( + VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration, bool articulated, FloorType entrance, + bool doubleDecker, bool primaryVehicle) { if (primaryVehicle) { return LookupPrimaryVehicle(vehicleCategory, axleConfiguration, articulated); } + throw new NotImplementedException("Completed Vechiles not implemented"); } #endregion - private Segment LookupPrimaryVehicle(VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration, bool articulated) + private Segment LookupPrimaryVehicle( + VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration, bool articulated) { var rows = _segmentTable.AsEnumerable().Where( r => { @@ -55,8 +62,9 @@ namespace TUGraz.VectoCore.Models.Declaration { axleConfiguration.NumAxles() == numAxles; }).ToList(); if (rows.Count == 0) { - return new Segment() {Found = false}; + return new Segment() { Found = false }; } + var firstRow = rows.First(); var segment = new Segment { Found = true, @@ -66,8 +74,9 @@ namespace TUGraz.VectoCore.Models.Declaration { AxleConfiguration = axleConfiguration, VehicleClass = VehicleClassHelper.Parse(firstRow.Field<string>("hdvsupergroup")), AccelerationFile = - RessourceHelper.ReadStream(DeclarationData.DeclarationDataResourcePrefix + ".VACC." + - firstRow.Field<string>(".vaccfile")), + RessourceHelper.ReadStream( + DeclarationData.DeclarationDataResourcePrefix + ".VACC." + + firstRow.Field<string>(".vaccfile")), Missions = CreateMissions(rows), DesignSpeed = firstRow.ParseDouble("designspeed").KMPHtoMeterPerSecond(), }; @@ -87,6 +96,7 @@ namespace TUGraz.VectoCore.Models.Declaration { if (string.IsNullOrWhiteSpace(row.Field<string>(missionType.ToString()))) { continue; } + var busArea = (row.ParseDouble("length").SI<Meter>() - Constants.BusParameters.DriverCompartmentLength) * row.ParseDouble("width").SI<Meter>(); var passengerDensity = row.ParseDouble(missionType.ToString()).SI<PerSquareMeter>(); @@ -102,8 +112,6 @@ namespace TUGraz.VectoCore.Models.Declaration { Constants.FileExtensions.CycleFile), AxleWeightDistribution = GetAxleWeightDistribution(row), CurbMass = row.ParseDouble("curbmass").SI<Kilogram>(), - NumberPassengersLowerDeck = row.ParseDouble("passengerslowerdeck"), - NumberPassengersUpperDeck = row.ParseDouble("passengersupperdeck"), BodyCurbWeight = 0.SI<Kilogram>(), Trailer = new List<MissionTrailer>(), MinLoad = null, @@ -111,10 +119,23 @@ namespace TUGraz.VectoCore.Models.Declaration { LowLoad = refLoad * 0.2, RefLoad = refLoad, VehicleHeight = row.ParseDouble("height").SI<Meter>(), - VehicleLength = row.ParseDouble("length").SI<Meter>(), - VehicleWidth = row.ParseDouble("width").SI<Meter>(), TotalCargoVolume = 0.SI<CubicMeter>(), - DefaultCDxA = row.ParseDouble("cdxastandard").SI<SquareMeter>() + DefaultCDxA = row.ParseDouble("cdxastandard").SI<SquareMeter>(), + BusParameter = new BusParameters() { + VehicleLength = row.ParseDouble("length").SI<Meter>(), + VehicleWidth = row.ParseDouble("width").SI<Meter>(), + NumberPassengersLowerDeck = row.ParseDouble("passengerslowerdeck"), + NumberPassengersUpperDeck = row.ParseDouble("passengersupperdeck"), + DoubleDecker = row.ParseBoolean("doubledecker"), + FloorType = GetFloorType(row.Field<string>("floortype")), + HVACConfiguration = BusHVACSystemConfigurationHelper.Parse(row.Field<string>("hvaccompressortype")), + HVACAuxHeaterPower = row.ParseDouble("hvacauxheater").SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + HVACCompressorType = ACCompressorTypeExtensions.ParseEnum(row.Field<string>("hvaccompressortype")), + HVACDoubleGlasing = row.ParseBoolean("hvacdoubleglasing"), + HVACHeatpump = row.ParseBoolean("hvacheatpump"), + HVACAdjustableAuxHeater = row.ParseBoolean("hvacadjustableauxiliaryheater"), + HVACSeparateAirDistributionDucts = row.ParseBoolean("hvacseparateairdistributionducts") + } }; missions.Add(mission); } @@ -123,6 +144,17 @@ namespace TUGraz.VectoCore.Models.Declaration { return missions.ToArray(); } + private FloorType GetFloorType(string field) + { + switch (field) { + case "high": return FloorType.HighFloor; + case "low": return FloorType.LowFloor; + case "semilowfloor": + case "semilow": return FloorType.SemiLowFloor; + default: return FloorType.Unknown; + } + } + private static double[] GetAxleWeightDistribution(DataRow row) { var axleDistribution = row.Field<string>("AxlesWeights"); @@ -133,4 +165,4 @@ namespace TUGraz.VectoCore.Models.Declaration { return axleDistribution.Split('/').ToDouble().Select(x => x / 100.0).ToArray(); } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index d5d6635dec..a1d3c7f1dc 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -156,6 +156,8 @@ namespace TUGraz.VectoCore.Models.Declaration // } //} + public static BusAlternatorTechnologies AlternatorTechnologies = new BusAlternatorTechnologies(); + public static ISSMTechnologies SSMTechnologyList { get { @@ -210,7 +212,7 @@ namespace TUGraz.VectoCore.Models.Declaration } } - public static Meter CalculateLengthInteriorLights(Meter vehicleLength, bool doubleDecker, FloorType floorType, int numPassLowFloor) + public static Meter CalculateLengthInteriorLights(Meter vehicleLength, bool doubleDecker, FloorType floorType, double numPassLowFloor) { if (floorType == FloorType.LowFloor) { return doubleDecker ? 2 * vehicleLength : vehicleLength; diff --git a/VectoCore/VectoCore/Models/Declaration/Mission.cs b/VectoCore/VectoCore/Models/Declaration/Mission.cs index 2c9c19b008..699bc53ade 100644 --- a/VectoCore/VectoCore/Models/Declaration/Mission.cs +++ b/VectoCore/VectoCore/Models/Declaration/Mission.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -91,6 +92,8 @@ namespace TUGraz.VectoCore.Models.Declaration public double NumberPassengersLowerDeck { get; internal set; } public double NumberPassengersUpperDeck { get; internal set; } + public bool DoubleDecker { get; set; } + public FloorType FloorType { get; set; } } public class MissionTrailer diff --git a/VectoCore/VectoCore/Resources/Declaration/Buses/AlternatorTechnologies.csv b/VectoCore/VectoCore/Resources/Declaration/Buses/AlternatorTechnologies.csv new file mode 100644 index 0000000000..5fc779587d --- /dev/null +++ b/VectoCore/VectoCore/Resources/Declaration/Buses/AlternatorTechnologies.csv @@ -0,0 +1,2 @@ +Technology , Efficiency +default , 0.7 \ No newline at end of file diff --git a/VectoCore/VectoCore/Resources/Declaration/HeavyBusSegmentationTable.csv b/VectoCore/VectoCore/Resources/Declaration/HeavyBusSegmentationTable.csv index 8471e5e9e4..8d87f5ce08 100644 --- a/VectoCore/VectoCore/Resources/Declaration/HeavyBusSegmentationTable.csv +++ b/VectoCore/VectoCore/Resources/Declaration/HeavyBusSegmentationTable.csv @@ -1,26 +1,26 @@ -HDV group , Production Stage , Vehicle Category , HDV SuperGroup , Articulated , Num Axles , TPMLM_Min , TPMLM_Max , doubledecker , floor type , DesignSpeed , Body , .vacc file , Cross Wind Correction , CdxA Standard , AxlesWeights , Width , Length , Height , CurbMass , PassengersLowerDeck , PassengersUpperDeck , Heavy Urban , Urban , Suburban , Interurban , Coach , External displays , Internal displays , Fridge , Kitchen Standard , +HDV group , Production Stage , Vehicle Category , HDV SuperGroup , Articulated , Num Axles , TPMLM_Min , TPMLM_Max , doubledecker , floor type , DesignSpeed , Body , .vacc file , Cross Wind Correction , CdxA Standard , AxlesWeights , Width , Length , Height , CurbMass , PassengersLowerDeck , PassengersUpperDeck , Heavy Urban , Urban , Suburban , Interurban , Coach , External displays , Internal displays , Fridge , Kitchen Standard , HVAC System Configuration , HVAC Compressor type , HVAC Aux Heater , HVAC Double Glasing , HVAC Heatpump , HVAC Adjustable AuxiliaryHeater , HVAC SeparateAirDistributionDucts ## Heavy Bus Primary Vehicles -P31SD , 1 , HeavyBus , PB41 , - , 2 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 4.9 , 37.5/62.5 , 2.55 , 12 , 2.7 , 10000 , 80 , 0 , 3 , 3 , 3 , , , 3 , 2 , 0 , 0 , -P31DD , 1 , HeavyBus , PB41 , - , 2 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.2 , 37.5/62.5 , 2.55 , 12 , 3.7 , 10000 , 60 , 40 , 3.7 , 3.7 , 3.7 , , , 3 , 3 , 0 , 0 , -P32SD , 1 , HeavyBus , PB41 , - , 2 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.6 , 37.5/62.5 , 2.55 , 12 , 3.0 , 10000 , 45 , 0 , , , , 2.2 , 1.4 , 2 , 2 , 0.5 , 0.5 , -P32SD , 1 , HeavyBus , PB41 , - , 2 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.2 , 37.5/62.5 , 2.55 , 12 , 3.9 , 10000 , 25 , 35 , , , , 3 , 2 , 1 , 2 , 1 , 1 , +P31SD , 1 , HeavyBus , PB41 , - , 2 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 4.9 , 37.5/62.5 , 2.55 , 12 , 2.7 , 10000 , 80 , 0 , 3 , 3 , 3 , , , 3 , 2 , 0 , 0 , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P31DD , 1 , HeavyBus , PB41 , - , 2 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.2 , 37.5/62.5 , 2.55 , 12 , 3.7 , 10000 , 60 , 40 , 3.7 , 3.7 , 3.7 , , , 3 , 3 , 0 , 0 , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P32SD , 1 , HeavyBus , PB41 , - , 2 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.6 , 37.5/62.5 , 2.55 , 12 , 3.0 , 10000 , 45 , 0 , , , , 2.2 , 1.4 , 2 , 2 , 0.5 , 0.5 , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 +P32SD , 1 , HeavyBus , PB41 , - , 2 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.2 , 37.5/62.5 , 2.55 , 12 , 3.9 , 10000 , 25 , 35 , , , , 3 , 2 , 1 , 2 , 1 , 1 , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 ## -P33SD , 1 , HeavyBus , PB42 , 0 , 3 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 5.0 , 27.3/45.4/27.3 , 2.55 , 14 , 2.7 , 12000 , 104 , 0 , 3 , 3 , 3 , , , 3 , 2 , 0 , 0 , -P33DD , 1 , HeavyBus , PB42 , 0 , 3 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.3 , 27.3/45.4/27.3 , 2.55 , 14 , 3.7 , 12000 , 78 , 52 , 3.7 , 3.7 , 3.7 , , , 3 , 3 , 0 , 0 , -P34SD , 1 , HeavyBus , PB42 , 0 , 3 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.7 , 27.3/45.4/27.3 , 2.55 , 14 , 3.0 , 12000 , 59 , 0 , , , , 2.2 , 1.4 , 2 , 2 , 0.5 , 0.5 , -P34SD , 1 , HeavyBus , PB42 , 0 , 3 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.3 , 27.3/45.4/27.3 , 2.55 , 14 , 3.9 , 12000 , 33 , 46 , , , , 3 , 2 , 1 , 4 , 1 , 1.0 , +P33SD , 1 , HeavyBus , PB42 , 0 , 3 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 5.0 , 27.3/45.4/27.3 , 2.55 , 14 , 2.7 , 12000 , 104 , 0 , 3 , 3 , 3 , , , 3 , 2 , 0 , 0 , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P33DD , 1 , HeavyBus , PB42 , 0 , 3 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.3 , 27.3/45.4/27.3 , 2.55 , 14 , 3.7 , 12000 , 78 , 52 , 3.7 , 3.7 , 3.7 , , , 3 , 3 , 0 , 0 , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P34SD , 1 , HeavyBus , PB42 , 0 , 3 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.7 , 27.3/45.4/27.3 , 2.55 , 14 , 3.0 , 12000 , 59 , 0 , , , , 2.2 , 1.4 , 2 , 2 , 0.5 , 0.5 , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 +P34SD , 1 , HeavyBus , PB42 , 0 , 3 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.3 , 27.3/45.4/27.3 , 2.55 , 14 , 3.9 , 12000 , 33 , 46 , , , , 3 , 2 , 1 , 4 , 1 , 1.0 , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 # -P35SD , 1 , HeavyBus , PB43 , 1 , 3 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 5.1 , 24.3/35.2/40.5 , 2.55 , 18 , 2.7 , 12000 , 104 , 0 , 3 , 3 , 3 , , , 3 , 3 , 0 , 0 , -P35DD , 1 , HeavyBus , PB43 , 1 , 3 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.4 , 24.3/35.2/40.5 , 2.55 , 18 , 3.7 , 12000 , 78 , 52 , 3.7 , 3.7 , 3.7 , , , , , , , -P36SD , 1 , HeavyBus , PB43 , 1 , 3 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.8 , 24.3/35.2/40.5 , 2.55 , 18 , 3.0 , 12000 , 59 , 0 , , , , 2.2 , 1.4 , , , , , -P36SD , 1 , HeavyBus , PB43 , 1 , 3 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.4 , 24.3/35.2/40.5 , 2.55 , 18 , 3.9 , 12000 , 33 , 46 , , , , 3 , 2 , , , , , +P35SD , 1 , HeavyBus , PB43 , 1 , 3 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 5.1 , 24.3/35.2/40.5 , 2.55 , 18 , 2.7 , 12000 , 104 , 0 , 3 , 3 , 3 , , , 3 , 3 , 0 , 0 , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P35DD , 1 , HeavyBus , PB43 , 1 , 3 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.4 , 24.3/35.2/40.5 , 2.55 , 18 , 3.7 , 12000 , 78 , 52 , 3.7 , 3.7 , 3.7 , , , , , , , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P36SD , 1 , HeavyBus , PB43 , 1 , 3 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.8 , 24.3/35.2/40.5 , 2.55 , 18 , 3.0 , 12000 , 59 , 0 , , , , 2.2 , 1.4 , , , , , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 +P36SD , 1 , HeavyBus , PB43 , 1 , 3 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.4 , 24.3/35.2/40.5 , 2.55 , 18 , 3.9 , 12000 , 33 , 46 , , , , 3 , 2 , , , , , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 ## , -P37SD , 1 , HeavyBus , PB44 , 0 , 4 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 5.1 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 2.7 , 14000 , 125 , 0 , 3 , 3 , 3 , , , , , , , -P37DD , 1 , HeavyBus , PB44 , 0 , 4 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.4 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.7 , 14000 , 94 , 62 , 3.7 , 3.7 , 3.7 , , , , , , , -P38SD , 1 , HeavyBus , PB44 , 0 , 4 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.8 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.0 , 14000 , 70 , 0 , , , , 2.2 , 1.4 , , , , , -P38SD , 1 , HeavyBus , PB44 , 0 , 4 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.4 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.9 , 14000 , 39 , 55 , , , , 3 , 2 , , , , , +P37SD , 1 , HeavyBus , PB44 , 0 , 4 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 5.1 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 2.7 , 14000 , 125 , 0 , 3 , 3 , 3 , , , , , , , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P37DD , 1 , HeavyBus , PB44 , 0 , 4 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.4 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.7 , 14000 , 94 , 62 , 3.7 , 3.7 , 3.7 , , , , , , , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P38SD , 1 , HeavyBus , PB44 , 0 , 4 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.8 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.0 , 14000 , 70 , 0 , , , , 2.2 , 1.4 , , , , , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 +P38SD , 1 , HeavyBus , PB44 , 0 , 4 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.4 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.9 , 14000 , 39 , 55 , , , , 3 , 2 , , , , , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 # -P39SD , 1 , HeavyBus , PB45 , 1 , 4 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 5.2 , 20.0/28.2/32.4/19.4 , 2.55 , 20 , 2.7 , 14000 , 125 , 0 , 3 , 3 , 3 , , , 3 , 3 , 0 , 0 , -P39DD , 1 , HeavyBus , PB45 , 1 , 4 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.5 , 20.0/28.2/32.4/19.4 , 2.55 , 20 , 3.7 , 14000 , 94 , 62 , 3.7 , 3.7 , 3.7 , , , , , , , -P40SD , 1 , HeavyBus , PB45 , 1 , 4 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.9 , 20.0/28.2/32.4/19.4 , 2.55 , 20 , 3.0 , 14000 , 70 , 0 , , , , 2.2 , 1.4 , , , , , -P40SD , 1 , HeavyBus , PB45 , 1 , 4 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.5 , 20.0/28.2/32.4/19.4 , 2.55 , 20 , 3.9 , 14000 , 39 , 55 , , , , 3 , 2 , , , , , +P39SD , 1 , HeavyBus , PB45 , 1 , 4 , 7.4 , 999 , 0 , low , 100 , , Bus.vacc , CoachBus , 5.2 , 20.0/28.2/32.4/19.4 , 2.55 , 20 , 2.7 , 14000 , 125 , 0 , 3 , 3 , 3 , , , 3 , 3 , 0 , 0 , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P39DD , 1 , HeavyBus , PB45 , 1 , 4 , 7.4 , 999 , 1 , low , 100 , , Bus.vacc , CoachBus , 6.5 , 20.0/28.2/32.4/19.4 , 2.55 , 20 , 3.7 , 14000 , 94 , 62 , 3.7 , 3.7 , 3.7 , , , , , , , 6 , 2-stage , 15 , 0 , 0 , 0 , 0 +P40SD , 1 , HeavyBus , PB45 , 1 , 4 , 7.4 , 999 , 0 , high , 100 , , Bus.vacc , CoachBus , 4.9 , 20.0/28.2/32.4/19.4 , 2.55 , 20 , 3.0 , 14000 , 70 , 0 , , , , 2.2 , 1.4 , , , , , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 +P40SD , 1 , HeavyBus , PB45 , 1 , 4 , 7.4 , 999 , 1 , high , 100 , , Bus.vacc , CoachBus , 5.5 , 20.0/28.2/32.4/19.4 , 2.55 , 20 , 3.9 , 14000 , 39 , 55 , , , , 3 , 2 , , , , , 6 , 2-stage , 30 , 1 , 0 , 0 , 1 diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputPrimaryVehicleInformation.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputPrimaryVehicleInformation.xsd index 08ca618e51..11b60d54f4 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputPrimaryVehicleInformation.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputPrimaryVehicleInformation.xsd @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" elementFormDefault="qualified" attributeFormDefault="unqualified"> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:pbus="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> -<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" schemaLocation="VectoOutputPrimaryBus.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" schemaLocation="VectoOutputPrimaryBus.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" schemaLocation="VectoOutputDefinitions.xsd"/> <xs:element name="VectoOutputPrimaryVehicle" type="tns:PrimaryVehicleHeavyBusType"> <xs:annotation> <xs:documentation>Comment describing your root element</xs:documentation> </xs:annotation> </xs:element> - <xs:complexType name="AbstractPrimaryVehicleDataPIFType" abstract="true"/> <xs:complexType name="PrimaryVehicleHeavyBusType"> <xs:sequence> - <xs:element name="Data" type="tns:AbstractPrimaryVehicleDataPIFType"/> + <xs:element name="Data" type="out:AbstractPrimaryVehicleDataPIFType"/> <xs:element name="Signature" type="v1.0:SignatureType"/> </xs:sequence> </xs:complexType> diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index ebe22db111..53dd9058c4 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -270,6 +270,7 @@ <Compile Include="InputData\FileIO\XML\Declaration\IXMLDeclarationInputDataReader.cs" /> <Compile Include="InputData\FileIO\XML\IXMLInputDataReader.cs" /> <Compile Include="InputData\FileIO\XML\XMLInputDataNinjectModule.cs" /> + <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\SimpleAlternator.cs" /> <Compile Include="Models\Declaration\ADASCombination.cs" /> <Compile Include="InputData\Reader\ComponentData\AlternatorReader.cs" /> <Compile Include="InputData\Reader\ComponentData\CompressorMapReader.cs" /> @@ -292,11 +293,9 @@ <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\ElectricalConsumer.cs" /> <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\ElectricalConsumerList.cs" /> <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\ElectricsUserInputsConfig.cs" /> - <Compile Include="Models\BusAuxiliaries\Interfaces\DownstreamModules\IM0_1_AverageElectricLoadDemand.cs" /> <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\M00Impl.cs" /> <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\M02Impl.cs" /> <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\M05Impl.cs" /> - <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\M0_1Impl.cs" /> <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\M0_5Impl.cs" /> <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\ResultCard.cs" /> <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\HVAC\EnvironmentalConditionMapEntry.cs" /> @@ -351,6 +350,7 @@ <Compile Include="Models\BusAuxiliaries\Interfaces\IM12.cs" /> <Compile Include="Models\BusAuxiliaries\Interfaces\Signals.cs" /> <Compile Include="Models\BusAuxiliaries\Util\FilePathUtils.cs" /> + <Compile Include="Models\Declaration\BusAlternatorTechnologies.cs" /> <Compile Include="Models\Declaration\BusSegments.cs" /> <Compile Include="Models\Declaration\SteeringPumpBus.cs" /> <Compile Include="Models\SimulationComponent\Data\Engine\WHRPowerMap.cs" /> @@ -843,6 +843,7 @@ <EmbeddedResource Include="Resources\Declaration\Buses\DefaultClimatic.aenv"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </EmbeddedResource> + <EmbeddedResource Include="Resources\Declaration\Buses\AlternatorTechnologies.csv" /> <None Include="Resources\Declaration\Buses\DefaultBusAuxCfg.aaux"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> diff --git a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs index 1932a1e8da..e92696fac9 100644 --- a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs +++ b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs @@ -54,6 +54,7 @@ namespace TUGraz.VectoCore.Tests.Utils { public Meter Height { get; set; } public Meter Length { get; set; } public Meter Width { get; set; } + public Meter EntranceHeight { get; } public IVehicleComponentsDeclaration Components { get { return this; } } public XmlNode XMLSource { get; } @@ -104,6 +105,7 @@ namespace TUGraz.VectoCore.Tests.Utils { public Meter Height { get; } public Meter Length { get; set; } public Meter Width { get; set; } + public Meter EntranceHeight { get; } public Watt MaxNetPower2 { get; } public string RegisteredClass { get; set; } public int NuberOfPassengersUpperDeck { get; set; } -- GitLab