From e8dc2cc5fc4af392a1710c673e062b680933dc68 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Tue, 23 Nov 2021 15:58:52 +0100 Subject: [PATCH] moving drag curve per voltage level to single drag curve for EM. updating GUI, input data provider, data apapter, etc. --- VECTO/GUI/ElectricMotorForm.Designer.vb | 108 +++++------------- VECTO/GUI/ElectricMotorForm.vb | 26 ++--- VECTO/GUI/MainForm.Designer.vb | 28 ++--- VECTO/Input Files/ElectricMachine.vb | 70 +++++------- VECTO/Input Files/Vehicle.vb | 1 + .../InputData/DeclarationInputData.cs | 4 +- .../FileIO/JSON/JSONElectricMotor.cs | 25 +++- .../FileIO/JSON/JSONInputDataFactory.cs | 2 + .../VectoCore/InputData/Impl/InputData.cs | 2 +- .../EngineeringDataAdapter.cs | 3 +- .../Data/ElectricMotor/ElectricMotorData.cs | 13 +-- .../SimulationComponent/Impl/ElectricMotor.cs | 10 +- .../Strategies/HybridStrategy.cs | 2 +- .../OutputData/FileIO/JSONFileWriter.cs | 6 +- .../FileIO/JsonReadHybridTest.cs | 11 +- .../SimulationComponent/ElectricMotorTest.cs | 2 +- 16 files changed, 133 insertions(+), 180 deletions(-) diff --git a/VECTO/GUI/ElectricMotorForm.Designer.vb b/VECTO/GUI/ElectricMotorForm.Designer.vb index a978334f88..787eda5c70 100644 --- a/VECTO/GUI/ElectricMotorForm.Designer.vb +++ b/VECTO/GUI/ElectricMotorForm.Designer.vb @@ -60,10 +60,6 @@ Partial Class ElectricMotorForm Me.OpenWithToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.ShowInFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.pnInertia = New System.Windows.Forms.Panel() - Me.tbDragTorqueHi = New System.Windows.Forms.TextBox() - Me.lblDragTorqueHi = New System.Windows.Forms.Label() - Me.btnBrowseDragCurveHi = New System.Windows.Forms.Button() - Me.btnDragCurveOpenHi = New System.Windows.Forms.Button() Me.btnEmMapOpenHi = New System.Windows.Forms.Button() Me.btnBrowseEmMapHi = New System.Windows.Forms.Button() Me.lblPowerMapHi = New System.Windows.Forms.Label() @@ -163,20 +159,20 @@ Partial Class ElectricMotorForm ' Me.ButCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) Me.ButCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.ButCancel.Location = New System.Drawing.Point(811, 574) + Me.ButCancel.Location = New System.Drawing.Point(839, 567) Me.ButCancel.Name = "ButCancel" Me.ButCancel.Size = New System.Drawing.Size(75, 23) - Me.ButCancel.TabIndex = 11 + Me.ButCancel.TabIndex = 99 Me.ButCancel.Text = "Cancel" Me.ButCancel.UseVisualStyleBackColor = true ' 'ButOK ' Me.ButOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) - Me.ButOK.Location = New System.Drawing.Point(730, 574) + Me.ButOK.Location = New System.Drawing.Point(758, 567) Me.ButOK.Name = "ButOK" Me.ButOK.Size = New System.Drawing.Size(75, 23) - Me.ButOK.TabIndex = 10 + Me.ButOK.TabIndex = 98 Me.ButOK.Text = "Save" Me.ButOK.UseVisualStyleBackColor = true ' @@ -188,7 +184,7 @@ Partial Class ElectricMotorForm Me.ToolStrip1.Location = New System.Drawing.Point(0, 0) Me.ToolStrip1.Name = "ToolStrip1" Me.ToolStrip1.Padding = New System.Windows.Forms.Padding(0, 0, 2, 0) - Me.ToolStrip1.Size = New System.Drawing.Size(898, 31) + Me.ToolStrip1.Size = New System.Drawing.Size(926, 31) Me.ToolStrip1.TabIndex = 30 Me.ToolStrip1.Text = "ToolStrip1" ' @@ -265,9 +261,9 @@ Partial Class ElectricMotorForm ' Me.StatusStrip1.ImageScalingSize = New System.Drawing.Size(24, 24) Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.LbStatus}) - Me.StatusStrip1.Location = New System.Drawing.Point(0, 599) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 592) Me.StatusStrip1.Name = "StatusStrip1" - Me.StatusStrip1.Size = New System.Drawing.Size(898, 22) + Me.StatusStrip1.Size = New System.Drawing.Size(926, 22) Me.StatusStrip1.SizingGrip = false Me.StatusStrip1.TabIndex = 37 Me.StatusStrip1.Text = "StatusStrip1" @@ -333,44 +329,10 @@ Partial Class ElectricMotorForm Me.pnInertia.Size = New System.Drawing.Size(221, 30) Me.pnInertia.TabIndex = 1 ' - 'tbDragTorqueHi - ' - Me.tbDragTorqueHi.Location = New System.Drawing.Point(6, 103) - Me.tbDragTorqueHi.Name = "tbDragTorqueHi" - Me.tbDragTorqueHi.Size = New System.Drawing.Size(406, 20) - Me.tbDragTorqueHi.TabIndex = 4 - ' - 'lblDragTorqueHi - ' - Me.lblDragTorqueHi.AutoSize = true - Me.lblDragTorqueHi.Location = New System.Drawing.Point(6, 87) - Me.lblDragTorqueHi.Name = "lblDragTorqueHi" - Me.lblDragTorqueHi.Size = New System.Drawing.Size(98, 13) - Me.lblDragTorqueHi.TabIndex = 38 - Me.lblDragTorqueHi.Text = "Drag Torque Curve" - ' - 'btnBrowseDragCurveHi - ' - Me.btnBrowseDragCurveHi.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon - Me.btnBrowseDragCurveHi.Location = New System.Drawing.Point(420, 100) - Me.btnBrowseDragCurveHi.Name = "btnBrowseDragCurveHi" - Me.btnBrowseDragCurveHi.Size = New System.Drawing.Size(24, 24) - Me.btnBrowseDragCurveHi.TabIndex = 5 - Me.btnBrowseDragCurveHi.UseVisualStyleBackColor = true - ' - 'btnDragCurveOpenHi - ' - Me.btnDragCurveOpenHi.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small - Me.btnDragCurveOpenHi.Location = New System.Drawing.Point(443, 100) - Me.btnDragCurveOpenHi.Name = "btnDragCurveOpenHi" - Me.btnDragCurveOpenHi.Size = New System.Drawing.Size(24, 24) - Me.btnDragCurveOpenHi.TabIndex = 6 - Me.btnDragCurveOpenHi.UseVisualStyleBackColor = true - ' 'btnEmMapOpenHi ' Me.btnEmMapOpenHi.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small - Me.btnEmMapOpenHi.Location = New System.Drawing.Point(443, 141) + Me.btnEmMapOpenHi.Location = New System.Drawing.Point(443, 102) Me.btnEmMapOpenHi.Name = "btnEmMapOpenHi" Me.btnEmMapOpenHi.Size = New System.Drawing.Size(24, 24) Me.btnEmMapOpenHi.TabIndex = 9 @@ -379,7 +341,7 @@ Partial Class ElectricMotorForm 'btnBrowseEmMapHi ' Me.btnBrowseEmMapHi.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon - Me.btnBrowseEmMapHi.Location = New System.Drawing.Point(420, 141) + Me.btnBrowseEmMapHi.Location = New System.Drawing.Point(420, 102) Me.btnBrowseEmMapHi.Name = "btnBrowseEmMapHi" Me.btnBrowseEmMapHi.Size = New System.Drawing.Size(24, 24) Me.btnBrowseEmMapHi.TabIndex = 8 @@ -388,7 +350,7 @@ Partial Class ElectricMotorForm 'lblPowerMapHi ' Me.lblPowerMapHi.AutoSize = true - Me.lblPowerMapHi.Location = New System.Drawing.Point(6, 128) + Me.lblPowerMapHi.Location = New System.Drawing.Point(6, 89) Me.lblPowerMapHi.Name = "lblPowerMapHi" Me.lblPowerMapHi.Size = New System.Drawing.Size(163, 13) Me.lblPowerMapHi.TabIndex = 43 @@ -396,7 +358,7 @@ Partial Class ElectricMotorForm ' 'tbMapHi ' - Me.tbMapHi.Location = New System.Drawing.Point(6, 144) + Me.tbMapHi.Location = New System.Drawing.Point(6, 105) Me.tbMapHi.Name = "tbMapHi" Me.tbMapHi.Size = New System.Drawing.Size(406, 20) Me.tbMapHi.TabIndex = 7 @@ -440,7 +402,7 @@ Partial Class ElectricMotorForm Me.lblTitle.AutoSize = true Me.lblTitle.BackColor = System.Drawing.Color.White Me.lblTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 18!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte)) - Me.lblTitle.Location = New System.Drawing.Point(84, 34) + Me.lblTitle.Location = New System.Drawing.Point(115, 34) Me.lblTitle.Name = "lblTitle" Me.lblTitle.Size = New System.Drawing.Size(190, 29) Me.lblTitle.TabIndex = 48 @@ -672,10 +634,6 @@ Partial Class ElectricMotorForm Me.gbVoltageLevelHi.Controls.Add(Me.lblVoltageHiUnit) Me.gbVoltageLevelHi.Controls.Add(Me.tbVoltageHi) Me.gbVoltageLevelHi.Controls.Add(Me.lblMaxTorqueHi) - Me.gbVoltageLevelHi.Controls.Add(Me.tbDragTorqueHi) - Me.gbVoltageLevelHi.Controls.Add(Me.lblDragTorqueHi) - Me.gbVoltageLevelHi.Controls.Add(Me.btnBrowseDragCurveHi) - Me.gbVoltageLevelHi.Controls.Add(Me.btnDragCurveOpenHi) Me.gbVoltageLevelHi.Controls.Add(Me.tbMapHi) Me.gbVoltageLevelHi.Controls.Add(Me.lblPowerMapHi) Me.gbVoltageLevelHi.Controls.Add(Me.btnBrowseEmMapHi) @@ -683,9 +641,9 @@ Partial Class ElectricMotorForm Me.gbVoltageLevelHi.Controls.Add(Me.tbMaxTorqueHi) Me.gbVoltageLevelHi.Controls.Add(Me.btnMaxTorqueCurveOpenHi) Me.gbVoltageLevelHi.Controls.Add(Me.btnBrowseMaxTorqueHi) - Me.gbVoltageLevelHi.Location = New System.Drawing.Point(12, 418) + Me.gbVoltageLevelHi.Location = New System.Drawing.Point(12, 382) Me.gbVoltageLevelHi.Name = "gbVoltageLevelHi" - Me.gbVoltageLevelHi.Size = New System.Drawing.Size(482, 170) + Me.gbVoltageLevelHi.Size = New System.Drawing.Size(482, 136) Me.gbVoltageLevelHi.TabIndex = 9 Me.gbVoltageLevelHi.TabStop = false Me.gbVoltageLevelHi.Text = "Voltage Level High" @@ -721,10 +679,6 @@ Partial Class ElectricMotorForm Me.gbVoltageLevelLow.Controls.Add(Me.lblVoltageLowUnit) Me.gbVoltageLevelLow.Controls.Add(Me.tbVoltageLow) Me.gbVoltageLevelLow.Controls.Add(Me.lblMaxTorqueLow) - Me.gbVoltageLevelLow.Controls.Add(Me.tbDragTorqueLow) - Me.gbVoltageLevelLow.Controls.Add(Me.lblDragTorqueLow) - Me.gbVoltageLevelLow.Controls.Add(Me.btnBrowseDragCurveLow) - Me.gbVoltageLevelLow.Controls.Add(Me.btnDragCurveOpenLow) Me.gbVoltageLevelLow.Controls.Add(Me.tbMapLow) Me.gbVoltageLevelLow.Controls.Add(Me.lblPowerMapLow) Me.gbVoltageLevelLow.Controls.Add(Me.btnBrowseEmMapLow) @@ -734,7 +688,7 @@ Partial Class ElectricMotorForm Me.gbVoltageLevelLow.Controls.Add(Me.btnBrowseMaxTorqueLow) Me.gbVoltageLevelLow.Location = New System.Drawing.Point(12, 242) Me.gbVoltageLevelLow.Name = "gbVoltageLevelLow" - Me.gbVoltageLevelLow.Size = New System.Drawing.Size(482, 170) + Me.gbVoltageLevelLow.Size = New System.Drawing.Size(482, 134) Me.gbVoltageLevelLow.TabIndex = 8 Me.gbVoltageLevelLow.TabStop = false Me.gbVoltageLevelLow.Text = "Voltage Level Low" @@ -775,15 +729,15 @@ Partial Class ElectricMotorForm ' 'tbDragTorqueLow ' - Me.tbDragTorqueLow.Location = New System.Drawing.Point(6, 103) + Me.tbDragTorqueLow.Location = New System.Drawing.Point(19, 543) Me.tbDragTorqueLow.Name = "tbDragTorqueLow" Me.tbDragTorqueLow.Size = New System.Drawing.Size(406, 20) - Me.tbDragTorqueLow.TabIndex = 4 + Me.tbDragTorqueLow.TabIndex = 10 ' 'lblDragTorqueLow ' Me.lblDragTorqueLow.AutoSize = true - Me.lblDragTorqueLow.Location = New System.Drawing.Point(6, 87) + Me.lblDragTorqueLow.Location = New System.Drawing.Point(19, 527) Me.lblDragTorqueLow.Name = "lblDragTorqueLow" Me.lblDragTorqueLow.Size = New System.Drawing.Size(98, 13) Me.lblDragTorqueLow.TabIndex = 38 @@ -792,24 +746,24 @@ Partial Class ElectricMotorForm 'btnBrowseDragCurveLow ' Me.btnBrowseDragCurveLow.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon - Me.btnBrowseDragCurveLow.Location = New System.Drawing.Point(420, 100) + Me.btnBrowseDragCurveLow.Location = New System.Drawing.Point(433, 540) Me.btnBrowseDragCurveLow.Name = "btnBrowseDragCurveLow" Me.btnBrowseDragCurveLow.Size = New System.Drawing.Size(24, 24) - Me.btnBrowseDragCurveLow.TabIndex = 5 + Me.btnBrowseDragCurveLow.TabIndex = 11 Me.btnBrowseDragCurveLow.UseVisualStyleBackColor = true ' 'btnDragCurveOpenLow ' Me.btnDragCurveOpenLow.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small - Me.btnDragCurveOpenLow.Location = New System.Drawing.Point(443, 100) + Me.btnDragCurveOpenLow.Location = New System.Drawing.Point(456, 540) Me.btnDragCurveOpenLow.Name = "btnDragCurveOpenLow" Me.btnDragCurveOpenLow.Size = New System.Drawing.Size(24, 24) - Me.btnDragCurveOpenLow.TabIndex = 6 + Me.btnDragCurveOpenLow.TabIndex = 12 Me.btnDragCurveOpenLow.UseVisualStyleBackColor = true ' 'tbMapLow ' - Me.tbMapLow.Location = New System.Drawing.Point(6, 144) + Me.tbMapLow.Location = New System.Drawing.Point(6, 104) Me.tbMapLow.Name = "tbMapLow" Me.tbMapLow.Size = New System.Drawing.Size(406, 20) Me.tbMapLow.TabIndex = 7 @@ -817,7 +771,7 @@ Partial Class ElectricMotorForm 'lblPowerMapLow ' Me.lblPowerMapLow.AutoSize = true - Me.lblPowerMapLow.Location = New System.Drawing.Point(6, 128) + Me.lblPowerMapLow.Location = New System.Drawing.Point(6, 88) Me.lblPowerMapLow.Name = "lblPowerMapLow" Me.lblPowerMapLow.Size = New System.Drawing.Size(163, 13) Me.lblPowerMapLow.TabIndex = 43 @@ -826,7 +780,7 @@ Partial Class ElectricMotorForm 'btnBrowseEmMapLow ' Me.btnBrowseEmMapLow.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon - Me.btnBrowseEmMapLow.Location = New System.Drawing.Point(420, 141) + Me.btnBrowseEmMapLow.Location = New System.Drawing.Point(420, 101) Me.btnBrowseEmMapLow.Name = "btnBrowseEmMapLow" Me.btnBrowseEmMapLow.Size = New System.Drawing.Size(24, 24) Me.btnBrowseEmMapLow.TabIndex = 8 @@ -835,7 +789,7 @@ Partial Class ElectricMotorForm 'btnEmMapOpenLow ' Me.btnEmMapOpenLow.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small - Me.btnEmMapOpenLow.Location = New System.Drawing.Point(443, 141) + Me.btnEmMapOpenLow.Location = New System.Drawing.Point(443, 101) Me.btnEmMapOpenLow.Name = "btnEmMapOpenLow" Me.btnEmMapOpenLow.Size = New System.Drawing.Size(24, 24) Me.btnEmMapOpenLow.TabIndex = 9 @@ -872,12 +826,16 @@ Partial Class ElectricMotorForm Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.CancelButton = Me.ButCancel - Me.ClientSize = New System.Drawing.Size(898, 621) + Me.ClientSize = New System.Drawing.Size(926, 614) Me.Controls.Add(Me.gbVoltageLevelLow) Me.Controls.Add(Me.gbVoltageLevelHi) Me.Controls.Add(Me.Panel6) + Me.Controls.Add(Me.tbDragTorqueLow) + Me.Controls.Add(Me.lblDragTorqueLow) Me.Controls.Add(Me.pnOverloadTq) + Me.Controls.Add(Me.btnBrowseDragCurveLow) Me.Controls.Add(Me.Panel4) + Me.Controls.Add(Me.btnDragCurveOpenLow) Me.Controls.Add(Me.Panel3) Me.Controls.Add(Me.Panel2) Me.Controls.Add(Me.Panel1) @@ -950,10 +908,6 @@ End Sub Friend WithEvents OpenWithToolStripMenuItem As ToolStripMenuItem Friend WithEvents ShowInFolderToolStripMenuItem As ToolStripMenuItem Friend WithEvents pnInertia As Panel - Friend WithEvents tbDragTorqueHi As TextBox - Friend WithEvents lblDragTorqueHi As Label - Friend WithEvents btnBrowseDragCurveHi As Button - Friend WithEvents btnDragCurveOpenHi As Button Friend WithEvents btnEmMapOpenHi As Button Friend WithEvents btnBrowseEmMapHi As Button Friend WithEvents lblPowerMapHi As Label diff --git a/VECTO/GUI/ElectricMotorForm.vb b/VECTO/GUI/ElectricMotorForm.vb index e2e982126f..b1b93a450f 100644 --- a/VECTO/GUI/ElectricMotorForm.vb +++ b/VECTO/GUI/ElectricMotorForm.vb @@ -133,7 +133,6 @@ Public Class ElectricMotorForm tbMakeModel.Text = "" tbInertia.Text = "" tbMapHi.Text = "" - tbDragTorqueHi.Text = "" tbMaxTorqueHi.Text = "" DeclInit() @@ -180,16 +179,17 @@ Public Class ElectricMotorForm tbRatedSpeed.Text = engine.ContinuousTorqueSpeed.AsRPM.ToGUIFormat() tbOverloadRecoveryFactor.Text = engine.OverloadRecoveryFactor.ToGUIFormat() + tbDragTorqueLow.Text = GetRelativePath(engine.DragCurve.Source, basePath) + Dim voltageLevelHigh As IElectricMotorVoltageLevel = engine.VoltageLevels.MaxBy(function(level) level.VoltageLevel.Value()) - tbDragTorqueHi.Text = GetRelativePath(voltageLevelHigh.DragCurve.Source, basePath) tbMaxTorqueHi.Text = GetRelativePath(voltageLevelHigh.FullLoadCurve.Source, basePath) tbMapHi.Text = GetRelativePath(voltageLevelHigh.EfficiencyMap.Source, basePath) tbVoltageHi.Text = voltageLevelHigh.VoltageLevel.Value().ToGUIFormat() Dim voltageLevelLow As IElectricMotorVoltageLevel = engine.VoltageLevels.MinBy(function(level) level.VoltageLevel.Value()) - tbDragTorqueLow.Text = GetRelativePath(voltageLevelLow.DragCurve.Source, basePath) + tbMaxTorqueLow.Text = GetRelativePath(voltageLevelLow.FullLoadCurve.Source, basePath) tbMapLow.Text = GetRelativePath(voltageLevelLow.EfficiencyMap.Source, basePath) tbVoltageLow.Text = voltageLevelLow.VoltageLevel.Value().ToGUIFormat() @@ -236,12 +236,11 @@ Public Class ElectricMotorForm em.OverloadRecoveryFactor = tbOverloadRecoveryFactor.Text.ToDouble(0) em.PathMaxTorqueLow = tbMaxTorqueLow.Text - em.PathDragLow = tbDragTorqueLow.Text + em.PathDrag = tbDragTorqueLow.Text em.PathMapLow = tbMapLow.Text em.VoltageLevelLow = tbVoltageLow.Text.ToDouble(0) em.PathMaxTorqueHi = tbMaxTorqueHi.Text - em.PathDragHi = tbDragTorqueHi.Text em.PathMapHi = tbMapHi.Text em.VoltageLevelHigh = tbVoltageHi.Text.ToDouble(0) @@ -304,7 +303,7 @@ Public Class ElectricMotorForm End Sub Private Sub DataChangedUpdatePic(sender As Object, e As EventArgs) _ - Handles tbDragTorqueHi.TextChanged, tbMaxTorqueLow.TextChanged, tbMaxTorqueHi.TextChanged, tbDragTorqueLow.TextChanged + Handles tbMaxTorqueLow.TextChanged, tbMaxTorqueHi.TextChanged, tbDragTorqueLow.TextChanged UpdatePic() Change() End Sub @@ -335,7 +334,7 @@ Public Class ElectricMotorForm Try Dim fldFile As String = - If(Not String.IsNullOrWhiteSpace(_emFile), Path.Combine(Path.GetDirectoryName(_emFile), tbMaxTorqueHi.Text), tbDragTorqueHi.Text) + If(Not String.IsNullOrWhiteSpace(_emFile), Path.Combine(Path.GetDirectoryName(_emFile), tbMaxTorqueHi.Text), tbDragTorqueLow.Text) If File.Exists(fldFile) Then _ fullLoadCurve = ElectricFullLoadCurveReader.Create(VectoCSVFile.Read(fldFile), 1) Catch ex As Exception @@ -350,7 +349,7 @@ Public Class ElectricMotorForm Try Dim dragFile As String = - If(Not String.IsNullOrWhiteSpace(_emFile), Path.Combine(Path.GetDirectoryName(_emFile), tbDragTorqueHi.Text), tbMapHi.Text) + If(Not String.IsNullOrWhiteSpace(_emFile), Path.Combine(Path.GetDirectoryName(_emFile), tbDragTorqueLow.Text), tbMapHi.Text) If File.Exists(dragFile) Then dragCurve = ElectricMotorDragCurveReader.Create(VectoCSVFile.Read(dragFile), 1) Catch ex As Exception End Try @@ -371,7 +370,7 @@ Public Class ElectricMotorForm series.ChartType = SeriesChartType.FastLine series.BorderWidth = 2 series.Color = Color.DarkBlue - series.Name = "Max drive torque (" & tbDragTorqueHi.Text & ")" + series.Name = "Max drive torque (" & tbDragTorqueLow.Text & ")" chart.Series.Add(series) series = New Series @@ -495,9 +494,6 @@ Public Class ElectricMotorForm CreateNewFile(tbMaxTorqueHi) End Sub - Private Sub btnDragCurveOpen_Click(sender As Object, e As EventArgs) Handles btnDragCurveOpenHi.Click - CreateNewFile(tbDragTorqueHi) - End Sub Private Sub btnEmMapOpen_Click(sender As Object, e As EventArgs) Handles btnEmMapOpenHi.Click CreateNewFile(tbMapHi) @@ -519,11 +515,7 @@ Public Class ElectricMotorForm SelectFile(ElectricMachineMaxTorqueFileBrowser, tbMaxTorqueHi) End Sub - Private Sub btnBrowseDragCurve_Click(sender As Object, e As EventArgs) Handles btnBrowseDragCurveHi.Click - SelectFile(ElectricMachineDragTorqueFileBrowser, tbDragTorqueHi) - End Sub - - Private Sub btnBrowseEmMap_Click(sender As Object, e As EventArgs) Handles btnBrowseEmMapHi.Click + Private Sub btnBrowseEmMap_Click(sender As Object, e As EventArgs) Handles btnBrowseEmMapHi.Click SelectFile(ElectricMachineEfficiencyMapFileBrowser, tbMapHi) End Sub diff --git a/VECTO/GUI/MainForm.Designer.vb b/VECTO/GUI/MainForm.Designer.vb index 12282beb58..883e66e0d8 100644 --- a/VECTO/GUI/MainForm.Designer.vb +++ b/VECTO/GUI/MainForm.Designer.vb @@ -443,9 +443,9 @@ Partial Class MainForm Me.Label2.AutoSize = true Me.Label2.Location = New System.Drawing.Point(7, 19) Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(84, 13) + Me.Label2.Size = New System.Drawing.Size(61, 13) Me.Label2.TabIndex = 1 - Me.Label2.Text = "Output Directory" + Me.Label2.Text = "Min Speed:" ' 'GroupBox4 ' @@ -730,80 +730,80 @@ Partial Class MainForm ' Me.GENEditorToolStripMenuItem1.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_VECTO Me.GENEditorToolStripMenuItem1.Name = "GENEditorToolStripMenuItem1" - Me.GENEditorToolStripMenuItem1.Size = New System.Drawing.Size(262, 30) + Me.GENEditorToolStripMenuItem1.Size = New System.Drawing.Size(254, 22) Me.GENEditorToolStripMenuItem1.Text = "Job Editor - Conventional Vehicle" ' 'JobEditorParallelHybridVehicleToolStripMenuItem ' Me.JobEditorParallelHybridVehicleToolStripMenuItem.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_VECTO Me.JobEditorParallelHybridVehicleToolStripMenuItem.Name = "JobEditorParallelHybridVehicleToolStripMenuItem" - Me.JobEditorParallelHybridVehicleToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.JobEditorParallelHybridVehicleToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.JobEditorParallelHybridVehicleToolStripMenuItem.Text = "Job Editor - Parallel Hybrid Vehicle" ' 'JobEditorBatteryElectricVehicleToolStripMenuItem ' Me.JobEditorBatteryElectricVehicleToolStripMenuItem.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_VECTO Me.JobEditorBatteryElectricVehicleToolStripMenuItem.Name = "JobEditorBatteryElectricVehicleToolStripMenuItem" - Me.JobEditorBatteryElectricVehicleToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.JobEditorBatteryElectricVehicleToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.JobEditorBatteryElectricVehicleToolStripMenuItem.Text = "JobEditor - Battery Electric Vehicle" ' 'JobEditorEngineOnlyModeToolStripMenuItem ' Me.JobEditorEngineOnlyModeToolStripMenuItem.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_VECTO Me.JobEditorEngineOnlyModeToolStripMenuItem.Name = "JobEditorEngineOnlyModeToolStripMenuItem" - Me.JobEditorEngineOnlyModeToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.JobEditorEngineOnlyModeToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.JobEditorEngineOnlyModeToolStripMenuItem.Text = "Job Editor - Engine Only Mode" ' 'EPTPJobEditorToolStripMenuItem ' Me.EPTPJobEditorToolStripMenuItem.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_VECTO Me.EPTPJobEditorToolStripMenuItem.Name = "EPTPJobEditorToolStripMenuItem" - Me.EPTPJobEditorToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.EPTPJobEditorToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.EPTPJobEditorToolStripMenuItem.Text = "VTP Job Editor" ' 'VEHEditorToolStripMenuItem ' Me.VEHEditorToolStripMenuItem.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_VEH Me.VEHEditorToolStripMenuItem.Name = "VEHEditorToolStripMenuItem" - Me.VEHEditorToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.VEHEditorToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.VEHEditorToolStripMenuItem.Text = "Vehicle Editor" ' 'EngineEditorToolStripMenuItem ' Me.EngineEditorToolStripMenuItem.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_ENG Me.EngineEditorToolStripMenuItem.Name = "EngineEditorToolStripMenuItem" - Me.EngineEditorToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.EngineEditorToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.EngineEditorToolStripMenuItem.Text = "Engine Editor" ' 'GearboxEditorToolStripMenuItem ' Me.GearboxEditorToolStripMenuItem.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_GBX Me.GearboxEditorToolStripMenuItem.Name = "GearboxEditorToolStripMenuItem" - Me.GearboxEditorToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.GearboxEditorToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.GearboxEditorToolStripMenuItem.Text = "Gearbox Editor" ' 'GraphToolStripMenuItem ' Me.GraphToolStripMenuItem.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_Graph Me.GraphToolStripMenuItem.Name = "GraphToolStripMenuItem" - Me.GraphToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.GraphToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.GraphToolStripMenuItem.Text = "Graph" ' 'ToolStripSeparator6 ' Me.ToolStripSeparator6.Name = "ToolStripSeparator6" - Me.ToolStripSeparator6.Size = New System.Drawing.Size(259, 6) + Me.ToolStripSeparator6.Size = New System.Drawing.Size(251, 6) ' 'OpenLogToolStripMenuItem ' Me.OpenLogToolStripMenuItem.Name = "OpenLogToolStripMenuItem" - Me.OpenLogToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.OpenLogToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.OpenLogToolStripMenuItem.Text = "Open Log" ' 'SettingsToolStripMenuItem ' Me.SettingsToolStripMenuItem.Name = "SettingsToolStripMenuItem" - Me.SettingsToolStripMenuItem.Size = New System.Drawing.Size(262, 30) + Me.SettingsToolStripMenuItem.Size = New System.Drawing.Size(254, 22) Me.SettingsToolStripMenuItem.Text = "Settings" ' 'ToolStripDrDnBtInfo diff --git a/VECTO/Input Files/ElectricMachine.vb b/VECTO/Input Files/ElectricMachine.vb index 72740e0b4b..6c0136cbb9 100644 --- a/VECTO/Input Files/ElectricMachine.vb +++ b/VECTO/Input Files/ElectricMachine.vb @@ -17,12 +17,11 @@ Public Class ElectricMachine public VoltageLevelLow As Double Private ReadOnly _fullLoadCurvePathLow As SubPath - Private ReadOnly _dragCurvePathLow As SubPath + Private ReadOnly _dragCurvePath As SubPath Private ReadOnly _efficiencyMapLow As SubPath public VoltageLevelHigh as Double Private ReadOnly _fullLoadCurvePathHi As SubPath - Private ReadOnly _dragCurvePathHi As SubPath Private ReadOnly _efficiencyMapHi As SubPath ''' <summary> @@ -54,12 +53,11 @@ Public Class ElectricMachine _filePath = "" _fullLoadCurvePathLow = New SubPath - _dragCurvePathLow = New SubPath() + _dragCurvePath = New SubPath() _efficiencyMapLow = New SubPath() _fullLoadCurvePathHi = New SubPath - _dragCurvePathHi = New SubPath() - _efficiencyMapHi = New SubPath() + _efficiencyMapHi = New SubPath() SetDefault() End Sub @@ -213,17 +211,17 @@ Public Class ElectricMachine Return VectoCSVFile.Read(_fullLoadCurvePathLow.FullPath) End Get End Property - protected ReadOnly Property DragCurvLow As TableData - Get - If Not File.Exists(_dragCurvePathLow.FullPath) Then _ - Throw New VectoException("Drag Curve is missing or invalid") - Return VectoCSVFile.Read(_dragCurvePathLow.FullPath) - End Get - End Property + 'protected ReadOnly Property DragCurvLow As TableData + ' Get + ' If Not File.Exists(_dragCurvePathLow.FullPath) Then _ + ' Throw New VectoException("Drag Curve is missing or invalid") + ' Return VectoCSVFile.Read(_dragCurvePathLow.FullPath) + ' End Get + 'End Property protected ReadOnly Property EfficiencyMapLow As TableData Get If Not File.Exists(_efficiencyMapLow.FullPath) Then _ - Throw New VectoException("Drag Curve is missing or invalid") + Throw New VectoException("EfficiencyMap is missing or invalid") Return VectoCSVFile.Read(_efficiencyMapLow.FullPath) End Get End Property @@ -234,17 +232,17 @@ Public Class ElectricMachine Return VectoCSVFile.Read(_fullLoadCurvePathHi.FullPath) End Get End Property - protected ReadOnly Property DragCurvHi As TableData - Get - If Not File.Exists(_dragCurvePathHi.FullPath) Then _ - Throw New VectoException("Drag Curve is missing or invalid") - Return VectoCSVFile.Read(_dragCurvePathHi.FullPath) - End Get - End Property + 'protected ReadOnly Property DragCurvHi As TableData + ' Get + ' If Not File.Exists(_dragCurvePathHi.FullPath) Then _ + ' Throw New VectoException("Drag Curve is missing or invalid") + ' Return VectoCSVFile.Read(_dragCurvePathHi.FullPath) + ' End Get + 'End Property protected ReadOnly Property EfficiencyMapHi As TableData Get If Not File.Exists(_efficiencyMapHi.FullPath) Then _ - Throw New VectoException("Drag Curve is missing or invalid") + Throw New VectoException("EfficiencyMap is missing or invalid") Return VectoCSVFile.Read(_efficiencyMapHi.FullPath) End Get End Property @@ -255,17 +253,23 @@ Public Class ElectricMachine New ElectricMotorVoltageLevel() With { .VoltageLevel = VoltageLevelLow.SI(of Volt), .EfficiencyMap = EfficiencyMapLow, - .DragCurve = DragCurvLow, .FullLoadCurve = FullLoadCurveLow}, New ElectricMotorVoltageLevel() With { .VoltageLevel = VoltageLevelHigh.SI(of Volt), .EfficiencyMap = EfficiencyMapHi, - .DragCurve = DragCurvHi, .FullLoadCurve = FullLoadCurveHi} } End Get End Property + Public ReadOnly Property DragCurve As TableData Implements IElectricMotorDeclarationInputData.DragCurve + Get + If Not File.Exists(_dragCurvePath.FullPath) Then _ + Throw New VectoException("Drag Curve is missing or invalid") + Return VectoCSVFile.Read(_dragCurvePath.FullPath) + End Get + end Property + Public ReadOnly Property Inertia As KilogramSquareMeter Implements IElectricMotorDeclarationInputData.Inertia Get Return MotorInertia.SI(Of KilogramSquareMeter) @@ -317,16 +321,16 @@ Public Class ElectricMachine End Set End Property - Public Property PathDragLow(Optional ByVal original As Boolean = False) As String + Public Property PathDrag(Optional ByVal original As Boolean = False) As String Get If original Then - Return _dragCurvePathLow.OriginalPath + Return _dragCurvePath.OriginalPath Else - Return _dragCurvePathLow.FullPath + Return _dragCurvePath.FullPath End If End Get Set(ByVal value As String) - _dragCurvePathLow.Init(_myPath, value) + _dragCurvePath.Init(_myPath, value) End Set End Property @@ -356,18 +360,6 @@ Public Class ElectricMachine End Set End Property - Public Property PathDragHi(Optional ByVal original As Boolean = False) As String - Get - If original Then - Return _dragCurvePathHi.OriginalPath - Else - Return _dragCurvePathHi.FullPath - End If - End Get - Set(ByVal value As String) - _dragCurvePathHi.Init(_myPath, value) - End Set - End Property Public Property PathMapHi(Optional ByVal original As Boolean = False) As String Get diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 5aca52896b..0a2ea94fe7 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -1043,6 +1043,7 @@ Public Class ElectricMachineWrapper Public ReadOnly Property DigestValue As DigestData Implements IComponentInputData.DigestValue Public ReadOnly Property VoltageLevels As IList(Of IElectricMotorVoltageLevel) Implements IElectricMotorDeclarationInputData.VoltageLevels + Public ReadOnly Property DragCurve As TableData Implements IElectricMotorDeclarationInputData.DragCurve Public ReadOnly Property Inertia As KilogramSquareMeter Implements IElectricMotorDeclarationInputData.Inertia Public ReadOnly Property OverloadTime As Second Implements IElectricMotorDeclarationInputData.OverloadTime Public ReadOnly Property ContinuousTorqueSpeed As PerSecond Implements IElectricMotorDeclarationInputData.ContinuousTorqueSpeed diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index d8d748873f..f1f03f28f8 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -713,6 +713,8 @@ namespace TUGraz.VectoCommon.InputData { IList<IElectricMotorVoltageLevel> VoltageLevels { get; } + TableData DragCurve { get; } + KilogramSquareMeter Inertia { get; } Second OverloadTime { get; } @@ -734,8 +736,6 @@ namespace TUGraz.VectoCommon.InputData TableData FullLoadCurve { get; } - TableData DragCurve { get; } - TableData EfficiencyMap { get; } } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs index 2e537cda6e..111a8cc108 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Configuration; using System.Linq; using Newtonsoft.Json.Linq; using TUGraz.VectoCommon.InputData; @@ -7,10 +8,19 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Impl; +using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.FileIO.JSON { + public class JSONElectricMotorV4 : JSONElectricMotorV3 + { + public JSONElectricMotorV4(JObject data, string filename, bool tolerateMissing = false) : base(data, filename, tolerateMissing) { } + + public override TableData DragCurve => ReadTableData(Body.GetEx<string>("DragCurve"), "ElectricMotor DragCurve"); + + } + public class JSONElectricMotorV3 : JSONElectricMotorV2 { public JSONElectricMotorV3(JObject data, string filename, bool tolerateMissing = false) : base(data, filename, tolerateMissing) { } @@ -22,11 +32,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON return Body["VoltageLevels"].Select(entry => new ElectricMotorVoltageLevel() { VoltageLevel = entry.GetEx<double>("Voltage").SI<Volt>(), EfficiencyMap = ReadTableData(entry.GetEx<string>("EfficiencyMap"), "ElectricMotor Map"), - DragCurve = ReadTableData(entry.GetEx<string>("DragCurve"), "ElectricMotor DragCurve"), + //DragCurve = ReadTableData(entry.GetEx<string>("DragCurve"), "ElectricMotor DragCurve"), FullLoadCurve = ReadTableData(entry.GetEx<string>("FullLoadCurve"), "ElectricMotor FullLoadCurve") }).Cast<IElectricMotorVoltageLevel>().ToList(); } + public override TableData DragCurve=> Body["VoltageLevels"].Select(x => ReadTableData(x.GetEx<string>("DragCurve"), "ElectricMotor DragCurve")).First(); + + #endregion } @@ -64,13 +77,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON new ElectricMotorVoltageLevel() { VoltageLevel = 0.SI<Volt>(), EfficiencyMap = ReadTableData(Body.GetEx<string>("EfficiencyMap"), "ElectricMotor Map"), - DragCurve = ReadTableData(Body.GetEx<string>("DragCurve"), "ElectricMotor DragCurve"), + //DragCurve = ReadTableData(Body.GetEx<string>("DragCurve"), "ElectricMotor DragCurve"), FullLoadCurve = ReadTableData(Body.GetEx<string>("FullLoadCurve"), "ElectricMotor FullLoadCurve") }, new ElectricMotorVoltageLevel() { VoltageLevel = 1e9.SI<Volt>(), EfficiencyMap = ReadTableData(Body.GetEx<string>("EfficiencyMap"), "ElectricMotor Map"), - DragCurve = ReadTableData(Body.GetEx<string>("DragCurve"), "ElectricMotor DragCurve"), + //DragCurve = ReadTableData(Body.GetEx<string>("DragCurve"), "ElectricMotor DragCurve"), FullLoadCurve = ReadTableData(Body.GetEx<string>("FullLoadCurve"), "ElectricMotor FullLoadCurve") }, }; @@ -78,15 +91,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public DigestData DigestValue => null; - public virtual TableData FullLoadCurve => ReadTableData(Body.GetEx<string>("FullLoadCurve"), "ElectricMotor FullLoadCurve"); + //public virtual TableData FullLoadCurve => ReadTableData(Body.GetEx<string>("FullLoadCurve"), "ElectricMotor FullLoadCurve"); public virtual TableData DragCurve => ReadTableData(Body.GetEx<string>("DragCurve"), "ElectricMotor DragCurve"); - public virtual TableData EfficiencyMap => ReadTableData(Body.GetEx<string>("EfficiencyMap"), "ElectricMotor Map"); + //public virtual TableData EfficiencyMap => ReadTableData(Body.GetEx<string>("EfficiencyMap"), "ElectricMotor Map"); public virtual KilogramSquareMeter Inertia => Body.GetEx<double>("Inertia").SI<KilogramSquareMeter>(); - public virtual Joule OverloadBuffer => Body.GetValueOrDefault<double>("ThermalOverloadBuffer")?.SI(Unit.SI.Mega.Joule).Cast<Joule>() ?? 1e18.SI<Joule>(); + //public virtual Joule OverloadBuffer => Body.GetValueOrDefault<double>("ThermalOverloadBuffer")?.SI(Unit.SI.Mega.Joule).Cast<Joule>() ?? 1e18.SI<Joule>(); public virtual double OverloadRecoveryFactor => Body.GetValueOrDefault<double>("ThermalOverloadRecoveryFactor") ?? 0.9; diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs index 4e9c56a7f2..08573d70a7 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs @@ -214,6 +214,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON return new JSONElectricMotorV2(json, filename, tolerateMissing); case 3: return new JSONElectricMotorV3(json, filename, tolerateMissing); + case 4: + return new JSONElectricMotorV4(json, filename, tolerateMissing); default: throw new VectoException("ElectricMotor-File: Unsupported FileVersion. Got {0}", version); } diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs index 2468d3d0bd..386b4c6ff0 100644 --- a/VectoCore/VectoCore/InputData/Impl/InputData.cs +++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs @@ -299,7 +299,7 @@ namespace TUGraz.VectoCore.InputData.Impl public Volt VoltageLevel { get; internal set; } public TableData FullLoadCurve { get; internal set; } - public TableData DragCurve { get; internal set; } + //public TableData DragCurve { get; internal set; } public TableData EfficiencyMap { get; internal set; } #endregion diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index 8b613d79b1..e803c63d34 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -889,7 +889,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter voltageLevels.Add(new ElectricMotorVoltageLevelData() { Voltage = entry.VoltageLevel, FullLoadCurve = fullLoadCurveCombined, - DragCurve = ElectricMotorDragCurveReader.Create(entry.DragCurve, count), + //DragCurve = ElectricMotorDragCurveReader.Create(entry.DragCurve, count), EfficiencyMap = ElectricMotorMapReader.Create(entry.EfficiencyMap, count), }); } @@ -901,6 +901,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter return new ElectricMotorData() { EfficiencyData = new VoltageLevelData() { VoltageLevels = voltageLevels}, + DragCurve = ElectricMotorDragCurveReader.Create(motorData.DragCurve, count), Inertia = motorData.Inertia, ContinuousTorque = motorData.ContinuousTorque * count, ContinuousTorqueSpeed = motorData.ContinuousTorqueSpeed, diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs index 67ec469a5d..91e17a240c 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs @@ -41,6 +41,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data [ValidateObject] public VoltageLevelData EfficiencyData { get; internal set; } + + [ValidateObject] + public DragCurve DragCurve { get; internal set; } } public class VoltageLevelData @@ -54,12 +57,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data _maxSpeed ?? (_maxSpeed = VoltageLevels .Min(v => VectoMath.Min(v.EfficiencyMap.MaxSpeed, v.FullLoadCurve.MaxSpeed))); - public NewtonMeter LookupDragTorque(Volt voltage, PerSecond avgSpeed) { - var (a, b) = GetSection(voltage); - return VectoMath.Interpolate(a.Voltage, b.Voltage, - a.DragCurve.Lookup(avgSpeed), b.DragCurve.Lookup(avgSpeed), voltage); - } - + public NewtonMeter EfficiencyMapLookupTorque(Volt voltage, Watt electricPower, PerSecond avgSpeed, NewtonMeter maxEmTorque) { if (avgSpeed.IsGreaterOrEqual(MaxSpeed)) { @@ -157,9 +155,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data [ValidateObject] public ElectricMotorFullLoadCurve FullLoadCurve { get; internal set; } - [ValidateObject] - public DragCurve DragCurve { get; internal set; } - [ValidateObject] public EfficiencyMap EfficiencyMap { get; internal set; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs index 8a5429fb40..c9c30009eb 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs @@ -77,7 +77,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public Watt DragPower(Volt volt, PerSecond electricMotorSpeed) { - return ModelData.EfficiencyData.LookupDragTorque(volt, electricMotorSpeed) * electricMotorSpeed; + return ModelData.DragCurve.Lookup(electricMotorSpeed) * electricMotorSpeed; } public Watt MaxPowerDrive(Volt volt, PerSecond electricMotorSpeed) @@ -260,7 +260,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl // no electric system or EM shall be off - apply drag only // if EM is off, calculate EM drag torque 'forward' to be applied on drivetrain // add inertia, drag is positive - emTorque = ModelData.EfficiencyData.LookupDragTorque(voltage, avgEmSpeed) + inertiaTorqueEm; + emTorque = ModelData.DragCurve.Lookup(avgEmSpeed) + inertiaTorqueEm; emTorqueDt = ConvertEmTorqueToDrivetrain(avgEmSpeed, emTorque); emOff = true; } @@ -274,7 +274,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl emTorqueMap = null; } - var electricPower = emOff || (ModelData.EfficiencyData.LookupDragTorque(voltage, avgEmSpeed) + inertiaTorqueEm).IsEqual(emTorque, 1e-3.SI<NewtonMeter>()) + var electricPower = emOff || (ModelData.DragCurve.Lookup(avgEmSpeed) + inertiaTorqueEm).IsEqual(emTorque, 1e-3.SI<NewtonMeter>()) ? 0.SI<Watt>() : ModelData.EfficiencyData .LookupElectricPower(voltage, avgEmSpeed, emTorqueMap, DataBus.ExecutionMode != ExecutionMode.Declaration) @@ -409,7 +409,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } var maxBatRecuperationTorque = maxBatPower.IsEqual(0, 1e-3) - ? ModelData.EfficiencyData.LookupDragTorque(volt, avgSpeed) + ? ModelData.DragCurve.Lookup(avgSpeed) : ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque); var maxTorqueRecuperate = VectoMath.Min(maxEmTorque, maxBatRecuperationTorque); if (maxTorqueRecuperate < 0) { @@ -437,7 +437,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } var maxBatDriveTorque = maxBatPower.IsEqual(0, 1e-3) - ? ModelData.EfficiencyData.LookupDragTorque(volt, avgSpeed) + ? ModelData.DragCurve.Lookup(avgSpeed) : ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque); var maxTorqueDrive = VectoMath.Max(maxEmTorque, maxBatDriveTorque); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs index 9264e039e3..0683ea1db8 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs @@ -1871,7 +1871,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var emDriveTorque = DataBus.ElectricMotorInfo(emPos).GetTorqueForElectricPower(voltage, emDrivePower, firstResponse.ElectricMotor.AngularVelocity, dt); var emDragTorque = ModelData.ElectricMachinesData.First(x => x.Item1 == emPos).Item2 - .EfficiencyData.LookupDragTorque(voltage, firstResponse.ElectricMotor.AngularVelocity); + .DragCurve.Lookup(firstResponse.ElectricMotor.AngularVelocity); if (emDriveTorque != null && emDriveTorque.IsBetween( firstResponse.ElectricMotor.MaxRecuperationTorque, firstResponse.ElectricMotor.MaxDriveTorque) && diff --git a/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs index ff256764d9..e8eea0d5a7 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs @@ -11,6 +11,7 @@ using TUGraz.VectoCommon.OutputData; using TUGraz.VectoCore; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.SimulationComponent.Data; public class JSONFileWriter : IOutputFileWriter { @@ -34,7 +35,7 @@ public class JSONFileWriter : IOutputFileWriter private const int VectoVTPJobFormatVersion = 4; - private const int ElectricMotorFormatVersion = 3; + private const int ElectricMotorFormatVersion = 4; private const int REESSFormatVersion = 1; @@ -89,13 +90,14 @@ public class JSONFileWriter : IOutputFileWriter body.Add("OverloadTorqueSpeed", electricMachine.OverloadTestSpeed.AsRPM); body.Add("OverloadTime", electricMachine.OverloadTime.Value()); body.Add("ThermalOverloadRecoveryFactor", electricMachine.OverloadRecoveryFactor); + body.Add("DragCurve", GetRelativePath(electricMachine.DragCurve.Source, Path.GetDirectoryName(filename))); var vlevels = new List<Dictionary<string, object>>(); foreach (var entry in electricMachine.VoltageLevels) { var vlevel = new Dictionary<string, object>(); vlevel.Add("Voltage", entry.VoltageLevel.Value()); vlevel.Add("FullLoadCurve", GetRelativePath(entry.FullLoadCurve.Source, Path.GetDirectoryName(filename))); - vlevel.Add("DragCurve", GetRelativePath(entry.DragCurve.Source, Path.GetDirectoryName(filename))); + //vlevel.Add("DragCurve", GetRelativePath(entry.DragCurve.Source, Path.GetDirectoryName(filename))); vlevel.Add("EfficiencyMap", GetRelativePath(entry.EfficiencyMap.Source, Path.GetDirectoryName(filename))); vlevels.Add(vlevel); } diff --git a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs index ce7a39972d..fff7330b5f 100644 --- a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs +++ b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs @@ -140,6 +140,12 @@ namespace TUGraz.VectoCore.Tests.FileIO var daa = new EngineeringDataAdapter(); var emData = daa.CreateElectricMachines(inputProvider.ElectricMachines, null).First().Item2; + + Assert.AreEqual(26, emData.DragCurve.Lookup(2000.RPMtoRad()).Value()); + Assert.AreEqual(33, emData.DragCurve.Lookup(2000.RPMtoRad()).Value()); + Assert.AreEqual(29.5, emData.DragCurve.Lookup(2000.RPMtoRad()).Value()); + Assert.AreEqual(31.25, emData.DragCurve.Lookup(2000.RPMtoRad()).Value()); + var em = emData.EfficiencyData; Assert.AreEqual(-334.2300, em.FullLoadDriveTorque(400.SI<Volt>(), 2000.RPMtoRad()).Value()); @@ -152,11 +158,6 @@ namespace TUGraz.VectoCore.Tests.FileIO Assert.AreEqual(370.153, em.FullGenerationTorque(500.SI<Volt>(), 2000.RPMtoRad()).Value()); Assert.AreEqual(388.1145, em.FullGenerationTorque(550.SI<Volt>(), 2000.RPMtoRad()).Value()); - Assert.AreEqual(26, em.LookupDragTorque(400.SI<Volt>(), 2000.RPMtoRad()).Value()); - Assert.AreEqual(33, em.LookupDragTorque(600.SI<Volt>(), 2000.RPMtoRad()).Value()); - Assert.AreEqual(29.5, em.LookupDragTorque(500.SI<Volt>(), 2000.RPMtoRad()).Value()); - Assert.AreEqual(31.25, em.LookupDragTorque(550.SI<Volt>(), 2000.RPMtoRad()).Value()); - Assert.AreEqual(-101.760, em.EfficiencyMapLookupTorque(400.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3); Assert.AreEqual(-115.1818, em.EfficiencyMapLookupTorque(600.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3); Assert.AreEqual(14.5383, em.EfficiencyMapLookupTorque(500.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3); diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs index f8861e6e38..fce37835be 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs @@ -276,7 +276,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var response = motor.Request(absTime, dt, torque.SI<NewtonMeter>(), speed.RPMtoRad()); Assert.IsInstanceOf<ResponseSuccess>(response); - var dragTorque = data.First().Item2.EfficiencyData.VoltageLevels.First().DragCurve.Lookup(speed.RPMtoRad()); + var dragTorque = data.First().Item2.DragCurve.Lookup(speed.RPMtoRad()); var enginePower = speed.RPMtoRad() * (torque.SI<NewtonMeter>() + dragTorque); var motorMechPower = dragTorque * speed.RPMtoRad(); Assert.AreEqual(enginePower.Value(), response.Engine.PowerRequest.Value(), 1e-6); -- GitLab