Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 97815424 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

adapting gearbox form to draw shiftlines and fld for battery electric...

adapting gearbox form to draw shiftlines and fld for battery electric vehicles, handling of APT-S/P in case of PEV
parent 30084bf6
No related branches found
No related tags found
No related merge requests found
......@@ -30,6 +30,7 @@ Imports TUGraz.VectoCore.Models.Simulation.Data
Imports TUGraz.VectoCore.Models.Simulation.Impl
Imports TUGraz.VectoCore.Models.SimulationComponent
Imports TUGraz.VectoCore.Models.SimulationComponent.Data
Imports TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor
Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
Imports TUGraz.VectoCore.Models.SimulationComponent.Impl
......@@ -511,19 +512,20 @@ Public Class GearboxForm
Change()
Dim hasTorqueConverter = gStype.AutomaticTransmission() AndAlso gStype <> GearboxType.APTN
'ChTCon.Enabled = (GStype.AutomaticTransmission())
gbTC.Enabled = gStype.AutomaticTransmission()
pnTcEngineering.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission()
gbTCAccMin.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission()
gbPowershiftLosses.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission()
TbStartAcc.Enabled = Not gStype.AutomaticTransmission()
TbStartSpeed.Enabled = Not gStype.AutomaticTransmission()
TbTqResv.Enabled = Not gStype.AutomaticTransmission()
GroupBox2.Enabled = Not gStype.AutomaticTransmission()
TBI_getr.Enabled = Not gStype.AutomaticTransmission()
TbTracInt.Enabled = Not gStype.AutomaticTransmission()
tbDownshiftAfterUpshift.Enabled = Not gStype.AutomaticTransmission()
tbUpshiftAfterDownshift.Enabled = Not gStype.AutomaticTransmission()
gbTC.Enabled = hasTorqueConverter
pnTcEngineering.Enabled = Not Cfg.DeclMode AndAlso hasTorqueConverter
gbTCAccMin.Enabled = Not Cfg.DeclMode AndAlso hasTorqueConverter
gbPowershiftLosses.Enabled = Not Cfg.DeclMode AndAlso hasTorqueConverter
TbStartAcc.Enabled = Not hasTorqueConverter
TbStartSpeed.Enabled = Not hasTorqueConverter
TbTqResv.Enabled = Not hasTorqueConverter
GroupBox2.Enabled = Not hasTorqueConverter
TBI_getr.Enabled = Not hasTorqueConverter
TbTracInt.Enabled = Not hasTorqueConverter
tbDownshiftAfterUpshift.Enabled = Not hasTorqueConverter
tbUpshiftAfterDownshift.Enabled = Not hasTorqueConverter
UpdateGearboxInfoText()
End Sub
......@@ -809,6 +811,7 @@ Public Class GearboxForm
'Dim vectoJob As VectoJob = New VectoJob() With {.FilePath = VectoJobForm.VECTOfile}
'Dim vectoOk As Boolean = vectoJob.ReadFile()
dim hasICE = false
Dim jobFile As String = VectoJobForm.VectoFile
If Not jobFile Is Nothing AndAlso File.Exists(jobFile) Then
......@@ -820,56 +823,19 @@ Public Class GearboxForm
Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle
'inputData = TryCast(JSONInputDataFactory.ReadComponentData(vectoJob.PathEng(False)), IEngineeringInputDataProvider)
Dim engine As IEngineEngineeringInputData = inputData.JobInputData.Vehicle.Components.EngineInputData
Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.EngineModes.First().FullLoadCurve)
s = New Series
s.Points.DataBindXY(engineFld.FullLoadEntries.Select(Function(x) x.EngineSpeed.AsRPM).ToArray(),
engineFld.FullLoadEntries.Select(Function(x) x.TorqueFullLoad.Value()).ToArray())
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkBlue
s.Name = "Full load"
chart.Series.Add(s)
If VectoJobForm.Visible AndAlso engine.EngineModes.First().IdleSpeed > 0 Then
'If FLD0.Init(VectoJobForm.n_idle) Then
'Dim fullLoadCurve As FullLoadCurve = ConvertToFullLoadCurve(FLD0.LnU, FLD0.LTq)
Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items)
Dim shiftLines As ShiftPolygon = GetShiftLines(engine.EngineModes.First().IdleSpeed, engineFld, vehicle, gears, gear)
If (Not IsNothing(shiftLines)) Then
s = New Series
's.Points.DataBindXY(Shiftpoly.gs_nUup, Shiftpoly.gs_TqUp)
s.Points.DataBindXY(
shiftLines.Upshift.Select(Function(pt) pt.AngularSpeed.AsRPM).
ToArray(),
shiftLines.Upshift.Select(Function(pt) pt.Torque.Value()).ToArray())
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkRed
s.BorderDashStyle = ChartDashStyle.Dash
s.Name = "Upshift curve (generic)"
chart.Series.Add(s)
s = New Series
's.Points.DataBindXY(Shiftpoly.gs_nUdown, Shiftpoly.gs_TqDown)
s.Points.DataBindXY(
shiftLines.Downshift.Select(Function(pt) pt.AngularSpeed.AsRPM) _
.ToArray(),
shiftLines.Downshift.Select(Function(pt) pt.Torque.Value()).ToArray())
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkRed
s.BorderDashStyle = ChartDashStyle.Dash
s.Name = "Downshift curve (generic)"
chart.Series.Add(s)
End If
'End If
Dim engineFld As EngineFullLoadCurve = Nothing
if (not engine is nothing) then
engineFld = FullLoadCurveReader.Create(engine.EngineModes.First().FullLoadCurve)
DrawEngineFld(engine, chart)
DrawShiftLineICE(engine, vehicle, gear, chart)
hasICE = true
End If
dim em = inputData.JobInputData.Vehicle.Components.ElectricMachines?.Entries.FirstOrDefault(function(x) x.Position <> PowertrainPosition.GEN)
if (engine is nothing andalso not em is nothing) then
DrawEMFld(em, chart)
DrawShiftLineEM(em, vehicle, gear, chart)
end if
End If
a.Name = "main"
......@@ -886,7 +852,7 @@ Public Class GearboxForm
a.AxisY.LabelAutoFitStyle = LabelAutoFitStyles.None
a.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dot
a.AxisX.Minimum = 300
a.AxisX.Minimum = If(hasICE, 300,0)
a.BorderDashStyle = ChartDashStyle.Solid
a.BorderWidth = 1
......@@ -905,6 +871,185 @@ Public Class GearboxForm
PicBox.Image = img
End Sub
Private sub DrawEngineFld(engine As IEngineEngineeringInputData, chart As chart)
Dim s As Series
Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.EngineModes.First().FullLoadCurve)
s = New Series
s.Points.DataBindXY(engineFld.FullLoadEntries.Select(Function(x) x.EngineSpeed.AsRPM).ToArray(),
engineFld.FullLoadEntries.Select(Function(x) x.TorqueFullLoad.Value()).ToArray())
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkBlue
s.Name = "Full load"
chart.Series.Add(s)
End sub
Private Sub DrawShiftLineICE(engine As IEngineEngineeringInputData, vehicle As IVehicleEngineeringInputData, gear As Integer, chart As Chart)
if (engine Is nothing) then
return
End If
Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.EngineModes.First().FullLoadCurve)
If VectoJobForm.Visible AndAlso engine.EngineModes.First().IdleSpeed > 0 Then
'If FLD0.Init(VectoJobForm.n_idle) Then
'Dim fullLoadCurve As FullLoadCurve = ConvertToFullLoadCurve(FLD0.LnU, FLD0.LTq)
Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items)
Dim shiftLines As ShiftPolygon = GetShiftLines(engine.EngineModes.First().IdleSpeed, engineFld, vehicle, gears, gear)
If (Not IsNothing(shiftLines)) Then
dim s = New Series
's.Points.DataBindXY(Shiftpoly.gs_nUup, Shiftpoly.gs_TqUp)
s.Points.DataBindXY(
shiftLines.Upshift.Select(Function(pt) pt.AngularSpeed.AsRPM).
ToArray(),
shiftLines.Upshift.Select(Function(pt) pt.Torque.Value()).ToArray())
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkRed
s.BorderDashStyle = ChartDashStyle.Dash
s.Name = "Upshift curve (generic)"
chart.Series.Add(s)
s = New Series
's.Points.DataBindXY(Shiftpoly.gs_nUdown, Shiftpoly.gs_TqDown)
s.Points.DataBindXY(
shiftLines.Downshift.Select(Function(pt) pt.AngularSpeed.AsRPM) _
.ToArray(),
shiftLines.Downshift.Select(Function(pt) pt.Torque.Value()).ToArray())
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkRed
s.BorderDashStyle = ChartDashStyle.Dash
s.Name = "Downshift curve (generic)"
chart.Series.Add(s)
End If
'End If
End If
End Sub
Private sub DrawEmFld(em As ElectricMachineEntry(Of IElectricMotorEngineeringInputData), chart As chart)
Dim s As Series
Dim emFld = ElectricFullLoadCurveReader.Create(em.ElectricMachine.VoltageLevels.First().FullLoadCurve, em.Count)
s = New Series
s.Points.DataBindXY(emFld.FullLoadEntries.Select(Function(x) x.MotorSpeed.AsRPM).ToArray(),
emFld.FullLoadEntries.Select(Function(x) x.FullDriveTorque.Value()).ToArray())
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkBlue
s.Name = "Dirve Torque"
chart.Series.Add(s)
s = New Series
s.Points.DataBindXY(emFld.FullLoadEntries.Select(Function(x) x.MotorSpeed.AsRPM).ToArray(),
emFld.FullLoadEntries.Select(Function(x) x.FullGenerationTorque.Value()).ToArray())
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkBlue
s.Name = "Generation Torque"
chart.Series.Add(s)
End sub
Private Sub DrawShiftLineEM(em As ElectricMachineEntry(Of IElectricMotorEngineeringInputData), vehicle As IVehicleEngineeringInputData, gear As Integer, chart As Chart)
if (em Is nothing) then
return
End If
Dim emFld = ElectricFullLoadCurveReader.Create(em.ElectricMachine.VoltageLevels.First().FullLoadCurve, em.Count)
If VectoJobForm.Visible Then
'If FLD0.Init(VectoJobForm.n_idle) Then
'Dim fullLoadCurve As FullLoadCurve = ConvertToFullLoadCurve(FLD0.LnU, FLD0.LTq)
Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items)
Dim shiftLines As ShiftPolygon = GetShiftLines(emFld, vehicle, gears, gear)
If (Not IsNothing(shiftLines)) Then
dim s = New Series
's.Points.DataBindXY(Shiftpoly.gs_nUup, Shiftpoly.gs_TqUp)
if (shiftLines.Upshift.Any()) then
s.Points.DataBindXY(
shiftLines.Upshift.Select(Function(pt) pt.AngularSpeed.AsRPM).
ToArray(),
shiftLines.Upshift.Select(Function(pt) pt.Torque.Value()).ToArray())
end if
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkRed
s.BorderDashStyle = ChartDashStyle.Dash
s.Name = "Upshift curve (generic)"
chart.Series.Add(s)
s = New Series
's.Points.DataBindXY(Shiftpoly.gs_nUdown, Shiftpoly.gs_TqDown)
if (shiftLines.Downshift.Any()) then
s.Points.DataBindXY(
shiftLines.Downshift.Select(Function(pt) pt.AngularSpeed.AsRPM) _
.ToArray(),
shiftLines.Downshift.Select(Function(pt) pt.Torque.Value()).ToArray())
end If
s.ChartType = SeriesChartType.FastLine
s.BorderWidth = 2
s.Color = Color.DarkRed
s.BorderDashStyle = ChartDashStyle.Dash
s.Name = "Downshift curve (generic)"
chart.Series.Add(s)
End If
'End If
End If
End Sub
Private Function GetShiftLines(emFld As ElectricMotorFullLoadCurve, vehicle As IVehicleEngineeringInputData, gears As IList(Of ITransmissionInputData), gear As Integer) As ShiftPolygon
Dim maxTqStr As String = LvGears.Items(gear).SubItems(GearboxTbl.MaxTorque).Text
If gears.Count <= 1 Then
Return Nothing
End If
Dim rDyn As Meter = vehicle.DynamicTyreRadius
If rDyn.IsEqual(0) Then
If (vehicle.Components.AxleWheels.AxlesEngineering.Count < 2) Then
Return Nothing
End If
rdyn = vehicle.Components.AxleWheels.AxlesEngineering.Where(Function(axle) axle.AxleType = AxleType.VehicleDriven) _
.Select(Function(da) DeclarationData.Wheels.Lookup(da.Tyre.Dimension).DynamicTyreRadius) _
.Average()
End If
If (rDyn.IsEqual(0)) Then
Return Nothing
End If
Dim tmpRunData as VectoRunData = New VectoRunData() With {
.GearboxData = New GearboxData() with {
.Type = CType(CbGStype.SelectedValue, GearboxType)
},
.GearshiftParameters = New ShiftStrategyParameters(),
.JobType = VectoSimulationJobType.BatteryElectricVehicle
}
Dim tmpStrategy as IShiftPolygonCalculator = PowertrainBuilder.GetShiftStrategy(new SimplePowertrainContainer(tmpRunData))
dim em as ElectricMotorData = ConvertToElectricMotorData(emFld, gear)
Dim shiftLines As ShiftPolygon = tmpStrategy.ComputeDeclarationShiftPolygon(
CType(CbGStype.SelectedValue, GearboxType), gear - 1,
Nothing, gears, nothing,
Double.Parse(LvGears.Items(0).SubItems(GearboxTbl.Ratio).Text, CultureInfo.InvariantCulture),
(rDyn), em)
Return shiftLines
End Function
Private Function GetShiftLines(idleSpeed As PerSecond, engineFullLoadCurve As EngineFullLoadCurve, vehicle As IVehicleEngineeringInputData, gears As IList(Of ITransmissionInputData), gear As Integer) _
As ShiftPolygon
......
......@@ -14,6 +14,7 @@ Imports TUGraz.VectoCommon.Models
Imports TUGraz.VectoCommon.Utils
Imports TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
Imports TUGraz.VectoCore.Models.SimulationComponent.Data
Imports TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor
Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
''' <summary>
......@@ -35,6 +36,20 @@ Module MainModule
Return retVal
End Function
public Function ConvertToElectricMotorData(emFld As ElectricMotorFullLoadCurve, gear As Integer) As ElectricMotorData
Dim retval = new ElectricMotorData
retval.EfficiencyData = New VoltageLevelData()
retval.EfficiencyData.VoltageLevels = new List(Of ElectricMotorVoltageLevelData)
Dim vl = new ElectricMotorVoltageLevelData
retval.EfficiencyData.VoltageLevels.Add(vl)
vl.FullLoadCurve = emFld
Return retval
End Function
Public Function ConvPicPath(hdVclass As VehicleClass, isLongHaul As Boolean) As Bitmap
Select Case hdVclass
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment