From 1227c24857bcc1df2bcdd89bacf6fced5960b1f2 Mon Sep 17 00:00:00 2001 From: "Burns, Terry" <Terry.Burns@ricardo.com> Date: Tue, 2 Dec 2014 14:45:06 +0000 Subject: [PATCH] WIP - Eventing Added to Model ( Only where needed so far but also into Signals, this means descisions can be made within the model if or not to generate an event depending on the EventLevel reporting set. Lower classes like maps do not have signals passed to them as they did not need it, however, this can be added at a later date and the descisions made at the lowest level. Also CycleTime in Minutes removed from VectoInputs as this is already available as CycleTime in seconds in the Signals array. git-tfs-id: [http://tfs00.element.root.com:8080/tfs/TFSCollection]$/VECTO;C1695 --- .../AdvancedAuxiliaryInterfaces.vbproj | 1 + .../IAdvancedAuxiliaries.vb | 4 +- .../IAuxiliaryEvent.vb | 11 + AdvancedAuxiliaryInterfaces/ISignals.vb | 1 + AdvancedAuxiliaryInterfaces/IVectoInputs.vb | 2 +- AdvancedAuxiliaryInterfaces/Signals.vb | 2 + AdvancedAuxiliaryInterfaces/VectoInputs.vb | 4 +- AuxillaryTestHarness/AuxLauncher.Designer.vb | 52 +++- AuxillaryTestHarness/AuxLauncher.vb | 65 +++-- .../AuxiliaryTestHarness.vbproj | 10 +- .../VectoAuxiliaries/AdvancedAuxiliaries.vb | 235 ++++++++++-------- VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb | 4 +- .../VectoAuxiliaries/AuxillaryEnvironment.vb | 27 +- .../Electrics/AlternatorMap.vb | 27 +- .../Electrics/IAlternatorMap.vb | 1 + .../Pneumatics/CompressorMap.vb | 25 +- .../Pneumatics/ICompressorMap.vb | 2 + .../Pneumatics/M4_AirCompressor.vb | 5 +- .../VectoAuxiliaries/VectoAuxiliaries.vbproj | 1 - .../Mocks/AlternatorMapMock.vb | 2 + .../Mocks/CompressorMapMock.vb | 4 + 21 files changed, 320 insertions(+), 165 deletions(-) create mode 100644 AdvancedAuxiliaryInterfaces/IAuxiliaryEvent.vb diff --git a/AdvancedAuxiliaryInterfaces/AdvancedAuxiliaryInterfaces.vbproj b/AdvancedAuxiliaryInterfaces/AdvancedAuxiliaryInterfaces.vbproj index 064c4b2aa4..55193dbb87 100644 --- a/AdvancedAuxiliaryInterfaces/AdvancedAuxiliaryInterfaces.vbproj +++ b/AdvancedAuxiliaryInterfaces/AdvancedAuxiliaryInterfaces.vbproj @@ -70,6 +70,7 @@ <Compile Include="Enumerations.vb" /> <Compile Include="IAdvancedAuxiliaries.vb" /> <Compile Include="ISignals.vb" /> + <Compile Include="IAuxiliaryEvent.vb" /> <Compile Include="IVectoInputs.vb" /> <Compile Include="My Project\AssemblyInfo.vb" /> <Compile Include="My Project\Application.Designer.vb"> diff --git a/AdvancedAuxiliaryInterfaces/IAdvancedAuxiliaries.vb b/AdvancedAuxiliaryInterfaces/IAdvancedAuxiliaries.vb index acea721c96..f8dffa32ee 100644 --- a/AdvancedAuxiliaryInterfaces/IAdvancedAuxiliaries.vb +++ b/AdvancedAuxiliaryInterfaces/IAdvancedAuxiliaries.vb @@ -1,6 +1,7 @@  Public Interface IAdvancedAuxiliaries + Inherits IAuxiliaryEvent 'Information @@ -25,9 +26,6 @@ Function CycleStep( seconds As Integer, ByRef message As string ) As boolean Function RunStart( ByVal auxFilePath As String, ByRef message As string ) As boolean Function RunStop( ByRef message As string ) As boolean -'Used to send back messages to any listener who wants to do something with messages generated by the Advanced Auxiliaries. -Event Message( ByVal Message As string, ByVal messageType As AdvancedAuxiliaryMessageType) - End Interface diff --git a/AdvancedAuxiliaryInterfaces/IAuxiliaryEvent.vb b/AdvancedAuxiliaryInterfaces/IAuxiliaryEvent.vb new file mode 100644 index 0000000000..f94bb25478 --- /dev/null +++ b/AdvancedAuxiliaryInterfaces/IAuxiliaryEvent.vb @@ -0,0 +1,11 @@ + + +Public Interface IAuxiliaryEvent + + + + Event AuxiliaryEvent( ByRef sender As Object, byval message As String, ByVal messageType As AdvancedAuxiliaryMessageType ) + + +End interface + diff --git a/AdvancedAuxiliaryInterfaces/ISignals.vb b/AdvancedAuxiliaryInterfaces/ISignals.vb index de354bedbf..c5915c62fe 100644 --- a/AdvancedAuxiliaryInterfaces/ISignals.vb +++ b/AdvancedAuxiliaryInterfaces/ISignals.vb @@ -11,5 +11,6 @@ Property TotalCycleTimeSeconds As Integer property EngineDrivelineTorque as single Property Idle As Boolean Property InNeutral As Boolean +Property AuxiliaryEventReportingLevel As AdvancedAuxiliaryMessageType End Interface diff --git a/AdvancedAuxiliaryInterfaces/IVectoInputs.vb b/AdvancedAuxiliaryInterfaces/IVectoInputs.vb index 6d6634dfd7..3ea5755c6a 100644 --- a/AdvancedAuxiliaryInterfaces/IVectoInputs.vb +++ b/AdvancedAuxiliaryInterfaces/IVectoInputs.vb @@ -3,7 +3,7 @@ Property VehicleWeightKG As Single Property Cycle As String Property PowerNetVoltage As Single -Property CycleDurationMinutes As single +'Property CycleDurationMinutes As single Property FuelMap As string diff --git a/AdvancedAuxiliaryInterfaces/Signals.vb b/AdvancedAuxiliaryInterfaces/Signals.vb index 18311fd804..58e1bf81b3 100644 --- a/AdvancedAuxiliaryInterfaces/Signals.vb +++ b/AdvancedAuxiliaryInterfaces/Signals.vb @@ -42,6 +42,8 @@ Implements ISignals Public Property InNeutral As Boolean Implements ISignals.InNeutral + Public Property AuxiliaryEventReportingLevel As AdvancedAuxiliaryMessageType Implements ISignals.AuxiliaryEventReportingLevel + End Class diff --git a/AdvancedAuxiliaryInterfaces/VectoInputs.vb b/AdvancedAuxiliaryInterfaces/VectoInputs.vb index 198cd7ba8f..3a3531d912 100644 --- a/AdvancedAuxiliaryInterfaces/VectoInputs.vb +++ b/AdvancedAuxiliaryInterfaces/VectoInputs.vb @@ -8,9 +8,9 @@ Implements IVectoInputs Public Property VehicleWeightKG As Single Implements IVectoInputs.VehicleWeightKG - Public Property PowerNetVoltage As Single Implements IVectoInputs.PowerNetVoltage + Public Property PowerNetVoltage As Single Implements IVectoInputs.PowerNetVoltage - Public Property CycleDurationMinutes As Single Implements IVectoInputs.CycleDurationMinutes + 'Public Property CycleDurationMinutes As Single Implements IVectoInputs.CycleDurationMinutes Public Property FuelMap As String Implements IVectoInputs.FuelMap diff --git a/AuxillaryTestHarness/AuxLauncher.Designer.vb b/AuxillaryTestHarness/AuxLauncher.Designer.vb index 1c92f1e218..86e985c0c1 100644 --- a/AuxillaryTestHarness/AuxLauncher.Designer.vb +++ b/AuxillaryTestHarness/AuxLauncher.Designer.vb @@ -35,11 +35,14 @@ Partial Class AuxLauncher Me.lblAuxiliaryName = New System.Windows.Forms.Label() Me.lblAuxiliaryVersion = New System.Windows.Forms.Label() Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + Me.btnWholeCycle = New System.Windows.Forms.Button() + Me.txtEvents = New System.Windows.Forms.TextBox() + Me.cboWarningLevel = New System.Windows.Forms.ComboBox() Me.SuspendLayout ' 'txtAdvancedAuxiliaries ' - Me.txtAdvancedAuxiliaries.Location = New System.Drawing.Point(30, 87) + Me.txtAdvancedAuxiliaries.Location = New System.Drawing.Point(30, 101) Me.txtAdvancedAuxiliaries.Name = "txtAdvancedAuxiliaries" Me.txtAdvancedAuxiliaries.Size = New System.Drawing.Size(366, 20) Me.txtAdvancedAuxiliaries.TabIndex = 0 @@ -47,7 +50,7 @@ Partial Class AuxLauncher ' 'btnLaunchAux ' - Me.btnLaunchAux.Location = New System.Drawing.Point(414, 87) + Me.btnLaunchAux.Location = New System.Drawing.Point(414, 101) Me.btnLaunchAux.Name = "btnLaunchAux" Me.btnLaunchAux.Size = New System.Drawing.Size(75, 23) Me.btnLaunchAux.TabIndex = 1 @@ -56,7 +59,7 @@ Partial Class AuxLauncher ' 'btnRun ' - Me.btnRun.Location = New System.Drawing.Point(414, 138) + Me.btnRun.Location = New System.Drawing.Point(414, 152) Me.btnRun.Name = "btnRun" Me.btnRun.Size = New System.Drawing.Size(75, 23) Me.btnRun.TabIndex = 2 @@ -65,7 +68,7 @@ Partial Class AuxLauncher ' 'btnStop ' - Me.btnStop.Location = New System.Drawing.Point(414, 198) + Me.btnStop.Location = New System.Drawing.Point(414, 212) Me.btnStop.Name = "btnStop" Me.btnStop.Size = New System.Drawing.Size(75, 23) Me.btnStop.TabIndex = 3 @@ -74,7 +77,7 @@ Partial Class AuxLauncher ' 'btnInformation ' - Me.btnInformation.Location = New System.Drawing.Point(414, 255) + Me.btnInformation.Location = New System.Drawing.Point(414, 269) Me.btnInformation.Name = "btnInformation" Me.btnInformation.Size = New System.Drawing.Size(75, 23) Me.btnInformation.TabIndex = 4 @@ -83,14 +86,14 @@ Partial Class AuxLauncher ' 'txtTotalFCGrams ' - Me.txtTotalFCGrams.Location = New System.Drawing.Point(30, 138) + Me.txtTotalFCGrams.Location = New System.Drawing.Point(30, 152) Me.txtTotalFCGrams.Name = "txtTotalFCGrams" Me.txtTotalFCGrams.Size = New System.Drawing.Size(100, 20) Me.txtTotalFCGrams.TabIndex = 5 ' 'txtTotalFCLitres ' - Me.txtTotalFCLitres.Location = New System.Drawing.Point(164, 137) + Me.txtTotalFCLitres.Location = New System.Drawing.Point(164, 151) Me.txtTotalFCLitres.Name = "txtTotalFCLitres" Me.txtTotalFCLitres.Size = New System.Drawing.Size(100, 20) Me.txtTotalFCLitres.TabIndex = 6 @@ -98,7 +101,7 @@ Partial Class AuxLauncher 'lblTotalFCGRAMS ' Me.lblTotalFCGRAMS.AutoSize = true - Me.lblTotalFCGRAMS.Location = New System.Drawing.Point(30, 119) + Me.lblTotalFCGRAMS.Location = New System.Drawing.Point(30, 133) Me.lblTotalFCGRAMS.Name = "lblTotalFCGRAMS" Me.lblTotalFCGRAMS.Size = New System.Drawing.Size(77, 13) Me.lblTotalFCGRAMS.TabIndex = 7 @@ -107,7 +110,7 @@ Partial Class AuxLauncher 'Label1 ' Me.Label1.AutoSize = true - Me.Label1.Location = New System.Drawing.Point(161, 119) + Me.Label1.Location = New System.Drawing.Point(161, 133) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(72, 13) Me.Label1.TabIndex = 8 @@ -135,11 +138,39 @@ Partial Class AuxLauncher ' Me.Timer1.Interval = 1000 ' + 'btnWholeCycle + ' + Me.btnWholeCycle.Location = New System.Drawing.Point(305, 151) + Me.btnWholeCycle.Name = "btnWholeCycle" + Me.btnWholeCycle.Size = New System.Drawing.Size(75, 23) + Me.btnWholeCycle.TabIndex = 11 + Me.btnWholeCycle.Text = "Whole Cycle" + Me.btnWholeCycle.UseVisualStyleBackColor = true + ' + 'txtEvents + ' + Me.txtEvents.Location = New System.Drawing.Point(33, 214) + Me.txtEvents.Multiline = true + Me.txtEvents.Name = "txtEvents" + Me.txtEvents.Size = New System.Drawing.Size(306, 99) + Me.txtEvents.TabIndex = 12 + ' + 'cboWarningLevel + ' + Me.cboWarningLevel.FormattingEnabled = true + Me.cboWarningLevel.Location = New System.Drawing.Point(30, 65) + Me.cboWarningLevel.Name = "cboWarningLevel" + Me.cboWarningLevel.Size = New System.Drawing.Size(121, 21) + Me.cboWarningLevel.TabIndex = 13 + ' 'AuxLauncher ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(527, 363) + Me.Controls.Add(Me.cboWarningLevel) + Me.Controls.Add(Me.txtEvents) + Me.Controls.Add(Me.btnWholeCycle) Me.Controls.Add(Me.lblAuxiliaryVersion) Me.Controls.Add(Me.lblAuxiliaryName) Me.Controls.Add(Me.Label1) @@ -169,4 +200,7 @@ End Sub Friend WithEvents lblAuxiliaryName As System.Windows.Forms.Label Friend WithEvents lblAuxiliaryVersion As System.Windows.Forms.Label Friend WithEvents Timer1 As System.Windows.Forms.Timer + Friend WithEvents btnWholeCycle As System.Windows.Forms.Button + Friend WithEvents txtEvents As System.Windows.Forms.TextBox + Friend WithEvents cboWarningLevel As System.Windows.Forms.ComboBox End Class diff --git a/AuxillaryTestHarness/AuxLauncher.vb b/AuxillaryTestHarness/AuxLauncher.vb index 45798562d9..473597f8a3 100644 --- a/AuxillaryTestHarness/AuxLauncher.vb +++ b/AuxillaryTestHarness/AuxLauncher.vb @@ -3,7 +3,14 @@ Imports VectoAuxiliaries Public Class AuxLauncher -Public advancedAuxiliaries As IAdvancedAuxiliaries +Public WithEvents advancedAuxiliaries As IAdvancedAuxiliaries + + +Public Sub AuxEventHandler( ByRef sender As Object, ByVal message As String, ByVal messageType as AdvancedAuxiliaryMessageType) Handles advancedAuxiliaries.AuxiliaryEvent + + txtEvents.Text+= message + +End Sub 'Configure @@ -61,8 +68,7 @@ End Sub - -Private Sub btnRun_Click( sender As Object, e As EventArgs) Handles btnRun.Click +Private sub setup() Dim message As String = String.Empty @@ -73,7 +79,7 @@ advancedAuxiliaries.VectoInputs.Cycle="Urban" advancedAuxiliaries.VectoInputs.VehicleWeightKG=16500 advancedAuxiliaries.VectoInputs.FuelMap= "testFuelGoodMap.vmap" advancedAuxiliaries.VectoInputs.PowerNetVoltage=26.3 -advancedAuxiliaries.VectoInputs.CycleDurationMinutes=51.9 +'advancedAuxiliaries.VectoInputs.CycleDurationMinutes=51.9 'set Signals @@ -82,18 +88,14 @@ advancedAuxiliaries.Signals.TotalCycleTimeSeconds=3114 advancedAuxiliaries.RunStart(txtAdvancedAuxiliaries.Text,message) -'step whole cycle -'advancedAuxiliaries.CycleStep(3114,message) - +End Sub -'Add bindnings - 'txtTotalFCGrams.DataBindings.Add("Text", advancedAuxiliaries,"TotalFuelGRAMS") - 'txtTotalFCLitres.DataBindings.Add("Text", advancedAuxiliaries,"TotalFuelLITRES") +Private Sub btnRun_Click( sender As Object, e As EventArgs) Handles btnRun.Click - 'start timer + setup() - timer1.Start + timer1.Start End Sub @@ -102,19 +104,19 @@ End Sub Private Sub AuxLauncher_Load( sender As Object, e As EventArgs) Handles MyBase.Load - +cboWarningLevel.DataSource = System.Enum.GetValues(GetType(AdvancedAuxiliaryMessageType)) +'cboWarningLevel.SelectedIndex=1 Dim obj As System.Runtime.Remoting.ObjectHandle - - Try obj = Activator.CreateInstance("VectoAuxiliaries", "VectoAuxiliaries.AdvancedAuxiliaries") advancedAuxiliaries = DirectCast(obj.Unwrap, IAdvancedAuxiliaries) + advancedAuxiliaries.Signals.AuxiliaryEventReportingLevel=CType(cboWarningLevel.SelectedValue, AdvancedAuxiliaryMessageType) lblAuxiliaryName.Text= advancedAuxiliaries.AuxiliaryName lblAuxiliaryVersion.Text = advancedAuxiliaries.AuxiliaryVersion @@ -142,8 +144,11 @@ End Sub Private Sub Timer1_Tick( sender As Object, e As EventArgs) Handles Timer1.Tick If not advancedAuxiliaries is nothing + Dim message As string = "" + Timer1.Start + advancedAuxiliaries.CycleStep( Timer1.Interval/1000 , Message) txtTotalFCGrams.Text= advancedAuxiliaries.TotalFuelGRAMS txtTotalFCLitres.Text= advancedAuxiliaries.TotalFuelLITRES @@ -152,4 +157,34 @@ End If End Sub + +Private Sub btnWholeCycle_Click( sender As Object, e As EventArgs) Handles btnWholeCycle.Click + Dim message As string = "" + + setup() + + advancedAuxiliaries.CycleStep( 3114 , Message) + txtTotalFCGrams.Text= advancedAuxiliaries.TotalFuelGRAMS + txtTotalFCLitres.Text= advancedAuxiliaries.TotalFuelLITRES + +End Sub + + +Private Sub btnStop_Click( sender As Object, e As EventArgs) Handles btnStop.Click + +Timer1.Stop + + +End Sub + +Private Sub cboWarningLevel_SelectedIndexChanged( sender As Object, e As EventArgs) Handles cboWarningLevel.SelectedIndexChanged + + +advancedAuxiliaries.Signals.AuxiliaryEventReportingLevel=CType(cboWarningLevel.SelectedValue, AdvancedAuxiliaryMessageType) + + +End Sub + + + End Class \ No newline at end of file diff --git a/AuxillaryTestHarness/AuxiliaryTestHarness.vbproj b/AuxillaryTestHarness/AuxiliaryTestHarness.vbproj index e5718e5730..99905a80ce 100644 --- a/AuxillaryTestHarness/AuxiliaryTestHarness.vbproj +++ b/AuxillaryTestHarness/AuxiliaryTestHarness.vbproj @@ -28,7 +28,7 @@ <UpdatePeriodically>false</UpdatePeriodically> <UpdateRequired>false</UpdateRequired> <MapFileExtensions>true</MapFileExtensions> - <ApplicationRevision>16</ApplicationRevision> + <ApplicationRevision>18</ApplicationRevision> <ApplicationVersion>1.0.0.%2a</ApplicationVersion> <UseApplicationTrust>false</UseApplicationTrust> <PublishWizardCompleted>true</PublishWizardCompleted> @@ -190,15 +190,15 @@ <LastGenOutput>Settings.Designer.vb</LastGenOutput> </None> <None Include="App.config" /> - <None Include="testAlternatorMap.aalt"> + <Content Include="testAlternatorMap.aalt"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> - </None> + </Content> <Content Include="testCompressorMap.acmp"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> - <None Include="testPneumaticActuationsMap_GOODMAP.apac"> + <Content Include="testPneumaticActuationsMap_GOODMAP.apac"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> - </None> + </Content> <None Include="testAlternatorMap - Copy.aalt"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> diff --git a/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb b/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb index 9a95420c30..99dc52a30b 100644 --- a/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb +++ b/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb @@ -8,129 +8,145 @@ Imports System.Windows.Forms Public Class AdvancedAuxiliaries Implements IAdvancedAuxiliaries + Private auxConfig As AuxiliaryConfig + 'Supporting classes which may generate event messages + Private WithEvents compressorMap As ICompressorMap + Private Withevents alternatorMap As IAlternatorMap + Private WithEvents actuationsMap As IPneumaticActuationsMAP + Private WithEvents fuelMap As IFUELMAP + 'Classes which compose the model. + private WithEvents M0 As IM0_NonSmart_AlternatorsSetEfficiency + private WithEvents M05 As IM0_5_SmartAlternatorSetEfficiency + private WithEvents M1 As IM1_AverageHVACLoadDemand + private WithEvents M2 As IM2_AverageElectricalLoadDemand + private WithEvents M3 As IM3_AveragePneumaticLoadDemand + private WithEvents M4 As IM4_AirCompressor + private WithEvents M5 As IM5_SmartAlternatorSetGeneration + private WithEvents M6 As IM6 + private WithEvents M7 As IM7 + private WithEvents M8 As IM8 + private WithEvents M9 As IM9 + private WithEvents M10 As IM10 + private WithEvents M11 As IM11 + private WithEvents M12 As IM12 + private WithEvents M13 As IM13 - Private auxConfig As AuxiliaryConfig - - - Public Property Signals As ISignals Implements IAdvancedAuxiliaries.Signals - Public Property VectoInputs As IVectoInputs Implements IAdvancedAuxiliaries.VectoInputs - - - Public Sub new( ) - - VectoInputs = New VectoInputs() - Signals = New Signals() - - End Sub - - - - - - 'Test instantiations - Public M0 As IM0_NonSmart_AlternatorsSetEfficiency - Public M05 As IM0_5_SmartAlternatorSetEfficiency - Public M1 As IM1_AverageHVACLoadDemand - Public M2 As IM2_AverageElectricalLoadDemand - Public M3 As IM3_AveragePneumaticLoadDemand - Public M4 As IM4_AirCompressor - Public M5 As IM5_SmartAlternatorSetGeneration - Public M6 As IM6 - Public M7 As IM7 - Public M8 As IM8 - Public M9 As IM9 - Public M10 As IM10 - Public M11 As IM11 - Public M12 As IM12 - Public M13 As IM13 - -Public Sub Initialise( auxPath As String ) - -auxConfig = New AuxiliaryConfig(auxPath) - -'Pass some signals from config to Signals. ( These are stored in the configuration but shared in the signal distribution around modules ) -Signals.SmartElectrics = auxConfig.ElectricalUserInputsConfig.SmartElectrical -Signals.SmartPneumatics = auxConfig.PneumaticUserInputsConfig.SmartAirCompression - -Dim alternatoMap As IAlternatorMap = New AlternatorMap(auxConfig.ElectricalUserInputsConfig.AlternatorMap) -alternatoMap.Initialise() - -Dim actuationsMap As IPneumaticActuationsMAP = New PneumaticActuationsMAP( auxConfig.PneumaticUserInputsConfig.ActuationsMap) -Dim compressorMap As ICompressorMap = New CompressorMap( auxConfig.PneumaticUserInputsConfig.CompressorMap) -compressorMap.Initialise() + 'Event Handler top level bubble. + Public Sub VectoEventHandler( byref sender As Object, message As String, messageType As AdvancedAuxiliaryMessageType) handles compressorMap.AuxiliaryEvent, alternatorMap.AuxiliaryEvent -Dim fuelMap As IFUELMAP = New cMAP() -fuelMap.FilePath= VectoInputs.FuelMap -If Not fuelMap.ReadFile() then -MessageBox.Show("Unable to read fuel map, aborting.") -return -End If -fuelMap.Triangulate() + If Signals.AuxiliaryEventReportingLevel <= messageType then -auxConfig.ElectricalUserInputsConfig.ElectricalConsumers.DoorDutyCycleFraction = GetDoorActuationTimeFraction() + RaiseEvent AuxiliaryEvent( sender, message,messageType) + End If + -M0 = New M0_NonSmart_AlternatorsSetEfficiency( auxConfig.ElectricalUserInputsConfig.ElectricalConsumers, - New HVACInputs, - alternatoMap, - auxConfig.ElectricalUserInputsConfig.PowerNetVoltage, - Signals, - auxConfig.HvacUserInputsConfig.SteadyStateModel) + End Sub -M05 = New M0_5_SmartAlternatorSetEfficiency(M0, - auxConfig.ElectricalUserInputsConfig.ElectricalConsumers, - alternatoMap, - auxConfig.ElectricalUserInputsConfig.ResultCardIdle, - auxConfig.ElectricalUserInputsConfig.ResultCardTraction, - auxConfig.ElectricalUserInputsConfig.ResultCardOverrun,Signals) - + 'Constructor + Public Sub new( ) -M1 = New M1_AverageHVACLoadDemand(M0, - New HVACMap(""), - New HVACInputs(), - auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency, - auxConfig.PneumaticUserInputsConfig.CompressorGearEfficiency, - auxConfig.ElectricalUserInputsConfig.PowerNetVoltage, - Signals, - auxConfig.HvacUserInputsConfig.SteadyStateModel) + VectoInputs = New VectoInputs() + Signals = New Signals() + End Sub -M2 = New M2_AverageElectricalLoadDemand(auxConfig.ElectricalUserInputsConfig.ElectricalConsumers, - M0, + 'Initialise Model + Public Sub Initialise( auxPath As String ) + + auxConfig = New AuxiliaryConfig(auxPath) + + 'Pass some signals from config to Signals. ( These are stored in the configuration but shared in the signal distribution around modules ) + Signals.SmartElectrics = auxConfig.ElectricalUserInputsConfig.SmartElectrical + Signals.SmartPneumatics = auxConfig.PneumaticUserInputsConfig.SmartAirCompression + + alternatorMap = New AlternatorMap(auxConfig.ElectricalUserInputsConfig.AlternatorMap) + alternatorMap.Initialise() + + actuationsMap = New PneumaticActuationsMAP( auxConfig.PneumaticUserInputsConfig.ActuationsMap) + + compressorMap = New CompressorMap( auxConfig.PneumaticUserInputsConfig.CompressorMap) + compressorMap.Initialise() + + fuelMap = New cMAP() + fuelMap.FilePath= VectoInputs.FuelMap + If Not fuelMap.ReadFile() then + MessageBox.Show("Unable to read fuel map, aborting.") + return + End If + fuelMap.Triangulate() + + + auxConfig.ElectricalUserInputsConfig.ElectricalConsumers.DoorDutyCycleFraction = GetDoorActuationTimeFraction() + + + M0 = New M0_NonSmart_AlternatorsSetEfficiency( auxConfig.ElectricalUserInputsConfig.ElectricalConsumers, + New HVACInputs, + alternatorMap, + auxConfig.ElectricalUserInputsConfig.PowerNetVoltage, + Signals, + auxConfig.HvacUserInputsConfig.SteadyStateModel) + + + M05 = New M0_5_SmartAlternatorSetEfficiency(M0, + auxConfig.ElectricalUserInputsConfig.ElectricalConsumers, + alternatorMap, + auxConfig.ElectricalUserInputsConfig.ResultCardIdle, + auxConfig.ElectricalUserInputsConfig.ResultCardTraction, + auxConfig.ElectricalUserInputsConfig.ResultCardOverrun,Signals) + + + M1 = New M1_AverageHVACLoadDemand(M0, + New HVACMap(""), + New HVACInputs(), auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency, - auxConfig.ElectricalUserInputsConfig.PowerNetVoltage,Signals ) - - - -M3 = New M3_AveragePneumaticLoadDemand(auxConfig.PneumaticUserInputsConfig, - auxConfig.PneumaticAuxillariesConfig, - actuationsMap, - compressorMap, - VectoInputs.VehicleWeightKG, - VectoInputs.Cycle, - Signals) - - -M4 = New M4_AirCompressor(compressorMap,auxConfig.PneumaticUserInputsConfig.CompressorGearRatio,auxConfig.PneumaticUserInputsConfig.CompressorGearEfficiency,Signals) -M5 = New M5__SmartAlternatorSetGeneration( M05, VectoInputs.PowerNetVoltage,auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency) -M6 = New M6(M1,M2,M3,M4,M5,Signals) -M7 = New M7(M5,M6,Signals) -M8 = New M8(M1,M6,M7,Signals) -M9 = New M9(M1,M4,M6,M8,fuelMap,auxConfig.PneumaticAuxillariesConfig,Signals) -M10 = New M10(M3,M9,Signals) -M11 = New M11(M1,M3,M6,M8,fuelMap,Signals) -M12 = New M12( M11, Signals ) -M13 = New M13(M1,M10,M12,Signals) - - + auxConfig.PneumaticUserInputsConfig.CompressorGearEfficiency, + auxConfig.ElectricalUserInputsConfig.PowerNetVoltage, + Signals, + auxConfig.HvacUserInputsConfig.SteadyStateModel) + + + M2 = New M2_AverageElectricalLoadDemand(auxConfig.ElectricalUserInputsConfig.ElectricalConsumers, + M0, + auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency, + auxConfig.ElectricalUserInputsConfig.PowerNetVoltage,Signals ) + + + + M3 = New M3_AveragePneumaticLoadDemand(auxConfig.PneumaticUserInputsConfig, + auxConfig.PneumaticAuxillariesConfig, + actuationsMap, + compressorMap, + VectoInputs.VehicleWeightKG, + VectoInputs.Cycle, + Signals) + + + M4 = New M4_AirCompressor(compressorMap,auxConfig.PneumaticUserInputsConfig.CompressorGearRatio,auxConfig.PneumaticUserInputsConfig.CompressorGearEfficiency,Signals) + M5 = New M5__SmartAlternatorSetGeneration( M05, VectoInputs.PowerNetVoltage,auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency) + M6 = New M6(M1,M2,M3,M4,M5,Signals) + M7 = New M7(M5,M6,Signals) + M8 = New M8(M1,M6,M7,Signals) + M9 = New M9(M1,M4,M6,M8,fuelMap,auxConfig.PneumaticAuxillariesConfig,Signals) + M10 = New M10(M3,M9,Signals) + M11 = New M11(M1,M3,M6,M8,fuelMap,Signals) + M12 = New M12( M11, Signals ) + M13 = New M13(M1,M10,M12,Signals) + + End Sub + + #Region "Interface implementation" + Public Property Signals As ISignals Implements IAdvancedAuxiliaries.Signals + Public Property VectoInputs As IVectoInputs Implements IAdvancedAuxiliaries.VectoInputs + Public Event AuxiliaryEvent(ByRef sender As Object, message As String, messageType As AdvancedAuxiliaryMessageType) Implements IAuxiliaryEvent.AuxiliaryEvent Public Function Configure(filePath As String, vectoFilePath As String ) As Boolean Implements VectoAuxiliaries.IAdvancedAuxiliaries.Configure @@ -161,8 +177,6 @@ End Sub End Function - Public Event Message(Message As String, messageType As VectoAuxiliaries.AdvancedAuxiliaryMessageType) Implements VectoAuxiliaries.IAdvancedAuxiliaries.Message - Public ReadOnly Property Running As Boolean Implements VectoAuxiliaries.IAdvancedAuxiliaries.Running Get throw new NotImplementedException @@ -181,8 +195,6 @@ End Sub throw new NotImplementedException End Function -' - Public ReadOnly Property TotalFuelGRAMS As Single Implements VectoAuxiliaries.IAdvancedAuxiliaries.TotalFuelGRAMS Get If Not M13 is Nothing then @@ -226,8 +238,9 @@ End Sub End Property + #End Region - + 'Helpers Private Function GetDoorActuationTimeFraction()As Single Dim actuationsMap as PneumaticActuationsMAP = New PneumaticActuationsMAP( auxConfig.PneumaticUserInputsConfig.ActuationsMap ) @@ -242,4 +255,6 @@ End Sub End Function + + End Class diff --git a/VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb b/VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb index 8c7bca5556..ac67c9e5fe 100644 --- a/VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb +++ b/VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb @@ -76,9 +76,9 @@ End Sub Private Sub setDefaults() +'.CycleDurationMinutes=51.9, - - VectoInputs = New VectoInputs With {.Cycle="Urban", .VehicleWeightKG=16500, .PowerNetVoltage=26.3, .CycleDurationMinutes=51.9,.FuelMap="testFuelGoodMap.vmap"} + VectoInputs = New VectoInputs With {.Cycle="Urban", .VehicleWeightKG=16500, .PowerNetVoltage=26.3, .FuelMap="testFuelGoodMap.vmap"} 'Pneumatics PneumaticUserInputsConfig = New PneumaticUserInputsConfig(true) diff --git a/VECTOAux/VectoAuxiliaries/AuxillaryEnvironment.vb b/VECTOAux/VectoAuxiliaries/AuxillaryEnvironment.vb index d05ce4f534..6e0700bcb3 100644 --- a/VECTOAux/VectoAuxiliaries/AuxillaryEnvironment.vb +++ b/VECTOAux/VectoAuxiliaries/AuxillaryEnvironment.vb @@ -10,6 +10,7 @@ Imports Newtonsoft.Json <Serializable()> Public Class AuxillaryEnvironment + 'Vecto Public Property VectoInputs As IVectoInputs @@ -43,6 +44,16 @@ Public Class AuxillaryEnvironment Public M11 As IM11 Public M12 As IM12 Public M13 As IM13 + + Protected WithEvents compressorMap As ICompressorMap + + Public Sub VectoEventHandler( byref sender As Object, message As String, messageType As AdvancedAuxiliaryMessageType) handles compressorMap.AuxiliaryEvent + + + + + + End Sub Public Sub ClearDown() @@ -73,9 +84,11 @@ alternatoMap.Initialise() Dim actuationsMap As IPneumaticActuationsMAP = New PneumaticActuationsMAP( PneumaticUserInputsConfig.ActuationsMap) -Dim compressorMap As ICompressorMap = New CompressorMap( PneumaticUserInputsConfig.CompressorMap) + +compressorMap = New CompressorMap( PneumaticUserInputsConfig.CompressorMap) compressorMap.Initialise() + Dim fuelMap As IFUELMAP = New cMAP() fuelMap.FilePath= VectoInputs.FuelMap If Not fuelMap.ReadFile() then @@ -196,15 +209,9 @@ End Sub Private Sub setDefaults() - 'Here's where the magic happens. - - 'TODO: - 'Assign Smarts to signals - 'Signals.SmartElectrics= ElectricalUserInputsConfig.SmartElectrical - 'Signals.SmartPneumatics= PneumaticUserInputsConfig.SmartAirCompression +', .CycleDurationMinutes=51.9 - - VectoInputs = New VectoInputs With {.Cycle="Urban", .VehicleWeightKG=16500, .PowerNetVoltage=26.3, .CycleDurationMinutes=51.9,.FuelMap="testFuelGoodMap.vmap"} + VectoInputs = New VectoInputs With {.Cycle="Urban", .VehicleWeightKG=16500, .PowerNetVoltage=26.3,.FuelMap="testFuelGoodMap.vmap"} 'Pneumatics PneumaticUserInputsConfig = New PneumaticUserInputsConfig(true) @@ -544,5 +551,7 @@ End Sub #End Region + + End Class diff --git a/VECTOAux/VectoAuxiliaries/Electrics/AlternatorMap.vb b/VECTOAux/VectoAuxiliaries/Electrics/AlternatorMap.vb index ea21ab86ad..750a4c6165 100644 --- a/VECTOAux/VectoAuxiliaries/Electrics/AlternatorMap.vb +++ b/VECTOAux/VectoAuxiliaries/Electrics/AlternatorMap.vb @@ -7,6 +7,7 @@ Namespace Electrics Public Class AlternatorMap Implements IAlternatorMap + Private ReadOnly filePath As String Public map As New List(Of MapPoint) @@ -153,11 +154,19 @@ Implements IAlternatorMap Public Function GetValue(x As Single, y As Single) As Single - 'Limiting - If x < minX Then x = minX - If x > maxX Then x = maxX - If y < minY Then y = minY - If y > maxY Then y = maxY + ' If x < minX OrElse x > maxX OrElse y < minY OrElse y > maxY then + + 'OnAuxiliaryEvent(String.Format("Alternator Map Limiting : RPM{0}, AMPS{1}",x,y),AdvancedAuxiliaryMessageType.Warning) + + + 'Limiting + If x < minX Then x = minX + If x > maxX Then x = maxX + If y < minY Then y = minY + If y > maxY Then y = maxY + + ' End If + 'Satisfies both data points - non interpolated value If ONBoundaryXY(x, y) Then Return GetOnBoundaryXY(x, y) @@ -312,6 +321,14 @@ Implements IAlternatorMap End Function + Public Event AuxiliaryEvent(ByRef sender As Object, message As String, messageType As AdvancedAuxiliaryMessageType) Implements IAuxiliaryEvent.AuxiliaryEvent + + Protected sub OnAuxiliaryEvent(message As String, messageType As AdvancedAuxiliaryMessageType) + + RaiseEvent AuxiliaryEvent(Me, message, messageType) + + End Sub + End Class diff --git a/VECTOAux/VectoAuxiliaries/Electrics/IAlternatorMap.vb b/VECTOAux/VectoAuxiliaries/Electrics/IAlternatorMap.vb index 54371ce9b6..9b83fd4404 100644 --- a/VECTOAux/VectoAuxiliaries/Electrics/IAlternatorMap.vb +++ b/VECTOAux/VectoAuxiliaries/Electrics/IAlternatorMap.vb @@ -2,6 +2,7 @@ Namespace Electrics Public Interface IAlternatorMap + Inherits IAuxiliaryEvent ''' <summary> ''' Initialise the map from supplied csv data ''' </summary> diff --git a/VECTOAux/VectoAuxiliaries/Pneumatics/CompressorMap.vb b/VECTOAux/VectoAuxiliaries/Pneumatics/CompressorMap.vb index cbca649590..653dee6fff 100644 --- a/VECTOAux/VectoAuxiliaries/Pneumatics/CompressorMap.vb +++ b/VECTOAux/VectoAuxiliaries/Pneumatics/CompressorMap.vb @@ -7,7 +7,11 @@ Namespace Pneumatics ''' </summary> ''' <remarks></remarks> Public Class CompressorMap - Implements ICompressorMap + + Implements ICompressorMap, + IAuxiliaryEvent + + Private ReadOnly filePath As String @@ -136,8 +140,13 @@ Namespace Pneumatics 'check the rpm is within the map Dim min As Integer = map.Keys.Min() Dim max As Integer = map.Keys.Max() + If rpm < min OrElse rpm > max Then - Throw New ArgumentOutOfRangeException(String.Format("Extrapolation - rpm should be in the range {0} to {1}", min, max), rpm) + OnMessage(Me,String.Format("Compresser has limited RPM of '{2}' to extent of map - rpm should be in the range {0} to {1}", min, max ,rpm), AdvancedAuxiliaryMessageType.Warning) + 'Limiting as agreed. + If rpm > max then rpm=max + If rpm < min then rpm=min + End If 'If supplied rpm is a key, we can just return the appropriate tuple @@ -215,6 +224,18 @@ Namespace Pneumatics + Public Event Message(ByRef sender As Object, message As String, messageType As AdvancedAuxiliaryMessageType) Implements IAuxiliaryEvent.AuxiliaryEvent + + Public Sub OnMessage(sender As Object, message As String, messageType As AdvancedAuxiliaryMessageType) + + + If Not message is Nothing then + + RaiseEvent Message( Me, message, messageType) + + End If + + End Sub End Class diff --git a/VECTOAux/VectoAuxiliaries/Pneumatics/ICompressorMap.vb b/VECTOAux/VectoAuxiliaries/Pneumatics/ICompressorMap.vb index 09bfafb3e6..cf603e13b5 100644 --- a/VECTOAux/VectoAuxiliaries/Pneumatics/ICompressorMap.vb +++ b/VECTOAux/VectoAuxiliaries/Pneumatics/ICompressorMap.vb @@ -1,5 +1,6 @@ Namespace Pneumatics Public Interface ICompressorMap + Inherits IAuxiliaryEvent ''' <summary> ''' Initilaises the map from the supplied csv data @@ -36,4 +37,5 @@ Namespace Pneumatics End Interface + End Namespace \ No newline at end of file diff --git a/VECTOAux/VectoAuxiliaries/Pneumatics/M4_AirCompressor.vb b/VECTOAux/VectoAuxiliaries/Pneumatics/M4_AirCompressor.vb index 20d06794c6..77b2e56d80 100644 --- a/VECTOAux/VectoAuxiliaries/Pneumatics/M4_AirCompressor.vb +++ b/VECTOAux/VectoAuxiliaries/Pneumatics/M4_AirCompressor.vb @@ -1,7 +1,9 @@  Namespace Pneumatics + Public Class M4_AirCompressor + Implements IM4_AirCompressor Private Const MinRatio As Single = 1 @@ -11,9 +13,10 @@ Namespace Pneumatics Private _pulleyGearRatio As Single Private _pulleyGearEfficiency As Single - Private _map As ICompressorMap + Private _map As ICompressorMap Private _signals As ISignals + ''' <summary> ''' Ratio of Gear or Pulley used to drive the compressor ''' </summary> diff --git a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj index ba287dcbb4..9537ed8aea 100644 --- a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj +++ b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj @@ -132,7 +132,6 @@ <Compile Include="Pneumatics\ActuationsKey.vb" /> <Compile Include="Pneumatics\IM3_AveragePneumaticLoadDemand.vb" /> <Compile Include="Pneumatics\M4_AirCompressor.vb" /> - <Compile Include="Electrics\AlternatorMapOLDREMOVELATER.vb" /> <Compile Include="Electrics\M2_AverageElectricalLoadDemand.vb" /> <Compile Include="Hvac\M1_AverageHVACLoadDemand.vb" /> <Compile Include="Pneumatics\M3_AveragePneumaticLoadDemand.vb" /> diff --git a/VECTOAux/VectoAuxiliariesTests/Mocks/AlternatorMapMock.vb b/VECTOAux/VectoAuxiliariesTests/Mocks/AlternatorMapMock.vb index e224c8d29b..61769f3158 100644 --- a/VECTOAux/VectoAuxiliariesTests/Mocks/AlternatorMapMock.vb +++ b/VECTOAux/VectoAuxiliariesTests/Mocks/AlternatorMapMock.vb @@ -5,6 +5,7 @@ Namespace Mocks Public Class AlternatorMapMock Implements IAlternatorMap + Dim failing As Boolean Public Sub New(ByVal isFailing As Boolean) @@ -24,6 +25,7 @@ Namespace Mocks End Function + Public Event AuxiliaryEvent(ByRef sender As Object, message As String, messageType As VectoAuxiliaries.AdvancedAuxiliaryMessageType) Implements VectoAuxiliaries.IAuxiliaryEvent.AuxiliaryEvent End Class End Namespace diff --git a/VECTOAux/VectoAuxiliariesTests/Mocks/CompressorMapMock.vb b/VECTOAux/VectoAuxiliariesTests/Mocks/CompressorMapMock.vb index 1ad2a0ae88..30e0e6be33 100644 --- a/VECTOAux/VectoAuxiliariesTests/Mocks/CompressorMapMock.vb +++ b/VECTOAux/VectoAuxiliariesTests/Mocks/CompressorMapMock.vb @@ -5,6 +5,8 @@ Namespace Mocks Public Class CompressorMapMock Implements ICompressorMap + + Dim failing As Boolean Public Sub New(ByVal isFailing As Boolean) @@ -39,5 +41,7 @@ Namespace Mocks End Function + + Public Event AuxiliaryEvent(ByRef sender As Object, message As String, messageType As VectoAuxiliaries.AdvancedAuxiliaryMessageType) Implements VectoAuxiliaries.IAuxiliaryEvent.AuxiliaryEvent End Class End Namespace \ No newline at end of file -- GitLab