From 4ea213a513c3c42bf44f2ab6c5bb466294448f92 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Mon, 20 Jan 2020 17:37:48 +0100 Subject: [PATCH] refactor electric consumers: make cycle-dependent current demand --- VECTO/BusAuxiliaries/UI/frmAuxiliaryConfig.vb | 12 +- .../Mocks/ElectricalConsumerMock.vb | 54 ++-- .../AuxiliaryEnvironmentComparisonTests.vb | 278 +++++++++--------- .../UnitTests/ElectricalConsumerListTests.vb | 58 ++-- .../UnitTests/ElectricalConsumerTests.vb | 101 +++---- ..._NonSmart_AlternatorsSetEfficiencyTests.vb | 15 +- .../VectoAuxiliariesTests/UnitTests/Utils.vb | 88 +++--- .../BusAuxiliaries/IAuxiliaryConfig.cs | 1 + .../BusAuxiliaries/IElectricalConsumer.cs | 30 -- .../BusAuxiliaries/IElectricalConsumerList.cs | 61 ---- .../IElectricsUserInputsConfig.cs | 10 +- .../FileIO/JSON/BusAuxiliaryInputData.cs | 20 +- .../ComponentData/ElectricConsumerReader.cs | 47 +-- .../DeclarationDataAdapterPrimaryBus.cs | 77 ++++- .../DeclarationModeBusVectoRunDataFactory.cs | 2 +- .../Models/BusAuxiliaries/AuxiliaryConfig.cs | 30 +- .../Impl/Electrics/ElectricalConsumer.cs | 177 ++++------- .../Impl/Electrics/ElectricalConsumerList.cs | 8 +- .../Electrics/ElectricsUserInputsConfig.cs | 7 +- .../Impl/Electrics/M00Impl.cs | 2 +- .../Impl/Electrics/M02Impl.cs | 2 +- .../Impl/Electrics/M0_1Impl.cs | 38 +-- .../Impl/Electrics/M0_5Impl.cs | 2 +- .../IM0_1_AverageElectricLoadDemand.cs | 4 +- .../Models/Declaration/DeclarationData.cs | 20 +- .../OutputData/FileIO/BusAuxWriter.cs | 21 +- .../Declaration/Buses/ElectricConsumers.csv | 37 +-- .../Declaration/HeavyBusSegmentationTable.csv | 44 +-- 28 files changed, 540 insertions(+), 706 deletions(-) delete mode 100644 VectoCommon/VectoCommon/BusAuxiliaries/IElectricalConsumer.cs delete mode 100644 VectoCommon/VectoCommon/BusAuxiliaries/IElectricalConsumerList.cs diff --git a/VECTO/BusAuxiliaries/UI/frmAuxiliaryConfig.vb b/VECTO/BusAuxiliaries/UI/frmAuxiliaryConfig.vb index 583555ce6d..8f208e16a6 100644 --- a/VECTO/BusAuxiliaries/UI/frmAuxiliaryConfig.vb +++ b/VECTO/BusAuxiliaries/UI/frmAuxiliaryConfig.vb @@ -45,7 +45,7 @@ Public Class frmAuxiliaryConfig Private auxFile As String Private cmFilesList As String() Private SaveClicked As Boolean - Private electricalConsumerBinding As New BindingList(Of IElectricalConsumer) + 'Private electricalConsumerBinding As New BindingList(Of IElectricalConsumer) #End Region @@ -1366,9 +1366,9 @@ Public Class frmAuxiliaryConfig 'Electrical ConsumablesGrid - electricalConsumerBinding = - New BindingList(Of IElectricalConsumer)(CType (auxConfig.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(Of IElectricalConsumer))) - gvElectricalConsumables.DataSource = electricalConsumerBinding + 'electricalConsumerBinding = + ' New BindingList(Of IElectricalConsumer)(CType (auxConfig.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(Of IElectricalConsumer))) + 'gvElectricalConsumables.DataSource = electricalConsumerBinding AddHandler gvElectricalConsumables.CellFormatting, New DataGridViewCellFormattingEventHandler(AddressOf SIToText) @@ -1476,7 +1476,7 @@ Public Class frmAuxiliaryConfig gvResultsCardTraction.BackgroundColor = Color.Gray gvResultsCardOverrun.BackgroundColor = Color.Gray - electricalConsumerBinding.Single(Function(c) c.Category = "Veh Electronics &Engine").NumberInActualVehicle = 0 + 'electricalConsumerBinding.Single(Function(c) c.Category = "Veh Electronics &Engine").NumberInActualVehicle = 0 Else gvResultsCardIdle.Enabled = False @@ -1488,7 +1488,7 @@ Public Class frmAuxiliaryConfig gvResultsCardTraction.BackgroundColor = Color.White gvResultsCardOverrun.BackgroundColor = Color.White - electricalConsumerBinding.Single(Function(c) c.Category = "Veh Electronics &Engine").NumberInActualVehicle = 1 + 'electricalConsumerBinding.Single(Function(c) c.Category = "Veh Electronics &Engine").NumberInActualVehicle = 1 End If End Sub diff --git a/VECTOAux/VectoAuxiliariesTests/Mocks/ElectricalConsumerMock.vb b/VECTOAux/VectoAuxiliariesTests/Mocks/ElectricalConsumerMock.vb index af08deb266..41f6053118 100644 --- a/VECTOAux/VectoAuxiliariesTests/Mocks/ElectricalConsumerMock.vb +++ b/VECTOAux/VectoAuxiliariesTests/Mocks/ElectricalConsumerMock.vb @@ -4,46 +4,46 @@ Imports TUGraz.VectoCommon.BusAuxiliaries Imports TUGraz.VectoCommon.Utils Namespace Mocks - Public Class ElectricalConsumerMock - Implements IElectricalConsumer + 'Public Class ElectricalConsumerMock + ' Implements IElectricalConsumer - 'Public Property AvgConsumptionAmps As Ampere Implements IElectricalConsumer.AvgConsumptionAmps + ' 'Public Property AvgConsumptionAmps As Ampere Implements IElectricalConsumer.AvgConsumptionAmps - Public Property BaseVehicle As Boolean Implements IElectricalConsumer.BaseVehicle + ' Public Property BaseVehicle As Boolean Implements IElectricalConsumer.BaseVehicle - Public Property Category As String Implements IElectricalConsumer.Category + ' Public Property Category As String Implements IElectricalConsumer.Category - Public Property ConsumerName As String Implements IElectricalConsumer.ConsumerName + ' Public Property ConsumerName As String Implements IElectricalConsumer.ConsumerName - Public Property NominalConsumptionAmps As Ampere Implements IElectricalConsumer.NominalConsumptionAmps + ' Public Property NominalConsumptionAmps As Ampere Implements IElectricalConsumer.NominalConsumptionAmps - Public Property NumberInActualVehicle As Integer Implements IElectricalConsumer.NumberInActualVehicle + ' Public Property NumberInActualVehicle As Integer Implements IElectricalConsumer.NumberInActualVehicle - Public Property PhaseIdle_TractionOn As Double Implements IElectricalConsumer.PhaseIdle_TractionOn + ' Public Property PhaseIdle_TractionOn As Double Implements IElectricalConsumer.PhaseIdle_TractionOn - Public Property PowerNetVoltage As Volt Implements IElectricalConsumer.PowerNetVoltage + ' Public Property PowerNetVoltage As Volt Implements IElectricalConsumer.PowerNetVoltage - Public ReadOnly Property TotalAvgConumptionAmps As Ampere _ - Implements IElectricalConsumer.TotalAvgConumptionAmps - get - Return 9.SI(Of Ampere)() - End Get - End Property + ' Public ReadOnly Property TotalAvgConumptionAmps As Ampere _ + ' Implements IElectricalConsumer.TotalAvgConumptionAmps + ' get + ' Return 9.SI(Of Ampere)() + ' End Get + ' End Property - 'Public Function TotalAvgConsumptionInWatts(Optional PhaseIdle_TractionOnBasedOnCycle As Double = 0.0) As Watt _ - ' Implements IElectricalConsumer.TotalAvgConsumptionInWatts + ' 'Public Function TotalAvgConsumptionInWatts(Optional PhaseIdle_TractionOnBasedOnCycle As Double = 0.0) As Watt _ + ' ' Implements IElectricalConsumer.TotalAvgConsumptionInWatts - ' Return (9 * 26.3).SI(Of Watt)() - 'End Function + ' ' Return (9 * 26.3).SI(Of Watt)() + ' 'End Function - Public Property Info As String Implements IElectricalConsumer.Info + ' Public Property Info As String Implements IElectricalConsumer.Info - Public Event PropertyChanged As PropertyChangedEventHandler _ - Implements INotifyPropertyChanged.PropertyChanged + ' Public Event PropertyChanged As PropertyChangedEventHandler _ + ' Implements INotifyPropertyChanged.PropertyChanged - Private Sub NotifyPropertyChanged(p As String) - RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(p)) - End Sub - End Class + ' Private Sub NotifyPropertyChanged(p As String) + ' RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(p)) + ' End Sub + 'End Class End Namespace diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/AuxiliaryEnvironmentComparisonTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/AuxiliaryEnvironmentComparisonTests.vb index 7a873ac230..ad7e4888c5 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/AuxiliaryEnvironmentComparisonTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/AuxiliaryEnvironmentComparisonTests.vb @@ -17,16 +17,16 @@ Namespace UnitTests Public Class AuxiliaryComparisonTests - <OneTimeSetUp> - Sub RunBeforeAnyTests() - Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory) - end Sub + <OneTimeSetUp> + Sub RunBeforeAnyTests() + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory) + end Sub - shared Function GetDefaultAuxiliaryConfig() As IAuxiliaryConfig - Dim retVal As IAuxiliaryConfig = Utils.GetAuxTestConfig() + shared Function GetDefaultAuxiliaryConfig() As IAuxiliaryConfig + Dim retVal As IAuxiliaryConfig = Utils.GetAuxTestConfig() - Return retVal - End Function + Return retVal + End Function <Test()> Public Sub BasicEqualCompareTest() @@ -42,9 +42,9 @@ Namespace UnitTests Assert.AreEqual(True, compareResult) End Sub - + - <Test()> + <Test()> Public Sub BasicUnequalTest() 'Arrange @@ -104,7 +104,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.ElectricalUserInputsConfig, ElectricsUserInputsConfig).DoorActuationTimeSecond += 1.SI(Of Second) + CType (auxNow.ElectricalUserInputsConfig, ElectricsUserInputsConfig).DoorActuationTimeSecond += 1.SI(Of Second) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -112,21 +112,21 @@ Namespace UnitTests Assert.AreEqual(False, compareResult) End Sub - <Test()> - <Category("ElectricalUserConfig")> - Public Sub ElectricalUserConfig_Consumers_Unequal_Count_UnequalTest() + '<Test()> + '<Category("ElectricalUserConfig")> + 'Public Sub ElectricalUserConfig_Consumers_Unequal_Count_UnequalTest() - 'Arrange - Dim auxFresh = GetDefaultAuxiliaryConfig() - Dim auxNow = GetDefaultAuxiliaryConfig() - Dim compareResult As Boolean - CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer)).RemoveAt(0) + ' 'Arrange + ' Dim auxFresh = GetDefaultAuxiliaryConfig() + ' Dim auxNow = GetDefaultAuxiliaryConfig() + ' Dim compareResult As Boolean + ' CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer)).RemoveAt(0) - 'Act - compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) + ' 'Act + ' compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) - Assert.AreEqual(False, compareResult) - End Sub + ' Assert.AreEqual(False, compareResult) + 'End Sub '<Test()> '<Category("ElectricalUserConfig")> @@ -144,106 +144,106 @@ Namespace UnitTests ' Assert.AreEqual(False, compareResult) 'End Sub - <Test()> - <Category("ElectricalUserConfig")> - Public Sub ElectricalUserConfig_Unequal_Consumers_BaseVehicle_UnequalTest() + '<Test()> + '<Category("ElectricalUserConfig")> + 'Public Sub ElectricalUserConfig_Unequal_Consumers_BaseVehicle_UnequalTest() - 'Arrange - Dim auxFresh = GetDefaultAuxiliaryConfig() - Dim auxNow = GetDefaultAuxiliaryConfig() - Dim compareResult As Boolean - CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).BaseVehicle = - Not auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).BaseVehicle + ' 'Arrange + ' Dim auxFresh = GetDefaultAuxiliaryConfig() + ' Dim auxNow = GetDefaultAuxiliaryConfig() + ' Dim compareResult As Boolean + ' CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).BaseVehicle = + ' Not auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).BaseVehicle - 'Act - compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) + ' 'Act + ' compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) - Assert.AreEqual(False, compareResult) - End Sub + ' Assert.AreEqual(False, compareResult) + 'End Sub - <Test()> - <Category("ElectricalUserConfig")> - Public Sub ElectricalUserConfig_Unequal_Consumers_Category_UnequalTest() + '<Test()> + '<Category("ElectricalUserConfig")> + 'Public Sub ElectricalUserConfig_Unequal_Consumers_Category_UnequalTest() - 'Arrange - Dim auxFresh = GetDefaultAuxiliaryConfig() - Dim auxNow = GetDefaultAuxiliaryConfig() - Dim compareResult As Boolean - Dim cat As String = auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).Category - CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).Category = cat & "x" + ' 'Arrange + ' Dim auxFresh = GetDefaultAuxiliaryConfig() + ' Dim auxNow = GetDefaultAuxiliaryConfig() + ' Dim compareResult As Boolean + ' Dim cat As String = auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).Category + ' CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).Category = cat & "x" - 'Act - compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) + ' 'Act + ' compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) - Assert.AreEqual(False, compareResult) - End Sub + ' Assert.AreEqual(False, compareResult) + 'End Sub - <Test()> - <Category("ElectricalUserConfig")> - Public Sub ElectricalUserConfig_Unequal_Consumers_ConsumerName_UnequalTest() + '<Test()> + '<Category("ElectricalUserConfig")> + 'Public Sub ElectricalUserConfig_Unequal_Consumers_ConsumerName_UnequalTest() - 'Arrange - Dim auxFresh = GetDefaultAuxiliaryConfig() - Dim auxNow = GetDefaultAuxiliaryConfig() - Dim compareResult As Boolean - Dim cname As String = auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).ConsumerName - CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).ConsumerName = cname & "x" + ' 'Arrange + ' Dim auxFresh = GetDefaultAuxiliaryConfig() + ' Dim auxNow = GetDefaultAuxiliaryConfig() + ' Dim compareResult As Boolean + ' Dim cname As String = auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).ConsumerName + ' CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).ConsumerName = cname & "x" - 'Act - compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) + ' 'Act + ' compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) - Assert.AreEqual(False, compareResult) - End Sub + ' Assert.AreEqual(False, compareResult) + 'End Sub - <Test()> - <Category("ElectricalUserConfig")> - Public Sub ElectricalUserConfig_Unequal_Consumers_NominalConsumptionAmps_UnequalTest() + '<Test()> + '<Category("ElectricalUserConfig")> + 'Public Sub ElectricalUserConfig_Unequal_Consumers_NominalConsumptionAmps_UnequalTest() - 'Arrange - Dim auxFresh = GetDefaultAuxiliaryConfig() - Dim auxNow = GetDefaultAuxiliaryConfig() - Dim compareResult As Boolean - CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).NominalConsumptionAmps += 1.SI(of Ampere) + ' 'Arrange + ' Dim auxFresh = GetDefaultAuxiliaryConfig() + ' Dim auxNow = GetDefaultAuxiliaryConfig() + ' Dim compareResult As Boolean + ' CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).NominalConsumptionAmps += 1.SI(of Ampere) - 'Act - compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) + ' 'Act + ' compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) - Assert.AreEqual(False, compareResult) - End Sub + ' Assert.AreEqual(False, compareResult) + 'End Sub - <Test()> - <Category("ElectricalUserConfig")> - Public Sub ElectricalUserConfig_Unequal_Consumers_NumberInActualVehicle_UnequalTest() + '<Test()> + '<Category("ElectricalUserConfig")> + 'Public Sub ElectricalUserConfig_Unequal_Consumers_NumberInActualVehicle_UnequalTest() - 'Arrange - Dim auxFresh = GetDefaultAuxiliaryConfig() - Dim auxNow = GetDefaultAuxiliaryConfig() - Dim compareResult As Boolean - Dim cname As Single = auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).NumberInActualVehicle - auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).NumberInActualVehicle += 1 + ' 'Arrange + ' Dim auxFresh = GetDefaultAuxiliaryConfig() + ' Dim auxNow = GetDefaultAuxiliaryConfig() + ' Dim compareResult As Boolean + ' Dim cname As Single = auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).NumberInActualVehicle + ' auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).NumberInActualVehicle += 1 - 'Act - compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) + ' 'Act + ' compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) - Assert.AreEqual(False, compareResult) - End Sub + ' Assert.AreEqual(False, compareResult) + 'End Sub - <Test()> - <Category("ElectricalUserConfig")> - Public Sub ElectricalUserConfig_Unequal_Consumers_PhaseIdle_TractionOn_UnequalTest() + '<Test()> + '<Category("ElectricalUserConfig")> + 'Public Sub ElectricalUserConfig_Unequal_Consumers_PhaseIdle_TractionOn_UnequalTest() - 'Arrange - Dim auxFresh = GetDefaultAuxiliaryConfig() - Dim auxNow = GetDefaultAuxiliaryConfig() - Dim compareResult As Boolean - Dim cname As Double = auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).PhaseIdle_TractionOn - CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).PhaseIdle_TractionOn += 1 + ' 'Arrange + ' Dim auxFresh = GetDefaultAuxiliaryConfig() + ' Dim auxNow = GetDefaultAuxiliaryConfig() + ' Dim compareResult As Boolean + ' Dim cname As Double = auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items(0).PhaseIdle_TractionOn + ' CType(CType(auxNow.ElectricalUserInputsConfig.ElectricalConsumers.Items, List(of IElectricalConsumer))(0), ElectricalConsumer).PhaseIdle_TractionOn += 1 - 'Act - compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) + ' 'Act + ' compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) - Assert.AreEqual(False, compareResult) - End Sub + ' Assert.AreEqual(False, compareResult) + 'End Sub <Test()> <Category("ElectricalUserConfig")> @@ -269,7 +269,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -285,7 +285,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -301,8 +301,8 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -318,8 +318,8 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -335,8 +335,8 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 51.SI(of Ampere))) - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 50.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 51.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardIdle, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 50.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -352,8 +352,8 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(51.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(51.SI(of Ampere), 49.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -369,8 +369,8 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -386,8 +386,8 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 50.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardTraction, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 50.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -403,8 +403,8 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 48.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 48.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -420,8 +420,8 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(50.SI(of Ampere), 49.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -437,8 +437,8 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) - CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 50.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 49.SI(of Ampere))) + CType(CType (auxNow.ElectricalUserInputsConfig.ResultCardOverrun, ResultCard).Results, List(of SmartResult)).Add(New SmartResult(49.SI(of Ampere), 50.SI(of Ampere))) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -454,7 +454,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage += 1.SI(of Volt) + CType (auxNow.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage += 1.SI(of Volt) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -470,7 +470,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.ElectricalUserInputsConfig, ElectricsUserInputsConfig).SmartElectrical = Not auxNow.ElectricalUserInputsConfig.SmartElectrical + CType (auxNow.ElectricalUserInputsConfig, ElectricsUserInputsConfig).SmartElectrical = Not auxNow.ElectricalUserInputsConfig.SmartElectrical 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -506,7 +506,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).AirControlledSuspension += 1.SI(of NormLiterPerSecond) + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).AirControlledSuspension += 1.SI(of NormLiterPerSecond) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -522,7 +522,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).Braking += 1.SI(of NormLiterPerKilogram) + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).Braking += 1.SI(of NormLiterPerKilogram) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -554,7 +554,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).BreakingWithKneeling += 1.SI(Of NormLiterPerKilogramMeter) + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).BreakingWithKneeling += 1.SI(Of NormLiterPerKilogramMeter) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -570,7 +570,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).DeadVolBlowOuts += 1.SI(Of PerSecond) + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).DeadVolBlowOuts += 1.SI(Of PerSecond) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -586,7 +586,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).DeadVolume += 1.SI(of NormLiter) + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).DeadVolume += 1.SI(of NormLiter) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -602,7 +602,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).NonSmartRegenFractionTotalAirDemand += 1 + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).NonSmartRegenFractionTotalAirDemand += 1 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -618,7 +618,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).OverrunUtilisationForCompressionFraction += 1 + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).OverrunUtilisationForCompressionFraction += 1 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -634,7 +634,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).DoorOpening += 1.SI(Of NormLiter) + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).DoorOpening += 1.SI(Of NormLiter) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -650,7 +650,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).StopBrakeActuation += 1.SI(of NormLiterPerKilogram) + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).StopBrakeActuation += 1.SI(of NormLiterPerKilogram) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -666,7 +666,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).SmartRegenFractionTotalAirDemand += 1 + CType (auxNow.PneumaticAuxillariesConfig, PneumaticsConsumersDemand).SmartRegenFractionTotalAirDemand += 1 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -719,7 +719,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).AirSuspensionControl = ConsumerTechnology.Unknown ' auxNow.PneumaticUserInputsConfig.AirSuspensionControl & "x" + CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).AirSuspensionControl = ConsumerTechnology.Unknown ' auxNow.PneumaticUserInputsConfig.AirSuspensionControl & "x" 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -735,7 +735,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).CompressorGearEfficiency = + CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).CompressorGearEfficiency = If _ (auxNow.PneumaticUserInputsConfig.CompressorGearEfficiency - 0.1 < 0, 0, auxNow.PneumaticUserInputsConfig.CompressorGearEfficiency - 0.1) @@ -755,7 +755,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).CompressorGearRatio += 1 + CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).CompressorGearRatio += 1 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -788,7 +788,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).Doors = ConsumerTechnology.Unknown ' auxNow.PneumaticUserInputsConfig.Doors & "x" + CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).Doors = ConsumerTechnology.Unknown ' auxNow.PneumaticUserInputsConfig.Doors & "x" 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -805,7 +805,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).KneelingHeight += 1.SI(Of Meter) + CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).KneelingHeight += 1.SI(Of Meter) 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -835,7 +835,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).SmartAirCompression = Not auxNow.PneumaticUserInputsConfig.SmartAirCompression + CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).SmartAirCompression = Not auxNow.PneumaticUserInputsConfig.SmartAirCompression 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) @@ -852,7 +852,7 @@ Namespace UnitTests Dim auxFresh = GetDefaultAuxiliaryConfig() Dim auxNow = GetDefaultAuxiliaryConfig() Dim compareResult As Boolean - CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).SmartRegeneration = Not auxNow.PneumaticUserInputsConfig.SmartRegeneration + CType (auxNow.PneumaticUserInputsConfig, PneumaticUserInputsConfig).SmartRegeneration = Not auxNow.PneumaticUserInputsConfig.SmartRegeneration 'Act compareResult = auxFresh.ConfigValuesAreTheSameAs(auxNow) diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerListTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerListTests.vb index 803e0b4b76..3127a6ddc3 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerListTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerListTests.vb @@ -21,50 +21,50 @@ Public Class ElectricalConsumerListTests Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory) End Sub - <Test()> - Public Sub CreateNewTest() + '<Test()> + 'Public Sub CreateNewTest() - Dim target As ElectricalConsumerList = new ElectricalConsumerList(New List(Of IElectricalConsumer)()) '(26.3.SI(of Volt), 0.096, True) + ' Dim target As ElectricalConsumerList = new ElectricalConsumerList(New List(Of IElectricalConsumer)()) '(26.3.SI(of Volt), 0.096, True) - Assert.IsNotNull(target) - End Sub + ' Assert.IsNotNull(target) + 'End Sub - <Test()> - Public Sub SumAllConsumersTest() + '<Test()> + 'Public Sub SumAllConsumersTest() - Dim auxconfig = Utils.GetAuxTestConfig() - Dim TestConsumerList = auxconfig.ElectricalUserInputsConfig.ElectricalConsumers - TestConsumerList.Items.First(Function(item) item.ConsumerName = "Controllers,Valves etc").NumberInActualVehicle = 1 + ' Dim auxconfig = Utils.GetAuxTestConfig() + ' Dim TestConsumerList = auxconfig.ElectricalUserInputsConfig.ElectricalConsumers + ' TestConsumerList.Items.First(Function(item) item.ConsumerName = "Controllers,Valves etc").NumberInActualVehicle = 1 - 'Dim actual As Ampere = TestConsumerList.GetTotalAverageDemandAmps(False) + ' 'Dim actual As Ampere = TestConsumerList.GetTotalAverageDemandAmps(False) - Dim m0_1 = New M0_1Impl(auxconfig) - dim actual As Ampere = m0_1.GetTotalAverageDemandAmpsIncludingBaseLoad + ' Dim m0_1 = New M0_1Impl(auxconfig) + ' dim actual As Ampere = m0_1.TotalAverageDemandAmpsIncludingBaseLoad - TestConsumerList.Items.First(Function(item) item.ConsumerName = "Controllers,Valves etc").NumberInActualVehicle = 0 + ' TestConsumerList.Items.First(Function(item) item.ConsumerName = "Controllers,Valves etc").NumberInActualVehicle = 0 - Dim expected = 60.63 + ' Dim expected = 60.63 - Assert.AreEqual(expected, actual.Value(), 0.01) - End Sub + ' Assert.AreEqual(expected, actual.Value(), 0.01) + 'End Sub - <Test()> - Public Sub SumNonExcludedConsumersTest() + '<Test()> + 'Public Sub SumNonExcludedConsumersTest() - Dim auxconfig = Utils.GetAuxTestConfig() - Dim TestConsumerList = auxconfig.ElectricalUserInputsConfig.ElectricalConsumers + ' Dim auxconfig = Utils.GetAuxTestConfig() + ' Dim TestConsumerList = auxconfig.ElectricalUserInputsConfig.ElectricalConsumers - TestConsumerList.Items.First(Function(item) item.ConsumerName = "Controllers,Valves etc").NumberInActualVehicle = 1 - 'Dim actual As Ampere = TestConsumerList.GetTotalAverageDemandAmps(True) - Dim m0_1 = New M0_1Impl(auxconfig) - dim actual As Ampere = m0_1.GetTotalAverageDemandAmpsWithoutBaseLoad + ' TestConsumerList.Items.First(Function(item) item.ConsumerName = "Controllers,Valves etc").NumberInActualVehicle = 1 + ' 'Dim actual As Ampere = TestConsumerList.GetTotalAverageDemandAmps(True) + ' Dim m0_1 = New M0_1Impl(auxconfig) + ' dim actual As Ampere = m0_1.TotalAverageDemandAmpsWithoutBaseLoad - TestConsumerList.Items.First(Function(item) item.ConsumerName = "Controllers,Valves etc").NumberInActualVehicle = 0 - Dim expected = 35.63 + ' TestConsumerList.Items.First(Function(item) item.ConsumerName = "Controllers,Valves etc").NumberInActualVehicle = 0 + ' Dim expected = 35.63 - Assert.AreEqual(expected, actual.Value(), 0.01) - End Sub + ' Assert.AreEqual(expected, actual.Value(), 0.01) + 'End Sub '<Test()> diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerTests.vb index a230147d08..b1c9d3c1fd 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerTests.vb @@ -1,7 +1,6 @@ Imports NUnit.Framework -Imports TUGraz.VectoCommon.Utils Imports TUGraz.VectoCore.Configuration Imports TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics Imports TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics @@ -12,77 +11,73 @@ Namespace UnitTests #Region "Helpers" - Public Function GetGoodConsumer() As ElectricalConsumer - Return New ElectricalConsumer(False, "Doors", "Doors per Door", 20.SI(of Ampere), 0.5, 26.3.SI(of Volt), 1, "") - End Function + 'Public Function GetGoodConsumer() As ElectricalConsumer + ' Return New ElectricalConsumer(False, "Doors", "Doors per Door", 0.5, 1) + 'End Function #End Region - <Test()> - Public Sub CreateNewTest() - Dim target As ElectricalConsumer = GetGoodConsumer() - Assert.IsNotNull(target) - End Sub + '<Test()> + 'Public Sub CreateNewTest() + ' Dim target As ElectricalConsumer = GetGoodConsumer() + ' Assert.IsNotNull(target) + 'End Sub - ' <Test(), ExpectedException("System.ArgumentException")> + '' <Test(), ExpectedException("System.ArgumentException")> - <Test()> - Public Sub ZeroLengthConsumerNameTest() - Dim target As ElectricalConsumer - Assert.That(Sub() target = New ElectricalConsumer(False, "Doors", "", 20.SI(of Ampere), 0.5, 26.3.SI(of Volt), 1, ""), Throws.InstanceOf(Of ArgumentException)) + '<Test()> + 'Public Sub ZeroLengthConsumerNameTest() + ' Dim target As ElectricalConsumer + ' Assert.That(Sub() target = New ElectricalConsumer(False, "Doors", "", 0.5, 1), Throws.InstanceOf(Of ArgumentException)) - End Sub + 'End Sub - <Test()> - Public Sub ZeroLengthCategoryNameTest_ThrowsArgumentException() - Dim target As ElectricalConsumer - Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 20.SI(of Ampere), 0.5, 26.3.SI(of Volt), 1, ""), Throws.InstanceOf(Of ArgumentException)) - End Sub + '<Test()> + 'Public Sub ZeroLengthCategoryNameTest_ThrowsArgumentException() + ' Dim target As ElectricalConsumer + ' Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 0.5, 1), Throws.InstanceOf(Of ArgumentException)) + 'End Sub - 'TooLow NominalConsumption - 'TooHigh NominalConsumption + ''TooLow NominalConsumption + ''TooHigh NominalConsumption - <Test()> - Public Sub ToLow_PhaseIdleTractionOn_ThrowsArgumentException() - Dim target As ElectricalConsumer - Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 20.SI(of Ampere), Constants.BusAuxiliaries.ElectricConstants.PhaseIdleTractionOnMin - 1, - 26.3.SI(of Volt), 1, ""), Throws.InstanceOf(Of ArgumentException)) + '<Test()> + 'Public Sub ToLow_PhaseIdleTractionOn_ThrowsArgumentException() + ' Dim target As ElectricalConsumer + ' Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", Constants.BusAuxiliaries.ElectricConstants.PhaseIdleTractionOnMin - 1, 1), Throws.InstanceOf(Of ArgumentException)) - End Sub + 'End Sub - <Test()> - Public Sub ToHigh_PhaseIdleTractionOn_ThrowsArgumentException() - Dim target As ElectricalConsumer - Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 20.SI(of Ampere), Constants.BusAuxiliaries.ElectricConstants.PhaseIdleTractionMax + 1, - 26.3.SI(of Volt), 1, ""), Throws.InstanceOf(Of ArgumentException)) - End Sub + '<Test()> + 'Public Sub ToHigh_PhaseIdleTractionOn_ThrowsArgumentException() + ' Dim target As ElectricalConsumer + ' Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", Constants.BusAuxiliaries.ElectricConstants.PhaseIdleTractionMax + 1, 1), Throws.InstanceOf(Of ArgumentException)) + 'End Sub - <Test()> - Public Sub ToLowNumberInVehicle_ThrowsArgumentException() - Dim target As ElectricalConsumer - Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 20.SI(of Ampere), 0.5, 26.3.SI(of Volt), -1, ""), Throws.InstanceOf(Of ArgumentException)) - End Sub + '<Test()> + 'Public Sub ToLowNumberInVehicle_ThrowsArgumentException() + ' Dim target As ElectricalConsumer + ' Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 0.5, -1), Throws.InstanceOf(Of ArgumentException)) + 'End Sub - 'TooLow PowerNetVoltage - <Test()> - Public Sub ToLowPowerNetVoltageTest_ThrowsArgumentException() - Dim target As ElectricalConsumer - Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 20.SI(of Ampere), 0.5, - (Constants.BusAuxiliaries.ElectricConstants.PowenetVoltageMin - 1).SI(of Volt), 1, ""), Throws.InstanceOf(Of ArgumentException)) + ''TooLow PowerNetVoltage + '<Test()> + 'Public Sub ToLowPowerNetVoltageTest_ThrowsArgumentException() + ' Dim target As ElectricalConsumer + ' Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 0.5, 1), Throws.InstanceOf(Of ArgumentException)) - End Sub + 'End Sub - 'TooHigh PowerNetVoltage - <Test()> - Public Sub ToHighPowerNetVoltageTest_ThrowsArgumentException() - Dim target As ElectricalConsumer - Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 20.SI(of Ampere), 0.5, - (Constants.BusAuxiliaries.ElectricConstants.PowenetVoltageMax + 1).SI(of Volt), 1, ""), Throws.InstanceOf(Of ArgumentException)) + ''TooHigh PowerNetVoltage + '<Test()> + 'Public Sub ToHighPowerNetVoltageTest_ThrowsArgumentException() + ' Dim target As ElectricalConsumer + ' Assert.That(Sub() target = New ElectricalConsumer(False, "", "Doors per Door", 0.5, 1), Throws.InstanceOf(Of ArgumentException)) - End Sub + 'End Sub End Class End Namespace \ No newline at end of file diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb index 6395085da3..a5ac8efa76 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb @@ -23,7 +23,7 @@ Namespace UnitTests Private Const cstrHVACMapLocation As String = "TestFiles\TestHvacMap.csv" Private Const cstrAlternatorMap As String = "TestFiles\testAlternatorMap.aalt" - Private elecConsumers As IElectricalConsumerList + 'Private elecConsumers As IElectricalConsumerList Private alternatorMap As IAlternatorMap Private signals As Signals = New Signals @@ -51,11 +51,10 @@ Namespace UnitTests 'Setup consumers and HVAC ( 1 Consumer in Test Category ) - Dim list = New List(Of IElectricalConsumer)() - Dim consumer = New ElectricalConsumer(False, "TEST", "CONSUMER1", 20.SI (Of Ampere), 0.5, - 26.3.SI (Of Volt), 1, "") - list.Add(consumer) - elecConsumers = CType(New ElectricalConsumerList(list), IElectricalConsumerList) + 'Dim list = New List(Of IElectricalConsumer)() + 'Dim consumer = New ElectricalConsumer(False, "TEST", "CONSUMER1", 0.5, 1) + 'list.Add(consumer) + 'elecConsumers = CType(New ElectricalConsumerList(list), IElectricalConsumerList) 'Alternator Map alternatorMap = AlternatorReader.ReadMap(cstrAlternatorMap) @@ -104,7 +103,9 @@ Namespace UnitTests Dim auxConfig = utils.GetAuxTestConfig() - CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ElectricalConsumers = elecConsumers + 'CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ElectricalConsumers = elecConsumers + CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AverageCurrentDemandInclBaseLoad = 0.5.SI(Of Ampere) + 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) diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb index aa0b6418db..b21b3b0022 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb @@ -12,61 +12,38 @@ Imports TUGraz.VectoCore.Models.Declaration Imports TUGraz.VectoCore.Models.SimulationComponent.Data Public Class Utils - public shared function GetElectricConsumers As IElectricalConsumerList - Dim _powernetVoltage = 26.3.SI (Of Volt) - Dim list As List(Of IElectricalConsumer) = New List(Of IElectricalConsumer)() - list.add(New ElectricalConsumer(False, "Doors", "Doors per vehicle", 3.0.SI (Of Ampere), 0.096339, - _powernetVoltage, 3, "")) - list.add(New ElectricalConsumer(True, "Veh Electronics &Engine", "Controllers,Valves etc", - 25.0.SI (Of Ampere), 1.0, _powernetVoltage, 1, "")) - list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Radio City", 2.0.SI (Of Ampere), 0.8, - _powernetVoltage, 1, "")) - list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Radio Intercity", 5.0.SI (Of Ampere), - 0.8, _powernetVoltage, 0, "")) - list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Radio/Audio Tourism", - 9.0.SI (Of Ampere), 0.8, - _powernetVoltage, 0, "")) - list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Fridge", 4.0.SI (Of Ampere), 0.5, - _powernetVoltage, 0, "")) - list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Kitchen Standard", - 67.0.SI (Of Ampere), 0.05, _powernetVoltage, 0, "")) - list.add(New ElectricalConsumer(False, "Vehicle basic equipment", - "Interior lights City/ Intercity + Doorlights [Should be 1/m]", - 1.0.SI (Of Ampere), 0.7, - _powernetVoltage, 12, "1 Per metre length of bus")) - list.add(New ElectricalConsumer(False, "Vehicle basic equipment", - "LED Interior lights ceiling city/Intercity + door [Should be 1/m]", - 0.6.SI (Of Ampere), 0.7, - _powernetVoltage, 0, "1 Per metre length of bus")) - list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Interior lights Tourism + reading [1/m]", - 1.1.SI (Of Ampere), 0.7, _powernetVoltage, 0, "1 Per metre length of bus")) - list.add(New ElectricalConsumer(False, "Vehicle basic equipment", - "LED Interior lights ceiling Tourism + LED reading [Should be 1/m]", - 0.66.SI (Of Ampere), 0.7, - _powernetVoltage, 0, "1 Per metre length of bus")) - list.add(New ElectricalConsumer(False, "Customer Specific Equipment", "External Displays Font/Side/Rear", - 2.65017667844523.SI (Of Ampere), 1.0, _powernetVoltage, 4, "")) - list.add(New ElectricalConsumer(False, "Customer Specific Equipment", - "Internal display per unit ( front side rear)", - 1.06007067137809.SI (Of Ampere), 1.0, _powernetVoltage, 1, "")) - list.add(New ElectricalConsumer(False, "Customer Specific Equipment", - "CityBus Ref EBSF Table4 Devices ITS No Displays", 9.3.SI (Of Ampere), 1.0, - _powernetVoltage, 1, "")) - list.add(New ElectricalConsumer(False, "Lights", "Exterior Lights BULB", 7.4.SI (Of Ampere), 1.0, - _powernetVoltage, 1, "")) - list.add(New ElectricalConsumer(False, "Lights", "Day running lights LED bonus", - 0.723.SI (Of Ampere), 1.0, - _powernetVoltage, 1, "")) - list.add(New ElectricalConsumer(False, "Lights", "Antifog rear lights LED bonus", - 0.17.SI (Of Ampere), 1.0, - _powernetVoltage, 1, "")) - list.add(New ElectricalConsumer(False, "Lights", "Position lights LED bonus", - 1.2.SI (Of Ampere), 1.0, - _powernetVoltage, 1, "")) - list.add(New ElectricalConsumer(False, "Lights", "Direction lights LED bonus", - 0.3.SI (Of Ampere), 1.0, - _powernetVoltage, 1, "")) - list.add(New ElectricalConsumer(False, "Lights", "Brake Lights LED bonus", - 1.2.SI (Of Ampere), 1.0, - _powernetVoltage, 1, "")) + 'public shared function GetElectricConsumers As IElectricalConsumerList + ' Dim _powernetVoltage = 26.3.SI (Of Volt) + ' Dim list As List(Of IElectricalConsumer) = New List(Of IElectricalConsumer)() + ' list.add(New ElectricalConsumer(False, "Doors", "Doors per vehicle", 0.096339, 3)) + ' list.add(New ElectricalConsumer(True, "Veh Electronics &Engine", "Controllers,Valves etc", 1.0, 1)) + ' list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Radio City", 0.8, 1)) + ' list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Radio Intercity", + ' 0.8, 0)) + ' list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Radio/Audio Tourism", 0.8, 0)) + ' list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Fridge", 0.5, 0)) + ' list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Kitchen Standard", 0.05, 0)) + ' list.add(New ElectricalConsumer(False, "Vehicle basic equipment", + ' "Interior lights City/ Intercity + Doorlights [Should be 1/m]", 0.7, 12)) + ' list.add(New ElectricalConsumer(False, "Vehicle basic equipment", + ' "LED Interior lights ceiling city/Intercity + door [Should be 1/m]", 0.7, 0)) + ' list.add(New ElectricalConsumer(False, "Vehicle basic equipment", "Interior lights Tourism + reading [1/m]", 0.7, 0)) + ' list.add(New ElectricalConsumer(False, "Vehicle basic equipment", + ' "LED Interior lights ceiling Tourism + LED reading [Should be 1/m]", 0.7, 0)) + ' list.add(New ElectricalConsumer(False, "Customer Specific Equipment", "External Displays Font/Side/Rear", 1.0, 4)) + ' list.add(New ElectricalConsumer(False, "Customer Specific Equipment", + ' "Internal display per unit ( front side rear)", 1.0, 1)) + ' list.add(New ElectricalConsumer(False, "Customer Specific Equipment", + ' "CityBus Ref EBSF Table4 Devices ITS No Displays", 1.0, 1)) + ' list.add(New ElectricalConsumer(False, "Lights", "Exterior Lights BULB", 1.0, 1)) + ' list.add(New ElectricalConsumer(False, "Lights", "Day running lights LED bonus", 1.0, 1)) + ' list.add(New ElectricalConsumer(False, "Lights", "Antifog rear lights LED bonus", 1.0, 1)) + ' list.add(New ElectricalConsumer(False, "Lights", "Position lights LED bonus", 1.0, 1)) + ' list.add(New ElectricalConsumer(False, "Lights", "Direction lights LED bonus", 1.0, 1)) + ' list.add(New ElectricalConsumer(False, "Lights", "Brake Lights LED bonus", 1.0, 1)) - Return New ElectricalConsumerList(list) - End function + ' Return New ElectricalConsumerList(list) + 'End function Public Shared Function GetDefaultVehicleData(optional vehicleWeight As Kilogram = Nothing) as VehicleData Return New VehicleData With { @@ -118,7 +95,8 @@ Public Class Utils Dim retval = New AuxiliaryConfig() With { .ElectricalUserInputsConfig = New ElectricsUserInputsConfig() With { - .ElectricalConsumers = GetElectricConsumers(), + .AverageCurrentDemandInclBaseLoad = 0.SI(Of Ampere), + .AverageCurrentDemandWithoutBaseLoad = 0.SI(of Ampere), .ResultCardIdle = New ResultCard(New List(Of SmartResult)()), .ResultCardTraction = New ResultCard(New List(Of SmartResult)()), .ResultCardOverrun = New ResultCard(New List(Of SmartResult)()), diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs index 3885af16ea..b2da7f68ec 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs @@ -11,6 +11,7 @@ using System.Xml.Linq; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.BusAuxiliaries; namespace TUGraz.VectoCommon.BusAuxiliaries { diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IElectricalConsumer.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IElectricalConsumer.cs deleted file mode 100644 index d620c0aa03..0000000000 --- a/VectoCommon/VectoCommon/BusAuxiliaries/IElectricalConsumer.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2017 European Union. -// Licensed under the EUPL (the 'Licence'); -// -// * You may not use this work except in compliance with the Licence. -// * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl -// * Unless required by applicable law or agreed to in writing, -// software distributed under the Licence is distributed on an "AS IS" basis, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// -// See the LICENSE.txt for the specific language governing permissions and limitations. - -using System.ComponentModel; -using TUGraz.VectoCommon.Utils; - -namespace TUGraz.VectoCommon.BusAuxiliaries -{ - public interface IElectricalConsumer : INotifyPropertyChanged - { - string Category { get; } - string ConsumerName { get; } - bool BaseVehicle { get; } - Ampere NominalConsumptionAmps { get; } - double PhaseIdle_TractionOn { get; } - int NumberInActualVehicle { get; set; } - Volt PowerNetVoltage { get; } - string Info { get; } - Ampere TotalAvgConumptionAmps { get; } - - } -} diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IElectricalConsumerList.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IElectricalConsumerList.cs deleted file mode 100644 index 23df849b59..0000000000 --- a/VectoCommon/VectoCommon/BusAuxiliaries/IElectricalConsumerList.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2017 European Union. -// Licensed under the EUPL (the 'Licence'); -// -// * You may not use this work except in compliance with the Licence. -// * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl -// * Unless required by applicable law or agreed to in writing, -// software distributed under the Licence is distributed on an "AS IS" basis, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// -// See the LICENSE.txt for the specific language governing permissions and limitations. - -using System.Collections.Generic; -using TUGraz.VectoCommon.Utils; - -namespace TUGraz.VectoCommon.BusAuxiliaries -{ - public interface IElectricalConsumerList - { - /// <summary> - /// List of Electrical Consumers - /// </summary> - /// <value></value> - /// <returns></returns> - /// <remarks></remarks> - IReadOnlyList<IElectricalConsumer> Items { get; } - - ///// <summary> - ///// Add New Electrical Consumer - ///// </summary> - ///// <param name="consumer"></param> - ///// <remarks></remarks> - //void AddConsumer(IElectricalConsumer consumer); - - ///// <summary> - ///// Remove Electrical Consumer - ///// </summary> - ///// <param name="consumer"></param> - ///// <remarks></remarks> - //void RemoveConsumer(IElectricalConsumer consumer); - - ///// <summary> - ///// Get Total Average Demand In Amps - ///// </summary> - ///// <param name="excludeOnBase">Exclude those on base vehicle</param> - ///// <returns></returns> - ///// <remarks></remarks> - //Ampere GetTotalAverageDemandAmps(bool excludeOnBase); - - ///// <summary> - ///// Door Actuation Time Fraction ( Total Time Spent Operational during cycle ) - ///// </summary> - ///// <value></value> - ///// <returns></returns> - ///// <remarks></remarks> - //double DoorDutyCycleFraction { get; set; } - - // Merge Info data from ElectricalConsumer in a Default set into live set - // This is required because the info is stored in the AAUX file and we do not want to use a persistance stored version. - //void MergeInfoData(); - } -} diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IElectricsUserInputsConfig.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IElectricsUserInputsConfig.cs index 08c99e9841..3ed13166bf 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/IElectricsUserInputsConfig.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/IElectricsUserInputsConfig.cs @@ -42,13 +42,9 @@ namespace TUGraz.VectoCommon.BusAuxiliaries /// <remarks></remarks> double AlternatorGearEfficiency { get; } - /// <summary> - /// List of Electrical Consumers - /// </summary> - /// <value></value> - /// <returns></returns> - /// <remarks></remarks> - IElectricalConsumerList ElectricalConsumers { get; } + Ampere AverageCurrentDemandInclBaseLoad { get; } + + Ampere AverageCurrentDemandWithoutBaseLoad { get; } /// <summary> /// Door Actuation Time In Seconds ( Time Taken to Open/Close the door ) diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs index 851c10f9c0..cba1a204df 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs @@ -72,23 +72,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON // DoorActuationTimeSecond electricalUserInputsConfig.DoorActuationTimeSecond = elData.GetEx<double>("DoorActuationTimeSecond").SI<Second>(); - // Electrical Consumer list - //electricalUserInputsConfig.ElectricalConsumers.Items.Clear(); - var consumers = new List<IElectricalConsumer>(); - foreach (var consumer in elData["ElectricalConsumers"]) { - var newConsumer = new ElectricalConsumer( - consumer.GetEx<bool>("BaseVehicle"), consumer.GetEx<string>("Category"), consumer.GetEx<string>("ConsumerName"), - consumer.GetEx<double>("NominalConsumptionAmps").SI<Ampere>(), - consumer.GetEx<double>("PhaseIdle_TractionOn"), consumer.GetEx<double>("PowerNetVoltage").SI<Volt>(), - consumer.GetEx<int>("NumberInActualVehicle"), - consumer.GetEx<string>("Info")); - consumers.Add(newConsumer); - } - - electricalUserInputsConfig.ElectricalConsumers = new ElectricalConsumerList(consumers); + electricalUserInputsConfig.AverageCurrentDemandInclBaseLoad = elData["ElectricalConsumers"] + .GetEx<double>("AverageCurrentDemandInclBaseLoad").SI<Ampere>(); + electricalUserInputsConfig.AverageCurrentDemandWithoutBaseLoad = elData["ElectricalConsumers"] + .GetEx<double>("AverageCurrentDemandWithoutBaseLoad").SI<Ampere>(); // PowerNetVoltage - electricalUserInputsConfig.PowerNetVoltage = elData.GetEx<double>("PowerNetVoltage").SI<Volt>(); + //electricalUserInputsConfig.PowerNetVoltage = elData.GetEx<double>("PowerNetVoltage").SI<Volt>(); // ResultCardIdle diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs index 2225515973..9ec66bad98 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs @@ -1,12 +1,13 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; using TUGraz.VectoCore.Utils; @@ -15,16 +16,15 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData public static class ElectricConsumerReader { public static readonly string[] Header = new[] { - Fields.Category, Fields.Consumer, Fields.BaseVehicle, Fields.NominalAmps, Fields.PhaseIdle, Fields.NuminVehicle, - Fields.Info + Fields.Category, Fields.Consumer, Fields.BaseVehicle, Fields.PhaseIdle, Fields.NuminVehicle }; - public static IElectricalConsumerList ReadStream(Stream str) + public static ElectricalConsumerList ReadStream(Stream str) { return Create(VectoCSVFile.ReadStream(str)); } - public static IElectricalConsumerList Create(TableData data) + public static ElectricalConsumerList Create(TableData data) { if (!HeaderValid(data.Columns)) { throw new VectoException("Invalid header. Expected: {0}, got: {1}", @@ -32,18 +32,22 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); } - var retVal = new List<IElectricalConsumer>(); + var retVal = new List<ElectricalConsumer>(); foreach (DataRow row in data.Rows) { - retVal.Add(new ElectricalConsumer( - row.ParseBoolean(Fields.BaseVehicle), - row.Field<string>(Fields.Category), - row.Field<string>(Fields.Consumer), - row.ParseDouble(Fields.NominalAmps).SI<Ampere>(), - row.ParseDouble(Fields.PhaseIdle), - Constants.BusAuxiliaries.ElectricSystem.PowernetVoltage, - 0, - row.Field<string>(Fields.Info) - )); + var consumer = new ElectricalConsumer() { + Category =row.Field<string>(Fields.Category), + ConsumerName = row.Field<string>(Fields.Consumer), + BaseVehicle = row.ParseBoolean(Fields.BaseVehicle), + Bonus = row.ParseBoolean(Fields.Bonus), + PhaseIdleTractionOn = row.ParseDouble(Fields.PhaseIdle), + 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>(); + } + } + retVal.Add(consumer); } return new ElectricalConsumerList( retVal); @@ -59,10 +63,11 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData public const string Category = "Category"; public const string Consumer = "Consumer"; public const string BaseVehicle = "Base Vehicle"; - public const string NominalAmps = "Nominal Amps"; - public const string PhaseIdle = "PhaseIdle/TractionOn"; - public const string NuminVehicle = "Num in Vehicle"; - public const string Info = "Info"; + public const string Bonus = "Bonus"; + //public const string NominalAmps = "Nominal Amps"; + public const string PhaseIdle = "PhaseIdle"; + public const string NuminVehicle = "Number in Vehicle"; + //public const string Info = "Info"; } } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs index 10ef34f234..8862cbd162 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs @@ -71,29 +71,59 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter #endregion - public IAuxiliaryConfig CreateBusAuxiliariesData(IVehicleDeclarationInputData vehicleData, VectoRunData runData) + public IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData vehicleData, VectoRunData runData) { - var retVal = new AuxiliaryConfig(); + var actuations = DeclarationData.BusAuxiliaries.ActuationsMap.Lookup(runData.Mission.MissionType); + + var retVal = new AuxiliaryConfig { + InputData = vehicleData.Components.BusAuxiliaries, + ElectricalUserInputsConfig = GetElectricalUserConfig(mission, vehicleData, actuations), + PneumaticUserInputsConfig = GetPneumaticUserConfig(vehicleData), + PneumaticAuxillariesConfig = CreatePneumaticAuxConfig(runData.Retarder.Type), + Actuations = actuations, + SSMInputs = CreateSSMModelParameters(runData.VehicleData, FuelData.Diesel), + VehicleData = runData.VehicleData, + FuelMap = runData.EngineData.Fuels.First().ConsumptionMap + }; - retVal.InputData = vehicleData.Components.BusAuxiliaries; - retVal.ElectricalUserInputsConfig = GetElectricalUserConfig(vehicleData); - retVal.PneumaticUserInputsConfig = GetPneumaticUserConfig(vehicleData); - retVal.PneumaticAuxillariesConfig = CreatePneumaticAuxConfig(runData.Retarder.Type); - retVal.Actuations = DeclarationData.BusAuxiliaries.ActuationsMap.Lookup(runData.Mission.MissionType); - retVal.SSMInputs = CreateSSMModelParameters(runData.VehicleData, FuelData.Diesel); - retVal.VehicleData = runData.VehicleData; - retVal.FuelMap = runData.EngineData.Fuels.First().ConsumptionMap; return retVal; } - private IElectricsUserInputsConfig GetElectricalUserConfig(IVehicleDeclarationInputData vehicleData) + private IElectricsUserInputsConfig GetElectricalUserConfig(Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations) { - //throw new NotImplementedException(); + 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 == + ConsumerTechnology.Electrically; + foreach (var consumer in DeclarationData.BusAuxiliaries.DefaultElectricConsumerList.Items) { + var nbr = CalcNumberInVehicle(consumer.NumberInActualVehicle, mission); + var dutyCycle = electricDoors && consumer.ConsumerName.Equals( + Constants.BusAuxiliaries.ElectricalConsumers.DoorsPerVehicleConsumer, + StringComparison.CurrentCultureIgnoreCase) + ? doorDutyCycleFraction + : consumer.PhaseIdleTractionOn; + + var current = consumer.NominalCurrent(mission.MissionType) * dutyCycle * nbr; + if (consumer.Bonus && !VehicleHasConsumer(consumer.ConsumerName, vehicleData.Components.BusAuxiliaries)) { + current = 0.SI<Ampere>(); + } + + avgInclBase += current; + if (!consumer.BaseVehicle) { + avgWithoutBase += current; + } + } + + return new ElectricsUserInputsConfig() { SmartElectrical = false, - ElectricalConsumers = new ElectricalConsumerList(new List<IElectricalConsumer>()), + 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>()), @@ -103,6 +133,27 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter }; } + 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; + } + } + + private double CalcNumberInVehicle(string nbr, Mission mission) + { + if ("f_IntLight(L_CoC)".Equals(nbr, StringComparison.InvariantCultureIgnoreCase)) { + return DeclarationData.BusAuxiliaries.CalculateLengthInteriorLights( + mission.VehicleLength, mission.DoubleDecker, mission.FloorType, mission.NumberPassengersLowerDeck).Value(); + } + return nbr.ToDouble(); + } + private IPneumaticUserInputsConfig GetPneumaticUserConfig(IVehicleDeclarationInputData vehicleData) { //throw new NotImplementedException(); diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeBusVectoRunDataFactory.cs index 314bec8f94..570e98ad24 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeBusVectoRunDataFactory.cs @@ -109,7 +109,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { }; simulationRunData.EngineData.FuelMode = modeIdx; simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass; - simulationRunData.BusAuxiliaries = _dao.CreateBusAuxiliariesData(InputDataProvider.JobInputData.Vehicle, simulationRunData); + simulationRunData.BusAuxiliaries = _dao.CreateBusAuxiliariesData(mission, InputDataProvider.JobInputData.Vehicle, simulationRunData); return simulationRunData; } } diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/AuxiliaryConfig.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/AuxiliaryConfig.cs index 9b9a2143f9..37797988af 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/AuxiliaryConfig.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/AuxiliaryConfig.cs @@ -62,28 +62,14 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries { return false; } - // Consumer list - if (ElectricalUserInputsConfig.ElectricalConsumers.Items.Count != - other.ElectricalUserInputsConfig.ElectricalConsumers.Items.Count) { - return false; - } - - int i; - for (i = 0; i < ElectricalUserInputsConfig.ElectricalConsumers.Items.Count; i++) { - IElectricalConsumer thisConsumer, otherConsumer; - thisConsumer = ElectricalUserInputsConfig.ElectricalConsumers.Items[i]; - otherConsumer = other.ElectricalUserInputsConfig.ElectricalConsumers.Items[i]; - - if ( - //thisConsumer.AvgConsumptionAmps != otherConsumer.AvgConsumptionAmps || - thisConsumer.BaseVehicle != otherConsumer.BaseVehicle || thisConsumer.Category != otherConsumer.Category || - thisConsumer.ConsumerName != otherConsumer.ConsumerName || - thisConsumer.NominalConsumptionAmps != otherConsumer.NominalConsumptionAmps || - thisConsumer.NumberInActualVehicle != otherConsumer.NumberInActualVehicle || - thisConsumer.PhaseIdle_TractionOn != otherConsumer.PhaseIdle_TractionOn) - { - return false; - } + if (ElectricalUserInputsConfig.AverageCurrentDemandInclBaseLoad != + other.ElectricalUserInputsConfig.AverageCurrentDemandInclBaseLoad) { + return false; + } + + if (ElectricalUserInputsConfig.AverageCurrentDemandWithoutBaseLoad != + other.ElectricalUserInputsConfig.AverageCurrentDemandWithoutBaseLoad) { + return false; } // PowerNetVoltage diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumer.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumer.cs index 93bb5b5dc1..f9d0dad651 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumer.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumer.cs @@ -1,6 +1,9 @@ using System; +using System.Collections.Generic; using System.ComponentModel; using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics; @@ -22,38 +25,13 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric /// ''' Described a consumer of Alternator electrical power /// ''' </summary> /// ''' <remarks></remarks> - public class ElectricalConsumer : IElectricalConsumer + public class ElectricalConsumer // : IElectricalConsumer { // Fields - private bool _BaseVehicle; - - private string _Category; - private string _ConsumerName; - private Ampere _NominalConsumptionAmps; - private int _NumberInActualVehicle; - private double _PhaseIdle_TractionOn; - private Volt _PowerNetVoltage; - private string _Info; - - // Constructor - public ElectricalConsumer( - bool baseVehicle, string category, string consumerName, Ampere nominalConsumptionAmps, double phaseIdleTractionOn, - Volt powerNetVoltage, int numberInVehicle, string info) - { - // Illegal Value Check. - ValidateInput(category, consumerName, nominalConsumptionAmps, phaseIdleTractionOn, powerNetVoltage, numberInVehicle); - - // Good, now assign. - BaseVehicle = baseVehicle; - Category = category; - ConsumerName = consumerName; - NominalConsumptionAmps = nominalConsumptionAmps; - PhaseIdle_TractionOn = phaseIdleTractionOn; - PowerNetVoltage = powerNetVoltage; - NumberInActualVehicle = numberInVehicle; - Info = info; - - } + + //private Volt _PowerNetVoltage; + private readonly Dictionary<MissionType, Ampere> _missions = new Dictionary<MissionType, Ampere>(); + protected void ValidateInput( string category, string consumerName, Ampere nominalConsumptionAmps, double phaseIdleTractionOn, Volt powerNetVoltage, @@ -96,111 +74,78 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric // Properties - public bool BaseVehicle - { - get { return _BaseVehicle; } - set { - _BaseVehicle = value; - NotifyPropertyChanged("BaseVehicle"); - } - } - - public string Category - { - get { return _Category; } - set { - _Category = value; - NotifyPropertyChanged("Category"); - } - } - public string ConsumerName - { - get { return _ConsumerName; } - set { - _ConsumerName = value; - NotifyPropertyChanged("ConsumerName"); - } - } + public bool BaseVehicle { get; set; } - public Ampere NominalConsumptionAmps - { - get { return _NominalConsumptionAmps; } - set { - _NominalConsumptionAmps = value; - NotifyPropertyChanged("NominalConsumptionAmps"); - } - } - - public int NumberInActualVehicle - { - get { return _NumberInActualVehicle; } - set { - _NumberInActualVehicle = value; - NotifyPropertyChanged("NumberInActualVehicle"); - } - } + public string Category { get; set; } - public double PhaseIdle_TractionOn - { - get { return _PhaseIdle_TractionOn; } - set { - _PhaseIdle_TractionOn = value; - NotifyPropertyChanged("PhaseIdle_TractionOn"); - } - } + public string ConsumerName { get; set; } - public Volt PowerNetVoltage - { - get { return _PowerNetVoltage; } - set { - _PowerNetVoltage = value; - NotifyPropertyChanged("PowerNetVoltage"); - } - } + public string NumberInActualVehicle { get; set; } - public string Info - { - get { return _Info; } - set { - _Info = value; - NotifyPropertyChanged("Info"); - } - } + public double PhaseIdleTractionOn { get; set; } + public bool Bonus { get; set; } + //public Volt PowerNetVoltage + //{ + // get { return _PowerNetVoltage; } + // set { + // _PowerNetVoltage = value; + // NotifyPropertyChanged("PowerNetVoltage"); + // } + //} + // Public class outputs - public Ampere TotalAvgConumptionAmps - { - get { return NominalConsumptionAmps * (NumberInActualVehicle * PhaseIdle_TractionOn); } - } + //public Ampere TotalAvgConumptionAmps + //{ + // get { return NominalConsumptionAmps * (NumberInActualVehicle * PhaseIdle_TractionOn); } + //} // Comparison Overrides - public override bool Equals(object obj) - { - if (obj == null || GetType() != obj.GetType()) { - return false; - } + //public override bool Equals(object obj) + //{ + // if (obj == null || GetType() != obj.GetType()) { + // return false; + // } - var other = (IElectricalConsumer)obj; + // var other = (IElectricalConsumer)obj; - return ConsumerName == other.ConsumerName; - } + // return ConsumerName == other.ConsumerName; + //} - [System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] - public override int GetHashCode() - { - return 0; - } + //[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] + //public override int GetHashCode() + //{ + // return 0; + //} - public event PropertyChangedEventHandler PropertyChanged; + //public event PropertyChangedEventHandler PropertyChanged; - private void NotifyPropertyChanged(string p) + //private void NotifyPropertyChanged(string p) + //{ + // PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(p)); + //} + + public Ampere this[MissionType mission] { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(p)); + get { + if (_missions.ContainsKey(mission)) { + return _missions[mission]; + } + + return 0.SI<Ampere>(); + } + set { + if (_missions.ContainsKey(mission)) { + throw new VectoException("key {0} already exists!", mission.ToString()); + } + + _missions[mission] = value; + } } } } diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumerList.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumerList.cs index 04f5963463..1a1a2b6346 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumerList.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricalConsumerList.cs @@ -15,20 +15,20 @@ using TUGraz.VectoCommon.BusAuxiliaries; namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics { - public class ElectricalConsumerList : IElectricalConsumerList + public class ElectricalConsumerList // : IElectricalConsumerList { - private readonly List<IElectricalConsumer> _items; + private readonly List<ElectricalConsumer> _items; //private Volt _powernetVoltage; // Constructor - public ElectricalConsumerList(List<IElectricalConsumer> consumer) + public ElectricalConsumerList(List<ElectricalConsumer> consumer) { _items = consumer; } // Interface implementation - public IReadOnlyList<IElectricalConsumer> Items + public IReadOnlyList<ElectricalConsumer> Items { get { return _items; diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs index 56213464a3..82086e36c6 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs @@ -21,8 +21,6 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric public IAlternatorMap AlternatorMap { get; set; } public double AlternatorGearEfficiency { get; set; } - public IElectricalConsumerList ElectricalConsumers { get; set; } - public Second DoorActuationTimeSecond { get; set; } public double StoredEnergyEfficiency { get; set; } @@ -32,5 +30,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric public bool SmartElectrical { get; set; } + public Ampere AverageCurrentDemandInclBaseLoad { get; set; } + + public Ampere AverageCurrentDemandWithoutBaseLoad { get; set; } + } + } diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M00Impl.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M00Impl.cs index 5b170ce1df..396db0c7e3 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M00Impl.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M00Impl.cs @@ -56,7 +56,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric public double AlternatorsEfficiency { get { - var baseCurrentDemandAmps = _m0_1.GetTotalAverageDemandAmpsIncludingBaseLoad; // _electricalConsumersList.GetTotalAverageDemandAmps(false); + var baseCurrentDemandAmps = _m0_1.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 aa566df23b..3f1cc9c919 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M02Impl.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M02Impl.cs @@ -40,7 +40,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric public Watt GetAveragePowerAtCrankFromElectrics() { - var electricalPowerDemandsWatts = _powerNetVoltage * _m0_1.GetTotalAverageDemandAmpsIncludingBaseLoad; + var electricalPowerDemandsWatts = _powerNetVoltage * _m0_1.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 index 3dbccc7986..7651b07a43 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_1Impl.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_1Impl.cs @@ -9,40 +9,16 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric { public class M0_1Impl : IM0_1_AverageElectricLoadDemand { - protected IElectricalConsumerList Consumer; + + public M0_1Impl(IAuxiliaryConfig config) + { - - public M0_1Impl(IAuxiliaryConfig config) { - Consumer = config.ElectricalUserInputsConfig.ElectricalConsumers; - - var doorDutyCycleFraction = (config.Actuations.ParkBrakeAndDoors * Constants.BusAuxiliaries.ElectricalConsumers.DoorActuationTimeSecond) / config.Actuations.CycleTime; ; - - GetTotalAverageDemandAmpsIncludingBaseLoad = Consumer.Items.Sum( - x => x.ConsumerName == Constants.BusAuxiliaries.ElectricalConsumers.DoorsPerVehicleConsumer - ? x.NumberInActualVehicle * x.NominalConsumptionAmps * doorDutyCycleFraction - : x.TotalAvgConumptionAmps); - - GetTotalAverageDemandAmpsWithoutBaseLoad = Consumer.Items.Where(x => !x.BaseVehicle).Sum( - x => x.ConsumerName == Constants.BusAuxiliaries.ElectricalConsumers.DoorsPerVehicleConsumer - ? x.NumberInActualVehicle * x.NominalConsumptionAmps * doorDutyCycleFraction - : x.TotalAvgConumptionAmps); - - // just for debugging linq expression above - var sum = 0.0; - foreach (var x in Consumer.Items) { - if (x.BaseVehicle) { - continue; - } - var current = x.ConsumerName == Constants.BusAuxiliaries.ElectricalConsumers.DoorsPerVehicleConsumer - ? x.NumberInActualVehicle * x.NominalConsumptionAmps * doorDutyCycleFraction - : x.TotalAvgConumptionAmps; - Debug.WriteLine(current); - sum += current.Value(); - } + TotalAverageDemandAmpsIncludingBaseLoad = config.ElectricalUserInputsConfig.AverageCurrentDemandInclBaseLoad; + TotalAverageDemandAmpsWithoutBaseLoad = config.ElectricalUserInputsConfig.AverageCurrentDemandWithoutBaseLoad; } - public Ampere GetTotalAverageDemandAmpsIncludingBaseLoad { get; } + public Ampere TotalAverageDemandAmpsIncludingBaseLoad { get; } - public Ampere GetTotalAverageDemandAmpsWithoutBaseLoad { 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 97637642be..40ade8dbf0 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_5Impl.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M0_5Impl.cs @@ -61,7 +61,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric private Ampere HvacPlusNonBaseCurrents() { - return _m0.GetHVACElectricalCurrentDemand + _m0_1.GetTotalAverageDemandAmpsWithoutBaseLoad; + return _m0.GetHVACElectricalCurrentDemand + _m0_1.TotalAverageDemandAmpsWithoutBaseLoad; } public Ampere SmartIdleCurrent diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/IM0_1_AverageElectricLoadDemand.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/IM0_1_AverageElectricLoadDemand.cs index c6834f82e4..761c3cf65f 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/IM0_1_AverageElectricLoadDemand.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/IM0_1_AverageElectricLoadDemand.cs @@ -4,7 +4,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules { public interface IM0_1_AverageElectricLoadDemand { - Ampere GetTotalAverageDemandAmpsIncludingBaseLoad { get; } - Ampere GetTotalAverageDemandAmpsWithoutBaseLoad { get; } + Ampere TotalAverageDemandAmpsIncludingBaseLoad { get; } + Ampere TotalAverageDemandAmpsWithoutBaseLoad { get; } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index f10f94bfe7..d5d6635dec 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -43,6 +43,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.FileIO.JSON; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics; using TUGraz.VectoCore.Models.SimulationComponent.Data; @@ -139,7 +140,7 @@ namespace TUGraz.VectoCore.Models.Declaration private static IEnvironmentalConditionsMap envMap = null; //private static AuxiliaryConfig busAuxConfig = null; - private static IElectricalConsumerList elUserConfig; + private static ElectricalConsumerList elUserConfig; private static IActuationsMap actuationsMap; //private static PneumaticsAuxilliariesConfig pneumaticAuxConfig; @@ -171,7 +172,7 @@ namespace TUGraz.VectoCore.Models.Declaration } } - public static IElectricalConsumerList DefaultElectricConsumerList + public static ElectricalConsumerList DefaultElectricConsumerList { get { return elUserConfig ?? (elUserConfig = ElectricConsumerReader.ReadStream( @@ -209,6 +210,21 @@ namespace TUGraz.VectoCore.Models.Declaration } } + public static Meter CalculateLengthInteriorLights(Meter vehicleLength, bool doubleDecker, FloorType floorType, int numPassLowFloor) + { + if (floorType == FloorType.LowFloor) { + return doubleDecker ? 2 * vehicleLength : vehicleLength; + } + + if (floorType == FloorType.HighFloor) { + if (doubleDecker) { + return numPassLowFloor > 6 ? 1.5 * vehicleLength : vehicleLength + 2.4.SI<Meter>(); + } + + return vehicleLength; + } + throw new VectoException("Internal Length for floorType {0} {1} not defined", floorType.ToString(), doubleDecker ? "DD" : "SD"); + } } public static class Driver diff --git a/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs index 7723eb70f4..bb20ac474f 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs @@ -62,23 +62,10 @@ namespace TUGraz.VectoCore.OutputData.FileIO // Electrical Consumer list - var elConsumers = new List<object>(); - foreach (var entry in electricalUserCfg.ElectricalConsumers.Items) { - var newConsumer = new Dictionary<string, object>(); - - newConsumer["BaseVehicle"] = entry.BaseVehicle; - newConsumer["Category"] = entry.Category; - newConsumer["ConsumerName"] = entry.ConsumerName; - newConsumer["NominalConsumptionAmps"] = entry.NominalConsumptionAmps.Value(); - newConsumer["PhaseIdle_TractionOn"] = entry.PhaseIdle_TractionOn; - newConsumer["PowerNetVoltage"] = entry.PowerNetVoltage.Value(); - newConsumer["NumberInActualVehicle"] = entry.NumberInActualVehicle; - newConsumer["Info"] = entry.Info; - - elConsumers.Add(newConsumer); - } - - elData["ElectricalConsumers"] = elConsumers; + elData["ElectricalConsumers"] = new Dictionary<string, object>() { + {"AverageCurrentDemandInclBaseLoad", electricalUserCfg.AverageCurrentDemandInclBaseLoad.Value() }, + {"AverageCurrentDemandWithoutBaseLoad", electricalUserCfg.AverageCurrentDemandWithoutBaseLoad.Value() } + }; // PowerNetVoltage elData["PowerNetVoltage"] = electricalUserCfg.PowerNetVoltage.Value(); diff --git a/VectoCore/VectoCore/Resources/Declaration/Buses/ElectricConsumers.csv b/VectoCore/VectoCore/Resources/Declaration/Buses/ElectricConsumers.csv index 5915d075e2..27b5b4b128 100644 --- a/VectoCore/VectoCore/Resources/Declaration/Buses/ElectricConsumers.csv +++ b/VectoCore/VectoCore/Resources/Declaration/Buses/ElectricConsumers.csv @@ -1,21 +1,16 @@ -Category , Consumer , Base Vehicle , Nominal Amps , PhaseIdle/TractionOn , Num in Vehicle , Info -Veh Electronics & Engine , Controllers Valves etc. , 1 , 25.0 , 1.0 , 1 , -Doors , Doors per vehicle , 0 , 3.0 , 0.0 , 3 , -Vehicle basic equipment , Radio City , 0 , 2.0 , 0.8 , 1 , -Vehicle basic equipment , Radio Intercity , 0 , 5.0 , 0.8 , 0 , -Vehicle basic equipment , Radio/Audio Tourism , 0 , 9.0 , 0.8 , 0 , -Vehicle basic equipment , Fridge , 0 , 4.0 , 0.5 , 0 , -Vehicle basic equipment , Kitchen Standard , 0 , 67.0 , 0.05 , 0 , -Vehicle basic equipment , Interior lights City/ Intercity + doorlights , 0 , 1.0 , 0.7 , 12 , 1/m vehicle length -Vehicle basic equipment , LED Interior lights ceiling city/Intercity + doorlights , 0 , 0.6 , 0.7 , 0 , 1/m vehicle length -Vehicle basic equipment , Interior lights Tourism + reading , 0 , 1.1 , 0.7 , 0 , 1/m vehicle length -Vehicle basic equipment , LED Interior lights ceiling Tourism + reading , 0 , 0.66 , 0.7 , 0 , 1/m vehicle length -Customer Specific Equipment , External Displays Font/Side/Rear , 0 , 2.65 , 1.0 , 4 , -Customer Specific Equipment , Internal display per unit , 0 , 1.06 , 1.0 , 1 , (front side rear) -Customer Specific Equipment , CityBus Ref EBSF Table4 Devices ITS No Displays , 0 , 9.3 , 1.0 , 1 , -Lights , Exterior Lights BULB , 0 , 7.4 , 1.0 , 1 , -Lights , Day running lights LED bonus , 0 , -0.723 , 1.0 , 1 , -# Lights , Antifog rear lights LED bonus , 0 , -0.17 , 1.0 , 1 , @quam: not mentioned input parameters -Lights , Position lights LED bonus , 0 , -1.2 , 1.0 , 1 , -Lights , Direction lights LED bonus , 0 , -0.3 , 1.0 , 1 , -Lights , Brake Lights LED bonus , 0 , -1.2 , 1.0 , 1 , \ No newline at end of file +Category , Consumer , Base Vehicle , Bonus , Heavy Urban , Urban , Suburban , Interurban , Coach , PhaseIdle , Number in Vehicle , Comment +Veh. Electronics & Engine , controllers & valves , 1 , 0 , 25.0 , 25.0 , 25.0 , 25.0 , 25.0 , 1.0 , 1.0 , +Vehicle basic equipment , Radio , 0 , 0 , 2.0 , 2.0 , 2.0 , 5.0 , 9.0 , 0.8 , 1.0 , +Vehicle basic equipment , Fridge , 0 , 0 , 4.0 , 4.0 , 4.0 , 4.0 , 4.0 , 0.5 , 0.0 , +Vehicle basic equipment , Kitchen Standard , 0 , 0 , 67.0 , 67.0 , 67.0 , 67.0 , 67.0 , 0.05 , 0.0 , +Vehicle basic equipment , Interior lights per metre , 0 , 0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.1 , 0.7 , f_IntLight(L_CoC) , per meter vehicle length +Vehicle basic equipment , Interior lights LED bonus , 0 , 1 , -0.4 , -0.4 , -0.4 , -0.4 , -0.4 , 0.7 , f_IntLight(L_CoC) , per meter vehicle length +Customer specific equipm. , External displays per unit (front / rear / side) , 0 , 0 , 2.7 , 2.7 , 2.7 , 2.7 , 2.7 , 1.0 , 2.0 , +Customer specific equipm. , Internal displays per unit , 0 , 0 , 1.1 , 1.1 , 1.1 , 1.1 , 1.1 , 1.0 , 0.0 , +Customer specific equipm. , Citybus customer specific value (EBSF) , 0 , 0 , 9.3 , 9.3 , 9.3 , 0.0 , 0.0 , 1.0 , 1.0 , +Lights , Exterior lights (bulb) , 1 , 0 , 7.4 , 7.4 , 7.4 , 7.4 , 7.4 , 1.0 , 1.0 , +Lights , Day running lights LED bonus , 0 , 1 , -0.7 , -0.7 , -0.7 , -0.7 , -0.7 , 1.0 , 0.0 , +Lights , Position lights LED bonus , 0 , 1 , -1.2 , -1.2 , -1.2 , -1.2 , -1.2 , 1.0 , 0.0 , +Lights , Brake lights LED bonus , 0 , 1 , -1.2 , -1.2 , -1.2 , -1.2 , -1.2 , 1.0 , 0.0 , +Lights , Headlights LED bonus , 0 , 1 , -1.5 , -1.5 , -1.5 , -1.5 , -1.5 , 1.0 , 1.0 , +Doors , Doors per vehicle , 0 , 0 , 3.0 , 3.0 , 3.0 , 3.0 , 3.0 , 0.0 , 2.0 , \ No newline at end of file diff --git a/VectoCore/VectoCore/Resources/Declaration/HeavyBusSegmentationTable.csv b/VectoCore/VectoCore/Resources/Declaration/HeavyBusSegmentationTable.csv index cfe1d6fb24..8471e5e9e4 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 , single/double deck , 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 , ## Heavy Bus Primary Vehicles -P31SD , 1 , HeavyBus , PB41 , - , 2 , 7.4 , 999 , single , 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 , double , 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 , single , 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 , double , 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 , +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 , ## -P33SD , 1 , HeavyBus , PB42 , 0 , 3 , 7.4 , 999 , single , 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 , double , 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 , single , 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 , double , 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 , +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 , # -P35SD , 1 , HeavyBus , PB43 , 1 , 3 , 7.4 , 999 , single , 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 , double , 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 , single , 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 , double , 100 , , Bus.vacc , CoachBus , 5.4 , 24.3/35.2/40.5 , 2.55 , 18 , 3.9 , 12000 , 33 , 46 , , , , 3 , 2 , , , , , -## -P37SD , 1 , HeavyBus , PB44 , 0 , 4 , 7.4 , 999 , single , 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 , double , 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 , single , 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 , double , 100 , , Bus.vacc , CoachBus , 5.4 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.9 , 14000 , 39 , 55 , , , , 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 , +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 , , , , , +## , +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 , , , , , # -P39SD , 1 , HeavyBus , PB45 , 1 , 4 , 7.4 , 999 , single , 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 , double , 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 , single , 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 , double , 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 , +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 , , , , , -- GitLab