Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 17cd21c8 authored by Terry Burns's avatar Terry Burns Committed by Kostis ANAGNOSTOPOULOS
Browse files

WorkingOnRevisedPneumatics - Completed, now moving on to testing it.

parent 88faea74
No related branches found
No related tags found
No related merge requests found
Showing
with 476 additions and 303 deletions
...@@ -25,18 +25,18 @@ Public Class F_VECTO ...@@ -25,18 +25,18 @@ Public Class F_VECTO
Private AuxDlog As F_VEH_AuxDlog Private AuxDlog As F_VEH_AuxDlog
Private EStechs As New List(Of String) Private EStechs As New List(Of String)
'TB:29/9/14 - New Fields associated with HVAC,PNeumatics as Electrical Systems ********************* ''TB:29/9/14 - New Fields associated with HVAC,PNeumatics as Electrical Systems *********************
Public ConsumerListES As List(Of VectoAuxiliaries.Electrics.ElectricalConsumer) = New List(Of VectoAuxiliaries.Electrics.ElectricalConsumer)() ' Public ConsumerListES As List(Of VectoAuxiliaries.Electrics.ElectricalConsumer) = New List(Of VectoAuxiliaries.Electrics.ElectricalConsumer)()
Public PulleyGearEfficiencyES As Single ' Public PulleyGearEfficiencyES As Single
Public PulleyGearRatioES As Single ' Public PulleyGearRatioES As Single
Public ConsumerListPS As List(Of VectoAuxiliaries.Pneumatics.PneumaticConsumer) = New List(Of VectoAuxiliaries.Pneumatics.PneumaticConsumer)() ' Public ConsumerListPS As List(Of VectoAuxiliaries.Pneumatics.PneumaticConsumer) = New List(Of VectoAuxiliaries.Pneumatics.PneumaticConsumer)()
Public PulleyGearEfficiencyPS As Single ' Public PulleyGearEfficiencyPS As Single
Public PulleyGearRatioPS As Single ' Public PulleyGearRatioPS As Single
Public HVACMapInputs As Dictionary(Of String, Single) = New Dictionary(Of String, Single)() ' Public HVACMapInputs As Dictionary(Of String, Single) = New Dictionary(Of String, Single)()
Public PulleyGearEfficiencyHVAC As Single ' Public PulleyGearEfficiencyHVAC As Single
Public PulleyGearRatioHVAC As Single ' Public PulleyGearRatioHVAC As Single
'************************************************************************************************** '**************************************************************************************************
...@@ -363,8 +363,6 @@ Public Class F_VECTO ...@@ -363,8 +363,6 @@ Public Class F_VECTO
If Not VEC0.ReadFile() Then If Not VEC0.ReadFile() Then
VEC0 = Nothing VEC0 = Nothing
MsgBox("Failed to load " & fFILE(file, True) & "!") MsgBox("Failed to load " & fFILE(file, True) & "!")
Exit Sub Exit Sub
End If End If
Catch ex As Exception Catch ex As Exception
...@@ -386,9 +384,6 @@ Public Class F_VECTO ...@@ -386,9 +384,6 @@ Public Class F_VECTO
End If End If
'Update Form 'Update Form
'Files ----------------------------- 'Files -----------------------------
...@@ -421,45 +416,11 @@ Public Class F_VECTO ...@@ -421,45 +416,11 @@ Public Class F_VECTO
Else Else
LV0.SubItems.Add(AuxEntryKV.Value.Path.OriginalPath) LV0.SubItems.Add(AuxEntryKV.Value.Path.OriginalPath)
'
'TB 29/9/2014 - This is where we read the contents of the auxilaries and add them to the respective properties of this form's class.
'TB 30/9/14 - Read Aux Path Entries and add to form.
If Not VEC0.AuxPaths(sKey.AUX.HVAC) Is Nothing Then
If (Not VEC0.AuxPaths(sKey.AUX.HVAC).HVACMapInputs Is Nothing) Then
HVACMapInputs = VEC0.AuxPaths(sKey.AUX.HVAC).HVACMapInputs
Else
HVACMapInputs = New Dictionary(Of String, Single)()
End If
PulleyGearEfficiencyHVAC = VEC0.AuxPaths(sKey.AUX.HVAC).PulleyGearEfficiencyHVAC
PulleyGearRatioHVAC = VEC0.AuxPaths(sKey.AUX.HVAC).PulleyGearRatioHVAC
End If
If Not VEC0.AuxPaths(sKey.AUX.ElecSys) Is Nothing Then
If (Not VEC0.AuxPaths(sKey.AUX.ElecSys).ConsumerListES Is Nothing) Then
ConsumerListES = VEC0.AuxPaths(sKey.AUX.ElecSys).ConsumerListES
Else
ConsumerListES = New List(Of VectoAuxiliaries.Electrics.ElectricalConsumer)
End If
PulleyGearEfficiencyES = VEC0.AuxPaths(sKey.AUX.ElecSys).PulleyGearEfficiencyES
PulleyGearRatioES = VEC0.AuxPaths(sKey.AUX.ElecSys).PulleyGearEfficiencyES
End If
If Not VEC0.AuxPaths(sKey.AUX.PneumSys).ConsumerListPS Is Nothing Then
If (Not VEC0.AuxPaths(sKey.AUX.PneumSys).ConsumerListPS Is Nothing) Then
ConsumerListPS = VEC0.AuxPaths(sKey.AUX.PneumSys).ConsumerListPS
Else
ConsumerListPS = New List(Of VectoAuxiliaries.Pneumatics.PneumaticConsumer)
End If
PulleyGearEfficiencyPS = VEC0.AuxPaths(sKey.AUX.ElecSys).PulleyGearEfficiencyPS
PulleyGearRatioES = VEC0.AuxPaths(sKey.AUX.ElecSys).PulleyGearEfficiencyPS
End If
End If End If
LvAux.Items.Add(LV0) LvAux.Items.Add(LV0)
...@@ -566,24 +527,24 @@ Public Class F_VECTO ...@@ -566,24 +527,24 @@ Public Class F_VECTO
'Engineering Mode. 'Engineering Mode.
'Detect which system we are currently addressing. 'Detect which system we are currently addressing.
Select Case LV0.SubItems(0).Text 'Select Case LV0.SubItems(0).Text
Case sKey.AUX.HVAC ' Case sKey.AUX.HVAC
AuxEntry.HVACMapInputs = Me.HVACMapInputs ' AuxEntry.HVACMapInputs = Me.HVACMapInputs
AuxEntry.PulleyGearEfficiencyHVAC = Me.PulleyGearEfficiencyHVAC ' AuxEntry.PulleyGearEfficiencyHVAC = Me.PulleyGearEfficiencyHVAC
AuxEntry.PulleyGearRatioHVAC = Me.PulleyGearRatioHVAC ' AuxEntry.PulleyGearRatioHVAC = Me.PulleyGearRatioHVAC
Case sKey.AUX.ElecSys ' Case sKey.AUX.ElecSys
AuxEntry.ConsumerListES = Me.ConsumerListES ' AuxEntry.ConsumerListES = Me.ConsumerListES
AuxEntry.PulleyGearEfficiencyES = Me.PulleyGearEfficiencyES ' AuxEntry.PulleyGearEfficiencyES = Me.PulleyGearEfficiencyES
AuxEntry.PulleyGearRatioES = Me.PulleyGearRatioES ' AuxEntry.PulleyGearRatioES = Me.PulleyGearRatioES
Case sKey.AUX.PneumSys ' Case sKey.AUX.PneumSys
AuxEntry.ConsumerListPS = Me.ConsumerListPS ' AuxEntry.ConsumerListPS = Me.ConsumerListPS
AuxEntry.PulleyGearEfficiencyPS = Me.PulleyGearEfficiencyPS ' AuxEntry.PulleyGearEfficiencyPS = Me.PulleyGearEfficiencyPS
AuxEntry.PulleyGearRatioPS = Me.PulleyGearRatioPS ' AuxEntry.PulleyGearRatioPS = Me.PulleyGearRatioPS
End Select 'End Select
...@@ -857,100 +818,50 @@ lbDlog: ...@@ -857,100 +818,50 @@ lbDlog:
AuxDlog.TbPath.Text = SelItem.SubItems(2).Text AuxDlog.TbPath.Text = SelItem.SubItems(2).Text
End If End If
'Preset the DIALOG Details depending on the edit type.
AuxDlog.ListItems.Clear()
Select Case AuxDlog.TbID.Text
'**** ELECTRICS ****
Case sKey.AUX.ElecSys.ToString()
For Each item As VectoAuxiliaries.Electrics.ElectricalConsumer In ConsumerListES
' AuxDlog.ListItems.Add(item.Name, item.Power)
'TODO: FIX THIS ABOVE
Next
AuxDlog.txtPulleyGearEfficiency.Text = PulleyGearEfficiencyES.ToString()
AuxDlog.txtPulleyGearRatio.Text = PulleyGearRatioES.ToString()
'============================================================================================
'**** PNEUMATICS ****
Case sKey.AUX.PneumSys.ToString()
For Each item As VectoAuxiliaries.Pneumatics.PneumaticConsumer In ConsumerListPS
AuxDlog.ListItems.Add(item.Name, item.VolumePerCycle)
Next
'------Get Pully Values
AuxDlog.txtPulleyGearEfficiency.Text = PulleyGearEfficiencyPS.ToString()
AuxDlog.txtPulleyGearRatio.Text = PulleyGearRatioPS
'============================================================================================
'**** HVAC ****
Case sKey.AUX.HVAC.ToString()
'----- Get list of MAP Inputs
For Each item As KeyValuePair(Of String, Single) In HVACMapInputs
AuxDlog.ListItems.Add(item.Key, item.Value)
Next
'------Get Pully Values
AuxDlog.txtPulleyGearEfficiency.Text = PulleyGearEfficiencyHVAC.ToString()
AuxDlog.txtPulleyGearRatio.Text = PulleyGearRatioHVAC.ToString()
'============================================================================================
End Select
If AuxDlog.ShowDialog = Windows.Forms.DialogResult.OK Then If AuxDlog.ShowDialog = Windows.Forms.DialogResult.OK Then
'Set New Systems Properties
'Select Case AuxDlog.TbID.Text
'GET DIALOG DETAILS Dependend on type being edited. ' '**** ELECTRICS ****
' Case sKey.AUX.ElecSys.ToString()
Select Case AuxDlog.TbID.Text ' For Each item As KeyValuePair(Of String, Single) In AuxDlog.ListItems
'**** ELECTRICS ****
Case sKey.AUX.ElecSys.ToString()
For Each item As KeyValuePair(Of String, Single) In AuxDlog.ListItems
'TODO: FIX THIS
' ConsumerListES.Add(New VectoAuxiliaries.Electrics.ElectricalConsumer(item.Key, item.Value)) ' ConsumerListES.Add(New VectoAuxiliaries.Electrics.ElectricalConsumer(item.Key, item.Value))
Next ' Next
PulleyGearEfficiencyES = CType(AuxDlog.txtPulleyGearEfficiency.Text, Single) ' PulleyGearEfficiencyES = CType(AuxDlog.txtPulleyGearEfficiency.Text, Single)
PulleyGearRatioES = CType(AuxDlog.txtPulleyGearRatio.Text, Single) ' PulleyGearRatioES = CType(AuxDlog.txtPulleyGearRatio.Text, Single)
'============================================================================================ ' '============================================================================================
'**** PNEUMATICS **** ' '**** PNEUMATICS ****
Case sKey.AUX.PneumSys.ToString() ' Case sKey.AUX.PneumSys.ToString()
For Each item As KeyValuePair(Of String, Single) In AuxDlog.ListItems ' For Each item As KeyValuePair(Of String, Single) In AuxDlog.ListItems
ConsumerListPS.Add(New VectoAuxiliaries.Pneumatics.PneumaticConsumer(item.Key, item.Value)) ' ConsumerListPS.Add(New VectoAuxiliaries.Pneumatics.PneumaticConsumer(item.Key, item.Value))
Next ' Next
'------Get Pully Values ' '------Get Pully Values
PulleyGearEfficiencyPS = CType(AuxDlog.txtPulleyGearEfficiency.Text, Single) ' PulleyGearEfficiencyPS = CType(AuxDlog.txtPulleyGearEfficiency.Text, Single)
PulleyGearRatioPS = CType(AuxDlog.txtPulleyGearRatio.Text, Single) ' PulleyGearRatioPS = CType(AuxDlog.txtPulleyGearRatio.Text, Single)
'============================================================================================ ' '============================================================================================
'**** HVAC **** ' '**** HVAC ****
Case sKey.AUX.HVAC.ToString() ' Case sKey.AUX.HVAC.ToString()
'----- Get list of MAP Inputs ' '----- Get list of MAP Inputs
For Each item As KeyValuePair(Of String, Single) In AuxDlog.ListItems ' For Each item As KeyValuePair(Of String, Single) In AuxDlog.ListItems
HVACMapInputs.Add(item.Key, item.Value) ' HVACMapInputs.Add(item.Key, item.Value)
Next ' Next
'------Get Pully Values ' '------Get Pully Values
PulleyGearEfficiencyHVAC = CType(AuxDlog.txtPulleyGearEfficiency.Text, Single) ' PulleyGearEfficiencyHVAC = CType(AuxDlog.txtPulleyGearEfficiency.Text, Single)
PulleyGearRatioHVAC = CType(AuxDlog.txtPulleyGearRatio.Text, Single) ' PulleyGearRatioHVAC = CType(AuxDlog.txtPulleyGearRatio.Text, Single)
'============================================================================================ ' '============================================================================================
End Select 'End Select
...@@ -1439,7 +1350,4 @@ Public Sub UpdatePic() ...@@ -1439,7 +1350,4 @@ Public Sub UpdatePic()
#End Region #End Region
Private Sub LvAux_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LvAux.SelectedIndexChanged
End Sub
End Class End Class
...@@ -13,9 +13,9 @@ ...@@ -13,9 +13,9 @@
Public PulleyGearRatioHVAC As Single Public PulleyGearRatioHVAC As Single
Public ConsumerListES As List(Of VectoAuxiliaries.Electrics.ElectricalConsumer) 'Public ConsumerListES As List(Of VectoAuxiliaries.Electrics.ElectricalConsumer)
Public ConsumerListPS As List(Of VectoAuxiliaries.Pneumatics.PneumaticConsumer) 'Public ConsumerListPS As List(Of VectoAuxiliaries.Pneumatics.PneumaticConsumer)
Public HVACMapInputs As Dictionary(Of String, Single) 'Public HVACMapInputs As Dictionary(Of String, Single)
Public Sub New() Public Sub New()
Path = New cSubPath Path = New cSubPath
......
...@@ -198,28 +198,28 @@ Public Class cVECTO ...@@ -198,28 +198,28 @@ Public Class cVECTO
'TB 29/9/2014 - Augmentation of Auxillary information to be stored in the configuration file post 2.0.4-Beta release 'TB 29/9/2014 - Augmentation of Auxillary information to be stored in the configuration file post 2.0.4-Beta release
'TODO - TB BIG CHANGE HERE ELECTRICAL SYSTEM ''TODO - TB BIG CHANGE HERE ELECTRICAL SYSTEM
If AuxEntryKV.Key = sKey.AUX.ElecSys Then 'If AuxEntryKV.Key = sKey.AUX.ElecSys Then
dic.Add("PulleyGearEfficiencyES", AuxEntryKV.Value.PulleyGearEfficiencyES) ' dic.Add("PulleyGearEfficiencyES", AuxEntryKV.Value.PulleyGearEfficiencyES)
dic.Add("PulleyGearRatioES", AuxEntryKV.Value.PulleyGearRatioES) ' dic.Add("PulleyGearRatioES", AuxEntryKV.Value.PulleyGearRatioES)
dic.Add("TechList", EStechs) ' dic.Add("TechList", EStechs)
dic.Add("ConsumersES", AuxEntryKV.Value.ConsumerListES) ' dic.Add("ConsumersES", AuxEntryKV.Value.ConsumerListES)
End If 'End If
'TODO - TB BIG CHANGE HERE ( HVAC SYSTEM ) ''TODO - TB BIG CHANGE HERE ( HVAC SYSTEM )
If AuxEntryKV.Key = sKey.AUX.HVAC Then 'If AuxEntryKV.Key = sKey.AUX.HVAC Then
dic.Add("PulleyGearEfficiencyHVAC", AuxEntryKV.Value.PulleyGearEfficiencyHVAC) ' dic.Add("PulleyGearEfficiencyHVAC", AuxEntryKV.Value.PulleyGearEfficiencyHVAC)
dic.Add("PulleyGearRatioHVAC", AuxEntryKV.Value.PulleyGearRatioHVAC) ' dic.Add("PulleyGearRatioHVAC", AuxEntryKV.Value.PulleyGearRatioHVAC)
dic.Add("HVACMapInputs", AuxEntryKV.Value.HVACMapInputs) ' dic.Add("MapInputs", AuxEntryKV.Value.HVACMapInputs)
End If 'End If
'TODO - TB BIG CHANGE HERE ( PNEUMATIC SYSTEM ) ''TODO - TB BIG CHANGE HERE ( PNEUMATIC SYSTEM )
If AuxEntryKV.Key = sKey.AUX.PneumSys Then 'If AuxEntryKV.Key = sKey.AUX.PneumSys Then
dic.Add("PulleyGearEfficiencyPS", AuxEntryKV.Value.PulleyGearEfficiencyPS) ' dic.Add("PulleyGearEfficiencyPS", AuxEntryKV.Value.PulleyGearEfficiencyPS)
dic.Add("PulleyGearRatioPS", AuxEntryKV.Value.PulleyGearRatioPS) ' dic.Add("PulleyGearRatioPS", AuxEntryKV.Value.PulleyGearRatioPS)
dic.Add("ConsumersPS", AuxEntryKV.Value.ConsumerListPS) ' dic.Add("ConsumersPS", AuxEntryKV.Value.ConsumerListPS)
End If 'End If
ls.Add(dic) ls.Add(dic)
Next Next
...@@ -329,46 +329,16 @@ Public Class cVECTO ...@@ -329,46 +329,16 @@ Public Class cVECTO
AuxDef = True AuxDef = True
'TB 29/9/2014 Here is where we read the Auxilliary Augmented Properties where they appear.
'Electrical System
If AuxID = sKey.AUX.ElecSys Then If AuxID = sKey.AUX.ElecSys Then
If Not dic("TechList") Is Nothing Then If Not dic("TechList") Is Nothing Then
For Each str In dic("TechList") For Each str In dic("TechList")
EStechs.Add(str) EStechs.Add(str)
Next Next
End If End If
End If
'HVAC System
If AuxID = sKey.AUX.HVAC Then
If Not dic("HVACMapInputs") Is Nothing Then
AuxEntry.HVACMapInputs = Newtonsoft.Json.JsonConvert.DeserializeObject(dic("HVACMapInputs").ToString, GetType(Dictionary(Of String, Single)))
End If
If Not dic("PulleyGearRatioHVAC") Is Nothing Then
AuxEntry.PulleyGearRatioHVAC = dic("PulleyGearRatioHVAC")
End If
If Not dic("PulleyGearEfficiencyHVAC") Is Nothing Then
AuxEntry.PulleyGearEfficiencyHVAC = dic("PulleyGearEfficiencyHVAC")
End If
End If
'Pneumatic Systems
If AuxID = sKey.AUX.PneumSys Then
End If End If
'TB 29/9/2014 Here is where we read the Auxilliary Augmented Properties where they appear.
'
Next Next
End If End If
......
...@@ -5,75 +5,140 @@ Namespace Pneumatics ...@@ -5,75 +5,140 @@ Namespace Pneumatics
Public Class AveragePneumaticLoadDemand Public Class AveragePneumaticLoadDemand
Private _compressor As IAirCompressor Private _pneumaticUserInputsConfig As IPneumaticUserInputsConfig
Private _pneumaticConsumers As List(Of IPneumaticConsumer) Private _pneumaticAuxillariesConfig As IPneumaticsAuxilliariesConfig
Private _pulleyGearEfficiency As Single Private _pneumaticsActuationsMap As IPneumaticActuationsMAP
Private _pneumaticsCompressorFlowRateMap As ICompressorMap
Public Property PulleyGearEfficiency As Single Private _averagePowerDemandPerCompressorUnitFlowRateInKWPerLitresPerSecond As Single
Private _vehicleMassKG As Single
Private Set(value As Single) Private _cycleName As String
_pulleyGearEfficiency = value Private _cycleDurationMinutes As Single
End Set Private _totalAirDemand As Single
Public ReadOnly Property TotalAirDemand As Single
Get Get
Return _pulleyGearEfficiency Return _totalAirDemand
End Get End Get
End Property End Property
Public Property TotalCycleTimeSeconds As Integer
Public ReadOnly Property PneumaticConsumers As List(Of IPneumaticConsumer)
Get
If _pneumaticConsumers Is Nothing Then
_pneumaticConsumers = New List(Of IPneumaticConsumer)
End If
Return _pneumaticConsumers
End Get
End Property
'Constructors 'Constructors
Public Sub New(iCompressor As IAirCompressor, iTotalCycleTimeSeconds As Integer, iPulleyGearEfficiency As Single, Optional consumers As List(Of IPneumaticConsumer) = Nothing) Public Sub New(
ByRef pneumaticsUserInputConfig As IPneumaticUserInputsConfig, _
ByRef pneumaticsAuxillariesConfig As IPneumaticsAuxilliariesConfig, _
ByRef pneumaticsActuationsMap As IPneumaticActuationsMAP,
ByRef pneumaticsCompressorFlowRateMap As ICompressorMap,
vehicleMassKG As Single, _
cycleName As String,
cycleDurationMinutes As Single
)
_compressor = iCompressor _pneumaticUserInputsConfig = pneumaticsUserInputConfig
_pulleyGearEfficiency = iPulleyGearEfficiency _pneumaticAuxillariesConfig = pneumaticsAuxillariesConfig
_TotalCycleTimeSeconds = iTotalCycleTimeSeconds _pneumaticsActuationsMap = pneumaticsActuationsMap
_pneumaticsCompressorFlowRateMap = pneumaticsCompressorFlowRateMap
_vehicleMassKG = vehicleMassKG
_cycleName = cycleName
_cycleDurationMinutes = cycleDurationMinutes
If iCompressor.Initialise() <> True Then
Throw New ArgumentException("This Module requires a valid compressor")
End If
'Total up the blow demands from compressor map
_averagePowerDemandPerCompressorUnitFlowRateInKWPerLitresPerSecond = _pneumaticsCompressorFlowRateMap.GetAveragePowerDemandPerCompressorUnitFlowRate()
'Calculate the Total Required Air Delivery Rate L / S
_totalAirDemand = TotalAirDemandCalculation()
If Not consumers Is Nothing AndAlso consumers.Count > 0 Then
_pneumaticConsumers = consumers
Else
_pneumaticConsumers = New List(Of IPneumaticConsumer)
End If
End Sub End Sub
Private Function TotalAirDemandCalculation() As Single
'These calculation are done directly from formulae provided from a supplied spreadsheet.
Dim numActuationsPerCycle As Single
Dim airConsumptionPerActuationNI As Single
Dim TotalAirDemand As Single
'Consumers
Dim Breaks As Single
Dim ParkBrakesplus2Doors As Single
Dim Kneeling As Single
Dim AdBlue As Single
Dim Regeneration As Single
Dim DeadVolBlowOuts As Single
Dim AirSuspension As Single
'** Breaks **
numActuationsPerCycle = _pneumaticsActuationsMap.GetNumActuations(New ActuationsKey("Brakes", _cycleName))
'=IF(K10 = "yes", IF(COUNTBLANK(F33),G33,F33), IF(COUNTBLANK(F34),G34,F34))*K16
airConsumptionPerActuationNI = If(_pneumaticUserInputsConfig.RetarderBrake, _pneumaticAuxillariesConfig.BrakingWithRetarderNIperKG, _pneumaticAuxillariesConfig.BrakingNoRetarderNIperKG)
Breaks = numActuationsPerCycle * airConsumptionPerActuationNI * _vehicleMassKG
'** ParkBrakesBreakplus2Doors ** Park break + 2 doors
numActuationsPerCycle = _pneumaticsActuationsMap.GetNumActuations(New ActuationsKey("Park brake + 2 doors", _cycleName))
'=SUM(IF(K14="electric",0,IF(COUNTBLANK(F36),G36,F36)),PRODUCT(K16*IF(COUNTBLANK(F37),G37,F37)))
airConsumptionPerActuationNI = If(_pneumaticUserInputsConfig.Doors = "electric", 0, _pneumaticAuxillariesConfig.PerDoorOpeningNI)
airConsumptionPerActuationNI += (_pneumaticAuxillariesConfig.PerStopBrakeActuationNIperKG * _vehicleMassKG)
ParkBrakesplus2Doors = numActuationsPerCycle * airConsumptionPerActuationNI
'** Kneeling **
numActuationsPerCycle = _pneumaticsActuationsMap.GetNumActuations(New ActuationsKey("Kneeling", _cycleName))
'=IF(COUNTBLANK(F35),G35,F35)*K11*K16
airConsumptionPerActuationNI = _pneumaticAuxillariesConfig.BreakingPerKneelingNIperKGinMM * _vehicleMassKG * _pneumaticUserInputsConfig.KneelingHeightMilimeters
Kneeling = numActuationsPerCycle * airConsumptionPerActuationNI
'** AdBlue **
'=IF(K13="electric",0,G39*F54)- Supplied Spreadsheet
AdBlue = If(_pneumaticUserInputsConfig.AdBlueDosing = "electric", 0, _pneumaticAuxillariesConfig.AdBlueNIperMinute * _cycleDurationMinutes)
'** Regeneration **
'=SUM(R6:R9)*IF(K9="yes",IF(COUNTBLANK(F41),G41,F41),IF(COUNTBLANK(F40),G40,F40)) - Supplied SpreadSheet
Regeneration = (Breaks + ParkBrakesplus2Doors + Kneeling + AdBlue)
Regeneration *= If(_pneumaticUserInputsConfig.SmartRegeneration, _pneumaticAuxillariesConfig.SmartRegenFractionTotalAirDemand, _
_pneumaticAuxillariesConfig.NonSmartRegenFractionTotalAirDemand)
'** DeadVolBlowOuts **
'=IF(COUNTBLANK(F43),G43,F43)/(F54/60) - Supplied SpreadSheet
numActuationsPerCycle = _pneumaticAuxillariesConfig.DeadVolBlowOutsPerLitresperHour / (60 / _cycleDurationMinutes)
airConsumptionPerActuationNI = _pneumaticAuxillariesConfig.DeadVolumeLitres
DeadVolBlowOuts = numActuationsPerCycle * airConsumptionPerActuationNI
'** AirSuspension **
'=IF(K12="electrically",0,G38*F54) - Suplied Spreadsheet
AirSuspension = If(_pneumaticUserInputsConfig.AirSuspensionControl = "electrically", 0, _pneumaticAuxillariesConfig.AirControlledSuspecsionNIperMinute * _cycleDurationMinutes)
'** Total Air Demand **
TotalAirDemand = Breaks + ParkBrakesplus2Doors + Kneeling + AdBlue + Regeneration + DeadVolBlowOuts + AirSuspension
Return TotalAirDemand
End Function
'Get Average Power Demand @ Crank From Pneumatics 'Get Average Power Demand @ Crank From Pneumatics
Public Function GetAveragePowerDemandAtCrankFromPneumatics() As Single Public Function GetAveragePowerDemandAtCrankFromPneumatics() As Single
Dim averagePowerDemandPerCompressorUnitFlowRate As Single Dim averagePowerDemandAtCrankFromPneumatics As Single = _pneumaticsCompressorFlowRateMap.GetAveragePowerDemandPerCompressorUnitFlowRate _
Dim effectiveTotalAirRequired As Single * (TotalAirDemand / (_cycleDurationMinutes * 60))
averagePowerDemandPerCompressorUnitFlowRate = _compressor.GetAveragePowerDemandPerCompressorUnitFlowRate averagePowerDemandAtCrankFromPneumatics /= _pneumaticUserInputsConfig.CompressorGearEfficiency
effectiveTotalAirRequired = GetTotalRequiredAirPerCompressorUnitDeliveryRate() / TotalCycleTimeSeconds
Return (averagePowerDemandPerCompressorUnitFlowRate * effectiveTotalAirRequired) / PulleyGearEfficiency Return averagePowerDemandAtCrankFromPneumatics
End Function End Function
'Get Total Required Air Delivery Rate 'Get Total Required Air Delivery Rate
Public Function GetTotalRequiredAirPerCompressorUnitDeliveryRate() As Single Public Function TotalAirConsumedPerCycle() As Single
Return PneumaticConsumers.Sum(Function(item) item.VolumePerActuation()) Return TotalAirDemand
End Function End Function
...@@ -81,6 +146,9 @@ Namespace Pneumatics ...@@ -81,6 +146,9 @@ Namespace Pneumatics
End Class End Class
End Namespace End Namespace
......

Namespace Pneumatics
Public Interface IPneumaticActuationsMAP
Function GetNumActuations(key As ActuationsKey) As Integer
Function Initialise() As Boolean
End Interface
End Namespace
Public Interface IPneumaticUserInputsConfig
Property CompressorType As String
Property CompressorMap As String
Property CompressorGearEfficiency As Single
Property CompressorGearRatio As Single
Property ActuationsMap As String
Property SmartAirCompression As Boolean
Property SmartRegeneration As Boolean
Property RetarderBrake As Boolean
Property KneelingHeightMilimeters As Single
Property AirSuspensionControl As String 'mechanical or electrical
Property AdBlueDosing As String 'pnmeumatic or electric
Property Doors As String 'pneumatic or electric
End Interface
Public Interface IPneumaticsAuxilliariesConfig
Property OverrunUtilisationForCompressionFraction As Single
Property BrakingWithRetarderNIperKG As Single
Property BrakingNoRetarderNIperKG As Single
Property BreakingPerKneelingNIperKGinMM As Single
Property PerDoorOpeningNI As Single
Property PerStopBrakeActuationNIperKG As Single
Property AirControlledSuspecsionNIperMinute As Single
Property AdBlueNIperMinute As Single
Property NonSmartRegenFractionTotalAirDemand As Single
Property SmartRegenFractionTotalAirDemand As Single
Property DeadVolumeLitres As Single
Property DeadVolBlowOutsPerLitresperHour As Single
End Interface
...@@ -4,13 +4,14 @@ Imports System.IO ...@@ -4,13 +4,14 @@ Imports System.IO
Namespace Pneumatics Namespace Pneumatics
Public Class PneumaticActuationsMAP Public Class PneumaticActuationsMAP
Implements IPneumaticActuationsMAP
Private map As Dictionary(Of ActuationsKey, Integer) Private map As Dictionary(Of ActuationsKey, Integer)
Private filePath As String Private filePath As String
Public Function GetNumActuations(key As ActuationsKey) As Integer Public Function GetNumActuations(key As ActuationsKey) As Integer Implements IPneumaticActuationsMAP.GetNumActuations
If map Is Nothing OrElse Not map.ContainsKey(key) Then If map Is Nothing OrElse Not map.ContainsKey(key) Then
Throw New ArgumentException("Not in map") Throw New ArgumentException("Not in map")
...@@ -25,12 +26,13 @@ End Function ...@@ -25,12 +26,13 @@ End Function
Public Sub New(filePath As String) Public Sub New(filePath As String)
Me.filePath = filePath Me.filePath = filePath
Initialise()
End Sub End Sub
Public Function Initialise() As Boolean Public Function Initialise() As Boolean Implements IPneumaticActuationsMAP.Initialise
Dim newKey As ActuationsKey Dim newKey As ActuationsKey
Dim numActuations As Single Dim numActuations As Single
......
Namespace Pneumatics
Public Class PneumaticUserInputsConfig
Implements IPneumaticUserInputsConfig
'pnmeumatic or electric
Public Property AdBlueDosing As String Implements IPneumaticUserInputsConfig.AdBlueDosing
'mechanical or electrical
Public Property AirSuspensionControl As String Implements IPneumaticUserInputsConfig.AirSuspensionControl
Public Property CompressorType As String Implements IPneumaticUserInputsConfig.CompressorType
Public Property CompressorMap As String Implements IPneumaticUserInputsConfig.CompressorMap
Public Property CompressorGearEfficiency As Single Implements IPneumaticUserInputsConfig.CompressorGearEfficiency
Public Property CompressorGearRatio As Single Implements IPneumaticUserInputsConfig.CompressorGearRatio
'PneumaticActuationsMap
Public Property ActuationsMap As String Implements IPneumaticUserInputsConfig.ActuationsMap
'pneumatic or electric
Public Property Doors As String Implements IPneumaticUserInputsConfig.Doors
Public Property KneelingHeightMilimeters As Single Implements IPneumaticUserInputsConfig.KneelingHeightMilimeters
Public Property RetarderBrake As Boolean Implements IPneumaticUserInputsConfig.RetarderBrake
Public Property SmartAirCompression As Boolean Implements IPneumaticUserInputsConfig.SmartAirCompression
Public Property SmartRegeneration As Boolean Implements IPneumaticUserInputsConfig.SmartRegeneration
Public Sub New()
End Sub
End Class
End Namespace
Namespace Pneumatics
Public Class PneumaticsAuxilliariesConfig
Implements IPneumaticsAuxilliariesConfig
Public Property AdBlueNIperMinute As Single Implements IPneumaticsAuxilliariesConfig.AdBlueNIperMinute
Public Property AirControlledSuspecsionNIperMinute As Single Implements IPneumaticsAuxilliariesConfig.AirControlledSuspecsionNIperMinute
Public Property BrakingNoRetarderNIperKG As Single Implements IPneumaticsAuxilliariesConfig.BrakingNoRetarderNIperKG
Public Property BrakingWithRetarderNIperKG As Single Implements IPneumaticsAuxilliariesConfig.BrakingWithRetarderNIperKG
Public Property BreakingPerKneelingNIperKGinMM As Single Implements IPneumaticsAuxilliariesConfig.BreakingPerKneelingNIperKGinMM
Public Property DeadVolBlowOutsPerLitresperHour As Single Implements IPneumaticsAuxilliariesConfig.DeadVolBlowOutsPerLitresperHour
Public Property DeadVolumeLitres As Single Implements IPneumaticsAuxilliariesConfig.DeadVolumeLitres
Public Property NonSmartRegenFractionTotalAirDemand As Single Implements IPneumaticsAuxilliariesConfig.NonSmartRegenFractionTotalAirDemand
Public Property OverrunUtilisationForCompressionFraction As Single Implements IPneumaticsAuxilliariesConfig.OverrunUtilisationForCompressionFraction
Public Property PerDoorOpeningNI As Single Implements IPneumaticsAuxilliariesConfig.PerDoorOpeningNI
Public Property PerStopBrakeActuationNIperKG As Single Implements IPneumaticsAuxilliariesConfig.PerStopBrakeActuationNIperKG
Public Property SmartRegenFractionTotalAirDemand As Single Implements IPneumaticsAuxilliariesConfig.SmartRegenFractionTotalAirDemand
Public Sub New(Optional setToDefaults As Boolean = False)
If setToDefaults Then SetDefaults()
End Sub
Public Sub SetDefaults()
OverrunUtilisationForCompressionFraction = 0.97
BrakingWithRetarderNIperKG = 0.0006
BrakingNoRetarderNIperKG = 0.00081
BreakingPerKneelingNIperKGinMM = 0.000066
PerDoorOpeningNI = 12.7
PerStopBrakeActuationNIperKG = 0.00064
AirControlledSuspecsionNIperMinute = 15
AdBlueNIperMinute = 21.25
NonSmartRegenFractionTotalAirDemand = 0.26
SmartRegenFractionTotalAirDemand = 0.12
DeadVolumeLitres = 30
DeadVolBlowOutsPerLitresperHour = 24
End Sub
End Class
End Namespace
...@@ -108,11 +108,12 @@ ...@@ -108,11 +108,12 @@
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<Compile Include="Pneumatics\IPneumaticConsumer.vb" /> <Compile Include="Pneumatics\IPneumaticActuationsMAP.vb" />
<Compile Include="Pneumatics\IPneumaticConsumerList.vb" /> <Compile Include="Pneumatics\IPneumaticsAuxilliariesConfig.vb" />
<Compile Include="Pneumatics\PneumaticConsumer.vb" /> <Compile Include="Pneumatics\IPneumaticUserInputsConfig.vb" />
<Compile Include="Pneumatics\PneumaticConsumerList.vb" />
<Compile Include="Pneumatics\PneumaticActuationsMap.vb" /> <Compile Include="Pneumatics\PneumaticActuationsMap.vb" />
<Compile Include="Pneumatics\PneumaticsAuxilliariesConfig.vb" />
<Compile Include="Pneumatics\PneumaticUserInputsConfig.vb" />
<Compile Include="UI\ElectricalConsumers.Designer.vb"> <Compile Include="UI\ElectricalConsumers.Designer.vb">
<DependentUpon>ElectricalConsumers.vb</DependentUpon> <DependentUpon>ElectricalConsumers.vb</DependentUpon>
</Compile> </Compile>
......
...@@ -2,15 +2,15 @@ ...@@ -2,15 +2,15 @@
Brakes,Heavy urban,191 Brakes,Heavy urban,191
Brakes,Urban,153 Brakes,Urban,153
Brakes,Suburban,49 Brakes,Suburban,49
Brakes,Inerurban,190 Brakes,Interurban,190
Brakes,Coach,27 Brakes,Coach,27
Park break + 2 doors,Heavy urban,82 Park break + 2 doors,Heavy urban,82
Park break + 2 doors,Urban,75 Park break + 2 doors,Urban,75
Park break + 2 doors,Suburban,25 Park break + 2 doors,Suburban,25
Park break + 2 doors,Inerurban,9 Park break + 2 doors,Interurban,9
Park break + 2 doors,Coach,6 Park break + 2 doors,Coach,6
Kneeling,Heavy urban,27 Kneeling,Heavy urban,27
Kneeling,Urban,25 Kneeling,Urban,25
Kneeling,Suburban,6 Kneeling,Suburban,6
Kneeling,Inerurban,0 Kneeling,Interurban,0
Kneeling,Coach,0 Kneeling,Coach,0
\ No newline at end of file
...@@ -2,15 +2,15 @@ ...@@ -2,15 +2,15 @@
Brakes,Heavy urban,191 Brakes,Heavy urban,191
Brakes,Urban,153 Brakes,Urban,153
Brakes,Suburban,49 Brakes,Suburban,49
Brakes,Inerurban,190 Brakes,Interurban,190
Brakes,Coach,27 Brakes,Coach,27
Park break + 2 doors,Heavy urban,82 Park brake + 2 doors,Heavy urban,82
Park break + 2 doors,Urban,75 Park brake + 2 doors,Urban,75
Park break + 2 doors,Suburban,25 Park brake + 2 doors,Suburban,25
Park break + 2 doors,Inerurban,9 Park brake + 2 doors,Interurban,9
Park break + 2 doors,Coach,6 Park brake + 2 doors,Coach,6
Kneeling,Heavy urban,27 Kneeling,Heavy urban,27
Kneeling,Urban,25 Kneeling,Urban,25
Kneeling,Suburban,6 Kneeling,Suburban,6
Kneeling,Inerurban,0 Kneeling,Interurban,0
Kneeling,Coach,0 Kneeling,Coach,0
\ No newline at end of file
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
Imports VectoAuxiliaries.Pneumatics Imports VectoAuxiliaries.Pneumatics
Imports NUnit.Framework Imports NUnit.Framework
Imports VectoAuxiliariesTests.Mocks Imports VectoAuxiliariesTests.Mocks
Imports VectoAuxiliaries
Namespace UnitTests Namespace UnitTests
...@@ -10,87 +11,153 @@ Namespace UnitTests ...@@ -10,87 +11,153 @@ Namespace UnitTests
Public Class AveragePneumaticLoadDemandTests Public Class AveragePneumaticLoadDemandTests
Private noConsumers As New List(Of IPneumaticConsumer)
Private threeConsumers As New List(Of IPneumaticConsumer)
Private compressor As IAirCompressor
Private _pneumaticUserInputsConfig As IPneumaticUserInputsConfig
Private _pneumaticAuxillariesConfig As IPneumaticsAuxilliariesConfig
Private _pneumaticsActuationsMap As IPneumaticActuationsMAP
Private _pneumaticsCompressorFlowRateMap As ICompressorMap
Private _vehicleMassKG As Single = 16500
Private _cycleName As String = "Urban"
Private _cycleDurationMinutes As Single = 51.9
Private _totalAirDemand As Single
Private _actuationsMapPath As String = "Testfiles\testPneumaticActuationsMap_GOODMAP.csv"
Private _compressorMapPath As String = "Testfiles\testCompressorMap.csv"
Private _defaultInputConfig As IPneumaticUserInputsConfig
'Constructors
Public Sub New()
compressor = New AirCompressor(New CompressorMapMock(False))
initialise()
End Sub
'Constructors
Public Sub New()
initialise()
End Sub
Private Sub initialise() Private Sub initialise()
threeConsumers.Add(New PneumaticConsumer("Doors", 100)) _defaultInputConfig = New PneumaticUserInputsConfig()
threeConsumers.Add(New PneumaticConsumer("HairDrier", 200))
threeConsumers.Add(New PneumaticConsumer("BalloonInflater", 300)) _defaultInputConfig.CompressorGearEfficiency = 0.8
_defaultInputConfig.SmartRegeneration = True
_defaultInputConfig.RetarderBrake = True
_defaultInputConfig.KneelingHeightMilimeters = 80
_defaultInputConfig.AirSuspensionControl = "electrically"
_defaultInputConfig.AdBlueDosing = "pneumatic"
_defaultInputConfig.Doors = "pneumatic"
_defaultInputConfig.SmartAirCompression = True
End Sub End Sub
<Test> <Test>
Public Sub AveragePowerDemandAtCrank_ThreeConsumers() Public Sub CreateNewtest()
Dim psUserInputsConfig = CType(New PneumaticUserInputsConfig(), IPneumaticUserInputsConfig)
psUserInputsConfig.AirSuspensionControl = "mechanically"
psUserInputsConfig.Doors = "pneumatic"
psUserInputsConfig.AdBlueDosing = "pneumatic"
Dim target = New AveragePneumaticLoadDemand(compressor, 10, 0.5, threeConsumers) Dim psAuxConfig = CType(New PneumaticsAuxilliariesConfig(True), IPneumaticsAuxilliariesConfig)
Dim psActuationsMap = CType(New PneumaticActuationsMAP(_actuationsMapPath), IPneumaticActuationsMAP)
Dim psCompressorMap = CType(New CompressorMap(_compressorMapPath), ICompressorMap)
Dim result As Single = Math.Round(target.GetAveragePowerDemandAtCrankFromPneumatics(), 2) psCompressorMap.Initialise()
Dim target As New AveragePneumaticLoadDemand(psUserInputsConfig, psAuxConfig, psActuationsMap, psCompressorMap, _vehicleMassKG, "Urban", _cycleDurationMinutes)
Dim expected As Single = 1.2
Assert.AreEqual(result, expected)
Assert.IsNotNull(target)
End Sub End Sub
<Test> <Test()>
Public Sub TotalAirDeliveryRate_ThreeConsumers() Public Sub AverageLoadValueUsingDefaultAuxValuesTest()
initialise()
Dim target = New AveragePneumaticLoadDemand(compressor, 10, 0.5, threeConsumers) Dim psAuxConfig = CType(New PneumaticsAuxilliariesConfig(True), IPneumaticsAuxilliariesConfig)
Dim psActuationsMap = CType(New PneumaticActuationsMAP(_actuationsMapPath), IPneumaticActuationsMAP)
Dim psCompressorMap = CType(New CompressorMap(_compressorMapPath), ICompressorMap)
Dim result As Single = target.GetTotalRequiredAirPerCompressorUnitDeliveryRate() psCompressorMap.Initialise()
Dim expected As Single = 600 Dim target As New AveragePneumaticLoadDemand(_defaultInputConfig, psAuxConfig, psActuationsMap, psCompressorMap, _vehicleMassKG, "Urban", _cycleDurationMinutes)
Dim expected As Single = 7947.684
Dim actual As Single = target.TotalAirDemand()
Assert.AreEqual(expected, actual)
Assert.AreEqual(result, expected)
End Sub End Sub
<Test> <Test()>
Public Sub TotalAirDeliveryRate_NoConsumers() Public Sub AverageLoadValueUsingDefaultAuxValues_AveragePowerAtTheCrankTest()
initialise()
Dim target = New AveragePneumaticLoadDemand(compressor, 10, 0.5, Nothing) Dim psAuxConfig = CType(New PneumaticsAuxilliariesConfig(True), IPneumaticsAuxilliariesConfig)
Dim psActuationsMap = CType(New PneumaticActuationsMAP(_actuationsMapPath), IPneumaticActuationsMAP)
Dim psCompressorMap = CType(New CompressorMap(_compressorMapPath), ICompressorMap)
Dim result As Single = target.GetTotalRequiredAirPerCompressorUnitDeliveryRate() psCompressorMap.Initialise()
Dim expected As Single = 0.01 Dim target As New AveragePneumaticLoadDemand(_defaultInputConfig, psAuxConfig, psActuationsMap, psCompressorMap, _vehicleMassKG, "Urban", _cycleDurationMinutes)
Assert.AreEqual(result, 0) Dim expected As Single = 0.0319030322
Dim actual As Single = target.GetAveragePowerDemandAtCrankFromPneumatics()
Assert.AreEqual(expected, actual)
End Sub End Sub
<Test> <Test()>
Public Sub AveragePowerDemandAtCrank_NoConsumers() Public Sub AverageLoadValueUsingDefaultAuxValues_TotalRequiredAirDeliveryRateTest()
initialise()
Dim psAuxConfig = CType(New PneumaticsAuxilliariesConfig(True), IPneumaticsAuxilliariesConfig)
Dim psActuationsMap = CType(New PneumaticActuationsMAP(_actuationsMapPath), IPneumaticActuationsMAP)
Dim psCompressorMap = CType(New CompressorMap(_compressorMapPath), ICompressorMap)
Dim target = New AveragePneumaticLoadDemand(compressor, 10, 0.5, Nothing) psCompressorMap.Initialise()
Dim result As Single = target.GetAveragePowerDemandAtCrankFromPneumatics() Dim target As New AveragePneumaticLoadDemand(_defaultInputConfig, psAuxConfig, psActuationsMap, psCompressorMap, _vehicleMassKG, "Urban", _cycleDurationMinutes)
Dim expected As Single = 0 Dim expected As Single = 7947.684
Dim actual As Single = target.TotalAirConsumedPerCycle()
Assert.AreEqual(result, expected) Assert.AreEqual(expected, actual)
End Sub End Sub
'CompressorGearEfficiency = 0.99
'SmartRegeneration = False
'RetarderBrake = False
'KneelingHeightMilimeters = 100
'AirSuspensionControl = "mechanically"
'AdBlueDosing = "electric"
'Doors = "electric"
'SmartAirCompression = false
End Class End Class
......
...@@ -87,9 +87,12 @@ Public Sub ValueLookupTest() ...@@ -87,9 +87,12 @@ Public Sub ValueLookupTest()
target.Initialise() target.Initialise()
'Brakes,Coach,27 'Brakes,Coach,27
Dim actual As Integer = target.GetNumActuations(New ActuationsKey("Brakes", "Coach"))
Dim expected As Integer = 27 Dim actual As Integer = target.GetNumActuations(New ActuationsKey("Brakes", "Urban"))
Dim expected As Integer = 153
Assert.AreEqual(expected, actual) Assert.AreEqual(expected, actual)
......
...@@ -93,7 +93,6 @@ ...@@ -93,7 +93,6 @@
<Compile Include="UnitTests\ElectricalConsumerListTests.vb" /> <Compile Include="UnitTests\ElectricalConsumerListTests.vb" />
<Compile Include="UnitTests\HVACMapTests.vb" /> <Compile Include="UnitTests\HVACMapTests.vb" />
<Compile Include="UnitTests\PneumaticActuationsMapTests.vb" /> <Compile Include="UnitTests\PneumaticActuationsMapTests.vb" />
<Compile Include="UnitTests\PneumaticConsumerTests.vb" />
<Compile Include="UnitTests\AirCompressorTests.vb" /> <Compile Include="UnitTests\AirCompressorTests.vb" />
<Compile Include="UnitTests\AlternatorMapTests.vb" /> <Compile Include="UnitTests\AlternatorMapTests.vb" />
<Compile Include="UnitTests\AlternatorTests.vb" /> <Compile Include="UnitTests\AlternatorTests.vb" />
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment