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 9ba8e11f authored by Terry Burns's avatar Terry Burns Committed by Kostis ANAGNOSTOPOULOS
Browse files

Combined Alt - WIP Savepoint

parent a4da350d
Branches
Tags
No related merge requests found
......@@ -2,6 +2,23 @@
Namespace Electrics
Public Class Table4Row
Public RPM As Single
Public Efficiency As Single
Public Sub new ( rpm As single, eff As single)
Me.rpm= rpm
Me.Efficiency = eff
End Sub
End Class
Public Class Alternator
Implements IAlternator
......@@ -11,47 +28,37 @@ Public Class Alternator
Public Property InputTable2000 As New List(Of AltUserInput) Implements IAlternator.InputTable2000
Public Property InputTable4000 As New List(Of AltUserInput) Implements IAlternator.InputTable4000
Public Property InputTable6000 As New List(Of AltUserInput) Implements IAlternator.InputTable6000
Public Property RangeTable As New List(Of AltUserInput) Implements IAlternator.RangeTable
Public Property RangeTable As New List(Of Table4Row) Implements IAlternator.RangeTable
Private signals As ICombinedAlternatorSignals
Public Sub Clone( other As IAlternator) Implements IAlternator.Clone
Me.PulleyRatio = other.PulleyRatio
Me.AlternatorName= other.AlternatorName
InputTable2000.Clear()
InputTable4000.Clear()
InputTable6000.Clear()
RangeTable .Clear()
For Each entry As AltUserInput In other.InputTable2000
InputTable2000.Add(New AltUserInput( entry.Amps, entry.Eff))
Next
End Sub
Public ReadOnly Property Efficiency As Double Implements IAlternator.Efficiency
For Each entry As AltUserInput In other.InputTable4000
InputTable4000.Add(New AltUserInput( entry.Amps, entry.Eff))
Next
For Each entry As AltUserInput In other.InputTable6000
InputTable6000.Add(New AltUserInput( entry.Amps, entry.Eff))
Next
Get
'First build RangeTable, table 4
For Each entry As AltUserInput In other.RangeTable
RangeTable.Add(New AltUserInput( entry.Amps, entry.Eff))
Next
InitialiseRangeTable()
CalculateRangeTable()
'TODO: Calculate Efficiency
'Calculate ( Interpolate ) Efficiency
End Sub
Public ReadOnly Property Efficiency As Double Implements IAlternator.Efficiency
Get
End Get
End Property
Public ReadOnly Property SpindleSpeed As Double Implements IAlternator.SpindleSpeed
Get
Return signals.CrankRPM * PulleyRatio
End Get
End Property
......@@ -79,10 +86,84 @@ Public Class Alternator
BuildInputTable( values6k, InputTable6000)
CreateRangeTable()
InitialiseRangeTable()
End Sub
Private Function Iterpolate( values As List(Of AltUserInput), x As single) As Single
Dim lowestX As single = values.Min( Function(m) m.Amps)
Dim highestX As Single = values.Max( Function(m) m.Amps)
Dim lastX, nextX ,lastEff,NextEff As single
Dim deltaX As single
Dim slope As single
'Out of range, returns efficiency for lowest
If x< lowestX then Return values.First( Function(f) f.Amps= lowestX).Eff
'Out of range, efficiency for highest
If x> highestX then Return values.First( Function(f) f.Amps= highestX).Eff
'On Bounds check
If values.Where( Function(w) w.Amps=x).Count=1 then Return values.First( Function(w) w.Amps=x).Eff
'OK, we need to interpolate.
lastX = values.Last( Function(l) l.Amps < x).Amps
nextX = values.First( Function(l) l.Amps > x).Amps
lastEff = values.First( Function(f) f.Amps=lastX).Eff
nextEff = values.First( Function(f) f.Amps=nextX).Eff
deltaX = nextX-lastX
slope = NextEff/lastEff
Return lastEff + ( NextEff * slope)
End Function
Private Sub CalculateRangeTable()
'TODO: CALCULATE RANGE TABLE
End Sub
Private sub InitialiseRangeTable()
RangeTable(0).RPM=0:RangeTable(0).Efficiency=0
RangeTable(1).RPM=0:RangeTable(0).Efficiency=0
RangeTable(2).RPM=2000:RangeTable(0).Efficiency=0
RangeTable(3).RPM=4000:RangeTable(0).Efficiency=0
RangeTable(4).RPM=6000:RangeTable(0).Efficiency=0
RangeTable(5).RPM=0:RangeTable(0).Efficiency=0
RangeTable(6).RPM=0:RangeTable(0).Efficiency=0
End Sub
Private Sub CreateRangeTable()
RangeTable.Clear()
RangeTable.Add( New Table4Row(0,0))
RangeTable.Add( New Table4Row(0,0))
RangeTable.Add( New Table4Row(0,0))
RangeTable.Add( New Table4Row(0,0))
RangeTable.Add( New Table4Row(0,0))
RangeTable.Add( New Table4Row(0,0))
RangeTable.Add( New Table4Row(0,0))
End Sub
public Sub BuildInputTable( inputs As Dictionary(of Single, single), targetTable As List (Of AltUserInput ))
......
......@@ -25,6 +25,16 @@ Public Class CombinedAlternator
Private altSignals As ICombinedAlternatorSignals
Public Function GetEfficiency( CrankRPM As Single , AmpsDemand As Single ) As Single
altSignals.CrankRPM = CrankRPM
altSignals.CurrentDemandAmps = AmpsDemand
Return Alternators.Average( Function(a) a.Efficiency)
End Function
'Constructors
public sub new( filePath as String, altSignals As ICombinedAlternatorSignals)
......@@ -192,24 +202,27 @@ Public Class CombinedAlternator
Public Function UpdateAlternator( rows As List( Of ICombinedAlternatorMapRow) , byref feedback as string ) As Boolean
Dim altName As String = rows.First.AlternatorName
Dim altToUpd As IAlternator = Alternators.First( Function(w) w.AlternatorName = altName)
If Not DeleteAlternator(altName, feedback) then
feedback= feedback
Return false
End If
'Re.create alternator.
Dim replacementAlt As New Alternator( altSignals, rows )
Alternators.Add( replacementAlt)
End Function
'Validation Helpers
Function PanelisValid( forAdd As Boolean, ByRef feedback As string ) As Boolean
Dim returnValue As Boolean = true
Return true
Return returnValue
End Function
'Validation Helpers
End Function
'Persistance Functions
......
......@@ -16,7 +16,7 @@ Namespace Electrics
Property InputTable2000 AS List(Of AltUserInput)
Property InputTable4000 AS List(Of AltUserInput)
Property InputTable6000 AS List(Of AltUserInput)
Property RangeTable AS List(Of AltUserInput)
Property RangeTable AS List(Of Table4Row)
......

Namespace Electrics
Public Class InterpAltUserInputs
Public shared Function Iterpolate( values As List(Of AltUserInput), x As single) As Single
Dim lowestX As single = values.Min( Function(m) m.Amps)
Dim highestX As Single = values.Max( Function(m) m.Amps)
Dim preKey, postKey ,preEff,postEff, xSlope, EffSlope As single
Dim deltaX , deltaEff As single
Dim slope As single
'Out of range, returns efficiency for lowest
If x< lowestX then Return values.First( Function(f) f.Amps= lowestX).Eff
'Out of range, efficiency for highest
If x> highestX then Return values.First( Function(f) f.Amps= highestX).Eff
'On Bounds check
If values.Where( Function(w) w.Amps=x).Count=1 then Return values.First( Function(w) w.Amps=x).Eff
'OK, we need to interpolate.
preKey = values.Last( Function(l) l.Amps < x).Amps
postKey = values.First( Function(l) l.Amps > x).Amps
preEff = values.First( Function(f) f.Amps=preKey).Eff
postEff = values.First( Function(f) f.Amps=postKey).Eff
deltaX = postKey-preKey
deltaEff = postEff-preEff
'slopes
effSlope = deltaEff/deltaX
Dim retVal As Single = ((x - preKey) * effSlope) + preEff
Return retVal
End Function
End Class
End Namespace
......@@ -54,6 +54,8 @@ Partial Class frmCombinedAlternators
Me.Label16 = New System.Windows.Forms.Label()
Me.TabControl1 = New System.Windows.Forms.TabControl()
Me.tabInputs = New System.Windows.Forms.TabPage()
Me.txtAlternatorName = New System.Windows.Forms.TextBox()
Me.lblAlternatorName = New System.Windows.Forms.Label()
Me.btnClearForm = New System.Windows.Forms.Button()
Me.gvAlternators = New System.Windows.Forms.DataGridView()
Me.Label18 = New System.Windows.Forms.Label()
......@@ -64,8 +66,6 @@ Partial Class frmCombinedAlternators
Me.btnSave = New System.Windows.Forms.Button()
Me.btnCancel = New System.Windows.Forms.Button()
Me.ErrorProvider1 = New System.Windows.Forms.ErrorProvider(Me.components)
Me.lblAlternatorName = New System.Windows.Forms.Label()
Me.txtAlternatorName = New System.Windows.Forms.TextBox()
Me.grpTable2000PRM.SuspendLayout
Me.grpTable4000PRM.SuspendLayout
Me.grpTable6000PRM.SuspendLayout
......@@ -383,6 +383,7 @@ Partial Class frmCombinedAlternators
'
'tabInputs
'
Me.tabInputs.CausesValidation = false
Me.tabInputs.Controls.Add(Me.txtAlternatorName)
Me.tabInputs.Controls.Add(Me.lblAlternatorName)
Me.tabInputs.Controls.Add(Me.btnClearForm)
......@@ -404,6 +405,22 @@ Partial Class frmCombinedAlternators
Me.tabInputs.Text = " Inputs "
Me.tabInputs.UseVisualStyleBackColor = true
'
'txtAlternatorName
'
Me.txtAlternatorName.Location = New System.Drawing.Point(242, 22)
Me.txtAlternatorName.Name = "txtAlternatorName"
Me.txtAlternatorName.Size = New System.Drawing.Size(160, 20)
Me.txtAlternatorName.TabIndex = 41
'
'lblAlternatorName
'
Me.lblAlternatorName.AutoSize = true
Me.lblAlternatorName.Location = New System.Drawing.Point(156, 25)
Me.lblAlternatorName.Name = "lblAlternatorName"
Me.lblAlternatorName.Size = New System.Drawing.Size(80, 13)
Me.lblAlternatorName.TabIndex = 40
Me.lblAlternatorName.Text = "AlternatorName"
'
'btnClearForm
'
Me.btnClearForm.Location = New System.Drawing.Point(589, 140)
......@@ -462,7 +479,7 @@ Partial Class frmCombinedAlternators
Me.tabDiagnostics.Location = New System.Drawing.Point(4, 22)
Me.tabDiagnostics.Name = "tabDiagnostics"
Me.tabDiagnostics.Padding = New System.Windows.Forms.Padding(3)
Me.tabDiagnostics.Size = New System.Drawing.Size(813, 451)
Me.tabDiagnostics.Size = New System.Drawing.Size(692, 451)
Me.tabDiagnostics.TabIndex = 1
Me.tabDiagnostics.Text = " Diagnostics"
Me.tabDiagnostics.UseVisualStyleBackColor = true
......@@ -489,22 +506,6 @@ Partial Class frmCombinedAlternators
'
Me.ErrorProvider1.ContainerControl = Me
'
'lblAlternatorName
'
Me.lblAlternatorName.AutoSize = true
Me.lblAlternatorName.Location = New System.Drawing.Point(156, 25)
Me.lblAlternatorName.Name = "lblAlternatorName"
Me.lblAlternatorName.Size = New System.Drawing.Size(80, 13)
Me.lblAlternatorName.TabIndex = 40
Me.lblAlternatorName.Text = "AlternatorName"
'
'txtAlternatorName
'
Me.txtAlternatorName.Location = New System.Drawing.Point(242, 22)
Me.txtAlternatorName.Name = "txtAlternatorName"
Me.txtAlternatorName.Size = New System.Drawing.Size(160, 20)
Me.txtAlternatorName.TabIndex = 41
'
'frmCombinedAlternators
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!)
......
......@@ -33,7 +33,7 @@ Public Class frmCombinedAlternators
'General Helpders
Private Sub BindGrid()
gvAlternators.DataSource = New BindingList(Of IAlternator)( combinedAlt.Alternators )
gvAlternators.DataSource = New BindingList(Of IAlternator)( combinedAlt.Alternators.OrderBy( Function(o) o.AlternatorName ).ToList())
End Sub
Private Sub SetupControls()
......@@ -166,11 +166,11 @@ End Function
ErrorProvider1.SetError(txtBox,"Please enter a number")
return false
else
ErrorProvider1.SetError(txtBox,"")
End If
Return False
Dim number As Single = 0
......@@ -261,7 +261,6 @@ End Function
End Sub
'Grid Events
Private Sub gvAlternators_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles gvAlternators.CellClick
......@@ -389,6 +388,19 @@ End Sub
txtPulleyRatio .Text = string.Empty
ErrorProvider1.SetError(txtAlternatorName , String.empty)
ErrorProvider1.SetError(txt2K10Efficiency , String.empty)
ErrorProvider1.SetError(txt2K40Efficiency , String.empty)
ErrorProvider1.SetError(txt2K60Efficiency , String.empty)
ErrorProvider1.SetError(txt4K10Efficiency , String.empty)
ErrorProvider1.SetError(txt4K40Efficiency , String.empty)
ErrorProvider1.SetError(txt4K60Efficiency , String.empty)
ErrorProvider1.SetError(txt6K10Efficiency , String.empty)
ErrorProvider1.SetError(txt6K40Efficiency , String.empty)
ErrorProvider1.SetError(txt6K60Efficiency , String.empty)
ErrorProvider1.SetError(txtPulleyRatio , String.empty)
End Sub
......@@ -488,6 +500,17 @@ End Sub
Private Sub Validating( sender As Object, e As CancelEventArgs) Handles txtAlternatorName.Validating, txtPulleyRatio.Validating, txt6K60Efficiency.Validating, txt6K40Efficiency.Validating, txt6K10Efficiency.Validating, txt4K60Efficiency.Validating, txt4K40Efficiency.Validating, txt4K10Efficiency.Validating, txt2K60Efficiency.Validating, txt2K40Efficiency.Validating, txt2K10Efficiency.Validating
If Not Validate_UpdatePanel then
e.Cancel=true
End If
End Sub
End Class
......@@ -125,6 +125,7 @@
<Compile Include="Electrics\IM2_AverageElectricalLoadDemand.vb" />
<Compile Include="Electrics\IM5_SmartAlternatorSetGeneration.vb" />
<Compile Include="Electrics\IncDecValuePair.vb" />
<Compile Include="Electrics\InterpAltUserInputs.vb" />
<Compile Include="Electrics\IResultCard.vb" />
<Compile Include="Electrics\M0_5_SmartAlternatorSetEfficiency.vb" />
<Compile Include="Electrics\M0_NonSmart_AlternatorsSetEfficiency.vb" />
......
......@@ -142,6 +142,86 @@ Namespace UnitTests
End Sub
<Test()> _
<TestCase(1,2,50f)> _
<TestCase(1,4,70)> _
<TestCase(1,6,60)> _
<TestCase(2,2,80)> _
<TestCase(2,4,40)> _
<TestCase(2,6,60)> _
<TestCase(3,2,55)> _
<TestCase(3,4,7.75f)> _
<TestCase(3,6,76.875f)> _
<TestCase(4,2,47.75f)> _
<TestCase(4,4,37)> _
<TestCase(4,6,63)>
Public Sub Interpolate4Table4( alt As Integer, rpmK As integer, expected As single)
Dim interpValue As Single
Select Case alt
Case 1
Select Case rpmK
Case 2
interpValue= InterpAltUserInputs.Iterpolate( Alt1ExpectedTable2000,42.5)
Case 4
interpValue= InterpAltUserInputs.Iterpolate( Alt1ExpectedTable4000,42.5)
Case 6
interpValue= InterpAltUserInputs.Iterpolate( Alt1ExpectedTable6000,42.5)
End Select
Case 2
Select Case rpmK
Case 2
interpValue= InterpAltUserInputs.Iterpolate( Alt2ExpectedTable2000,42.5)
Case 4
interpValue= InterpAltUserInputs.Iterpolate( Alt2ExpectedTable4000,42.5)
Case 6
interpValue= InterpAltUserInputs.Iterpolate( Alt2ExpectedTable6000,42.5)
End Select
Case 3
Select Case rpmK
Case 2
interpValue= InterpAltUserInputs.Iterpolate( Alt3ExpectedTable2000,42.5)
Case 4
interpValue= InterpAltUserInputs.Iterpolate( Alt3ExpectedTable4000,42.5)
Case 6
interpValue= InterpAltUserInputs.Iterpolate( Alt3ExpectedTable6000,42.5)
End Select
Case 4
Select Case rpmK
Case 2
interpValue= InterpAltUserInputs.Iterpolate( Alt4ExpectedTable2000,42.5)
Case 4
interpValue= InterpAltUserInputs.Iterpolate( Alt4ExpectedTable4000,42.5)
Case 6
interpValue= InterpAltUserInputs.Iterpolate( Alt4ExpectedTable6000,42.5)
End Select
End Select
Assert.AreEqual( interpValue, expected)
End Sub
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment