diff --git a/.gitignore b/.gitignore index b28bbafcb4d2a0cd8ee3e51f5d51f193d7c94e6a..c6bd82666dc58816bf38a74bb24c6c789340fe7c 100644 --- a/.gitignore +++ b/.gitignore @@ -209,3 +209,5 @@ EPTP/ 201*-VECTO-*.zip Documentation/VehiclesReleaseComparisonDeclarationMode/tmp/ .vs/ +**/dev/*.vmod +**/dev/*.vsum diff --git a/VECTO.sln.DotSettings b/VECTO.sln.DotSettings index cc03e9861fa264a3fd2ba8d605348c53754e323e..f44930e081d4657e2c2edac6d6afb629bc10181c 100644 --- a/VECTO.sln.DotSettings +++ b/VECTO.sln.DotSettings @@ -43,6 +43,7 @@ <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NS/@EntryIndexedValue">NS</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PT/@EntryIndexedValue">PT</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PTO/@EntryIndexedValue">PTO</s:String> + <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RESS/@EntryIndexedValue">RESS</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RP/@EntryIndexedValue">RP</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SI/@EntryIndexedValue">SI</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VTP/@EntryIndexedValue">VTP</s:String> @@ -118,4 +119,5 @@ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EFormat_002ESettingsUpgrade_002EAlignmentTabFillStyleMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EJavaScript_002ECodeStyle_002ESettingsUpgrade_002EJsParsFormattingSettingsUpgrader/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EJavaScript_002ECodeStyle_002ESettingsUpgrade_002EJsWrapperSettingsUpgrader/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EXml_002ECodeStyle_002EFormatSettingsUpgrade_002EXmlMoveToCommonFormatterSettingsUpgrade/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> + <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EXml_002ECodeStyle_002EFormatSettingsUpgrade_002EXmlMoveToCommonFormatterSettingsUpgrade/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/UserDictionary/Words/=RESS/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> diff --git a/VECTO/File Browser/FileBrowserModule.vb b/VECTO/File Browser/FileBrowserModule.vb index 7109cce430ce55f9e07136c855bd986f5066473e..1b908b59c11283a56305ec8d558095cbbe92cf90 100644 --- a/VECTO/File Browser/FileBrowserModule.vb +++ b/VECTO/File Browser/FileBrowserModule.vb @@ -58,5 +58,5 @@ Public Module FileBrowserModule Public ModalResultsFileBrowser As FileBrowser Public ElectricMotorFileBrowser As FileBrowser - Public BatteryFileBrowser As FileBrowser + Public REESSFileBrowser As FileBrowser End Module diff --git a/VECTO/GUI/BatteryForm.Designer.vb b/VECTO/GUI/BatteryForm.Designer.vb index 20061845e6032a91a005a4a5700d89abd388555d..8943d974cc743e151c9c9fc4c55ad155ac2bee6f 100644 --- a/VECTO/GUI/BatteryForm.Designer.vb +++ b/VECTO/GUI/BatteryForm.Designer.vb @@ -82,6 +82,27 @@ Partial Class BatteryForm Me.lblCFactor = New System.Windows.Forms.Label() Me.lblCFactorUnit = New System.Windows.Forms.Label() Me.tbCFactor = New System.Windows.Forms.TextBox() + Me.FlowLayoutPanel1 = New System.Windows.Forms.FlowLayoutPanel() + Me.pnBattery = New System.Windows.Forms.Panel() + Me.pnSuperCap = New System.Windows.Forms.Panel() + Me.pnSuperCapMaxV = New System.Windows.Forms.Panel() + Me.lblSuperCapMaxV = New System.Windows.Forms.Label() + Me.lblSuperCapMaxVUnit = New System.Windows.Forms.Label() + Me.tbSuperCapMaxV = New System.Windows.Forms.TextBox() + Me.pnSuperCapMinV = New System.Windows.Forms.Panel() + Me.lblSuperCapMinV = New System.Windows.Forms.Label() + Me.lblSuperCapMinVUnit = New System.Windows.Forms.Label() + Me.tbSuperCapMinV = New System.Windows.Forms.TextBox() + Me.pnSuperCapResistance = New System.Windows.Forms.Panel() + Me.lblSuperCapRi = New System.Windows.Forms.Label() + Me.lblSuperCapRiUnit = New System.Windows.Forms.Label() + Me.tbSuperCapRi = New System.Windows.Forms.TextBox() + Me.pnSuperCapCapacity = New System.Windows.Forms.Panel() + Me.lblSuperCapCapacity = New System.Windows.Forms.Label() + Me.lblSuperCapCapacityUnit = New System.Windows.Forms.Label() + Me.tbSuperCapCapacity = New System.Windows.Forms.TextBox() + Me.cbRESSType = New System.Windows.Forms.ComboBox() + Me.lblRessType = New System.Windows.Forms.Label() Me.ToolStrip1.SuspendLayout Me.StatusStrip1.SuspendLayout CType(Me.PictureBox1,System.ComponentModel.ISupportInitialize).BeginInit @@ -91,30 +112,40 @@ Partial Class BatteryForm Me.Panel1.SuspendLayout Me.Panel2.SuspendLayout Me.Panel3.SuspendLayout + Me.FlowLayoutPanel1.SuspendLayout + Me.pnBattery.SuspendLayout + Me.pnSuperCap.SuspendLayout + Me.pnSuperCapMaxV.SuspendLayout + Me.pnSuperCapMinV.SuspendLayout + Me.pnSuperCapResistance.SuspendLayout + Me.pnSuperCapCapacity.SuspendLayout Me.SuspendLayout ' 'tbCapacity ' - Me.tbCapacity.Location = New System.Drawing.Point(90, 4) + Me.tbCapacity.Location = New System.Drawing.Point(135, 6) + Me.tbCapacity.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbCapacity.Name = "tbCapacity" - Me.tbCapacity.Size = New System.Drawing.Size(57, 20) + Me.tbCapacity.Size = New System.Drawing.Size(84, 26) Me.tbCapacity.TabIndex = 3 ' 'lblCapacityUnit ' Me.lblCapacityUnit.AutoSize = true - Me.lblCapacityUnit.Location = New System.Drawing.Point(153, 7) + Me.lblCapacityUnit.Location = New System.Drawing.Point(230, 11) + Me.lblCapacityUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblCapacityUnit.Name = "lblCapacityUnit" - Me.lblCapacityUnit.Size = New System.Drawing.Size(26, 13) + Me.lblCapacityUnit.Size = New System.Drawing.Size(37, 20) Me.lblCapacityUnit.TabIndex = 24 Me.lblCapacityUnit.Text = "[Ah]" ' 'lblCapacity ' Me.lblCapacity.AutoSize = true - Me.lblCapacity.Location = New System.Drawing.Point(3, 7) + Me.lblCapacity.Location = New System.Drawing.Point(4, 11) + Me.lblCapacity.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblCapacity.Name = "lblCapacity" - Me.lblCapacity.Size = New System.Drawing.Size(48, 13) + Me.lblCapacity.Size = New System.Drawing.Size(70, 20) Me.lblCapacity.TabIndex = 0 Me.lblCapacity.Text = "Capacity" ' @@ -122,9 +153,10 @@ Partial Class BatteryForm ' 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, 303) + Me.ButCancel.Location = New System.Drawing.Point(1216, 482) + Me.ButCancel.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.ButCancel.Name = "ButCancel" - Me.ButCancel.Size = New System.Drawing.Size(75, 23) + Me.ButCancel.Size = New System.Drawing.Size(112, 35) Me.ButCancel.TabIndex = 13 Me.ButCancel.Text = "Cancel" Me.ButCancel.UseVisualStyleBackColor = true @@ -132,9 +164,10 @@ Partial Class BatteryForm '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, 303) + Me.ButOK.Location = New System.Drawing.Point(1095, 482) + Me.ButOK.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.ButOK.Name = "ButOK" - Me.ButOK.Size = New System.Drawing.Size(75, 23) + Me.ButOK.Size = New System.Drawing.Size(112, 35) Me.ButOK.TabIndex = 12 Me.ButOK.Text = "Save" Me.ButOK.UseVisualStyleBackColor = true @@ -142,10 +175,12 @@ Partial Class BatteryForm 'ToolStrip1 ' Me.ToolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden + Me.ToolStrip1.ImageScalingSize = New System.Drawing.Size(24, 24) Me.ToolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripBtNew, Me.ToolStripBtOpen, Me.ToolStripBtSave, Me.ToolStripBtSaveAs, Me.ToolStripSeparator3, Me.ToolStripBtSendTo, Me.ToolStripSeparator1, Me.ToolStripButton1}) Me.ToolStrip1.Location = New System.Drawing.Point(0, 0) Me.ToolStrip1.Name = "ToolStrip1" - Me.ToolStrip1.Size = New System.Drawing.Size(898, 25) + Me.ToolStrip1.Padding = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.ToolStrip1.Size = New System.Drawing.Size(1347, 33) Me.ToolStrip1.TabIndex = 30 Me.ToolStrip1.Text = "ToolStrip1" ' @@ -155,7 +190,7 @@ Partial Class BatteryForm Me.ToolStripBtNew.Image = Global.TUGraz.VECTO.My.Resources.Resources.blue_document_icon Me.ToolStripBtNew.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtNew.Name = "ToolStripBtNew" - Me.ToolStripBtNew.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtNew.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtNew.Text = "ToolStripButton1" Me.ToolStripBtNew.ToolTipText = "New" ' @@ -165,7 +200,7 @@ Partial Class BatteryForm Me.ToolStripBtOpen.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon Me.ToolStripBtOpen.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtOpen.Name = "ToolStripBtOpen" - Me.ToolStripBtOpen.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtOpen.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtOpen.Text = "ToolStripButton1" Me.ToolStripBtOpen.ToolTipText = "Open..." ' @@ -175,7 +210,7 @@ Partial Class BatteryForm Me.ToolStripBtSave.Image = Global.TUGraz.VECTO.My.Resources.Resources.Actions_document_save_icon Me.ToolStripBtSave.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtSave.Name = "ToolStripBtSave" - Me.ToolStripBtSave.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtSave.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtSave.Text = "ToolStripButton1" Me.ToolStripBtSave.ToolTipText = "Save" ' @@ -185,14 +220,14 @@ Partial Class BatteryForm Me.ToolStripBtSaveAs.Image = Global.TUGraz.VECTO.My.Resources.Resources.Actions_document_save_as_icon Me.ToolStripBtSaveAs.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtSaveAs.Name = "ToolStripBtSaveAs" - Me.ToolStripBtSaveAs.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtSaveAs.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtSaveAs.Text = "ToolStripButton1" Me.ToolStripBtSaveAs.ToolTipText = "Save As..." ' 'ToolStripSeparator3 ' Me.ToolStripSeparator3.Name = "ToolStripSeparator3" - Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 25) + Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 33) ' 'ToolStripBtSendTo ' @@ -200,14 +235,14 @@ Partial Class BatteryForm Me.ToolStripBtSendTo.Image = Global.TUGraz.VECTO.My.Resources.Resources.export_icon Me.ToolStripBtSendTo.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtSendTo.Name = "ToolStripBtSendTo" - Me.ToolStripBtSendTo.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtSendTo.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtSendTo.Text = "Send to Job Editor" Me.ToolStripBtSendTo.ToolTipText = "Send to Job Editor" ' 'ToolStripSeparator1 ' Me.ToolStripSeparator1.Name = "ToolStripSeparator1" - Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 25) + Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 33) ' 'ToolStripButton1 ' @@ -215,15 +250,17 @@ Partial Class BatteryForm Me.ToolStripButton1.Image = Global.TUGraz.VECTO.My.Resources.Resources.Help_icon Me.ToolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripButton1.Name = "ToolStripButton1" - Me.ToolStripButton1.Size = New System.Drawing.Size(23, 22) + Me.ToolStripButton1.Size = New System.Drawing.Size(34, 28) Me.ToolStripButton1.Text = "Help" ' 'StatusStrip1 ' + 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, 329) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 524) Me.StatusStrip1.Name = "StatusStrip1" - Me.StatusStrip1.Size = New System.Drawing.Size(898, 22) + Me.StatusStrip1.Padding = New System.Windows.Forms.Padding(2, 0, 21, 0) + Me.StatusStrip1.Size = New System.Drawing.Size(1347, 32) Me.StatusStrip1.SizingGrip = false Me.StatusStrip1.TabIndex = 37 Me.StatusStrip1.Text = "StatusStrip1" @@ -231,22 +268,24 @@ Partial Class BatteryForm 'LbStatus ' Me.LbStatus.Name = "LbStatus" - Me.LbStatus.Size = New System.Drawing.Size(39, 17) + Me.LbStatus.Size = New System.Drawing.Size(60, 25) Me.LbStatus.Text = "Status" ' 'tbMakeModel ' - Me.tbMakeModel.Location = New System.Drawing.Point(109, 82) + Me.tbMakeModel.Location = New System.Drawing.Point(164, 126) + Me.tbMakeModel.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbMakeModel.Name = "tbMakeModel" - Me.tbMakeModel.Size = New System.Drawing.Size(370, 20) + Me.tbMakeModel.Size = New System.Drawing.Size(553, 26) Me.tbMakeModel.TabIndex = 0 ' 'lblMakeModel ' Me.lblMakeModel.AutoSize = true - Me.lblMakeModel.Location = New System.Drawing.Point(16, 85) + Me.lblMakeModel.Location = New System.Drawing.Point(24, 131) + Me.lblMakeModel.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblMakeModel.Name = "lblMakeModel" - Me.lblMakeModel.Size = New System.Drawing.Size(87, 13) + Me.lblMakeModel.Size = New System.Drawing.Size(126, 20) Me.lblMakeModel.TabIndex = 11 Me.lblMakeModel.Text = "Make and Model" ' @@ -254,28 +293,30 @@ Partial Class BatteryForm ' Me.PictureBox1.BackColor = System.Drawing.Color.White Me.PictureBox1.Image = Global.TUGraz.VECTO.My.Resources.Resources.VECTO_ENG - Me.PictureBox1.Location = New System.Drawing.Point(0, 28) + Me.PictureBox1.Location = New System.Drawing.Point(0, 43) + Me.PictureBox1.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(502, 40) + Me.PictureBox1.Size = New System.Drawing.Size(753, 62) Me.PictureBox1.TabIndex = 39 Me.PictureBox1.TabStop = false ' 'CmOpenFile ' + Me.CmOpenFile.ImageScalingSize = New System.Drawing.Size(24, 24) Me.CmOpenFile.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OpenWithToolStripMenuItem, Me.ShowInFolderToolStripMenuItem}) Me.CmOpenFile.Name = "CmOpenFile" - Me.CmOpenFile.Size = New System.Drawing.Size(153, 48) + Me.CmOpenFile.Size = New System.Drawing.Size(203, 68) ' 'OpenWithToolStripMenuItem ' Me.OpenWithToolStripMenuItem.Name = "OpenWithToolStripMenuItem" - Me.OpenWithToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.OpenWithToolStripMenuItem.Size = New System.Drawing.Size(202, 32) Me.OpenWithToolStripMenuItem.Text = "Open with ..." ' 'ShowInFolderToolStripMenuItem ' Me.ShowInFolderToolStripMenuItem.Name = "ShowInFolderToolStripMenuItem" - Me.ShowInFolderToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.ShowInFolderToolStripMenuItem.Size = New System.Drawing.Size(202, 32) Me.ShowInFolderToolStripMenuItem.Text = "Show in Folder" ' 'pnInertia @@ -283,33 +324,37 @@ Partial Class BatteryForm Me.pnInertia.Controls.Add(Me.lblCapacity) Me.pnInertia.Controls.Add(Me.lblCapacityUnit) Me.pnInertia.Controls.Add(Me.tbCapacity) - Me.pnInertia.Location = New System.Drawing.Point(12, 108) + Me.pnInertia.Location = New System.Drawing.Point(4, 5) + Me.pnInertia.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.pnInertia.Name = "pnInertia" - Me.pnInertia.Size = New System.Drawing.Size(212, 30) + Me.pnInertia.Size = New System.Drawing.Size(318, 46) Me.pnInertia.TabIndex = 3 ' 'tbSoCCurve ' - Me.tbSoCCurve.Location = New System.Drawing.Point(12, 219) + Me.tbSoCCurve.Location = New System.Drawing.Point(4, 176) + Me.tbSoCCurve.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbSoCCurve.Name = "tbSoCCurve" - Me.tbSoCCurve.Size = New System.Drawing.Size(434, 20) + Me.tbSoCCurve.Size = New System.Drawing.Size(649, 26) Me.tbSoCCurve.TabIndex = 5 ' 'lblSoCCurve ' Me.lblSoCCurve.AutoSize = true - Me.lblSoCCurve.Location = New System.Drawing.Point(12, 203) + Me.lblSoCCurve.Location = New System.Drawing.Point(4, 151) + Me.lblSoCCurve.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblSoCCurve.Name = "lblSoCCurve" - Me.lblSoCCurve.Size = New System.Drawing.Size(58, 13) + Me.lblSoCCurve.Size = New System.Drawing.Size(85, 20) Me.lblSoCCurve.TabIndex = 38 Me.lblSoCCurve.Text = "SoC Curve" ' 'btnBrowseSoCCurve ' Me.btnBrowseSoCCurve.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon - Me.btnBrowseSoCCurve.Location = New System.Drawing.Point(446, 217) + Me.btnBrowseSoCCurve.Location = New System.Drawing.Point(655, 173) + Me.btnBrowseSoCCurve.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnBrowseSoCCurve.Name = "btnBrowseSoCCurve" - Me.btnBrowseSoCCurve.Size = New System.Drawing.Size(24, 24) + Me.btnBrowseSoCCurve.Size = New System.Drawing.Size(36, 37) Me.btnBrowseSoCCurve.TabIndex = 6 Me.btnBrowseSoCCurve.TabStop = false Me.btnBrowseSoCCurve.UseVisualStyleBackColor = true @@ -317,9 +362,10 @@ Partial Class BatteryForm 'btnSoCCurveOpen ' Me.btnSoCCurveOpen.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small - Me.btnSoCCurveOpen.Location = New System.Drawing.Point(469, 217) + Me.btnSoCCurveOpen.Location = New System.Drawing.Point(690, 173) + Me.btnSoCCurveOpen.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnSoCCurveOpen.Name = "btnSoCCurveOpen" - Me.btnSoCCurveOpen.Size = New System.Drawing.Size(24, 24) + Me.btnSoCCurveOpen.Size = New System.Drawing.Size(36, 37) Me.btnSoCCurveOpen.TabIndex = 7 Me.btnSoCCurveOpen.TabStop = false Me.btnSoCCurveOpen.UseVisualStyleBackColor = true @@ -327,9 +373,10 @@ Partial Class BatteryForm 'btnRiMapOpen ' Me.btnRiMapOpen.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small - Me.btnRiMapOpen.Location = New System.Drawing.Point(469, 263) + Me.btnRiMapOpen.Location = New System.Drawing.Point(690, 244) + Me.btnRiMapOpen.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnRiMapOpen.Name = "btnRiMapOpen" - Me.btnRiMapOpen.Size = New System.Drawing.Size(24, 24) + Me.btnRiMapOpen.Size = New System.Drawing.Size(36, 37) Me.btnRiMapOpen.TabIndex = 42 Me.btnRiMapOpen.TabStop = false Me.btnRiMapOpen.UseVisualStyleBackColor = true @@ -337,9 +384,10 @@ Partial Class BatteryForm 'btnBrowseRiMap ' Me.btnBrowseRiMap.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon - Me.btnBrowseRiMap.Location = New System.Drawing.Point(446, 263) + Me.btnBrowseRiMap.Location = New System.Drawing.Point(655, 244) + Me.btnBrowseRiMap.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnBrowseRiMap.Name = "btnBrowseRiMap" - Me.btnBrowseRiMap.Size = New System.Drawing.Size(24, 24) + Me.btnBrowseRiMap.Size = New System.Drawing.Size(36, 37) Me.btnBrowseRiMap.TabIndex = 41 Me.btnBrowseRiMap.TabStop = false Me.btnBrowseRiMap.UseVisualStyleBackColor = true @@ -347,17 +395,19 @@ Partial Class BatteryForm 'lblRiMap ' Me.lblRiMap.AutoSize = true - Me.lblRiMap.Location = New System.Drawing.Point(12, 249) + Me.lblRiMap.Location = New System.Drawing.Point(4, 222) + Me.lblRiMap.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblRiMap.Name = "lblRiMap" - Me.lblRiMap.Size = New System.Drawing.Size(129, 13) + Me.lblRiMap.Size = New System.Drawing.Size(192, 20) Me.lblRiMap.TabIndex = 43 Me.lblRiMap.Text = "Internal Resistance Curve" ' 'tbRiCurve ' - Me.tbRiCurve.Location = New System.Drawing.Point(12, 265) + Me.tbRiCurve.Location = New System.Drawing.Point(4, 247) + Me.tbRiCurve.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbRiCurve.Name = "tbRiCurve" - Me.tbRiCurve.Size = New System.Drawing.Size(434, 20) + Me.tbRiCurve.Size = New System.Drawing.Size(649, 26) Me.tbRiCurve.TabIndex = 40 ' 'lblTitle @@ -365,9 +415,10 @@ Partial Class BatteryForm 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(119, 35) + Me.lblTitle.Location = New System.Drawing.Point(178, 54) + Me.lblTitle.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblTitle.Name = "lblTitle" - Me.lblTitle.Size = New System.Drawing.Size(266, 29) + Me.lblTitle.Size = New System.Drawing.Size(395, 40) Me.lblTitle.TabIndex = 48 Me.lblTitle.Text = "Electric Energy Storage" ' @@ -375,9 +426,10 @@ Partial Class BatteryForm ' Me.PicBox.BackColor = System.Drawing.Color.LightGray Me.PicBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.PicBox.Location = New System.Drawing.Point(508, 28) + Me.PicBox.Location = New System.Drawing.Point(762, 43) + Me.PicBox.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.PicBox.Name = "PicBox" - Me.PicBox.Size = New System.Drawing.Size(382, 266) + Me.PicBox.Size = New System.Drawing.Size(572, 408) Me.PicBox.TabIndex = 49 Me.PicBox.TabStop = false ' @@ -386,34 +438,38 @@ Partial Class BatteryForm Me.Panel1.Controls.Add(Me.lblMinSoc) Me.Panel1.Controls.Add(Me.lblSoCMinUnit) Me.Panel1.Controls.Add(Me.tbSoCMin) - Me.Panel1.Location = New System.Drawing.Point(12, 144) + Me.Panel1.Location = New System.Drawing.Point(4, 61) + Me.Panel1.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(212, 30) + Me.Panel1.Size = New System.Drawing.Size(318, 46) Me.Panel1.TabIndex = 25 ' 'lblMinSoc ' Me.lblMinSoc.AutoSize = true - Me.lblMinSoc.Location = New System.Drawing.Point(3, 7) + Me.lblMinSoc.Location = New System.Drawing.Point(4, 11) + Me.lblMinSoc.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblMinSoc.Name = "lblMinSoc" - Me.lblMinSoc.Size = New System.Drawing.Size(46, 13) + Me.lblMinSoc.Size = New System.Drawing.Size(69, 20) Me.lblMinSoc.TabIndex = 0 Me.lblMinSoc.Text = "SoC min" ' 'lblSoCMinUnit ' Me.lblSoCMinUnit.AutoSize = true - Me.lblSoCMinUnit.Location = New System.Drawing.Point(153, 7) + Me.lblSoCMinUnit.Location = New System.Drawing.Point(230, 11) + Me.lblSoCMinUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblSoCMinUnit.Name = "lblSoCMinUnit" - Me.lblSoCMinUnit.Size = New System.Drawing.Size(21, 13) + Me.lblSoCMinUnit.Size = New System.Drawing.Size(31, 20) Me.lblSoCMinUnit.TabIndex = 24 Me.lblSoCMinUnit.Text = "[%]" ' 'tbSoCMin ' - Me.tbSoCMin.Location = New System.Drawing.Point(90, 4) + Me.tbSoCMin.Location = New System.Drawing.Point(135, 6) + Me.tbSoCMin.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbSoCMin.Name = "tbSoCMin" - Me.tbSoCMin.Size = New System.Drawing.Size(57, 20) + Me.tbSoCMin.Size = New System.Drawing.Size(84, 26) Me.tbSoCMin.TabIndex = 3 ' 'Panel2 @@ -421,34 +477,38 @@ Partial Class BatteryForm Me.Panel2.Controls.Add(Me.lblSoCMax) Me.Panel2.Controls.Add(Me.lblSoCMaxUnit) Me.Panel2.Controls.Add(Me.tbSoCMax) - Me.Panel2.Location = New System.Drawing.Point(234, 144) + Me.Panel2.Location = New System.Drawing.Point(337, 61) + Me.Panel2.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.Panel2.Name = "Panel2" - Me.Panel2.Size = New System.Drawing.Size(212, 30) + Me.Panel2.Size = New System.Drawing.Size(318, 46) Me.Panel2.TabIndex = 25 ' 'lblSoCMax ' Me.lblSoCMax.AutoSize = true - Me.lblSoCMax.Location = New System.Drawing.Point(3, 7) + Me.lblSoCMax.Location = New System.Drawing.Point(4, 11) + Me.lblSoCMax.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblSoCMax.Name = "lblSoCMax" - Me.lblSoCMax.Size = New System.Drawing.Size(49, 13) + Me.lblSoCMax.Size = New System.Drawing.Size(73, 20) Me.lblSoCMax.TabIndex = 0 Me.lblSoCMax.Text = "SoC max" ' 'lblSoCMaxUnit ' Me.lblSoCMaxUnit.AutoSize = true - Me.lblSoCMaxUnit.Location = New System.Drawing.Point(153, 7) + Me.lblSoCMaxUnit.Location = New System.Drawing.Point(230, 11) + Me.lblSoCMaxUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblSoCMaxUnit.Name = "lblSoCMaxUnit" - Me.lblSoCMaxUnit.Size = New System.Drawing.Size(21, 13) + Me.lblSoCMaxUnit.Size = New System.Drawing.Size(31, 20) Me.lblSoCMaxUnit.TabIndex = 24 Me.lblSoCMaxUnit.Text = "[%]" ' 'tbSoCMax ' - Me.tbSoCMax.Location = New System.Drawing.Point(90, 4) + Me.tbSoCMax.Location = New System.Drawing.Point(135, 6) + Me.tbSoCMax.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbSoCMax.Name = "tbSoCMax" - Me.tbSoCMax.Size = New System.Drawing.Size(57, 20) + Me.tbSoCMax.Size = New System.Drawing.Size(84, 26) Me.tbSoCMax.TabIndex = 3 ' 'Panel3 @@ -456,66 +516,275 @@ Partial Class BatteryForm Me.Panel3.Controls.Add(Me.lblCFactor) Me.Panel3.Controls.Add(Me.lblCFactorUnit) Me.Panel3.Controls.Add(Me.tbCFactor) - Me.Panel3.Location = New System.Drawing.Point(234, 108) + Me.Panel3.Location = New System.Drawing.Point(337, 5) + Me.Panel3.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.Panel3.Name = "Panel3" - Me.Panel3.Size = New System.Drawing.Size(212, 30) + Me.Panel3.Size = New System.Drawing.Size(318, 46) Me.Panel3.TabIndex = 25 ' 'lblCFactor ' Me.lblCFactor.AutoSize = true - Me.lblCFactor.Location = New System.Drawing.Point(3, 7) + Me.lblCFactor.Location = New System.Drawing.Point(4, 11) + Me.lblCFactor.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblCFactor.Name = "lblCFactor" - Me.lblCFactor.Size = New System.Drawing.Size(47, 13) + Me.lblCFactor.Size = New System.Drawing.Size(71, 20) Me.lblCFactor.TabIndex = 0 Me.lblCFactor.Text = "C-Factor" ' 'lblCFactorUnit ' Me.lblCFactorUnit.AutoSize = true - Me.lblCFactorUnit.Location = New System.Drawing.Point(153, 7) + Me.lblCFactorUnit.Location = New System.Drawing.Point(230, 11) + Me.lblCFactorUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblCFactorUnit.Name = "lblCFactorUnit" - Me.lblCFactorUnit.Size = New System.Drawing.Size(16, 13) + Me.lblCFactorUnit.Size = New System.Drawing.Size(39, 20) Me.lblCFactorUnit.TabIndex = 24 - Me.lblCFactorUnit.Text = "[-]" + Me.lblCFactorUnit.Text = "[1/h]" ' 'tbCFactor ' - Me.tbCFactor.Location = New System.Drawing.Point(90, 4) + Me.tbCFactor.Location = New System.Drawing.Point(135, 6) + Me.tbCFactor.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbCFactor.Name = "tbCFactor" - Me.tbCFactor.Size = New System.Drawing.Size(57, 20) + Me.tbCFactor.Size = New System.Drawing.Size(84, 26) Me.tbCFactor.TabIndex = 3 ' + 'FlowLayoutPanel1 + ' + Me.FlowLayoutPanel1.Controls.Add(Me.pnBattery) + Me.FlowLayoutPanel1.Controls.Add(Me.pnSuperCap) + Me.FlowLayoutPanel1.Location = New System.Drawing.Point(12, 210) + Me.FlowLayoutPanel1.Name = "FlowLayoutPanel1" + Me.FlowLayoutPanel1.Size = New System.Drawing.Size(743, 309) + Me.FlowLayoutPanel1.TabIndex = 50 + ' + 'pnBattery + ' + Me.pnBattery.Controls.Add(Me.pnInertia) + Me.pnBattery.Controls.Add(Me.tbSoCCurve) + Me.pnBattery.Controls.Add(Me.Panel3) + Me.pnBattery.Controls.Add(Me.lblSoCCurve) + Me.pnBattery.Controls.Add(Me.Panel2) + Me.pnBattery.Controls.Add(Me.btnBrowseSoCCurve) + Me.pnBattery.Controls.Add(Me.Panel1) + Me.pnBattery.Controls.Add(Me.btnSoCCurveOpen) + Me.pnBattery.Controls.Add(Me.tbRiCurve) + Me.pnBattery.Controls.Add(Me.lblRiMap) + Me.pnBattery.Controls.Add(Me.btnRiMapOpen) + Me.pnBattery.Controls.Add(Me.btnBrowseRiMap) + Me.pnBattery.Location = New System.Drawing.Point(3, 3) + Me.pnBattery.Name = "pnBattery" + Me.pnBattery.Size = New System.Drawing.Size(734, 290) + Me.pnBattery.TabIndex = 0 + ' + 'pnSuperCap + ' + Me.pnSuperCap.Controls.Add(Me.pnSuperCapMaxV) + Me.pnSuperCap.Controls.Add(Me.pnSuperCapMinV) + Me.pnSuperCap.Controls.Add(Me.pnSuperCapResistance) + Me.pnSuperCap.Controls.Add(Me.pnSuperCapCapacity) + Me.pnSuperCap.Location = New System.Drawing.Point(3, 299) + Me.pnSuperCap.Name = "pnSuperCap" + Me.pnSuperCap.Size = New System.Drawing.Size(734, 118) + Me.pnSuperCap.TabIndex = 1 + ' + 'pnSuperCapMaxV + ' + Me.pnSuperCapMaxV.Controls.Add(Me.lblSuperCapMaxV) + Me.pnSuperCapMaxV.Controls.Add(Me.lblSuperCapMaxVUnit) + Me.pnSuperCapMaxV.Controls.Add(Me.tbSuperCapMaxV) + Me.pnSuperCapMaxV.Location = New System.Drawing.Point(337, 61) + Me.pnSuperCapMaxV.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.pnSuperCapMaxV.Name = "pnSuperCapMaxV" + Me.pnSuperCapMaxV.Size = New System.Drawing.Size(318, 46) + Me.pnSuperCapMaxV.TabIndex = 26 + ' + 'lblSuperCapMaxV + ' + Me.lblSuperCapMaxV.AutoSize = true + Me.lblSuperCapMaxV.Location = New System.Drawing.Point(4, 11) + Me.lblSuperCapMaxV.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblSuperCapMaxV.Name = "lblSuperCapMaxV" + Me.lblSuperCapMaxV.Size = New System.Drawing.Size(97, 20) + Me.lblSuperCapMaxV.TabIndex = 0 + Me.lblSuperCapMaxV.Text = "Max Voltage" + ' + 'lblSuperCapMaxVUnit + ' + Me.lblSuperCapMaxVUnit.AutoSize = true + Me.lblSuperCapMaxVUnit.Location = New System.Drawing.Point(257, 13) + Me.lblSuperCapMaxVUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblSuperCapMaxVUnit.Name = "lblSuperCapMaxVUnit" + Me.lblSuperCapMaxVUnit.Size = New System.Drawing.Size(28, 20) + Me.lblSuperCapMaxVUnit.TabIndex = 24 + Me.lblSuperCapMaxVUnit.Text = "[V]" + ' + 'tbSuperCapMaxV + ' + Me.tbSuperCapMaxV.Location = New System.Drawing.Point(162, 8) + Me.tbSuperCapMaxV.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.tbSuperCapMaxV.Name = "tbSuperCapMaxV" + Me.tbSuperCapMaxV.Size = New System.Drawing.Size(84, 26) + Me.tbSuperCapMaxV.TabIndex = 3 + ' + 'pnSuperCapMinV + ' + Me.pnSuperCapMinV.Controls.Add(Me.lblSuperCapMinV) + Me.pnSuperCapMinV.Controls.Add(Me.lblSuperCapMinVUnit) + Me.pnSuperCapMinV.Controls.Add(Me.tbSuperCapMinV) + Me.pnSuperCapMinV.Location = New System.Drawing.Point(4, 61) + Me.pnSuperCapMinV.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.pnSuperCapMinV.Name = "pnSuperCapMinV" + Me.pnSuperCapMinV.Size = New System.Drawing.Size(318, 46) + Me.pnSuperCapMinV.TabIndex = 25 + ' + 'lblSuperCapMinV + ' + Me.lblSuperCapMinV.AutoSize = true + Me.lblSuperCapMinV.Location = New System.Drawing.Point(4, 11) + Me.lblSuperCapMinV.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblSuperCapMinV.Name = "lblSuperCapMinV" + Me.lblSuperCapMinV.Size = New System.Drawing.Size(93, 20) + Me.lblSuperCapMinV.TabIndex = 0 + Me.lblSuperCapMinV.Text = "Min Voltage" + ' + 'lblSuperCapMinVUnit + ' + Me.lblSuperCapMinVUnit.AutoSize = true + Me.lblSuperCapMinVUnit.Location = New System.Drawing.Point(230, 11) + Me.lblSuperCapMinVUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblSuperCapMinVUnit.Name = "lblSuperCapMinVUnit" + Me.lblSuperCapMinVUnit.Size = New System.Drawing.Size(28, 20) + Me.lblSuperCapMinVUnit.TabIndex = 24 + Me.lblSuperCapMinVUnit.Text = "[V]" + ' + 'tbSuperCapMinV + ' + Me.tbSuperCapMinV.Location = New System.Drawing.Point(135, 6) + Me.tbSuperCapMinV.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.tbSuperCapMinV.Name = "tbSuperCapMinV" + Me.tbSuperCapMinV.Size = New System.Drawing.Size(84, 26) + Me.tbSuperCapMinV.TabIndex = 3 + ' + 'pnSuperCapResistance + ' + Me.pnSuperCapResistance.Controls.Add(Me.lblSuperCapRi) + Me.pnSuperCapResistance.Controls.Add(Me.lblSuperCapRiUnit) + Me.pnSuperCapResistance.Controls.Add(Me.tbSuperCapRi) + Me.pnSuperCapResistance.Location = New System.Drawing.Point(337, 5) + Me.pnSuperCapResistance.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.pnSuperCapResistance.Name = "pnSuperCapResistance" + Me.pnSuperCapResistance.Size = New System.Drawing.Size(318, 46) + Me.pnSuperCapResistance.TabIndex = 25 + ' + 'lblSuperCapRi + ' + Me.lblSuperCapRi.AutoSize = true + Me.lblSuperCapRi.Location = New System.Drawing.Point(4, 11) + Me.lblSuperCapRi.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblSuperCapRi.Name = "lblSuperCapRi" + Me.lblSuperCapRi.Size = New System.Drawing.Size(147, 20) + Me.lblSuperCapRi.TabIndex = 0 + Me.lblSuperCapRi.Text = "Internal Resistance" + ' + 'lblSuperCapRiUnit + ' + Me.lblSuperCapRiUnit.AutoSize = true + Me.lblSuperCapRiUnit.Location = New System.Drawing.Point(257, 13) + Me.lblSuperCapRiUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblSuperCapRiUnit.Name = "lblSuperCapRiUnit" + Me.lblSuperCapRiUnit.Size = New System.Drawing.Size(29, 20) + Me.lblSuperCapRiUnit.TabIndex = 24 + Me.lblSuperCapRiUnit.Text = "[Ω]" + ' + 'tbSuperCapRi + ' + Me.tbSuperCapRi.Location = New System.Drawing.Point(162, 8) + Me.tbSuperCapRi.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.tbSuperCapRi.Name = "tbSuperCapRi" + Me.tbSuperCapRi.Size = New System.Drawing.Size(84, 26) + Me.tbSuperCapRi.TabIndex = 3 + ' + 'pnSuperCapCapacity + ' + Me.pnSuperCapCapacity.Controls.Add(Me.lblSuperCapCapacity) + Me.pnSuperCapCapacity.Controls.Add(Me.lblSuperCapCapacityUnit) + Me.pnSuperCapCapacity.Controls.Add(Me.tbSuperCapCapacity) + Me.pnSuperCapCapacity.Location = New System.Drawing.Point(4, 5) + Me.pnSuperCapCapacity.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.pnSuperCapCapacity.Name = "pnSuperCapCapacity" + Me.pnSuperCapCapacity.Size = New System.Drawing.Size(318, 46) + Me.pnSuperCapCapacity.TabIndex = 4 + ' + 'lblSuperCapCapacity + ' + Me.lblSuperCapCapacity.AutoSize = true + Me.lblSuperCapCapacity.Location = New System.Drawing.Point(4, 11) + Me.lblSuperCapCapacity.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblSuperCapCapacity.Name = "lblSuperCapCapacity" + Me.lblSuperCapCapacity.Size = New System.Drawing.Size(70, 20) + Me.lblSuperCapCapacity.TabIndex = 0 + Me.lblSuperCapCapacity.Text = "Capacity" + ' + 'lblSuperCapCapacityUnit + ' + Me.lblSuperCapCapacityUnit.AutoSize = true + Me.lblSuperCapCapacityUnit.Location = New System.Drawing.Point(230, 11) + Me.lblSuperCapCapacityUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblSuperCapCapacityUnit.Name = "lblSuperCapCapacityUnit" + Me.lblSuperCapCapacityUnit.Size = New System.Drawing.Size(27, 20) + Me.lblSuperCapCapacityUnit.TabIndex = 24 + Me.lblSuperCapCapacityUnit.Text = "[F]" + ' + 'tbSuperCapCapacity + ' + Me.tbSuperCapCapacity.Location = New System.Drawing.Point(135, 6) + Me.tbSuperCapCapacity.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.tbSuperCapCapacity.Name = "tbSuperCapCapacity" + Me.tbSuperCapCapacity.Size = New System.Drawing.Size(84, 26) + Me.tbSuperCapCapacity.TabIndex = 3 + ' + 'cbRESSType + ' + Me.cbRESSType.FormattingEnabled = true + Me.cbRESSType.Location = New System.Drawing.Point(166, 165) + Me.cbRESSType.Name = "cbRESSType" + Me.cbRESSType.Size = New System.Drawing.Size(211, 28) + Me.cbRESSType.TabIndex = 51 + ' + 'lblRessType + ' + Me.lblRessType.AutoSize = true + Me.lblRessType.Location = New System.Drawing.Point(24, 168) + Me.lblRessType.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblRessType.Name = "lblRessType" + Me.lblRessType.Size = New System.Drawing.Size(103, 20) + Me.lblRessType.TabIndex = 52 + Me.lblRessType.Text = "REESS Type" + ' 'BatteryForm ' Me.AcceptButton = Me.ButOK - Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!) + Me.AutoScaleDimensions = New System.Drawing.SizeF(9!, 20!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.CancelButton = Me.ButCancel - Me.ClientSize = New System.Drawing.Size(898, 351) - Me.Controls.Add(Me.Panel3) - Me.Controls.Add(Me.Panel2) - Me.Controls.Add(Me.Panel1) + Me.ClientSize = New System.Drawing.Size(1347, 556) + Me.Controls.Add(Me.lblRessType) + Me.Controls.Add(Me.cbRESSType) + Me.Controls.Add(Me.FlowLayoutPanel1) Me.Controls.Add(Me.PicBox) Me.Controls.Add(Me.lblTitle) - Me.Controls.Add(Me.btnRiMapOpen) - Me.Controls.Add(Me.btnBrowseRiMap) - Me.Controls.Add(Me.lblRiMap) - Me.Controls.Add(Me.tbRiCurve) - Me.Controls.Add(Me.pnInertia) - Me.Controls.Add(Me.btnSoCCurveOpen) Me.Controls.Add(Me.PictureBox1) - Me.Controls.Add(Me.btnBrowseSoCCurve) - Me.Controls.Add(Me.lblSoCCurve) Me.Controls.Add(Me.StatusStrip1) Me.Controls.Add(Me.ToolStrip1) Me.Controls.Add(Me.ButCancel) - Me.Controls.Add(Me.tbSoCCurve) Me.Controls.Add(Me.ButOK) Me.Controls.Add(Me.lblMakeModel) Me.Controls.Add(Me.tbMakeModel) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.Icon = CType(resources.GetObject("$this.Icon"),System.Drawing.Icon) + Me.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.MaximizeBox = false Me.Name = "BatteryForm" Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide @@ -536,6 +805,18 @@ Partial Class BatteryForm Me.Panel2.PerformLayout Me.Panel3.ResumeLayout(false) Me.Panel3.PerformLayout + Me.FlowLayoutPanel1.ResumeLayout(false) + Me.pnBattery.ResumeLayout(false) + Me.pnBattery.PerformLayout + Me.pnSuperCap.ResumeLayout(false) + Me.pnSuperCapMaxV.ResumeLayout(false) + Me.pnSuperCapMaxV.PerformLayout + Me.pnSuperCapMinV.ResumeLayout(false) + Me.pnSuperCapMinV.PerformLayout + Me.pnSuperCapResistance.ResumeLayout(false) + Me.pnSuperCapResistance.PerformLayout + Me.pnSuperCapCapacity.ResumeLayout(false) + Me.pnSuperCapCapacity.PerformLayout Me.ResumeLayout(false) Me.PerformLayout @@ -585,4 +866,25 @@ End Sub Friend WithEvents lblCFactor As Label Friend WithEvents lblCFactorUnit As Label Friend WithEvents tbCFactor As TextBox + Friend WithEvents FlowLayoutPanel1 As FlowLayoutPanel + Friend WithEvents pnBattery As Panel + Friend WithEvents pnSuperCap As Panel + Friend WithEvents cbRESSType As ComboBox + Friend WithEvents lblRessType As Label + Friend WithEvents pnSuperCapMaxV As Panel + Friend WithEvents lblSuperCapMaxV As Label + Friend WithEvents lblSuperCapMaxVUnit As Label + Friend WithEvents tbSuperCapMaxV As TextBox + Friend WithEvents pnSuperCapMinV As Panel + Friend WithEvents lblSuperCapMinV As Label + Friend WithEvents lblSuperCapMinVUnit As Label + Friend WithEvents tbSuperCapMinV As TextBox + Friend WithEvents pnSuperCapResistance As Panel + Friend WithEvents lblSuperCapRi As Label + Friend WithEvents lblSuperCapRiUnit As Label + Friend WithEvents tbSuperCapRi As TextBox + Friend WithEvents pnSuperCapCapacity As Panel + Friend WithEvents lblSuperCapCapacity As Label + Friend WithEvents lblSuperCapCapacityUnit As Label + Friend WithEvents tbSuperCapCapacity As TextBox End Class diff --git a/VECTO/GUI/BatteryForm.vb b/VECTO/GUI/BatteryForm.vb index b7902b750e3d16923fc913ae88dddb8c30649834..6a40017deffa6c6ba3e416db00ddee450e70abc9 100644 --- a/VECTO/GUI/BatteryForm.vb +++ b/VECTO/GUI/BatteryForm.vb @@ -1,4 +1,5 @@ +Imports System.Collections.Generic Imports System.Drawing.Imaging Imports System.IO Imports System.Linq @@ -34,6 +35,8 @@ Public Class BatteryForm Public JobDir As String = "" Private _changed As Boolean = False + Private ressType as REESSType + Private _contextMenuFiles As String() @@ -56,6 +59,12 @@ Public Class BatteryForm _changed = False + cbRESSType.DataSource = New List(Of object)() from{ + New With {Key .Value = REESSType.Battery, .Label = "Battery"}, + New With {Key .Value = REESSType.SuperCap, .Label = "SuperCap"} + } + cbRESSType.ValueMember = "Value" + cbRESSType.DisplayMember = "Label" NewBattery() End Sub @@ -77,9 +86,9 @@ Public Class BatteryForm End Sub Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click - If BatteryFileBrowser.OpenDialog(_batteryFile) Then + If REESSFileBrowser.OpenDialog(_batteryFile) Then Try - OpenBatteryFile(BatteryFileBrowser.Files(0)) + OpenBatteryFile(REESSFileBrowser.Files(0)) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error loading Battery File") End Try @@ -152,16 +161,15 @@ Public Class BatteryForm 'Open VENG file Public Sub OpenBatteryFile(file As String) - Dim battery As IBatteryPackEngineeringInputData - + If ChangeCheckCancel() Then Exit Sub Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file), IEngineeringInputDataProvider) - battery = inputData.JobInputData.Vehicle.Components.ElectricStorage.BatteryPack + Dim reess as IREESSPackInputData = inputData.JobInputData.Vehicle.Components.ElectricStorage.REESSPack - If Cfg.DeclMode <> battery.SavedInDeclarationMode Then + If Cfg.DeclMode <> reess.SavedInDeclarationMode Then Select Case WrongMode() Case 1 Close() @@ -173,18 +181,51 @@ Public Class BatteryForm End If Dim basePath As String = Path.GetDirectoryName(file) - tbMakeModel.Text = battery.Model - tbCapacity.Text = battery.Capacity.AsAmpHour.ToGUIFormat() + tbMakeModel.Text = reess.Model + + if (reess.StorageType = REESSType.Battery) then + pnBattery.Visible = True + pnSuperCap.Visible = False + cbRESSType.SelectedValue = REESSType.Battery + Dim battery As IBatteryPackEngineeringInputData = ctype(reess, IBatteryPackEngineeringInputData) + tbCapacity.Text = battery.Capacity.AsAmpHour.ToGUIFormat() + + tbCFactor.Text = battery.MaxCurrentFactor.ConvertToPerHour().Value.ToGUIFormat() + tbSoCMin.Text = (battery.MinSOC * 100).ToGUIFormat() + tbSoCMax.Text = (battery.MaxSOC * 100).ToGUIFormat() + + tbSoCCurve.Text = GetRelativePath(battery.VoltageCurve.Source, basePath) + tbRiCurve.Text = GetRelativePath(battery.InternalResistanceCurve.Source, basePath) + + tbSuperCapCapacity.Text = String.Empty + tbSuperCapMaxV.Text = string.Empty + tbSuperCapMinV.Text= string.Empty + tbSuperCapRi.Text= string.Empty + + Elseif reess.StorageType = REESSType.SuperCap + pnBattery.Visible = False + pnSuperCap.Visible = True + cbRESSType.SelectedValue = REESSType.SuperCap + Dim superCap As ISuperCapEngineeringInputData = ctype(reess, ISuperCapEngineeringInputData) + tbCapacity.Text = String.Empty + + tbCFactor.Text = String.Empty + tbSoCMin.Text = String.Empty + tbSoCMax.Text = String.Empty - tbCFactor.Text = battery.MaxCurrentFactor.ToGUIFormat() - tbSoCMin.Text = (battery.MinSOC * 100).ToGUIFormat() - tbSoCMax.Text = (battery.MaxSOC * 100).ToGUIFormat() + tbSoCCurve.Text = String.Empty + tbRiCurve.Text = String.Empty + + tbSuperCapCapacity.Text = superCap.Capacity.ToGUIFormat() + tbSuperCapMaxV.Text = superCap.MaxVoltage.ToGUIFormat() + tbSuperCapMinV.Text= superCap.MinVoltage.ToGUIFormat() + tbSuperCapRi.Text= superCap.InternalResistance.ToGUIFormat() + + end if - tbSoCCurve.Text = GetRelativePath(battery.VoltageCurve.Source, basePath) - tbRiCurve.Text = GetRelativePath(battery.InternalResistanceCurve.Source, basePath) DeclInit() - BatteryFileBrowser.UpdateHistory(file) + REESSFileBrowser.UpdateHistory(file) Text = GetFilenameWithoutPath(file, True) LbStatus.Text = "" _batteryFile = file @@ -197,8 +238,8 @@ Public Class BatteryForm 'Save or Save As function = true if file is saved Private Function SaveOrSaveAs(ByVal saveAs As Boolean) As Boolean If _batteryFile = "" Or saveAs Then - If BatteryFileBrowser.SaveDialog(_batteryFile) Then - _batteryFile = BatteryFileBrowser.Files(0) + If REESSFileBrowser.SaveDialog(_batteryFile) Then + _batteryFile = REESSFileBrowser.Files(0) Else Return False End If @@ -209,25 +250,22 @@ Public Class BatteryForm 'Save VENG file to given filepath. Called by SaveOrSaveAs. Private Function SaveBatteryToFile(ByVal file As String) As Boolean - Dim battery As Battery = New Battery - battery.FilePath = file + - battery.ModelName = tbMakeModel.Text - If Trim(battery.ModelName) = "" Then battery.ModelName = "Undefined" - battery.BatCapacity = tbCapacity.Text.ToDouble(0) - - battery.PathSoCCurve = tbSoCCurve.Text - battery.PathRiCurve = tbRiCurve.Text - - battery.BatMinSoc = tbSoCMin.Text.ToDouble(0) - battery.BatMaxSoc = tbSoCMax.Text.ToDouble(0) - - battery.BatCFactor = tbCFactor.Text.ToDouble(0) - - If Not battery.SaveFile Then - MsgBox("Cannot save to " & file, MsgBoxStyle.Critical) - Return False - End If + Select Case cbRESSType.SelectedValue.ToString() + Case "Battery" + dim battery As Battery = FillBattery(file) + If Not battery.SaveFile Then + MsgBox("Cannot save to " & file, MsgBoxStyle.Critical) + Return False + End If + Case "SuperCap" + dim superCap As SuperCap = FillSuperCap(file) + If Not superCap.SaveFile Then + MsgBox("Cannot save to " & file, MsgBoxStyle.Critical) + Return False + End If + End Select If AutoSendTo Then If VehicleForm.Visible Then @@ -237,7 +275,7 @@ Public Class BatteryForm End If End If - BatteryFileBrowser.UpdateHistory(file) + REESSFileBrowser.UpdateHistory(file) Text = GetFilenameWithoutPath(file, True) LbStatus.Text = "" @@ -246,6 +284,42 @@ Public Class BatteryForm Return True End Function + Private Function FillSuperCap(file As String) As SuperCap + Dim superCap As SuperCap = New SuperCap() + superCap.FilePath = file + + superCap.ModelName = tbMakeModel.Text + If Trim(superCap.ModelName) = "" Then superCap.ModelName = "Undefined" + + + superCap.Cap = tbSuperCapCapacity.Text.ToDouble(0) + superCap.Ri = _tbSuperCapRi.Text.ToDouble(0) + + superCap.MinV = _tbSuperCapMinV.Text.ToDouble(0) + superCap.MaxV = tbSuperCapMaxV.Text.ToDouble(0) + + Return superCap + End Function + + Private Function FillBattery(file As string) As Battery + Dim battery As Battery = New Battery + battery.FilePath = file + + battery.ModelName = tbMakeModel.Text + If Trim(battery.ModelName) = "" Then battery.ModelName = "Undefined" + + battery.BatCapacity = tbCapacity.Text.ToDouble(0) + + battery.PathSoCCurve = tbSoCCurve.Text + battery.PathRiCurve = tbRiCurve.Text + + battery.BatMinSoc = tbSoCMin.Text.ToDouble(0) + battery.BatMaxSoc = tbSoCMax.Text.ToDouble(0) + + battery.BatCFactor = tbCFactor.Text.ToDouble(0) + Return battery + End Function + #Region "Track changes" @@ -336,6 +410,10 @@ Public Class BatteryForm 'If Not File.Exists(_engFile) Then Exit Sub + if (ressType <> REESSType.Battery) then + Return + end if + Try Dim socFile As String = If(Not String.IsNullOrWhiteSpace(_batteryFile), Path.Combine(Path.GetDirectoryName(_batteryFile), tbSoCCurve.Text), tbSoCCurve.Text) @@ -496,4 +574,20 @@ Public Class BatteryForm UpdatePic() Change() End Sub + + Private Sub lblRessType_Click(sender As Object, e As EventArgs) Handles lblRessType.Click + + End Sub + + Private Sub cbRESSType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbRESSType.SelectedIndexChanged + If (cbRESSType.SelectedValue.Equals(REESSType.Battery)) Then + pnBattery.Visible = True + pnSuperCap.Visible = False + ressType = REESSType.Battery + Else + pnBattery.Visible = False + pnSuperCap.Visible = True + ressType = REESSType.SuperCap + End If + End Sub End Class diff --git a/VECTO/GUI/ElectricMotorForm.Designer.vb b/VECTO/GUI/ElectricMotorForm.Designer.vb index 55c25f6b0e8fb33e4a84fbaeb389ae48417dfe93..e54bab751acbbb7477e5798c6477d7232530ab62 100644 --- a/VECTO/GUI/ElectricMotorForm.Designer.vb +++ b/VECTO/GUI/ElectricMotorForm.Designer.vb @@ -74,67 +74,89 @@ Partial Class ElectricMotorForm Me.tbMaxTorque = New System.Windows.Forms.TextBox() Me.lblTitle = New System.Windows.Forms.Label() Me.PicBox = New System.Windows.Forms.PictureBox() - Me.ToolStrip1.SuspendLayout() - Me.StatusStrip1.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.CmOpenFile.SuspendLayout() - Me.pnInertia.SuspendLayout() - CType(Me.PicBox, System.ComponentModel.ISupportInitialize).BeginInit() - Me.SuspendLayout() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.lblContPwr = New System.Windows.Forms.Label() + Me.lblContPwrUnit = New System.Windows.Forms.Label() + Me.tbContPwr = New System.Windows.Forms.TextBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.lblOvlBuffer = New System.Windows.Forms.Label() + Me.lblOvlBufferUnit = New System.Windows.Forms.Label() + Me.tbOvlBuffer = New System.Windows.Forms.TextBox() + Me.Panel3 = New System.Windows.Forms.Panel() + Me.lblOvlRecovery = New System.Windows.Forms.Label() + Me.lblOvlRecoveryFactorUnit = New System.Windows.Forms.Label() + Me.tbOverloadRecoveryFactor = New System.Windows.Forms.TextBox() + Me.ToolStrip1.SuspendLayout + Me.StatusStrip1.SuspendLayout + CType(Me.PictureBox1,System.ComponentModel.ISupportInitialize).BeginInit + Me.CmOpenFile.SuspendLayout + Me.pnInertia.SuspendLayout + CType(Me.PicBox,System.ComponentModel.ISupportInitialize).BeginInit + Me.Panel1.SuspendLayout + Me.Panel2.SuspendLayout + Me.Panel3.SuspendLayout + Me.SuspendLayout ' 'tbInertia ' - Me.tbInertia.Location = New System.Drawing.Point(90, 4) + Me.tbInertia.Location = New System.Drawing.Point(163, 8) + Me.tbInertia.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbInertia.Name = "tbInertia" - Me.tbInertia.Size = New System.Drawing.Size(57, 20) + Me.tbInertia.Size = New System.Drawing.Size(84, 26) Me.tbInertia.TabIndex = 3 ' 'lblinertiaUnit ' - Me.lblinertiaUnit.AutoSize = True - Me.lblinertiaUnit.Location = New System.Drawing.Point(153, 7) + Me.lblinertiaUnit.AutoSize = true + Me.lblinertiaUnit.Location = New System.Drawing.Point(258, 13) + Me.lblinertiaUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblinertiaUnit.Name = "lblinertiaUnit" - Me.lblinertiaUnit.Size = New System.Drawing.Size(36, 13) + Me.lblinertiaUnit.Size = New System.Drawing.Size(52, 20) Me.lblinertiaUnit.TabIndex = 24 Me.lblinertiaUnit.Text = "[kgm²]" ' 'lblInertia ' - Me.lblInertia.AutoSize = True - Me.lblInertia.Location = New System.Drawing.Point(3, 7) + Me.lblInertia.AutoSize = true + Me.lblInertia.Location = New System.Drawing.Point(4, 11) + Me.lblInertia.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblInertia.Name = "lblInertia" - Me.lblInertia.Size = New System.Drawing.Size(36, 13) + Me.lblInertia.Size = New System.Drawing.Size(54, 20) Me.lblInertia.TabIndex = 0 Me.lblInertia.Text = "Inertia" ' 'ButCancel ' - Me.ButCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + 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, 313) + Me.ButCancel.Location = New System.Drawing.Point(1216, 482) + Me.ButCancel.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.ButCancel.Name = "ButCancel" - Me.ButCancel.Size = New System.Drawing.Size(75, 23) + Me.ButCancel.Size = New System.Drawing.Size(112, 35) Me.ButCancel.TabIndex = 13 Me.ButCancel.Text = "Cancel" - Me.ButCancel.UseVisualStyleBackColor = True + 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, 313) + 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(1095, 482) + Me.ButOK.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.ButOK.Name = "ButOK" - Me.ButOK.Size = New System.Drawing.Size(75, 23) + Me.ButOK.Size = New System.Drawing.Size(112, 35) Me.ButOK.TabIndex = 12 Me.ButOK.Text = "Save" - Me.ButOK.UseVisualStyleBackColor = True + Me.ButOK.UseVisualStyleBackColor = true ' 'ToolStrip1 ' Me.ToolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden + Me.ToolStrip1.ImageScalingSize = New System.Drawing.Size(24, 24) Me.ToolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripBtNew, Me.ToolStripBtOpen, Me.ToolStripBtSave, Me.ToolStripBtSaveAs, Me.ToolStripSeparator3, Me.ToolStripBtSendTo, Me.ToolStripSeparator1, Me.ToolStripButton1}) Me.ToolStrip1.Location = New System.Drawing.Point(0, 0) Me.ToolStrip1.Name = "ToolStrip1" - Me.ToolStrip1.Size = New System.Drawing.Size(898, 25) + Me.ToolStrip1.Padding = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.ToolStrip1.Size = New System.Drawing.Size(1347, 33) Me.ToolStrip1.TabIndex = 30 Me.ToolStrip1.Text = "ToolStrip1" ' @@ -144,7 +166,7 @@ Partial Class ElectricMotorForm Me.ToolStripBtNew.Image = Global.TUGraz.VECTO.My.Resources.Resources.blue_document_icon Me.ToolStripBtNew.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtNew.Name = "ToolStripBtNew" - Me.ToolStripBtNew.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtNew.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtNew.Text = "ToolStripButton1" Me.ToolStripBtNew.ToolTipText = "New" ' @@ -154,7 +176,7 @@ Partial Class ElectricMotorForm Me.ToolStripBtOpen.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon Me.ToolStripBtOpen.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtOpen.Name = "ToolStripBtOpen" - Me.ToolStripBtOpen.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtOpen.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtOpen.Text = "ToolStripButton1" Me.ToolStripBtOpen.ToolTipText = "Open..." ' @@ -164,7 +186,7 @@ Partial Class ElectricMotorForm Me.ToolStripBtSave.Image = Global.TUGraz.VECTO.My.Resources.Resources.Actions_document_save_icon Me.ToolStripBtSave.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtSave.Name = "ToolStripBtSave" - Me.ToolStripBtSave.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtSave.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtSave.Text = "ToolStripButton1" Me.ToolStripBtSave.ToolTipText = "Save" ' @@ -174,14 +196,14 @@ Partial Class ElectricMotorForm Me.ToolStripBtSaveAs.Image = Global.TUGraz.VECTO.My.Resources.Resources.Actions_document_save_as_icon Me.ToolStripBtSaveAs.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtSaveAs.Name = "ToolStripBtSaveAs" - Me.ToolStripBtSaveAs.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtSaveAs.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtSaveAs.Text = "ToolStripButton1" Me.ToolStripBtSaveAs.ToolTipText = "Save As..." ' 'ToolStripSeparator3 ' Me.ToolStripSeparator3.Name = "ToolStripSeparator3" - Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 25) + Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 33) ' 'ToolStripBtSendTo ' @@ -189,14 +211,14 @@ Partial Class ElectricMotorForm Me.ToolStripBtSendTo.Image = Global.TUGraz.VECTO.My.Resources.Resources.export_icon Me.ToolStripBtSendTo.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripBtSendTo.Name = "ToolStripBtSendTo" - Me.ToolStripBtSendTo.Size = New System.Drawing.Size(23, 22) + Me.ToolStripBtSendTo.Size = New System.Drawing.Size(34, 28) Me.ToolStripBtSendTo.Text = "Send to Job Editor" Me.ToolStripBtSendTo.ToolTipText = "Send to Job Editor" ' 'ToolStripSeparator1 ' Me.ToolStripSeparator1.Name = "ToolStripSeparator1" - Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 25) + Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 33) ' 'ToolStripButton1 ' @@ -204,38 +226,42 @@ Partial Class ElectricMotorForm Me.ToolStripButton1.Image = Global.TUGraz.VECTO.My.Resources.Resources.Help_icon Me.ToolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripButton1.Name = "ToolStripButton1" - Me.ToolStripButton1.Size = New System.Drawing.Size(23, 22) + Me.ToolStripButton1.Size = New System.Drawing.Size(34, 28) Me.ToolStripButton1.Text = "Help" ' 'StatusStrip1 ' + 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, 339) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 523) Me.StatusStrip1.Name = "StatusStrip1" - Me.StatusStrip1.Size = New System.Drawing.Size(898, 22) - Me.StatusStrip1.SizingGrip = False + Me.StatusStrip1.Padding = New System.Windows.Forms.Padding(2, 0, 21, 0) + Me.StatusStrip1.Size = New System.Drawing.Size(1347, 32) + Me.StatusStrip1.SizingGrip = false Me.StatusStrip1.TabIndex = 37 Me.StatusStrip1.Text = "StatusStrip1" ' 'LbStatus ' Me.LbStatus.Name = "LbStatus" - Me.LbStatus.Size = New System.Drawing.Size(39, 17) + Me.LbStatus.Size = New System.Drawing.Size(60, 25) Me.LbStatus.Text = "Status" ' 'tbMakeModel ' - Me.tbMakeModel.Location = New System.Drawing.Point(109, 82) + Me.tbMakeModel.Location = New System.Drawing.Point(164, 126) + Me.tbMakeModel.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbMakeModel.Name = "tbMakeModel" - Me.tbMakeModel.Size = New System.Drawing.Size(370, 20) + Me.tbMakeModel.Size = New System.Drawing.Size(553, 26) Me.tbMakeModel.TabIndex = 0 ' 'lblMakeModel ' - Me.lblMakeModel.AutoSize = True - Me.lblMakeModel.Location = New System.Drawing.Point(16, 85) + Me.lblMakeModel.AutoSize = true + Me.lblMakeModel.Location = New System.Drawing.Point(24, 131) + Me.lblMakeModel.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblMakeModel.Name = "lblMakeModel" - Me.lblMakeModel.Size = New System.Drawing.Size(87, 13) + Me.lblMakeModel.Size = New System.Drawing.Size(126, 20) Me.lblMakeModel.TabIndex = 11 Me.lblMakeModel.Text = "Make and Model" ' @@ -243,28 +269,30 @@ Partial Class ElectricMotorForm ' Me.PictureBox1.BackColor = System.Drawing.Color.White Me.PictureBox1.Image = Global.TUGraz.VECTO.My.Resources.Resources.VECTO_ENG - Me.PictureBox1.Location = New System.Drawing.Point(0, 28) + Me.PictureBox1.Location = New System.Drawing.Point(0, 43) + Me.PictureBox1.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(502, 40) + Me.PictureBox1.Size = New System.Drawing.Size(753, 62) Me.PictureBox1.TabIndex = 39 - Me.PictureBox1.TabStop = False + Me.PictureBox1.TabStop = false ' 'CmOpenFile ' + Me.CmOpenFile.ImageScalingSize = New System.Drawing.Size(24, 24) Me.CmOpenFile.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OpenWithToolStripMenuItem, Me.ShowInFolderToolStripMenuItem}) Me.CmOpenFile.Name = "CmOpenFile" - Me.CmOpenFile.Size = New System.Drawing.Size(153, 48) + Me.CmOpenFile.Size = New System.Drawing.Size(203, 68) ' 'OpenWithToolStripMenuItem ' Me.OpenWithToolStripMenuItem.Name = "OpenWithToolStripMenuItem" - Me.OpenWithToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.OpenWithToolStripMenuItem.Size = New System.Drawing.Size(202, 32) Me.OpenWithToolStripMenuItem.Text = "Open with ..." ' 'ShowInFolderToolStripMenuItem ' Me.ShowInFolderToolStripMenuItem.Name = "ShowInFolderToolStripMenuItem" - Me.ShowInFolderToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.ShowInFolderToolStripMenuItem.Size = New System.Drawing.Size(202, 32) Me.ShowInFolderToolStripMenuItem.Text = "Show in Folder" ' 'pnInertia @@ -272,127 +300,141 @@ Partial Class ElectricMotorForm Me.pnInertia.Controls.Add(Me.lblInertia) Me.pnInertia.Controls.Add(Me.lblinertiaUnit) Me.pnInertia.Controls.Add(Me.tbInertia) - Me.pnInertia.Location = New System.Drawing.Point(12, 108) + Me.pnInertia.Location = New System.Drawing.Point(18, 166) + Me.pnInertia.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.pnInertia.Name = "pnInertia" - Me.pnInertia.Size = New System.Drawing.Size(212, 30) + Me.pnInertia.Size = New System.Drawing.Size(318, 46) Me.pnInertia.TabIndex = 3 ' 'tbDragTorque ' - Me.tbDragTorque.Location = New System.Drawing.Point(12, 219) + Me.tbDragTorque.Location = New System.Drawing.Point(18, 393) + Me.tbDragTorque.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbDragTorque.Name = "tbDragTorque" - Me.tbDragTorque.Size = New System.Drawing.Size(434, 20) + Me.tbDragTorque.Size = New System.Drawing.Size(649, 26) Me.tbDragTorque.TabIndex = 5 ' 'lblDragTorque ' - Me.lblDragTorque.AutoSize = True - Me.lblDragTorque.Location = New System.Drawing.Point(12, 203) + Me.lblDragTorque.AutoSize = true + Me.lblDragTorque.Location = New System.Drawing.Point(18, 368) + Me.lblDragTorque.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblDragTorque.Name = "lblDragTorque" - Me.lblDragTorque.Size = New System.Drawing.Size(98, 13) + Me.lblDragTorque.Size = New System.Drawing.Size(143, 20) Me.lblDragTorque.TabIndex = 38 Me.lblDragTorque.Text = "Drag Torque Curve" ' 'btnBrowseDragCurve ' Me.btnBrowseDragCurve.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon - Me.btnBrowseDragCurve.Location = New System.Drawing.Point(446, 217) + Me.btnBrowseDragCurve.Location = New System.Drawing.Point(669, 390) + Me.btnBrowseDragCurve.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnBrowseDragCurve.Name = "btnBrowseDragCurve" - Me.btnBrowseDragCurve.Size = New System.Drawing.Size(24, 24) + Me.btnBrowseDragCurve.Size = New System.Drawing.Size(36, 37) Me.btnBrowseDragCurve.TabIndex = 6 - Me.btnBrowseDragCurve.TabStop = False - Me.btnBrowseDragCurve.UseVisualStyleBackColor = True + Me.btnBrowseDragCurve.TabStop = false + Me.btnBrowseDragCurve.UseVisualStyleBackColor = true ' 'btnDragCurveOpen ' Me.btnDragCurveOpen.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small - Me.btnDragCurveOpen.Location = New System.Drawing.Point(469, 217) + Me.btnDragCurveOpen.Location = New System.Drawing.Point(704, 390) + Me.btnDragCurveOpen.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnDragCurveOpen.Name = "btnDragCurveOpen" - Me.btnDragCurveOpen.Size = New System.Drawing.Size(24, 24) + Me.btnDragCurveOpen.Size = New System.Drawing.Size(36, 37) Me.btnDragCurveOpen.TabIndex = 7 - Me.btnDragCurveOpen.TabStop = False - Me.btnDragCurveOpen.UseVisualStyleBackColor = True + Me.btnDragCurveOpen.TabStop = false + Me.btnDragCurveOpen.UseVisualStyleBackColor = true ' 'btnEmMapOpen ' Me.btnEmMapOpen.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small - Me.btnEmMapOpen.Location = New System.Drawing.Point(469, 263) + Me.btnEmMapOpen.Location = New System.Drawing.Point(704, 454) + Me.btnEmMapOpen.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnEmMapOpen.Name = "btnEmMapOpen" - Me.btnEmMapOpen.Size = New System.Drawing.Size(24, 24) + Me.btnEmMapOpen.Size = New System.Drawing.Size(36, 37) Me.btnEmMapOpen.TabIndex = 42 - Me.btnEmMapOpen.TabStop = False - Me.btnEmMapOpen.UseVisualStyleBackColor = True + Me.btnEmMapOpen.TabStop = false + Me.btnEmMapOpen.UseVisualStyleBackColor = true ' 'btnBrowseEmMap ' Me.btnBrowseEmMap.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon - Me.btnBrowseEmMap.Location = New System.Drawing.Point(446, 263) + Me.btnBrowseEmMap.Location = New System.Drawing.Point(669, 454) + Me.btnBrowseEmMap.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnBrowseEmMap.Name = "btnBrowseEmMap" - Me.btnBrowseEmMap.Size = New System.Drawing.Size(24, 24) + Me.btnBrowseEmMap.Size = New System.Drawing.Size(36, 37) Me.btnBrowseEmMap.TabIndex = 41 - Me.btnBrowseEmMap.TabStop = False - Me.btnBrowseEmMap.UseVisualStyleBackColor = True + Me.btnBrowseEmMap.TabStop = false + Me.btnBrowseEmMap.UseVisualStyleBackColor = true ' 'lblEmMap ' - Me.lblEmMap.AutoSize = True - Me.lblEmMap.Location = New System.Drawing.Point(12, 249) + Me.lblEmMap.AutoSize = true + Me.lblEmMap.Location = New System.Drawing.Point(18, 432) + Me.lblEmMap.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblEmMap.Name = "lblEmMap" - Me.lblEmMap.Size = New System.Drawing.Size(163, 13) + Me.lblEmMap.Size = New System.Drawing.Size(242, 20) Me.lblEmMap.TabIndex = 43 Me.lblEmMap.Text = "Electric Power Consumption Map" ' 'tbMap ' - Me.tbMap.Location = New System.Drawing.Point(12, 265) + Me.tbMap.Location = New System.Drawing.Point(18, 457) + Me.tbMap.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbMap.Name = "tbMap" - Me.tbMap.Size = New System.Drawing.Size(434, 20) + Me.tbMap.Size = New System.Drawing.Size(649, 26) Me.tbMap.TabIndex = 40 ' 'btnMaxTorqueCurveOpen ' Me.btnMaxTorqueCurveOpen.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small - Me.btnMaxTorqueCurveOpen.Location = New System.Drawing.Point(469, 169) + Me.btnMaxTorqueCurveOpen.Location = New System.Drawing.Point(704, 328) + Me.btnMaxTorqueCurveOpen.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnMaxTorqueCurveOpen.Name = "btnMaxTorqueCurveOpen" - Me.btnMaxTorqueCurveOpen.Size = New System.Drawing.Size(24, 24) + Me.btnMaxTorqueCurveOpen.Size = New System.Drawing.Size(36, 37) Me.btnMaxTorqueCurveOpen.TabIndex = 46 - Me.btnMaxTorqueCurveOpen.TabStop = False - Me.btnMaxTorqueCurveOpen.UseVisualStyleBackColor = True + Me.btnMaxTorqueCurveOpen.TabStop = false + Me.btnMaxTorqueCurveOpen.UseVisualStyleBackColor = true ' 'btnBrowseMaxTorque ' Me.btnBrowseMaxTorque.Image = Global.TUGraz.VECTO.My.Resources.Resources.Open_icon - Me.btnBrowseMaxTorque.Location = New System.Drawing.Point(446, 169) + Me.btnBrowseMaxTorque.Location = New System.Drawing.Point(669, 328) + Me.btnBrowseMaxTorque.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnBrowseMaxTorque.Name = "btnBrowseMaxTorque" - Me.btnBrowseMaxTorque.Size = New System.Drawing.Size(24, 24) + Me.btnBrowseMaxTorque.Size = New System.Drawing.Size(36, 37) Me.btnBrowseMaxTorque.TabIndex = 45 - Me.btnBrowseMaxTorque.TabStop = False - Me.btnBrowseMaxTorque.UseVisualStyleBackColor = True + Me.btnBrowseMaxTorque.TabStop = false + Me.btnBrowseMaxTorque.UseVisualStyleBackColor = true ' 'lblMaxTorque ' - Me.lblMaxTorque.AutoSize = True - Me.lblMaxTorque.Location = New System.Drawing.Point(12, 155) + Me.lblMaxTorque.AutoSize = true + Me.lblMaxTorque.Location = New System.Drawing.Point(18, 306) + Me.lblMaxTorque.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblMaxTorque.Name = "lblMaxTorque" - Me.lblMaxTorque.Size = New System.Drawing.Size(222, 13) + Me.lblMaxTorque.Size = New System.Drawing.Size(325, 20) Me.lblMaxTorque.TabIndex = 47 Me.lblMaxTorque.Text = "Max Drive and Max Generation Torque Curve" ' 'tbMaxTorque ' - Me.tbMaxTorque.Location = New System.Drawing.Point(12, 171) + Me.tbMaxTorque.Location = New System.Drawing.Point(18, 331) + Me.tbMaxTorque.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.tbMaxTorque.Name = "tbMaxTorque" - Me.tbMaxTorque.Size = New System.Drawing.Size(434, 20) + Me.tbMaxTorque.Size = New System.Drawing.Size(649, 26) Me.tbMaxTorque.TabIndex = 44 ' 'lblTitle ' - Me.lblTitle.AutoSize = True + Me.lblTitle.AutoSize = true Me.lblTitle.BackColor = System.Drawing.Color.White - Me.lblTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 18.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblTitle.Location = New System.Drawing.Point(119, 35) + 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(178, 54) + Me.lblTitle.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) Me.lblTitle.Name = "lblTitle" - Me.lblTitle.Size = New System.Drawing.Size(190, 29) + Me.lblTitle.Size = New System.Drawing.Size(281, 40) Me.lblTitle.TabIndex = 48 Me.lblTitle.Text = "Electric Machine" ' @@ -400,19 +442,140 @@ Partial Class ElectricMotorForm ' Me.PicBox.BackColor = System.Drawing.Color.LightGray Me.PicBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.PicBox.Location = New System.Drawing.Point(508, 28) + Me.PicBox.Location = New System.Drawing.Point(762, 43) + Me.PicBox.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.PicBox.Name = "PicBox" - Me.PicBox.Size = New System.Drawing.Size(382, 266) + Me.PicBox.Size = New System.Drawing.Size(572, 408) Me.PicBox.TabIndex = 49 - Me.PicBox.TabStop = False + Me.PicBox.TabStop = false + ' + 'Panel1 + ' + Me.Panel1.Controls.Add(Me.lblContPwr) + Me.Panel1.Controls.Add(Me.lblContPwrUnit) + Me.Panel1.Controls.Add(Me.tbContPwr) + Me.Panel1.Location = New System.Drawing.Point(18, 222) + Me.Panel1.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(318, 46) + Me.Panel1.TabIndex = 25 + ' + 'lblContPwr + ' + Me.lblContPwr.AutoSize = true + Me.lblContPwr.Location = New System.Drawing.Point(4, 11) + Me.lblContPwr.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblContPwr.Name = "lblContPwr" + Me.lblContPwr.Size = New System.Drawing.Size(142, 20) + Me.lblContPwr.TabIndex = 0 + Me.lblContPwr.Text = "Continuous Power:" + ' + 'lblContPwrUnit + ' + Me.lblContPwrUnit.AutoSize = true + Me.lblContPwrUnit.Location = New System.Drawing.Point(258, 11) + Me.lblContPwrUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblContPwrUnit.Name = "lblContPwrUnit" + Me.lblContPwrUnit.Size = New System.Drawing.Size(32, 20) + Me.lblContPwrUnit.TabIndex = 24 + Me.lblContPwrUnit.Text = "[W]" + ' + 'tbContPwr + ' + Me.tbContPwr.Location = New System.Drawing.Point(163, 6) + Me.tbContPwr.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.tbContPwr.Name = "tbContPwr" + Me.tbContPwr.Size = New System.Drawing.Size(84, 26) + Me.tbContPwr.TabIndex = 3 + ' + 'Panel2 + ' + Me.Panel2.Controls.Add(Me.lblOvlBuffer) + Me.Panel2.Controls.Add(Me.lblOvlBufferUnit) + Me.Panel2.Controls.Add(Me.tbOvlBuffer) + Me.Panel2.Location = New System.Drawing.Point(349, 166) + Me.Panel2.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(391, 46) + Me.Panel2.TabIndex = 25 + ' + 'lblOvlBuffer + ' + Me.lblOvlBuffer.AutoSize = true + Me.lblOvlBuffer.Location = New System.Drawing.Point(4, 11) + Me.lblOvlBuffer.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblOvlBuffer.Name = "lblOvlBuffer" + Me.lblOvlBuffer.Size = New System.Drawing.Size(181, 20) + Me.lblOvlBuffer.TabIndex = 0 + Me.lblOvlBuffer.Text = "Thermal Overload Buffer" + ' + 'lblOvlBufferUnit + ' + Me.lblOvlBufferUnit.AutoSize = true + Me.lblOvlBufferUnit.Location = New System.Drawing.Point(344, 11) + Me.lblOvlBufferUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblOvlBufferUnit.Name = "lblOvlBufferUnit" + Me.lblOvlBufferUnit.Size = New System.Drawing.Size(38, 20) + Me.lblOvlBufferUnit.TabIndex = 24 + Me.lblOvlBufferUnit.Text = "[MJ]" + ' + 'tbOvlBuffer + ' + Me.tbOvlBuffer.Location = New System.Drawing.Point(265, 8) + Me.tbOvlBuffer.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.tbOvlBuffer.Name = "tbOvlBuffer" + Me.tbOvlBuffer.Size = New System.Drawing.Size(71, 26) + Me.tbOvlBuffer.TabIndex = 3 + ' + 'Panel3 + ' + Me.Panel3.Controls.Add(Me.lblOvlRecovery) + Me.Panel3.Controls.Add(Me.lblOvlRecoveryFactorUnit) + Me.Panel3.Controls.Add(Me.tbOverloadRecoveryFactor) + Me.Panel3.Location = New System.Drawing.Point(349, 222) + Me.Panel3.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.Panel3.Name = "Panel3" + Me.Panel3.Size = New System.Drawing.Size(391, 46) + Me.Panel3.TabIndex = 26 + ' + 'lblOvlRecovery + ' + Me.lblOvlRecovery.AutoSize = true + Me.lblOvlRecovery.Location = New System.Drawing.Point(4, 11) + Me.lblOvlRecovery.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblOvlRecovery.Name = "lblOvlRecovery" + Me.lblOvlRecovery.Size = New System.Drawing.Size(253, 20) + Me.lblOvlRecovery.TabIndex = 0 + Me.lblOvlRecovery.Text = "Thermal Overload Recovery Factor" + ' + 'lblOvlRecoveryFactorUnit + ' + Me.lblOvlRecoveryFactorUnit.AutoSize = true + Me.lblOvlRecoveryFactorUnit.Location = New System.Drawing.Point(345, 11) + Me.lblOvlRecoveryFactorUnit.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.lblOvlRecoveryFactorUnit.Name = "lblOvlRecoveryFactorUnit" + Me.lblOvlRecoveryFactorUnit.Size = New System.Drawing.Size(22, 20) + Me.lblOvlRecoveryFactorUnit.TabIndex = 24 + Me.lblOvlRecoveryFactorUnit.Text = "[-]" + ' + 'tbOverloadRecoveryFactor + ' + Me.tbOverloadRecoveryFactor.Location = New System.Drawing.Point(265, 8) + Me.tbOverloadRecoveryFactor.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.tbOverloadRecoveryFactor.Name = "tbOverloadRecoveryFactor" + Me.tbOverloadRecoveryFactor.Size = New System.Drawing.Size(72, 26) + Me.tbOverloadRecoveryFactor.TabIndex = 3 ' 'ElectricMotorForm ' Me.AcceptButton = Me.ButOK - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleDimensions = New System.Drawing.SizeF(9!, 20!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.CancelButton = Me.ButCancel - Me.ClientSize = New System.Drawing.Size(898, 361) + Me.ClientSize = New System.Drawing.Size(1347, 555) + Me.Controls.Add(Me.Panel3) + Me.Controls.Add(Me.Panel2) + Me.Controls.Add(Me.Panel1) Me.Controls.Add(Me.PicBox) Me.Controls.Add(Me.lblTitle) Me.Controls.Add(Me.btnMaxTorqueCurveOpen) @@ -436,25 +599,32 @@ Partial Class ElectricMotorForm Me.Controls.Add(Me.lblMakeModel) Me.Controls.Add(Me.tbMakeModel) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False + Me.Icon = CType(resources.GetObject("$this.Icon"),System.Drawing.Icon) + Me.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) + Me.MaximizeBox = false Me.Name = "ElectricMotorForm" Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.Text = "Electric Machine" - Me.ToolStrip1.ResumeLayout(False) - Me.ToolStrip1.PerformLayout() - Me.StatusStrip1.ResumeLayout(False) - Me.StatusStrip1.PerformLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - Me.CmOpenFile.ResumeLayout(False) - Me.pnInertia.ResumeLayout(False) - Me.pnInertia.PerformLayout() - CType(Me.PicBox, System.ComponentModel.ISupportInitialize).EndInit() - Me.ResumeLayout(False) - Me.PerformLayout() + Me.ToolStrip1.ResumeLayout(false) + Me.ToolStrip1.PerformLayout + Me.StatusStrip1.ResumeLayout(false) + Me.StatusStrip1.PerformLayout + CType(Me.PictureBox1,System.ComponentModel.ISupportInitialize).EndInit + Me.CmOpenFile.ResumeLayout(false) + Me.pnInertia.ResumeLayout(false) + Me.pnInertia.PerformLayout + CType(Me.PicBox,System.ComponentModel.ISupportInitialize).EndInit + Me.Panel1.ResumeLayout(false) + Me.Panel1.PerformLayout + Me.Panel2.ResumeLayout(false) + Me.Panel2.PerformLayout + Me.Panel3.ResumeLayout(false) + Me.Panel3.PerformLayout + Me.ResumeLayout(false) + Me.PerformLayout - End Sub +End Sub Friend WithEvents tbInertia As TextBox Friend WithEvents lblinertiaUnit As Label Friend WithEvents lblInertia As Label @@ -492,4 +662,16 @@ Partial Class ElectricMotorForm Friend WithEvents tbMaxTorque As TextBox Friend WithEvents lblTitle As Label Friend WithEvents PicBox As PictureBox + Friend WithEvents Panel1 As Panel + Friend WithEvents lblContPwr As Label + Friend WithEvents lblContPwrUnit As Label + Friend WithEvents tbContPwr As TextBox + Friend WithEvents Panel2 As Panel + Friend WithEvents lblOvlBuffer As Label + Friend WithEvents lblOvlBufferUnit As Label + Friend WithEvents tbOvlBuffer As TextBox + Friend WithEvents Panel3 As Panel + Friend WithEvents lblOvlRecovery As Label + Friend WithEvents lblOvlRecoveryFactorUnit As Label + Friend WithEvents tbOverloadRecoveryFactor As TextBox End Class diff --git a/VECTO/GUI/ElectricMotorForm.vb b/VECTO/GUI/ElectricMotorForm.vb index bf33fbbe3d840e0e760434de4c1b3d0d37d14a9d..d9b73564cc8f49c0b246071301b35aecded58120 100644 --- a/VECTO/GUI/ElectricMotorForm.vb +++ b/VECTO/GUI/ElectricMotorForm.vb @@ -176,6 +176,9 @@ Public Class ElectricMotorForm tbMakeModel.Text = engine.Model tbInertia.Text = engine.Inertia.ToGUIFormat() + tbOvlBuffer.Text = (engine.OverloadBuffer.Value() / 1e6).ToGUIFormat() + tbContPwr.Text = engine.ContinuousPower.ToGUIFormat() + tbOverloadRecoveryFactor.Text = engine.OverloadRecoveryFactor.ToGUIFormat() tbDragTorque.Text = GetRelativePath(engine.DragCurve.Source, basePath) tbMaxTorque.Text = GetRelativePath(engine.FullLoadCurve.Source, basePath) @@ -213,6 +216,9 @@ Public Class ElectricMotorForm em.ModelName = tbMakeModel.Text If Trim(em.ModelName) = "" Then em.ModelName = "Undefined" em.MotorInertia = tbInertia.Text.ToDouble(0) + em.ThermalOverloadCapacity = tbOvlBuffer.Text.ToDouble(0) + em.ContPwr = tbContPwr.Text.ToDouble(0) + em.OverloadRecoveryFactor = tbOverloadRecoveryFactor.Text.ToDouble(0) em.PathMaxTorque = tbMaxTorque.Text em.PathDrag = tbDragTorque.Text diff --git a/VECTO/GUI/HybridStratebyParamsForm.vb b/VECTO/GUI/HybridStratebyParamsForm.vb index ca2c06d3d7543fe891d294c2a51465efbda8fef0..105d60891b5f1e43621bdf66529aa8dbc62d4ceb 100644 --- a/VECTO/GUI/HybridStratebyParamsForm.vb +++ b/VECTO/GUI/HybridStratebyParamsForm.vb @@ -188,7 +188,7 @@ Public Class HybridStrategyParamsForm DeclInit() - BatteryFileBrowser.UpdateHistory(file) + REESSFileBrowser.UpdateHistory(file) Text = GetFilenameWithoutPath(file, True) LbStatus.Text = "" _strategyParamsFile = file diff --git a/VECTO/GUI/MainForm.vb b/VECTO/GUI/MainForm.vb index 4e88de67cfbd2ca9dd24f9e02fb5d3ebfdba222e..554b785c160698df49ffa6d5c8dcceb632e464cf 100644 --- a/VECTO/GUI/MainForm.vb +++ b/VECTO/GUI/MainForm.vb @@ -140,7 +140,7 @@ Imports TUGraz.VectoCore.Utils TorqueConverterShiftPolygonFileBrowser = New FileBrowser("vgbs") CrossWindCorrectionFileBrowser = New FileBrowser("vcdx") ElectricMotorFileBrowser = New FileBrowser("vem") - BatteryFileBrowser = New FileBrowser("vbat") + REESSFileBrowser = New FileBrowser("vreess") DriverDecisionFactorVelocityDropFileBrowser = New FileBrowser("DfVelocityDrop") DriverDecisionFactorTargetSpeedFileBrowser = New FileBrowser("DfTargetSpeed") DriverDecisionFactorVelocityDropFileBrowser.Extensions = New String() {"csv"} @@ -180,7 +180,7 @@ Imports TUGraz.VectoCore.Utils TorqueConverterShiftPolygonFileBrowser.Extensions = New String() {"vgbs"} CrossWindCorrectionFileBrowser.Extensions = New String() {"vcdv", "vcdb"} ElectricMotorFileBrowser.Extensions = New String() {"vem"} - BatteryFileBrowser.Extensions = New String() {"vbat"} + REESSFileBrowser.Extensions = New String() {"vreess"} ElectricMachineDragTorqueFileBrowser.Extensions = New String() {"vemd"} ElectricMachineMaxTorqueFileBrowser.Extensions = New String() {"vemp"} diff --git a/VECTO/GUI/VehicleForm.vb b/VECTO/GUI/VehicleForm.vb index f15a78ce97aed4fe9d39cb266712971cd7bf4c0e..2fc3a0bf9c5ce06c450d7f78ab366a5a8f7b8d9c 100644 --- a/VECTO/GUI/VehicleForm.vb +++ b/VECTO/GUI/VehicleForm.vb @@ -460,7 +460,7 @@ Public Class VehicleForm If(angledrive.LossMap Is Nothing, "", GetRelativePath(angledrive.LossMap.Source, basePath)) If (vehicle.VehicleType = VectoSimulationJobType.BatteryElectricVehicle OrElse vehicle.VehicleType = VectoSimulationJobType.ParallelHybridVehicle) Then - tbBattery.Text = GetRelativePath(vehicle.Components.ElectricStorage.BatteryPack.DataSource.SourceFile, basePath) + tbBattery.Text = GetRelativePath(vehicle.Components.ElectricStorage.REESSPack.DataSource.SourceFile, basePath) tbBatteryPackCnt.Text = vehicle.Components.ElectricStorage.Count.ToGUIFormat() tbInitialSoC.Text = (vehicle.InitialSOC * 100).ToGUIFormat() @@ -1060,8 +1060,8 @@ Public Class VehicleForm End Sub Private Sub btnBrowseBattery_Click(sender As Object, e As EventArgs) Handles btnBrowseBattery.Click - If BatteryFileBrowser.OpenDialog(FileRepl(tbBattery.Text, GetPath(_vehFile))) Then - tbBattery.Text = GetFilenameWithoutDirectory(BatteryFileBrowser.Files(0), GetPath(_vehFile)) + If REESSFileBrowser.OpenDialog(FileRepl(tbBattery.Text, GetPath(_vehFile))) Then + tbBattery.Text = GetFilenameWithoutDirectory(REESSFileBrowser.Files(0), GetPath(_vehFile)) End If End Sub diff --git a/VECTO/Input Files/Battery.vb b/VECTO/Input Files/Battery.vb index 2e72a647b55638123ca1e6d9f5ed7d865748bc6a..9a965c0a17186583637199b5385b7f7e53649d1b 100644 --- a/VECTO/Input Files/Battery.vb +++ b/VECTO/Input Files/Battery.vb @@ -25,7 +25,7 @@ Public Class Battery Public BatMinSoc As Double Public BatMaxSoc As Double Public BatCFactor As Double - + Public Sub New() _myPath = "" _filePath = "" @@ -233,11 +233,16 @@ Public Class Battery End Get End Property - Public ReadOnly Property MaxCurrentFactor As Double Implements IBatteryPackDeclarationInputData.MaxCurrentFactor + Public ReadOnly Property MaxCurrentFactor As PerSecond Implements IBatteryPackDeclarationInputData.MaxCurrentFactor Get - Return BatCFactor + Return BatCFactor.SI(Unit.SI.Per.Hour).Cast(Of PerSecond) End Get End Property + Public ReadOnly Property StorageType As REESSType Implements IREESSPackInputData.StorageType + get + Return REESSType.Battery + End Get + End Property End Class \ No newline at end of file diff --git a/VECTO/Input Files/ElectricMachine.vb b/VECTO/Input Files/ElectricMachine.vb index ad83209833cb88b31a1ad7051a1cb0cb63a05aad..ce1ed68248884a7d51869e390703bb67f107ab97 100644 --- a/VECTO/Input Files/ElectricMachine.vb +++ b/VECTO/Input Files/ElectricMachine.vb @@ -35,6 +35,8 @@ Public Class ElectricMachine Public ModelName As String Public MotorInertia As Double + Public ThermalOverloadCapacity As Double + Public ContPwr As Double ''' <summary> ''' New instance. Initialise @@ -220,6 +222,20 @@ Public Class ElectricMachine End Get End Property + Public ReadOnly Property OverloadBuffer As Joule Implements IElectricMotorDeclarationInputData.OverloadBuffer + get + Return ThermalOverloadCapacity.SI(Unit.SI.Mega.Joule).Cast(of Joule) + End Get + End Property + + Public Property OverloadRecoveryFactor As Double Implements IElectricMotorDeclarationInputData.OverloadRecoveryFactor + + Public ReadOnly Property ContinuousPower As Watt Implements IElectricMotorDeclarationInputData.ContinuousPower + get + Return ContPwr.si(of Watt) + End Get + End Property + Public Property PathMaxTorque(Optional ByVal original As Boolean = False) As String Get If original Then diff --git a/VECTO/Input Files/SuperCap.vb b/VECTO/Input Files/SuperCap.vb new file mode 100644 index 0000000000000000000000000000000000000000..2695b0f60fb8aed0d2a6f2340f893c1c62128543 --- /dev/null +++ b/VECTO/Input Files/SuperCap.vb @@ -0,0 +1,153 @@ +Imports System.Collections.Generic +Imports System.ComponentModel.DataAnnotations +Imports System.IO +Imports System.Linq +Imports TUGraz.VectoCommon.InputData +Imports TUGraz.VectoCommon.Models +Imports TUGraz.VectoCommon.Utils + +Public Class SuperCap + Implements ISuperCapEngineeringInputData + + Private _filePath As String + Private _myPath As String + Public ModelName As String + Public Cap As Double + Public Ri As Double + Public MinV As Double + Public MaxV As Double + + Public Sub New() + _myPath = "" + _filePath = "" + + SetDefault() + End Sub + + Private Sub SetDefault() + ModelName = "Undefined" + Cap = 0 + Ri = 0 + MinV = 0 + MaxV = 0 + End Sub + + Public ReadOnly Property DataSource As DataSource Implements IComponentInputData.DataSource + Get + Dim retVal As DataSource = New DataSource() + retVal.SourceType = DataSourceType.JSONFile + retVal.SourceFile = FilePath + Return retVal + End Get + End Property + + Public ReadOnly Property SavedInDeclarationMode As Boolean Implements IComponentInputData.SavedInDeclarationMode + Get + Return Cfg.DeclMode + End Get + End Property + + Public ReadOnly Property Manufacturer As String Implements IComponentInputData.Manufacturer + Get + Return String.Empty + End Get + End Property + + Public ReadOnly Property Model As String Implements IComponentInputData.Model + Get + Return ModelName + End Get + End Property + + Public ReadOnly Property [Date] As Date Implements IComponentInputData.[Date] + Get + Return Now.ToUniversalTime() + End Get + End Property + + Public ReadOnly Property AppVersion As String Implements IComponentInputData.AppVersion + Get + Return "VECTO-GUI" + End Get + End Property + + Public ReadOnly Property CertificationMethod As CertificationMethod Implements IComponentInputData.CertificationMethod + Get + Return CertificationMethod.NotCertified + End Get + End Property + Public ReadOnly Property CertificationNumber As String Implements IComponentInputData.CertificationNumber + Get + Return TUGraz.VectoCore.Configuration.Constants.NOT_AVailABLE + End Get + End Property + Public ReadOnly Property DigestValue As DigestData Implements IComponentInputData.DigestValue + Get + Return Nothing + End Get + End Property + Public ReadOnly Property Capacity As Farad Implements ISuperCapDeclarationInputData.Capacity + get + Return cap.SI(of Farad) + End Get + End Property + Public ReadOnly Property InternalResistance As Ohm Implements ISuperCapDeclarationInputData.InternalResistance + get + Return ri.SI(of Ohm) + End Get + End Property + Public ReadOnly Property MinVoltage As Volt Implements ISuperCapDeclarationInputData.MinVoltage + get + Return minv.SI(of Volt) + End Get + End Property + Public ReadOnly Property MaxVoltage As Volt Implements ISuperCapDeclarationInputData.MaxVoltage + get + Return MaxV.SI(of Volt) + End Get + End Property + + Public Property FilePath() As String + Get + Return _filePath + End Get + Set(ByVal value As String) + _filePath = value + If _filePath = "" Then + _myPath = "" + Else + _myPath = Path.GetDirectoryName(_filePath) & "\" + End If + End Set + End Property + + Public Function SaveFile() As Boolean + + Dim validationResults As IList(Of ValidationResult) = + Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing, False) + + If validationResults.Count > 0 Then + Dim messages As IEnumerable(Of String) = + validationResults.Select(Function(r) r.ErrorMessage + String.Join(", ", r.MemberNames.Distinct())) + MsgBox("Invalid input." + Environment.NewLine + String.Join(Environment.NewLine, messages), MsgBoxStyle.OkOnly, + "Failed to save battery") + Return False + End If + + Try + Dim writer As JSONFileWriter = New JSONFileWriter() + writer.SaveSuperCap(Me, _filePath, Cfg.DeclMode) + + Catch ex As Exception + MsgBox("Faled to write Battery file: " + ex.Message) + Return False + End Try + Return True + End Function + + Public ReadOnly Property StorageType As REESSType Implements IREESSPackInputData.StorageType + get + Return REESSType.SuperCap + End Get + End Property +End Class \ No newline at end of file diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index cd358bc7974b48d3dc6bc1032c1fa25d527d7aa9..fbda188371358b522a6307f4ffba98694d1c22cb 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -865,23 +865,14 @@ Public Class ElectricStorageWrapper Vehicle = veh End Sub - Public ReadOnly Property BatteryPack As IBatteryPackDeclarationInputData Implements IElectricStorageDeclarationInputData.BatteryPack - Get - Return Me - End Get - End Property - Public ReadOnly Property IElectricStorageEngineeringInputData_Count As Integer Implements IElectricStorageEngineeringInputData.Count - Get - Return Vehicle.NumBatteryPacks - End Get - End Property - Public ReadOnly Property IElectricStorageEngineeringInputData_BatteryPack As IBatteryPackEngineeringInputData Implements IElectricStorageEngineeringInputData.BatteryPack + + Public ReadOnly Property REESSPack As IREESSPackInputData Implements IElectricStorageEngineeringInputData.REESSPack Get return Me End Get End Property - Public ReadOnly Property Count As Integer Implements IElectricStorageDeclarationInputData.Count + Public ReadOnly Property Count As Integer Implements IElectricStorageEngineeringInputData.Count Get Return Vehicle.NumBatteryPacks End Get @@ -908,7 +899,8 @@ Public Class ElectricStorageWrapper Public ReadOnly Property Capacity As AmpereSecond Implements IBatteryPackDeclarationInputData.Capacity Public ReadOnly Property InternalResistanceCurve As TableData Implements IBatteryPackDeclarationInputData.InternalResistanceCurve Public ReadOnly Property VoltageCurve As TableData Implements IBatteryPackDeclarationInputData.VoltageCurve - Public ReadOnly Property MaxCurrentFactor As Double Implements IBatteryPackDeclarationInputData.MaxCurrentFactor + Public ReadOnly Property MaxCurrentFactor As PerSecond Implements IBatteryPackDeclarationInputData.MaxCurrentFactor + Public ReadOnly Property StorageType As REESSType Implements IREESSPackInputData.StorageType End Class Public Class ElectricMachineWrapper @@ -957,4 +949,7 @@ Public Class ElectricMachineWrapper Public ReadOnly Property DragCurve As TableData Implements IElectricMotorDeclarationInputData.DragCurve Public ReadOnly Property EfficiencyMap As TableData Implements IElectricMotorDeclarationInputData.EfficiencyMap Public ReadOnly Property Inertia As KilogramSquareMeter Implements IElectricMotorDeclarationInputData.Inertia + Public ReadOnly Property OverloadBuffer As Joule Implements IElectricMotorDeclarationInputData.OverloadBuffer + Public ReadOnly Property OverloadRecoveryFactor As Double Implements IElectricMotorDeclarationInputData.OverloadRecoveryFactor + Public ReadOnly Property ContinuousPower As Watt Implements IElectricMotorDeclarationInputData.ContinuousPower End Class \ No newline at end of file diff --git a/VECTO/VECTO.vbproj b/VECTO/VECTO.vbproj index 46355be9b3bb5ea7e6815e5fc0bde99074978eaa..c3826b8a792f8646024e354feaa96bf8135af0c1 100644 --- a/VECTO/VECTO.vbproj +++ b/VECTO/VECTO.vbproj @@ -337,6 +337,7 @@ <Compile Include="Input Files\HybridStrategyParams.vb" /> <Compile Include="Input Files\MockComponents.vb" /> <Compile Include="Input Files\MockVehicleInputData.vb" /> + <Compile Include="Input Files\SuperCap.vb" /> <Compile Include="Input Files\VectoEPTPJob.vb" /> <Compile Include="Input Files\VectoJob.vb" /> <Compile Include="Input Files\Vehicle.vb" /> diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 02ab5498a9211a950e57c9008d767c76f58d9192..f85efbc197c685c690bc0083512fa53af0d279f8 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -698,6 +698,12 @@ namespace TUGraz.VectoCommon.InputData TableData EfficiencyMap { get; } KilogramSquareMeter Inertia { get; } + + Joule OverloadBuffer { get; } + + double OverloadRecoveryFactor { get; } + + Watt ContinuousPower { get; } } public interface IElectricMachinesDeclarationInputData @@ -720,12 +726,23 @@ namespace TUGraz.VectoCommon.InputData public interface IElectricStorageDeclarationInputData { - IBatteryPackDeclarationInputData BatteryPack { get; } + IREESSPackInputData REESSPack { get; } int Count { get; } } - public interface IBatteryPackDeclarationInputData : IComponentInputData + public enum REESSType + { + Battery, + SuperCap + } + + public interface IREESSPackInputData : IComponentInputData + { + REESSType StorageType { get; } + } + + public interface IBatteryPackDeclarationInputData : IREESSPackInputData { double MinSOC { get; } @@ -738,7 +755,18 @@ namespace TUGraz.VectoCommon.InputData TableData VoltageCurve { get; } - double MaxCurrentFactor { get; } + PerSecond MaxCurrentFactor { get; } + } + + public interface ISuperCapDeclarationInputData : IREESSPackInputData + { + Farad Capacity { get; } + + Ohm InternalResistance { get; } + + Volt MinVoltage { get; } + + Volt MaxVoltage { get; } } diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs index f8ca10c55d796bbbd25d01e86c3060d74ecde3e4..ca4cb8c81790b52578daa42282c6538010e10742 100644 --- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs +++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs @@ -419,9 +419,7 @@ namespace TUGraz.VectoCommon.InputData public interface IElectricStorageEngineeringInputData : IElectricStorageDeclarationInputData { - new IBatteryPackEngineeringInputData BatteryPack { get; } - int Count { get; } } public interface IBatteryPackEngineeringInputData : IBatteryPackDeclarationInputData @@ -429,6 +427,11 @@ namespace TUGraz.VectoCommon.InputData } + public interface ISuperCapEngineeringInputData : ISuperCapDeclarationInputData + { + + } + public interface IDriverModelData { } public interface IDriverAccelerationData : IDriverModelData diff --git a/VectoCommon/VectoCommon/Models/HybridStrategyResponse.cs b/VectoCommon/VectoCommon/Models/HybridStrategyResponse.cs index c11db7a245268294fbee3571ff440c4b57c010dc..408ba98a65674a58dbd522fb9d92507f653e84bd 100644 --- a/VectoCommon/VectoCommon/Models/HybridStrategyResponse.cs +++ b/VectoCommon/VectoCommon/Models/HybridStrategyResponse.cs @@ -15,7 +15,7 @@ namespace TUGraz.VectoCommon.Models { public PerSecond DeltaEngineSpeed { get; set; } } - public class HybridStrategyResponse : IHybridStrategyResponse + public class HybridStrategyResponse : AbstractComponentResponse, IHybridStrategyResponse { public Dictionary<PowertrainPosition, NewtonMeter> MechanicalAssistPower; public bool ShiftRequired { get; set; } @@ -62,7 +62,7 @@ namespace TUGraz.VectoCommon.Models { return ToString().Equals(other.ToString(), StringComparison.InvariantCultureIgnoreCase); } - public string ToString() + public override string ToString() { var setting = string.Join(", ", Setting.MechanicalAssistPower.Select(x => $"{x.Key}, {x.Value}")); return $"{U}: {setting} {Score} G{Gear}"; diff --git a/VectoCommon/VectoCommon/Models/IResponse.cs b/VectoCommon/VectoCommon/Models/IResponse.cs index b27f1c6e7f0ba38f4f19709c57a2569835b19d8e..3af51d4357c038a39699dc1b8309a1a62778a669 100644 --- a/VectoCommon/VectoCommon/Models/IResponse.cs +++ b/VectoCommon/VectoCommon/Models/IResponse.cs @@ -181,24 +181,24 @@ namespace TUGraz.VectoCommon.Models HybridControllerResponse HybridController { get; set; } } - public class HybridControllerResponse + public class HybridControllerResponse : AbstractComponentResponse { public HybridStrategyResponse StrategySettings { get; set; } } - public interface IBatteryResponse + public interface IRESSResponse { Second AbsTime { get; set; } Second SimulationInterval { get; set; } - Watt MaxBatteryLoadCharge { get; set; } + Watt MaxChargePower { get; set; } - Watt MaxBatteryLoadDischarge { get; set; } + Watt MaxDischargePower { get; set; } - Watt BatteryPower { get; set; } + Watt PowerDemand { get; set; } - Watt BatteryLoss { get; set; } + Watt LossPower { get; set; } double StateOfCharge { get; set; } @@ -207,7 +207,7 @@ namespace TUGraz.VectoCommon.Models public interface IElectricSystemResponse { - IBatteryResponse BatteryResponse { get; set; } + IRESSResponse RESSResponse { get; set; } Watt AuxPower { get; set; } @@ -219,7 +219,7 @@ namespace TUGraz.VectoCommon.Models Watt MaxPowerDrag { get; } - Watt BatteryPowerDemand { get; set; } + Watt RESSPowerDemand { get; set; } object Source { get; } } diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs index c91a7d77edf85cc79fc89e555aacd125ef7b8d9f..6a66126612d25aeb5c5282ea6d8fd6790c4f888c 100644 --- a/VectoCommon/VectoCommon/Utils/SI.cs +++ b/VectoCommon/VectoCommon/Utils/SI.cs @@ -1064,6 +1064,8 @@ namespace TUGraz.VectoCommon.Utils { return SIBase<AmpereSecond>.Create(i.Value() * t.Value()); } + + } public class AmpereSecond : SIBase<AmpereSecond> @@ -1087,6 +1089,10 @@ namespace TUGraz.VectoCommon.Utils { return SIBase<WattSecond>.Create(ampereSeconds.Val * v.Value()); } + public static Ampere operator *(AmpereSecond i, PerSecond ps) + { + return SIBase<Ampere>.Create(i.Value() * ps.Value()); + } } /// <summary> @@ -1130,6 +1136,28 @@ namespace TUGraz.VectoCommon.Utils public override string UnitString { get { return "Ω"; } } } + public class Farad : SIBase<Farad> + { + private static readonly int[] Units = { -1, -2, 4, 2, 0, 0, 0 }; + + private Farad(double val) : base(val, Units) {} + + public override string UnitString + { + get { return "F"; } + } + + public static Volt operator /(AmpereSecond charge, Farad capacity) + { + return SIBase<Volt>.Create(charge.Value() / capacity.Val); + } + + public static AmpereSecond operator *(Farad capacity, Volt v) + { + return SIBase<AmpereSecond>.Create(capacity.Val * v.Value()); + } + } + public class VolumePerMeter : SIBase<VolumePerMeter> { private static readonly int[] Units = { 0, 2, 0, 0, 0, 0, 0 }; diff --git a/VectoCommon/VectoCommon/Utils/VectoMath.cs b/VectoCommon/VectoCommon/Utils/VectoMath.cs index 67beafee5c300863ee77ba96169764c40c3468a9..c4e941db311fb3ae2f6e2eb38e3c6b906f3ba4ba 100644 --- a/VectoCommon/VectoCommon/Utils/VectoMath.cs +++ b/VectoCommon/VectoCommon/Utils/VectoMath.cs @@ -175,6 +175,15 @@ namespace TUGraz.VectoCommon.Utils [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T Max<T>(T c1, T c2) where T : IComparable { + if (c1 == null) + { + return c2; + } + + if (c2 == null) + { + return c1; + } return c1.CompareTo(c2) > 0 ? c1 : c2; } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs index caae949b18dc48c74ad271accd8b37f86f8f27d1..ebf4c679880d30f28f45eaa132b395433492b539 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONBattery.cs @@ -9,7 +9,7 @@ using TUGraz.VectoCore.InputData.Reader.ComponentData; namespace TUGraz.VectoCore.InputData.FileIO.JSON { - public class JSONBatteryV1 : JSONFile, IBatteryPackEngineeringInputData + public class JSONBatteryV1 : JSONFile, IBatteryPackEngineeringInputData, ISuperCapEngineeringInputData { public JSONBatteryV1(JObject data, string filename, bool tolerateMissing = false) : base(data, filename, tolerateMissing) { } @@ -54,11 +54,43 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return Body.GetEx<double>("SOC_max") / 100.0; } } - public AmpereSecond Capacity + AmpereSecond IBatteryPackDeclarationInputData.Capacity { get { return Body.GetEx<double>("Capacity").SI(Unit.SI.Ampere.Hour).Cast<AmpereSecond>(); } } + Farad ISuperCapDeclarationInputData.Capacity + { + get + { + return Body.GetEx<double>("Capacity").SI<Farad>(); + } + } + + public Ohm InternalResistance + { + get + { + return Body.GetEx<double>("InternalResistance").SI<Ohm>(); + } + } + + public Volt MinVoltage + { + get + { + return Body.GetEx<double>("U_min").SI<Volt>(); + } + } + + public Volt MaxVoltage + { + get + { + return Body.GetEx<double>("U_max").SI<Volt>(); + } + } + public TableData InternalResistanceCurve { get @@ -97,9 +129,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } } - public double MaxCurrentFactor + public PerSecond MaxCurrentFactor { - get { return Body.GetEx<double>("MaxCurrentFactor"); } + get { return Body.GetEx<double>("MaxCurrentFactor").SI(Unit.SI.Per.Hour).Cast<PerSecond>(); } + } + + + public REESSType StorageType + { + get + { + return Body["REESSType"] == null ? REESSType.Battery : Body.GetEx<string>("REESSType").ParseEnum<REESSType>(); + } } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs index e7a09e8394c4b6d7ca1485e38d4ba00a1d0de9e6..aac5cf3355e71257b87b7ab4ad834116c07fc384 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -85,7 +85,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON tmp = JSONInputDataFactory.ReadShiftParameters(filename, tolerateMissing); break; case Constants.FileExtensions.BatteryFile: - tmp = JSONInputDataFactory.ReadBatteryData(filename, tolerateMissing); + tmp = JSONInputDataFactory.ReadREESSData(filename, tolerateMissing); break; case Constants.FileExtensions.ElectricMotorFile: tmp = JSONInputDataFactory.ReadElectricMotorData(filename, tolerateMissing); @@ -268,7 +268,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return new JSONElectricStorageEngineeringInputData { - BatteryPack = Battery, + REESSPack = Battery, Count = 1 }; } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs index fef75d632edfc73df94a81de7508e7416188687a..031e9e0cc5393745a5fe6936c77ac1b19fb16895 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONElectricMotor.cs @@ -50,5 +50,25 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { { get { return Body.GetEx<double>("Inertia").SI<KilogramSquareMeter>(); } } + + public Joule OverloadBuffer + { + get { return Body.GetValueOrDefault<double>("ThermalOverloadBuffer")?.SI(Unit.SI.Mega.Joule).Cast<Joule>() ?? 1e18.SI<Joule>(); } + } + + public double OverloadRecoveryFactor + { + get + { + return Body.GetValueOrDefault<double>("ThermalOverloadRecoveryFactor") ?? 0.9; + } + } + + public Watt ContinuousPower + { + get { return Body.GetValueOrDefault<double>("ContinuousPower")?.SI<Watt>() ?? 1e12.SI<Watt>(); } + } + + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs index 7488df94be5817ad193ad4b2acb59c6daa7ab7d6..c1620f1812ad79743c1b7ff7c85ee73b4bf8805c 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs @@ -188,7 +188,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } - public static IBatteryPackEngineeringInputData ReadBatteryData(string filename, bool tolerateMissing) + public static IREESSPackInputData ReadREESSData(string filename, bool tolerateMissing) { var json = ReadFile(filename); var version = ReadVersion(json); diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs index 6e61fc5c9593a92491cd9a2091b91e9bdda5ed7f..43941ecb2e6e569f253c9218d3c20e1c86f51c92 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs @@ -673,12 +673,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public class JSONElectricStorageEngineeringInputData : IElectricStorageEngineeringInputData { - IBatteryPackDeclarationInputData IElectricStorageDeclarationInputData.BatteryPack - { - get { return BatteryPack; } - } + public IREESSPackInputData REESSPack { get; set; } - public IBatteryPackEngineeringInputData BatteryPack { get; internal set; } + public int Count { get; internal set; } } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index 06dff6fadf175a5b6416319332a79b55edebfdb1..3aa808a7e8937c7be7abac0b30f1cce1bdcf016e 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -136,7 +136,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { return new JSONElectricStorageEngineeringInputData() { Count = Body["Battery"].GetEx<int>("NumPacks"), - BatteryPack = JSONInputDataFactory.ReadBatteryData(Path.Combine(BasePath, Body["Battery"].GetEx<string>("BatteryFile")), false) + REESSPack = JSONInputDataFactory.ReadREESSData(Path.Combine(BasePath, Body["Battery"].GetEx<string>("BatteryFile")), false) }; } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index 17210ab1b20e3d386ab564f550ea8930cd67bff7..ed209466b5a7d4b6637882ba08597e31e02751b2 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -620,17 +620,38 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter public BatteryData CreateBatteryData(IElectricStorageEngineeringInputData batteryInputData, double initialSOC) { - if (batteryInputData == null) { + if (batteryInputData == null || batteryInputData.REESSPack.StorageType != REESSType.Battery) { return null; } + var bat = batteryInputData.REESSPack as IBatteryPackEngineeringInputData; + return new BatteryData() { - MinSOC = batteryInputData.BatteryPack.MinSOC, - MaxSOC = batteryInputData.BatteryPack.MaxSOC, - MaxCurrent = (batteryInputData.BatteryPack.Capacity.AsAmpHour * batteryInputData.BatteryPack.MaxCurrentFactor * batteryInputData.Count).SI<Ampere>(), - Capacity = batteryInputData.Count * batteryInputData.BatteryPack.Capacity, - InternalResistance = BatteryInternalResistanceReader.Create(batteryInputData.BatteryPack.InternalResistanceCurve, batteryInputData.Count), - SOCMap = BatterySOCReader.Create(batteryInputData.BatteryPack.VoltageCurve), + MinSOC = bat.MinSOC, + MaxSOC = bat.MaxSOC, + MaxCurrent = bat.Capacity * bat.MaxCurrentFactor * batteryInputData.Count, + Capacity = batteryInputData.Count * bat.Capacity, + InternalResistance = BatteryInternalResistanceReader.Create(bat.InternalResistanceCurve, batteryInputData.Count), + SOCMap = BatterySOCReader.Create(bat.VoltageCurve), + InitialSoC = initialSOC + }; + } + + public SuperCapData CreateSuperCapData(IElectricStorageEngineeringInputData reessInputData, double initialSOC) + { + if (reessInputData == null || reessInputData.REESSPack.StorageType != REESSType.SuperCap) + { + return null; + } + + var superCap = reessInputData.REESSPack as ISuperCapEngineeringInputData; + + return new SuperCapData() + { + Capacity = reessInputData.Count * superCap.Capacity, + InternalResistance = superCap.InternalResistance / reessInputData.Count, + MinVoltage = superCap.MinVoltage, + MaxVoltage = superCap.MaxVoltage, InitialSoC = initialSOC }; } @@ -661,6 +682,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter DragCurve = ElectricMotorDragCurveReader.Create(motorData.DragCurve, ratio, count, efficiency), EfficiencyMap = ElectricMotorMapReader.Create(motorData.EfficiencyMap, ratio, count, efficiency), Inertia = motorData.Inertia, + ContinuousPower = motorData.ContinuousPower * count, + OverloadBuffer = motorData.OverloadBuffer * count, + OverloadRegenerationFactor = motorData.OverloadRecoveryFactor, }; } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs index 6c30a9ff7db7248c5a5e635b2ff9801f4100a068..6faf1f1febc89af97de40d16fb9a4d161fe51da2 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs @@ -132,6 +132,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl ElectricMachinesData = dao.CreateElectricMachines(vehicle.Components.ElectricMachines), //HybridStrategyParameters = dao.CreateHybridStrategyParameters(InputDataProvider.JobInputData.HybridStrategyParameters), BatteryData = dao.CreateBatteryData(vehicle.Components.ElectricStorage, vehicle.InitialSOC), + SuperCapData = dao.CreateSuperCapData(vehicle.Components.ElectricStorage, vehicle.InitialSOC), SimulationType = SimulationType.DistanceCycle | SimulationType.MeasuredSpeedCycle | SimulationType.PWheel, //GearshiftParameters = dao.CreateGearshiftData( // gearboxData.Type, InputDataProvider.DriverInputData.GearshiftInputData, @@ -184,8 +185,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl var electricMachines = dao.CreateElectricMachines(vehicle.Components.ElectricMachines) ?? new List<Tuple<PowertrainPosition, ElectricMotorData>>(); var battery = dao.CreateBatteryData(vehicle.Components.ElectricStorage, vehicle.InitialSOC); + var superCap = dao.CreateSuperCapData(vehicle.Components.ElectricStorage, vehicle.InitialSOC); - var jobType = electricMachines.Count > 0 && battery != null + var jobType = electricMachines.Count > 0 && (battery != null || superCap != null) ? VectoSimulationJobType.ParallelHybridVehicle : VectoSimulationJobType.ConventionalVehicle; @@ -211,6 +213,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl ElectricMachinesData = electricMachines, HybridStrategyParameters = hybridParameters, BatteryData = battery, + SuperCapData = superCap, SimulationType = SimulationType.DistanceCycle | SimulationType.MeasuredSpeedCycle | SimulationType.PWheel, GearshiftParameters = dao.CreateGearshiftData( gearboxData.Type, InputDataProvider.DriverInputData.GearshiftInputData, diff --git a/VectoCore/VectoCore/Models/Connector/Ports/IBatteryPort.cs b/VectoCore/VectoCore/Models/Connector/Ports/IElectricEnergyStoragePort.cs similarity index 70% rename from VectoCore/VectoCore/Models/Connector/Ports/IBatteryPort.cs rename to VectoCore/VectoCore/Models/Connector/Ports/IElectricEnergyStoragePort.cs index c6bc9e87e20f2c22451b589286bacd59cd3ff07d..ebad9f4e946f2686a9959235365c5676b7870305 100644 --- a/VectoCore/VectoCore/Models/Connector/Ports/IBatteryPort.cs +++ b/VectoCore/VectoCore/Models/Connector/Ports/IElectricEnergyStoragePort.cs @@ -6,10 +6,10 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl { public interface IBatteryProvider { - IBatteryPort MainBatteryPort { get; } + IElectricEnergyStoragePort MainBatteryPort { get; } } - public interface IBatteryPort + public interface IElectricEnergyStoragePort { void Initialize(double initialSoC); @@ -23,33 +23,33 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl /// <param name="powerDemand"></param> /// <param name="dryRun"></param> /// <returns></returns> - IBatteryResponse Request(Second absTime, Second dt, Watt powerDemand, bool dryRun); + IRESSResponse Request(Second absTime, Second dt, Watt powerDemand, bool dryRun); } public interface IElectricAuxConnecor { - void Connect(IBatteryAuxPort aux); + void Connect(IElectricAuxPort aux); } public interface IElectricChargerConnector { - void Connect(IBatteryChargePort charger); + void Connect(IElectricChargerPort charger); } public interface IBatteryConnector { - void Connect(IBattery battery); + void Connect(IElectricEnergyStorage battery); } - public interface IBatteryAuxPort + public interface IElectricAuxPort { Watt Initialize(); Watt PowerDemand(Second absTime, Second dt, bool dryRun); } - public interface IBatteryChargePort + public interface IElectricChargerPort { Watt Initialize(); diff --git a/VectoCore/VectoCore/Models/Connector/Ports/Impl/BatteryResponse.cs b/VectoCore/VectoCore/Models/Connector/Ports/Impl/BatteryResponse.cs index fedde47a012cb669f6bafa1e5da98e94b47085b7..06023c3d862d1258838c4917473fa7c7bd6fce92 100644 --- a/VectoCore/VectoCore/Models/Connector/Ports/Impl/BatteryResponse.cs +++ b/VectoCore/VectoCore/Models/Connector/Ports/Impl/BatteryResponse.cs @@ -4,9 +4,9 @@ using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCore.Models.Connector.Ports.Impl { - public abstract class AbstractBatteryResponse : IBatteryResponse + public abstract class AbstractRESSResponse : IRESSResponse { - protected AbstractBatteryResponse(object source) + protected AbstractRESSResponse(object source) { Source = source; } @@ -15,13 +15,13 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl public Second SimulationInterval { get; set; } - public Watt MaxBatteryLoadCharge { get; set; } + public Watt MaxChargePower { get; set; } - public Watt MaxBatteryLoadDischarge { get; set; } + public Watt MaxDischargePower { get; set; } - public Watt BatteryPower { get; set; } + public Watt PowerDemand { get; set; } - public Watt BatteryLoss { get; set; } + public Watt LossPower { get; set; } public double StateOfCharge { get; set; } @@ -29,26 +29,26 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl } - public class BatteryResponseSuccess : AbstractBatteryResponse + public class RESSResponseSuccess : AbstractRESSResponse { - public BatteryResponseSuccess(object source) : base(source) { } + public RESSResponseSuccess(object source) : base(source) { } } - public class BatteryOverloadResponse : AbstractBatteryResponse + public class RESSOverloadResponse : AbstractRESSResponse { - public BatteryOverloadResponse(object source) : base(source) { } + public RESSOverloadResponse(object source) : base(source) { } } - public class BatteryUnderloadResponse : AbstractBatteryResponse + public class RESSUnderloadResponse : AbstractRESSResponse { - public BatteryUnderloadResponse(object source) : base(source) { } + public RESSUnderloadResponse(object source) : base(source) { } } - public class BatteryDryRunResponse : AbstractBatteryResponse + public class RESSDryRunResponse : AbstractRESSResponse { - public BatteryDryRunResponse(object source) : base(source) { } + public RESSDryRunResponse(object source) : base(source) { } } @@ -70,13 +70,13 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl public Watt ChargingPower { get; set; } - public IBatteryResponse BatteryResponse { get; set; } + public IRESSResponse RESSResponse { get; set; } public Watt MaxPowerDrive { get { - return (BatteryResponse != null && BatteryResponse.MaxBatteryLoadDischarge != null ? BatteryResponse.MaxBatteryLoadDischarge : 0.SI<Watt>()) - + return (RESSResponse != null && RESSResponse.MaxDischargePower != null ? RESSResponse.MaxDischargePower : 0.SI<Watt>()) - (ChargingPower != null ? ChargingPower : 0.SI<Watt>()) + (AuxPower != null ? AuxPower : 0.SI<Watt>()); } @@ -86,13 +86,13 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl { get { - return (BatteryResponse != null && BatteryResponse.MaxBatteryLoadCharge != null ? BatteryResponse.MaxBatteryLoadCharge : 0.SI<Watt>()) - + return (RESSResponse != null && RESSResponse.MaxChargePower != null ? RESSResponse.MaxChargePower : 0.SI<Watt>()) - (ChargingPower != null ? ChargingPower : 0.SI<Watt>()) + (AuxPower != null ? AuxPower : 0.SI<Watt>()); } } - public Watt BatteryPowerDemand { get; set; } + public Watt RESSPowerDemand { get; set; } public object Source { get; } diff --git a/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs b/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs index 673abe5f5706cc53057981233011757787ac49e4..64e25d64424b1b735be8ce74bd9ad95e4a091072 100644 --- a/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs +++ b/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs @@ -194,6 +194,11 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl public ResponseGearShift(object source, IResponse subResponse) : base(source, subResponse) { } } + internal class ResponseDifferentGearEngaged : AbstractResponse + { + public ResponseDifferentGearEngaged(object source) : base(source) { } + } + /* internal class ResponseEngineSpeedTooLow : ResponseDryRun {} */ diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs index 678119ae705a821bf87dff8476b0c9262a4f7c41..4d73a002e6aa902f0d61173a8e9a70933b63b0a6 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs @@ -391,6 +391,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data //[ModalResultField(typeof(SI), caption: "P_em-{0}_brake [kW]", outputFactor: 1e-3)] P_electricMotor_brake_, [ModalResultField(typeof(SI), caption: "P_em-{0}_loss [kW]", outputFactor: 1e-3)] P_electricMotorLoss_, [ModalResultField(typeof(SI), caption: "P_em-{0}_inertia_loss [kW]", outputFactor: 1e-3)] P_electricMotorInertiaLoss_, + [ModalResultField(typeof(SI), caption: "EM-{0}_OverloadBuffer [%]", outputFactor: 100)] ElectricMotor_OvlBuffer_, // only for graphDrawing Testcase [ModalResultField(typeof(SI), caption: "P_em-P2_mech [kW]", outputFactor: 1e-3)] @@ -407,17 +408,17 @@ namespace TUGraz.VectoCore.Models.Simulation.Data P_electricMotor_mech_B3, // --> - [ModalResultField(typeof(SI), caption: "P_bat_T [kW]", outputFactor: 1e-3)] P_battery_terminal, - [ModalResultField(typeof(SI), caption: "P_bat_int [kW]", outputFactor: 1e-3)] P_battery_int, - [ModalResultField(typeof(SI), caption: "P_bat_loss [kW]", outputFactor: 1e-3)] P_battery_loss, - [ModalResultField(typeof(SI), caption: "Battery SOC [%]", outputFactor: 100)] BatteryStateOfCharge, - [ModalResultField(typeof(SI), caption: "P_bat charge max [kW]", outputFactor: 1e-3)] P_battery_charge_max, - [ModalResultField(typeof(SI), caption: "P_bat discharge max [kW]", outputFactor: 1e-3)] P_battery_discharge_max, - [ModalResultField(typeof(SI), caption: "U_bat_terminal [V]")] U_bat_terminal, - [ModalResultField(typeof(SI), caption: "U_0_bat [V]")] U0_bat, - [ModalResultField(typeof(SI), caption: "I_bat [kW]")] I_bat, + [ModalResultField(typeof(SI), caption: "P_reess_T [kW]", outputFactor: 1e-3)] P_reess_terminal, + [ModalResultField(typeof(SI), caption: "P_reess_int [kW]", outputFactor: 1e-3)] P_reess_int, + [ModalResultField(typeof(SI), caption: "P_reess_loss [kW]", outputFactor: 1e-3)] P_reess_loss, + [ModalResultField(typeof(SI), caption: "REESS SOC [%]", outputFactor: 100)] REESSStateOfCharge, + [ModalResultField(typeof(SI), caption: "P_reess charge max [kW]", outputFactor: 1e-3)] P_reess_charge_max, + [ModalResultField(typeof(SI), caption: "P_reess discharge max [kW]", outputFactor: 1e-3)] P_reess_discharge_max, + [ModalResultField(typeof(SI), caption: "U_reess_terminal [V]")] U_reess_terminal, + [ModalResultField(typeof(SI), caption: "U_0_reess [V]")] U0_reess, + [ModalResultField(typeof(SI), caption: "I_reess [kW]")] I_reess, - [ModalResultField(typeof(SI), caption: "E_Batt [kWh]", outputFactor: 1/3600e3)] E_Bat, + [ModalResultField(typeof(SI), caption: "E_reess [kWh]", outputFactor: 1/3600e3)] E_RESS, } [AttributeUsage(AttributeTargets.Field)] diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs index dd9a2c48cbbd50e0644f9ffb41c48cf9b6ce1d67..db520fb99f7969d479e661e1fc6813a23b04bfd7 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs @@ -128,6 +128,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data public BatteryData BatteryData { get; internal set; } + public SuperCapData SuperCapData { get; internal set; } + + public SimulationType SimulationType { get; set; } public VTPData VTPData { get; set; } diff --git a/VectoCore/VectoCore/Models/Simulation/DataBus/IDataBus.cs b/VectoCore/VectoCore/Models/Simulation/DataBus/IDataBus.cs index d590da8402408d5835aaaeb5f1aecd655d774b62..f0dc1d31742cd700794345bddc17e6341aca922a 100644 --- a/VectoCore/VectoCore/Models/Simulation/DataBus/IDataBus.cs +++ b/VectoCore/VectoCore/Models/Simulation/DataBus/IDataBus.cs @@ -70,14 +70,14 @@ namespace TUGraz.VectoCore.Models.Simulation.DataBus IDrivingCycleInfo DrivingCycleInfo { get; } - - IElectricMotorInfo ElectricMotorInfo(PowertrainPosition pos); - IBatteryInfo BatteryInfo { get; } + IRESSInfo BatteryInfo { get; } ITorqueConverterControl TorqueConverterCtl { get; } IPowertainInfo PowertrainInfo { get; } + + IHybridControllerInfo HybridControllerInfo { get; } } public interface IPowertainInfo diff --git a/VectoCore/VectoCore/Models/Simulation/DataBus/IBatteryInfo.cs b/VectoCore/VectoCore/Models/Simulation/DataBus/IRESSInfo.cs similarity index 70% rename from VectoCore/VectoCore/Models/Simulation/DataBus/IBatteryInfo.cs rename to VectoCore/VectoCore/Models/Simulation/DataBus/IRESSInfo.cs index 26b8155839be38e66258b15c8b15183ff487e826..4f14b5555dc9342c1482cddf0792bb29becb88ec 100644 --- a/VectoCore/VectoCore/Models/Simulation/DataBus/IBatteryInfo.cs +++ b/VectoCore/VectoCore/Models/Simulation/DataBus/IRESSInfo.cs @@ -2,9 +2,9 @@ namespace TUGraz.VectoCore.Models.Simulation.DataBus { - public interface IBatteryInfo + public interface IRESSInfo { - Volt InternalCellVoltage { get; } + Volt InternalVoltage { get; } double StateOfCharge { get; } @@ -15,5 +15,9 @@ namespace TUGraz.VectoCore.Models.Simulation.DataBus Watt MaxChargePower(Second dt); Watt MaxDischargePower(Second dt); + + double MinSoC { get; } + + double MaxSoC { get; } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index ede11954b97567aaa7cd458a57c89469303b858b..3eb9472c2e7fc08e9ffcc8642c4d1a16f11300f8 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -369,12 +369,23 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } var container = new VehicleContainer(data.ExecutionMode, _modData, _sumWriter) { RunData = data }; + var es = new ElectricSystem(container); - var battery = new Battery(container, data.BatteryData); - battery.Initialize(data.BatteryData.InitialSoC); + if (data.BatteryData != null) { + var battery = new Battery(container, data.BatteryData); + battery.Initialize(data.BatteryData.InitialSoC); + es.Connect(battery); + } - var es = new ElectricSystem(container); - es.Connect(battery); + if (data.SuperCapData != null) { + var superCap = new SuperCap(container, data.SuperCapData); + superCap.Initialize(data.SuperCapData.InitialSoC); + es.Connect(superCap); + } + + //var battery = new Battery(container, data.BatteryData); + //battery.Initialize(data.BatteryData.InitialSoC); + //es.Connect(battery); var aux = new ElectricAuxiliary(container); aux.AddConstant("P_aux_el", data.ElectricAuxDemand ?? 0.SI<Watt>()); @@ -436,11 +447,23 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var container = new VehicleContainer(data.ExecutionMode, _modData, _sumWriter) { RunData = data }; - var battery = new Battery(container, data.BatteryData); - battery.Initialize(data.BatteryData.InitialSoC); + if (data.BatteryData != null && data.SuperCapData != null) { + throw new VectoException("Only one REESS is supported."); + } var es = new ElectricSystem(container); - es.Connect(battery); + + if (data.BatteryData != null) { + var battery = new Battery(container, data.BatteryData); + battery.Initialize(data.BatteryData.InitialSoC); + es.Connect(battery); + } + + if (data.SuperCapData != null) { + var superCap = new SuperCap(container, data.SuperCapData); + superCap.Initialize(data.SuperCapData.InitialSoC); + es.Connect(superCap); + } var ctl = new BatteryElectricMotorController(container, es); @@ -572,11 +595,23 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl // throw new VectoException("CycleType must be DistanceBased"); //} - var battery = new Battery(container, data.BatteryData); - battery.Initialize(data.BatteryData.InitialSoC); - var es = new ElectricSystem(container); - es.Connect(battery); + if (data.BatteryData != null) { + var battery = new Battery(container, data.BatteryData); + battery.Initialize(data.BatteryData.InitialSoC); + es.Connect(battery); + } + + if (data.SuperCapData != null) { + var superCap = new SuperCap(container, data.SuperCapData); + superCap.Initialize(data.SuperCapData.InitialSoC); + es.Connect(superCap); + } + + //var battery = new Battery(container, data.BatteryData); + //battery.Initialize(data.BatteryData.InitialSoC); + //es.Connect(battery); + var aux = new ElectricAuxiliary(container); aux.AddConstant("P_aux_el", data.ElectricAuxDemand ?? 0.SI<Watt>()); es.Connect(aux); diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs index 112c9aefd9e37fbcee3e7f2586fce6e8bb896c4a..1c1560dd88fe206c3d17ad5c7ead45dbfdce60f5 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs @@ -72,7 +72,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl public virtual IDrivingCycleInfo DrivingCycleInfo { get; protected set; } - public IBatteryInfo BatteryInfo { get; protected set; } + public IRESSInfo BatteryInfo { get; protected set; } internal ISimulationOutPort Cycle; @@ -122,6 +122,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl get { return this; } } + public IHybridControllerInfo HybridControllerInfo + { + get { return HybridController; } + } + public virtual void AddComponent(VectoSimulationComponent component) { var commitPriority = 0; @@ -171,7 +176,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl HasElectricMotor = true; }) .If<IHybridController>(c => { HybridController = c; }) - .If<IBatteryInfo>(c => BatteryInfo = c); + .If<IRESSInfo>(c => BatteryInfo = c); if (ignoreComponent) { return; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Battery/BatteryData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Battery/BatteryData.cs index 638096c5ee0a74948bd7ff73a690b4e35bace155..320db461a9abb2be03272463e7efc17241f328c3 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Battery/BatteryData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Battery/BatteryData.cs @@ -28,6 +28,18 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Battery { //public double TargetSoC { get; internal set; } } + public class SuperCapData + { + public Farad Capacity { get; internal set; } + + public Ohm InternalResistance { get; internal set; } + + public Volt MinVoltage { get; internal set; } + + public Volt MaxVoltage { get; internal set; } + public double InitialSoC { get; internal set; } + } + public class SOCMap { protected internal SOCMapEntry[] Entries; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs index ff4b449e6e4d2c78bbb06fe465ed7310d5691e6d..8feb001df2916488df6a1fd9a98b5f3b48c04dc1 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs @@ -7,11 +7,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data [ValidateObject] public EfficiencyMap EfficiencyMap { get; internal set; } + [ValidateObject] public ElectricFullLoadCurve FullLoadCurve { get; internal set; } + [SIRange(double.MinValue, double.MaxValue)] public KilogramSquareMeter Inertia { get; internal set; } + [ValidateObject] public DragCurve DragCurve { get; internal set; } + [SIRange(double.MinValue, double.MaxValue)] + public Watt ContinuousPower { get; internal set; } + + [SIRange(0, double.MaxValue)] + public Joule OverloadBuffer { get; internal set; } + + [SIRange(0, 1)] + public double OverloadRegenerationFactor { get; internal set; } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/ElectricSystem.cs b/VectoCore/VectoCore/Models/SimulationComponent/ElectricSystem.cs index e8c6c9eb0510cf6da458900b599fab1e34553d3d..6b6e389c05046bf1e7594788e0c59c90c8fb662b 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/ElectricSystem.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/ElectricSystem.cs @@ -12,11 +12,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent public class ElectricSystem : StatefulVectoSimulationComponent<ElectricSystem.State>, IElectricSystem, IElectricAuxConnecor, IElectricChargerConnector, IBatteryConnector { - protected readonly List<IBatteryAuxPort> Consumers = new List<IBatteryAuxPort>(); + protected readonly List<IElectricAuxPort> Consumers = new List<IElectricAuxPort>(); - protected IBatteryChargePort Charger; + protected IElectricChargerPort Charger; - protected IBattery Battery; + protected IElectricEnergyStorage Battery; public ElectricSystem(IVehicleContainer container) : base(container) { } @@ -32,24 +32,24 @@ namespace TUGraz.VectoCore.Models.SimulationComponent ? (AbstractElectricSystemResponse)new ElectricSystemDryRunResponse(this) : new ElectricSystemResponseSuccess(this); - if (batResponse is BatteryOverloadResponse) + if (batResponse is RESSOverloadResponse) { response = new ElectricSystemOverloadResponse(this); } - if (batResponse is BatteryUnderloadResponse) + if (batResponse is RESSUnderloadResponse) { response = new ElectricSystemUnderloadResponse(this); } if (!dryRun) { - CurrentState.SetState(powerDemand, auxDemand, chargePower, batResponse.BatteryPower); + CurrentState.SetState(powerDemand, auxDemand, chargePower, batResponse.PowerDemand); } response.AbsTime = absTime; response.SimulationInterval = dt; - response.BatteryResponse = batResponse; - response.BatteryPowerDemand = totalPowerDemand; + response.RESSResponse = batResponse; + response.RESSPowerDemand = totalPowerDemand; response.ConsumerPower = powerDemand; response.AuxPower = auxDemand; response.ChargingPower = chargePower; @@ -74,7 +74,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent #region Implementation of IBatteryChargeProvider - public void Connect(IBatteryChargePort charger) + public void Connect(IElectricChargerPort charger) { Charger = charger; } @@ -83,7 +83,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent #region Implementation of IBatteryAuxOutProvider - public void Connect(IBatteryAuxPort aux) + public void Connect(IElectricAuxPort aux) { if (Consumers.Contains(aux)) { return; } Consumers.Add(aux); @@ -93,7 +93,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent #region Implementation of IBatteryConnector - public void Connect(IBattery battery) + public void Connect(IElectricEnergyStorage battery) { if (Battery != null) { @@ -104,11 +104,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent #endregion - #region Implementation of IBatteryInfo + #region Implementation of IRESSInfo public Volt InternalCellVoltage { - get { return Battery.InternalCellVoltage; } + get { return Battery.InternalVoltage; } } public double StateOfCharge diff --git a/VectoCore/VectoCore/Models/SimulationComponent/IBattery.cs b/VectoCore/VectoCore/Models/SimulationComponent/IElectricEnergyStorage.cs similarity index 88% rename from VectoCore/VectoCore/Models/SimulationComponent/IBattery.cs rename to VectoCore/VectoCore/Models/SimulationComponent/IElectricEnergyStorage.cs index ffc18e54818aaa39c12f345791e6797e7831ae93..d3b35cbfb0bc8137aa61ada58366f22162d4b7bb 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/IBattery.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/IElectricEnergyStorage.cs @@ -23,7 +23,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent IElectricSystemResponse Request(Second absTime, Second dt, Watt powerDemand, bool dryRun = false); } - public interface IBattery : IBatteryProvider, IBatteryInfo + public interface IElectricEnergyStorage : IBatteryProvider, IRESSInfo { } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/IHybridController.cs b/VectoCore/VectoCore/Models/SimulationComponent/IHybridController.cs index 2be5d30ce24f221d658757474fd02468606e379d..9863543cb3a50eb502eae75c7aa64c43fc472fe5 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/IHybridController.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/IHybridController.cs @@ -1,10 +1,12 @@ -using TUGraz.VectoCommon.InputData; +using System.Collections; +using System.Collections.Generic; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.Connector.Ports.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.Models.SimulationComponent { - public interface IHybridController : IPowerTrainComponent + public interface IHybridController : IPowerTrainComponent, IHybridControllerInfo { IShiftStrategy ShiftStrategy { get; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Battery.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Battery.cs index e591eba6ebe557c79b16c4ddf83f46d475a81daf..41725ae1a65519d879bf5c260b6f271074703826 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Battery.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Battery.cs @@ -13,7 +13,7 @@ using TUGraz.VectoCore.OutputData; namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { - public class Battery : StatefulVectoSimulationComponent<Battery.State>, IBattery, IBatteryPort + public class Battery : StatefulVectoSimulationComponent<Battery.State>, IElectricEnergyStorage, IElectricEnergyStoragePort { protected readonly BatteryData ModelData; @@ -23,7 +23,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } #region Implementation of IBatteryProvider - public IBatteryPort MainBatteryPort + public IElectricEnergyStoragePort MainBatteryPort { get { return this; } } @@ -31,7 +31,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl #endregion - #region Implementation of IBatteryPort + #region Implementation of IElectricEnergyStoragePort public void Initialize(double initialSoC) { @@ -42,7 +42,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl PreviousState.StateOfCharge = initialSoC; } - public IBatteryResponse Request(Second absTime, Second dt, Watt powerDemand, bool dryRun = false) + public IRESSResponse Request(Second absTime, Second dt, Watt powerDemand, bool dryRun = false) { var maxChargePower = MaxChargePower(dt); var maxDischargePower = MaxDischargePower(dt); @@ -57,23 +57,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var current = 0.SI<Ampere>(); if (!powerDemand.IsEqual(0)) { - var solutions = VectoMath.QuadraticEquationSolver(internalResistance.Value(), InternalCellVoltage.Value(), + var solutions = VectoMath.QuadraticEquationSolver(internalResistance.Value(), InternalVoltage.Value(), -powerDemand.Value()); current = SelectSolution(solutions, powerDemand.Value()); } var batteryLoss = current * internalResistance * current; var currentCharge = ModelData.Capacity * PreviousState.StateOfCharge; - if (dryRun) - { - return new BatteryDryRunResponse(this) - { + if (dryRun) { + return new RESSDryRunResponse(this) { AbsTime = absTime, SimulationInterval = dt, - MaxBatteryLoadCharge = maxChargePower, - MaxBatteryLoadDischarge = maxDischargePower, - BatteryPower = powerDemand, - BatteryLoss = batteryLoss, + MaxChargePower = maxChargePower, + MaxDischargePower = maxDischargePower, + PowerDemand = powerDemand, + LossPower = batteryLoss, StateOfCharge = (currentCharge + current * dt) / ModelData.Capacity }; @@ -87,14 +85,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl CurrentState.StateOfCharge = (currentCharge + current * dt) / ModelData.Capacity; CurrentState.MaxChargePower = maxChargePower; CurrentState.MaxDischargePower = maxDischargePower; - return new BatteryResponseSuccess(this) - { + return new RESSResponseSuccess(this) { AbsTime = absTime, SimulationInterval = dt, - MaxBatteryLoadCharge = maxChargePower, - MaxBatteryLoadDischarge = maxDischargePower, - BatteryPower = powerDemand, - BatteryLoss = batteryLoss, + MaxChargePower = maxChargePower, + MaxDischargePower = maxDischargePower, + PowerDemand = powerDemand, + LossPower = batteryLoss, StateOfCharge = (currentCharge + current * dt) / ModelData.Capacity }; } @@ -104,7 +101,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return solutions.Where(x => Math.Sign(sign) == Math.Sign(x) && Math.Abs(x).IsSmallerOrEqual(ModelData.MaxCurrent.Value(), 1e-3)).Min().SI<Ampere>(); } - private IBatteryResponse PowerDemandExceeded(Second absTime, Second dt, Watt powerDemand, Watt maxDischargePower, + private IRESSResponse PowerDemandExceeded(Second absTime, Second dt, Watt powerDemand, Watt maxDischargePower, Watt maxChargePower, bool dryRun) { var maxPower = powerDemand < 0 ? maxDischargePower : maxChargePower; @@ -117,28 +114,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var batteryLoss = current * ModelData.InternalResistance.Lookup(PreviousState.StateOfCharge) * current; - AbstractBatteryResponse response; - if (dryRun) - { - response = new BatteryDryRunResponse(this); - } - else - { - if (powerDemand > maxPower) - { - response = new BatteryOverloadResponse(this); - } - else - { - response = new BatteryUnderloadResponse(this); + AbstractRESSResponse response; + if (dryRun) { + response = new RESSDryRunResponse(this); + } else { + if (powerDemand > maxPower) { + response = new RESSOverloadResponse(this); + } else { + response = new RESSUnderloadResponse(this); } } response.AbsTime = absTime; response.SimulationInterval = dt; - response.MaxBatteryLoadCharge = maxChargePower; - response.MaxBatteryLoadDischarge = maxDischargePower; - response.BatteryPower = powerDemand; - response.BatteryLoss = batteryLoss; + response.MaxChargePower = maxChargePower; + response.MaxDischargePower = maxDischargePower; + response.PowerDemand = powerDemand; + response.LossPower = batteryLoss; return response; } @@ -151,20 +142,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected override void DoWriteModalResults(Second absTime, Second dt, IModalDataContainer container) { var cellVoltage = ModelData.SOCMap.Lookup(PreviousState.StateOfCharge); - container[ModalResultField.U0_bat] = cellVoltage; - container[ModalResultField.U_bat_terminal] = + container[ModalResultField.U0_reess] = cellVoltage; + container[ModalResultField.U_reess_terminal] = cellVoltage + CurrentState.TotalCurrent * ModelData.InternalResistance.Lookup(PreviousState.StateOfCharge); // adding both terms because pos. current charges the battery! - container[ModalResultField.I_bat] = CurrentState.TotalCurrent; - container[ModalResultField.BatteryStateOfCharge] = CurrentState.StateOfCharge.SI(); - container[ModalResultField.P_battery_terminal] = CurrentState.PowerDemand; - container[ModalResultField.P_battery_int] = cellVoltage * CurrentState.TotalCurrent; - container[ModalResultField.P_battery_loss] = CurrentState.BatteryLoss; - container[ModalResultField.P_battery_charge_max] = CurrentState.MaxChargePower; - container[ModalResultField.P_battery_discharge_max] = CurrentState.MaxDischargePower; + container[ModalResultField.I_reess] = CurrentState.TotalCurrent; + container[ModalResultField.REESSStateOfCharge] = CurrentState.StateOfCharge.SI(); + container[ModalResultField.P_reess_terminal] = CurrentState.PowerDemand; + container[ModalResultField.P_reess_int] = cellVoltage * CurrentState.TotalCurrent; + container[ModalResultField.P_reess_loss] = CurrentState.BatteryLoss; + container[ModalResultField.P_reess_charge_max] = CurrentState.MaxChargePower; + container[ModalResultField.P_reess_discharge_max] = CurrentState.MaxDischargePower; - container[ModalResultField.E_Bat] = CurrentState.StateOfCharge * cellVoltage * ModelData.Capacity; + container[ModalResultField.E_RESS] = CurrentState.StateOfCharge * cellVoltage * ModelData.Capacity; } @@ -176,9 +167,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl #endregion - #region Implementation of IBatteryInfo + #region Implementation of IRESSInfo - public Volt InternalCellVoltage + public Volt InternalVoltage { get { return ModelData.SOCMap.Lookup(PreviousState.StateOfCharge); } } @@ -200,7 +191,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { var maxChargeCurrent = VectoMath.Min((ModelData.MaxSOC - PreviousState.StateOfCharge) * ModelData.Capacity / dt, ModelData.MaxCurrent); - return InternalCellVoltage * maxChargeCurrent + + return InternalVoltage * maxChargeCurrent + maxChargeCurrent * ModelData.InternalResistance.Lookup(PreviousState.StateOfCharge) * maxChargeCurrent; } @@ -209,21 +200,30 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var maxDischargeCurrent = VectoMath.Max( ((ModelData.MinSOC - PreviousState.StateOfCharge) * ModelData.Capacity / dt).LimitTo(-ModelData.MaxCurrent, 0.SI<Ampere>()), -ModelData.MaxCurrent); - var cellVoltage = InternalCellVoltage; - var maxDischargePower = InternalCellVoltage * maxDischargeCurrent + + var cellVoltage = InternalVoltage; + var maxDischargePower = InternalVoltage * maxDischargeCurrent + maxDischargeCurrent * ModelData.InternalResistance.Lookup(PreviousState.StateOfCharge) * maxDischargeCurrent; var maxPower = -cellVoltage / (4 * ModelData.InternalResistance.Lookup(PreviousState.StateOfCharge)) * cellVoltage; return VectoMath.Max(maxDischargePower, maxPower); } - public Ampere MaxCurrent + public double MinSoC { - get - { - var cellVoltage = ModelData.SOCMap.Lookup(PreviousState.StateOfCharge); - return VectoMath.Max(-ModelData.MaxCurrent, -cellVoltage / (4 * ModelData.InternalResistance.Lookup(PreviousState.StateOfCharge))); - } + get { return ModelData.MinSOC; } } + public double MaxSoC + { + get { return ModelData.MaxSOC; } + } + + //public Ampere MaxCurrent + //{ + // get + // { + // var cellVoltage = ModelData.SOCMap.Lookup(PreviousState.StateOfCharge); + // return VectoMath.Max(-ModelData.MaxCurrent, -cellVoltage / (4 * ModelData.InternalResistance.Lookup(PreviousState.StateOfCharge))); + // } + //} #endregion diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricAuxiliary.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricAuxiliary.cs index 26d86e811feb6e228b0493c1b524ed64f1f24abf..0502961dfa88d1268afda0b9b035ac9b6a3e760d 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricAuxiliary.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricAuxiliary.cs @@ -8,7 +8,7 @@ using TUGraz.VectoCore.Models.Simulation.Impl; namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { - internal class ElectricAuxiliary : IBatteryAuxPort + internal class ElectricAuxiliary : IElectricAuxPort { protected readonly Dictionary<string, Func<Watt>> Auxiliaries = new Dictionary<string, Func<Watt>>(); @@ -19,7 +19,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl DataBus = container; } - #region Implementation of IBatteryAuxPort + #region Implementation of IElectricAuxPort public Watt Initialize() { diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs index 3d44327a70e2005b73436e6d6c258791284b3c39..c8a187e6792faae524c05a2fae578194eb916080 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs @@ -22,6 +22,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected ElectricMotorData ModelData; private PerSecond _maxSpeed; + protected internal Joule ThermalBuffer = 0.SI<Joule>(); + protected internal bool DeRatingActive = false; + public ElectricMotor(IVehicleContainer container, ElectricMotorData data, IElectricMotorControl control, PowertrainPosition position) : base(container) { Control = control; @@ -41,7 +44,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return ModelData.DragCurve.Lookup(electricMotorSpeed) * electricMotorSpeed; } - public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity) + public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity) { PreviousState.OutAngularVelocity = outAngularVelocity; PreviousState.OutTorque = outTorque; @@ -96,7 +99,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl private NewtonMeter GetMaxRecuperationTorque(Second absTime, Second dt, PerSecond avgSpeed) { - var maxEmTorque = ModelData.FullLoadCurve.FullGenerationTorque(avgSpeed); + var tqContinuousPwr = DeRatingActive ? ModelData.ContinuousPower / avgSpeed : null; + var maxEmTorque = VectoMath.Min(tqContinuousPwr, ModelData.FullLoadCurve.FullGenerationTorque(avgSpeed)); var electricSystemResponse = ElectricPower.Request(absTime, dt, 0.SI<Watt>(), true); var maxBatPower = electricSystemResponse.MaxPowerDrag; @@ -107,7 +111,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl private NewtonMeter GetMaxDriveTorque(Second absTime, Second dt, PerSecond avgSpeed) { - var maxEmTorque = ModelData.FullLoadCurve.FullLoadDriveTorque(avgSpeed); + var tqContinuousPwr = DeRatingActive ? -ModelData.ContinuousPower / avgSpeed : null; + var maxEmTorque = VectoMath.Max(tqContinuousPwr ,ModelData.FullLoadCurve.FullLoadDriveTorque(avgSpeed)); var electricSystemResponse = ElectricPower.Request(absTime, dt, 0.SI<Watt>(), true); var maxBatPower = electricSystemResponse.MaxPowerDrive; @@ -186,8 +191,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl // return retVal; //} - if (!dryRun && !eMotorTorque.IsBetween( - maxDriveTorque ?? 0.SI<NewtonMeter>(), maxRecuperationTorque ?? 0.SI<NewtonMeter>())) { + if (!dryRun && (eMotorTorque.IsSmaller(maxDriveTorque ?? 0.SI<NewtonMeter>(), 1e-3) || eMotorTorque.IsGreater(maxRecuperationTorque ?? 0.SI<NewtonMeter>(), 1e-3)) + //!eMotorTorque.IsBetween( + // maxDriveTorque ?? 0.SI<NewtonMeter>(), maxRecuperationTorque ?? 0.SI<NewtonMeter>()) + ) { throw new VectoException( "Invalid operating point provided by strategy! SupportPower: {0}, max Power: {1}, min Power: {2}", eMotorTorque, maxDriveTorque, maxRecuperationTorque); @@ -336,6 +343,31 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl container[ModalResultField.P_electricMotor_drive_max_, Position] = (CurrentState.DriveMax ?? 0.SI<NewtonMeter>()) * avgSpeed; container[ModalResultField.P_electricMotorLoss_, Position] = (CurrentState.InTorque - CurrentState.OutTorque) * avgSpeed - (CurrentState.ElectricPowerToBattery); container[ModalResultField.P_electricMotorInertiaLoss_, Position] = CurrentState.InertiaTorqueLoss * avgSpeed; + + var contribution = + (VectoMath.Abs((CurrentState.InTorque - CurrentState.OutTorque) * avgSpeed) - + ModelData.ContinuousPower) * simulationInterval; + container[ModalResultField.ElectricMotor_OvlBuffer_, Position] = VectoMath.Max(0, (ThermalBuffer + contribution) / ModelData.OverloadBuffer); + } + + protected override void DoCommitSimulationStep(Second time, Second simulationInterval) + { + var avgSpeed = (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2; + ThermalBuffer += (VectoMath.Abs((CurrentState.InTorque - CurrentState.OutTorque) * avgSpeed) - ModelData.ContinuousPower) * simulationInterval; + if (ThermalBuffer < 0) { + ThermalBuffer = 0.SI<Joule>(); + } + + if (DeRatingActive) { + if (ThermalBuffer.IsSmallerOrEqual(ModelData.OverloadBuffer * ModelData.OverloadRegenerationFactor)) { + DeRatingActive = false; + } + } else { + if (ThermalBuffer.IsGreater(ModelData.OverloadBuffer)) { + DeRatingActive = true; + } + } + base.DoCommitSimulationStep(time, simulationInterval); } //public NewtonMeter ElectricDragTorque(PerSecond electricMotorSpeed, Second dt, DrivingBehavior drivingBehavior) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs index d1a884809b683a353cdf5aa8ccb798fa0050c44a..5337cd01a695376a129a0d9451c21de006e76089 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs @@ -211,8 +211,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl EngageTime = absTime + dt; } + var reEngaging = false; if (GearEngaged(absTime) && Disengaged && !outAngularVelocity.IsEqual(0)) { ReEngageGear(absTime, dt, outTorque, outAngularVelocity); + reEngaging = true; Log.Debug("Gearbox engaged gear {0}", Gear); } @@ -223,9 +225,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl EngageTime, null) ?? false; if (changeGear) { ReEngageGear(absTime, dt, outTorque, outAngularVelocity); + reEngaging = true; } } + if (reEngaging && DataBus.HybridControllerInfo != null && + Gear != DataBus.HybridControllerInfo.SelectedGear.Gear) { + return new ResponseDifferentGearEngaged(this); + } + var gear = Disengaged ? NextGear.Gear : Gear; var avgOutAngularVelocity = (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0; var inTorqueLossResult = ModelData.Gears[gear].LossMap.GetTorqueLoss(avgOutAngularVelocity, outTorque); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs index 686d398bf43f4663e66b2b0bdf67cbe3f2031567..10a42b1d59645507feece266c87349d01a6e8a87 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs @@ -88,6 +88,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl get { return _shiftStrategy; } } + public GearInfo SelectedGear { get; protected set; } + + public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun = false) { @@ -120,10 +123,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (!dryRun && /*!DataBus.EngineInfo.EngineOn &&*/ strategySettings.ShiftRequired) { DataBus.GearboxCtl.TriggerGearshift(absTime, dt); _shiftStrategy.SetNextGear(strategySettings.NextGear); + SelectedGear = new GearInfo(strategySettings.NextGear, true); return new ResponseGearShift(this); } retVal = NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, dryRun); + if (retVal is ResponseDifferentGearEngaged) { + retryCount++; + retry = true; + continue; + } retVal.HybridController.StrategySettings = strategySettings; if (!(retVal is ResponseSuccess) && strategySettings.EvaluatedSolution.Gear != 0 && retVal.Gearbox.Gear != strategySettings.EvaluatedSolution.Gear && retryCount < 3) { @@ -143,7 +152,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var strategyResponse = Strategy.Initialize(outTorque, outAngularVelocity); PreviousState.StrategyResponse = strategyResponse as HybridStrategyResponse; _electricMotorTorque = PreviousState.StrategyResponse.MechanicalAssistPower; - return NextComponent.Initialize(outTorque, outAngularVelocity); + var retVal = NextComponent.Initialize(outTorque, outAngularVelocity); + SelectedGear = new GearInfo(DataBus.GearboxInfo.Gear, DataBus.GearboxInfo.TCLocked); + return retVal; } protected override void DoCommitSimulationStep(Second time, Second simulationInterval) @@ -405,6 +416,5 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } } - } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/SimpleHybridController.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SimpleHybridController.cs index ea348f81005cf0531afdbe3ed5a2007f5973ca67..44eaaee5f8557e0e5520a6e0cb500dbef9c761c8 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/SimpleHybridController.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SimpleHybridController.cs @@ -177,6 +177,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { #endregion } - + + public GearInfo SelectedGear { get; } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/SuperCap.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SuperCap.cs new file mode 100644 index 0000000000000000000000000000000000000000..e5289aa20f5929b0226285f7d7db434419ad2fa7 --- /dev/null +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SuperCap.cs @@ -0,0 +1,208 @@ +using System; +using System.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.Models.Connector.Ports.Impl; +using TUGraz.VectoCore.Models.Simulation; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Battery; +using TUGraz.VectoCore.OutputData; + +namespace TUGraz.VectoCore.Models.SimulationComponent.Impl +{ + public class SuperCap : StatefulVectoSimulationComponent<SuperCap.State>, IElectricEnergyStorage, IElectricEnergyStoragePort + { + private SuperCapData ModelData; + + public SuperCap(IVehicleContainer container, SuperCapData modelData) : base(container) + { + ModelData = modelData; + } + + public IElectricEnergyStoragePort MainBatteryPort + { + get { return this; } + } + public Volt InternalVoltage + { + get { return PreviousState.Charge / ModelData.Capacity; } + } + + public double StateOfCharge + { + get { return PreviousState.Charge / (ModelData.Capacity * ModelData.MaxVoltage); } + } + + public WattSecond StoredEnergy + { + get { return PreviousState.Charge * InternalVoltage; } + } + + public Watt MaxChargePower(Second dt) + { + var maxChargeCurrent = (ModelData.Capacity * ModelData.MaxVoltage - PreviousState.Charge) / dt; + return InternalVoltage * maxChargeCurrent + maxChargeCurrent * ModelData.InternalResistance * maxChargeCurrent; + } + + public Watt MaxDischargePower(Second dt) + { + var maxDischargeCurrent = (ModelData.Capacity * ModelData.MinVoltage - PreviousState.Charge) / dt; + var maxDischargePower = InternalVoltage * maxDischargeCurrent + + maxDischargeCurrent * ModelData.InternalResistance * maxDischargeCurrent; + var maxPower = -InternalVoltage / (4 * ModelData.InternalResistance) * InternalVoltage; + return VectoMath.Max(maxDischargePower > 0 ? -double.MaxValue.SI<Watt>():maxDischargePower, maxPower); + } + + public double MinSoC + { + get { return ModelData.MinVoltage / ModelData.MaxVoltage; } + } + public double MaxSoC + { + get { return 1; } + } + + public void Initialize(double initialSoC) + { + PreviousState.Charge = ModelData.Capacity * ((ModelData.MaxVoltage - ModelData.MinVoltage) * initialSoC + + ModelData.MinVoltage); + + } + + public IRESSResponse Request(Second absTime, Second dt, Watt powerDemand, bool dryRun) + { + var maxChargePower = MaxChargePower(dt); + var maxDischargePower = MaxDischargePower(dt); + + if (powerDemand.IsGreater(maxChargePower, Constants.SimulationSettings.InterpolateSearchTolerance) || + powerDemand.IsSmaller(maxDischargePower, Constants.SimulationSettings.InterpolateSearchTolerance)) + { + return PowerDemandExceeded(absTime, dt, powerDemand, maxDischargePower, maxChargePower, dryRun); + } + + var internalResistance = ModelData.InternalResistance; + var current = 0.SI<Ampere>(); + if (!powerDemand.IsEqual(0)) + { + var solutions = VectoMath.QuadraticEquationSolver(internalResistance.Value(), InternalVoltage.Value(), + -powerDemand.Value()); + current = SelectSolution(solutions, powerDemand.Value()); + } + var internalLoss = current * internalResistance * current; + var currentCharge = PreviousState.Charge; + + if (dryRun) + { + return new RESSDryRunResponse(this) + { + AbsTime = absTime, + SimulationInterval = dt, + MaxChargePower = maxChargePower, + MaxDischargePower = maxDischargePower, + PowerDemand = powerDemand, + LossPower = internalLoss, + StateOfCharge = (currentCharge + current * dt) / (ModelData.Capacity * ModelData.MaxVoltage) + + }; + } + CurrentState.SimulationInterval = dt; + CurrentState.PowerDemand = powerDemand; + CurrentState.TotalCurrent = current; + CurrentState.InternalLoss = internalLoss; + + + CurrentState.Charge = (currentCharge + current * dt); + CurrentState.MaxChargePower = maxChargePower; + CurrentState.MaxDischargePower = maxDischargePower; + return new RESSResponseSuccess(this) + { + AbsTime = absTime, + SimulationInterval = dt, + MaxChargePower = maxChargePower, + MaxDischargePower = maxDischargePower, + PowerDemand = powerDemand, + LossPower = internalLoss, + StateOfCharge = (currentCharge + current * dt) / (ModelData.Capacity * ModelData.MaxVoltage) + }; + } + + private Ampere SelectSolution(double[] solutions, double sign) + { + return solutions.FirstOrDefault().SI<Ampere>(); + + //return solutions.Where(x => Math.Sign(sign) == Math.Sign(x) /*&& Math.Abs(x).IsSmallerOrEqual(ModelData.MaxCurrent.Value(), 1e-3)*/).MinBy(x => Math.Abs(x)).SI<Ampere>(); + } + + + private IRESSResponse PowerDemandExceeded(Second absTime, Second dt, Watt powerDemand, Watt maxDischargePower, + Watt maxChargePower, bool dryRun) + { + var maxPower = powerDemand < 0 ? maxDischargePower : maxChargePower; + + var maxChargeCurrent = (ModelData.Capacity * ModelData.MaxVoltage - PreviousState.Charge) / dt; + var maxDischargeCurrent = (ModelData.Capacity * ModelData.MinVoltage - PreviousState.Charge) / dt; + var current = powerDemand < 0 ? maxDischargeCurrent : maxChargeCurrent; + + var batteryLoss = current * ModelData.InternalResistance * current; + + AbstractRESSResponse response; + if (dryRun) { + response = new RESSDryRunResponse(this); + } else { + if (powerDemand > maxPower) { + response = new RESSOverloadResponse(this); + } else { + response = new RESSUnderloadResponse(this); + } + } + response.AbsTime = absTime; + response.SimulationInterval = dt; + response.MaxChargePower = maxChargePower; + response.MaxDischargePower = maxDischargePower; + response.PowerDemand = powerDemand; + response.LossPower = batteryLoss; + + return response; + } + + + protected override void DoWriteModalResults(Second time, Second simulationInterval, IModalDataContainer container) + { + var internalVoltage = PreviousState.Charge / ModelData.Capacity; + container[ModalResultField.U0_reess] = internalVoltage; + container[ModalResultField.U_reess_terminal] = + internalVoltage + + CurrentState.TotalCurrent * ModelData.InternalResistance; // adding both terms because pos. current charges the battery! + container[ModalResultField.I_reess] = CurrentState.TotalCurrent; + container[ModalResultField.REESSStateOfCharge] = CurrentState.Charge / (ModelData.Capacity * ModelData.MaxVoltage); + container[ModalResultField.P_reess_terminal] = CurrentState.PowerDemand; + container[ModalResultField.P_reess_int] = internalVoltage * CurrentState.TotalCurrent; + container[ModalResultField.P_reess_loss] = CurrentState.InternalLoss; + container[ModalResultField.P_reess_charge_max] = CurrentState.MaxChargePower; + container[ModalResultField.P_reess_discharge_max] = CurrentState.MaxDischargePower; + + container[ModalResultField.E_RESS] = CurrentState.Charge * internalVoltage * ModelData.Capacity; + } + + protected override void DoCommitSimulationStep(Second time, Second simulationInterval) + { + AdvanceState(); + } + + public class State + { + public AmpereSecond Charge; + + public Second SimulationInterval; + + public Watt PowerDemand; + + public Ampere TotalCurrent; + public Watt MaxChargePower; + public Watt MaxDischargePower; + public Watt InternalLoss; + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs index 061c652b05f43e1a4ad6979d4f88f6d258e6e2df..20248584db125e52aa070e7f88d83371bd9db77f 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs @@ -137,9 +137,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } var auxEnergyReserve = ModelData.ElectricAuxDemand * StrategyParameters.AuxReserveTime; - var minSoc = Math.Max(ModelData.BatteryData.MinSOC, StrategyParameters.MinSoC); - BatteryDischargeEnergyThreshold = ModelData.BatteryData.Capacity * minSoc * ModelData.BatteryData.SOCMap.Lookup(minSoc) + - auxEnergyReserve; + BatteryDischargeEnergyThreshold = 0.SI<WattSecond>(); + if (auxEnergyReserve > 0) { + var minSoc = Math.Max(ModelData.BatteryData?.MinSOC ?? ModelData.SuperCapData.InitialSoC, + StrategyParameters.MinSoC); + BatteryDischargeEnergyThreshold = + ModelData.BatteryData.Capacity * minSoc * ModelData.BatteryData.SOCMap.Lookup(minSoc) + + auxEnergyReserve; + } } @@ -185,7 +190,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies if (DataBus.DriverInfo.DrivingAction == DrivingAction.Brake && (eval.Count == 0 )) { - eval.Add(MaxRecuperationSetting(absTime, dt, outTorque, outAngularVelocity)); + eval.Add(MaxRecuperationSetting(absTime, dt, outTorque, outAngularVelocity, dryRun)); } var origBest = SelectBestOption_ORIG(eval, absTime, dt, outTorque, outAngularVelocity, dryRun, currentGear); @@ -206,8 +211,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies CurrentState.Evaluations = eval; CurrentState.GearboxEngaged = DataBus.GearboxInfo.GearEngaged(absTime); if (!DataBus.EngineCtl.CombustionEngineOn && !best.ICEOff && !retVal.ShiftRequired) { - CurrentState.ICEStartTStmp = absTime; - } + CurrentState.ICEStartTStmp = absTime; + } DryRunSolution = new DryRunSolutionState(DataBus.DriverInfo.DrivingAction, best); } @@ -223,6 +228,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies public IResponse AmendResponse(IResponse response, Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun) { + if (response is ResponseSuccess) { + if (!DataBus.EngineInfo.EngineOn && !CurrentState.Solution.ICEOff) { + //CurrentState.ICEStartTStmp = absTime; + } + } if (DataBus.DriverInfo.DrivingAction == DrivingAction.Accelerate && (outTorque * outAngularVelocity).IsEqual(StrategyParameters.MaxDrivetrainPower, Constants.SimulationSettings.LineSearchTolerance.SI<Watt>())) { @@ -338,7 +348,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies if (tmp.CombustionEngineOn) { var firstEntry = new HybridResultEntry(); - CalcualteCosts(firstResponse, dt, firstEntry, AllowICEOff(absTime)); + CalcualteCosts(firstResponse, dt, firstEntry, AllowICEOff(absTime), dryRun); if (DataBus.GearboxInfo.GearEngaged(absTime) && (firstEntry.IgnoreReason & (HybridConfigurationIgnoreReason.EngineSpeedTooLow | HybridConfigurationIgnoreReason.EngineSpeedBelowDownshift)) != 0) { @@ -357,7 +367,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies eval.AddRange(FindSolution(absTime, dt, outTorque, outAngularVelocity, dryRun)); } else { EvaluateConfigsForGear( - absTime, dt, outTorque, outAngularVelocity, currentGear, AllowICEOff(absTime), eval, emPos); + absTime, dt, outTorque, outAngularVelocity, currentGear, AllowICEOff(absTime), eval, emPos, dryRun); } }else if (DataBus.GearboxInfo.GearEngaged(absTime)) { eval.AddRange(FindSolution(absTime, dt, outTorque, outAngularVelocity, dryRun)); @@ -389,7 +399,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies absTime, dt, outTorque, outAngularVelocity, currentGear, maxRecuperation); if (maxRecuperationResponse.DeltaDragLoad.IsSmaller(0) && - maxRecuperationResponse.ElectricSystem.BatteryPowerDemand.IsBetween(maxRecuperationResponse.ElectricSystem.MaxPowerDrag, maxRecuperationResponse.ElectricSystem.MaxPowerDrive)) { + maxRecuperationResponse.ElectricSystem.RESSPowerDemand.IsBetween(maxRecuperationResponse.ElectricSystem.MaxPowerDrag, maxRecuperationResponse.ElectricSystem.MaxPowerDrive)) { // even with full recuperation (and no braking) the operating point is below the drag curve (and the battery can handle it) - use full recuperation eval.Add( new HybridResultEntry() { @@ -521,7 +531,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var newEval = new List<HybridResultEntry>(); EvaluateConfigsForGear( absTime, dt, outTorque, outAngularVelocity, best.Gear + 1, AllowICEOff(absTime), newEval, - best.Setting.MechanicalAssistPower.First().Key); + best.Setting.MechanicalAssistPower.First().Key, dryRun); if (newEval.Count > 0) { best = DoSelectBestOption(newEval, absTime, dt, outTorque, outAngularVelocity, dryRun, currentGear); } @@ -531,7 +541,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var newEval = new List<HybridResultEntry>(); EvaluateConfigsForGear( absTime, dt, outTorque, outAngularVelocity, best.Gear - 1, AllowICEOff(absTime), newEval, - best.Setting.MechanicalAssistPower.First().Key); + best.Setting.MechanicalAssistPower.First().Key, dryRun); if (newEval.Count > 0) { best = DoSelectBestOption(newEval, absTime, dt, outTorque, outAngularVelocity, dryRun, currentGear); } @@ -586,7 +596,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } best = eval.Where(x => !x.IgnoreReason.BatteryDemandExceeded()) .OrderBy(x => Math.Abs((int)currentGear - x.Gear)) - .ThenBy(x => -x.Response.ElectricSystem.BatteryPowerDemand.Value()).First(); + .ThenBy(x => -x.Response.ElectricSystem.RESSPowerDemand.Value()).First(); return best; } } @@ -676,7 +686,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies best = eval.Where( x => !x.IgnoreReason.BatteryDemandExceeded()) .OrderBy(x => Math.Abs((int)currentGear - x.Gear)) - .ThenBy(x => -x.Response.ElectricSystem.BatteryPowerDemand.Value()).First(); + .ThenBy(x => -x.Response.ElectricSystem.RESSPowerDemand.Value()).First(); } else { best = filtered.MinBy( x => x.Setting.MechanicalAssistPower.Sum(e => e.Value ?? 0.SI<NewtonMeter>())); @@ -706,7 +716,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var newEval = new List<HybridResultEntry>(); EvaluateConfigsForGear( absTime, dt, outTorque, outAngularVelocity, best.Gear + 1, AllowICEOff(absTime), newEval, - best.Setting.MechanicalAssistPower.First().Key); + best.Setting.MechanicalAssistPower.First().Key, dryRun); best = SelectBestOption(newEval, absTime, dt, outTorque, outAngularVelocity, dryRun, currentGear); } if ((best.IgnoreReason & HybridConfigurationIgnoreReason.EngineSpeedBelowDownshift) != 0) { @@ -714,7 +724,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var newEval = new List<HybridResultEntry>(); EvaluateConfigsForGear( absTime, dt, outTorque, outAngularVelocity, best.Gear - 1, AllowICEOff(absTime), newEval, - best.Setting.MechanicalAssistPower.First().Key); + best.Setting.MechanicalAssistPower.First().Key, dryRun); best = SelectBestOption(newEval, absTime, dt, outTorque, outAngularVelocity, dryRun, currentGear); } } @@ -744,7 +754,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } - private HybridResultEntry MaxRecuperationSetting(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity) + private HybridResultEntry MaxRecuperationSetting(Second absTime, Second dt, NewtonMeter outTorque, + PerSecond outAngularVelocity, bool dryRun) { var first = new HybridStrategyResponse() { CombustionEngineOn = DataBus.EngineInfo.EngineOn, // AllowICEOff(absTime), @@ -757,7 +768,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var emPos = ModelData.ElectricMachinesData.First().Item1; var emTorque = !ElectricMotorCanPropellDuringTractionInterruption && (firstResponse.Gearbox.Gear == 0 || !DataBus.GearboxInfo.GearEngaged(absTime)) ? null : firstResponse.ElectricMotor.MaxRecuperationTorque; - return TryConfiguration(absTime, dt, outTorque, outAngularVelocity, currentGear, emPos, emTorque, double.NaN, AllowICEOff(absTime)); + return TryConfiguration(absTime, dt, outTorque, outAngularVelocity, currentGear, emPos, emTorque, double.NaN, AllowICEOff(absTime), dryRun); } private List<HybridResultEntry> FindSolution(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun) @@ -788,7 +799,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies nextGear <= Math.Min(numGears, gear + gearRangeUpshift); nextGear++) { - var emOffEntry = EvaluateConfigsForGear(absTime, dt, outTorque, outAngularVelocity, nextGear, allowICEOff, responses, emPos); + var emOffEntry = EvaluateConfigsForGear(absTime, dt, outTorque, outAngularVelocity, nextGear, allowICEOff, responses, emPos, dryRun); if (emOffEntry == null) { continue; @@ -805,7 +816,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies if (allowEmergencyUpshift && tmpBest != null && !tmpBest.ICEOff) { var nextGear = gear + 1; var emOffEntry = EvaluateConfigsForGear( - absTime, dt, outTorque, outAngularVelocity, nextGear, allowICEOff, responses, emPos); + absTime, dt, outTorque, outAngularVelocity, nextGear, allowICEOff, responses, emPos, dryRun); // GetEmOffResultEntry(absTime, dt, outTorque, outAngularVelocity, nextGear); //if (emOffEntry != null) { @@ -824,7 +835,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies if (allowEmergencyDownshift && tmpBest != null && !tmpBest.ICEOff) { var nextGear = gear - 1; var emOffEntry = EvaluateConfigsForGear( - absTime, dt, outTorque, outAngularVelocity, nextGear, allowICEOff, responses, emPos); + absTime, dt, outTorque, outAngularVelocity, nextGear, allowICEOff, responses, emPos, dryRun); // GetEmOffResultEntry(absTime, dt, outTorque, outAngularVelocity, nextGear); //if (emOffEntry != null) { @@ -844,23 +855,23 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies return responses; } - private HybridResultEntry EvaluateConfigsForGear( - Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, uint nextGear, bool allowICEOff, - List<HybridResultEntry> responses, PowertrainPosition emPos) + private HybridResultEntry EvaluateConfigsForGear(Second absTime, Second dt, NewtonMeter outTorque, + PerSecond outAngularVelocity, uint nextGear, bool allowICEOff, + List<HybridResultEntry> responses, PowertrainPosition emPos, bool dryRun) { var emOffEntry = GetEmOffResultEntry(absTime, dt, outTorque, outAngularVelocity, nextGear); if (emOffEntry == null) { return null; } - CalcualteCosts(emOffEntry.Response, dt, emOffEntry, allowICEOff); + CalcualteCosts(emOffEntry.Response, dt, emOffEntry, allowICEOff, dryRun); responses.Add(emOffEntry); var emTqReq = (emOffEntry.Response.ElectricMotor.PowerRequest + emOffEntry.Response.ElectricMotor.InertiaPowerDemand) / emOffEntry.Response.ElectricMotor.AngularVelocity; IterateEMTorque( - absTime, dt, outTorque, outAngularVelocity, nextGear, allowICEOff, emOffEntry.Response, emTqReq, emPos, responses); + absTime, dt, outTorque, outAngularVelocity, nextGear, allowICEOff, emOffEntry.Response, emTqReq, emPos, responses, dryRun); return emOffEntry; } @@ -887,7 +898,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies return entry; } - private void IterateEMTorque(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, uint nextGear, bool allowIceOff, IResponse firstResponse, NewtonMeter emTqReq, PowertrainPosition emPos, List<HybridResultEntry> responses) + private void IterateEMTorque(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, + uint nextGear, bool allowIceOff, IResponse firstResponse, NewtonMeter emTqReq, PowertrainPosition emPos, + List<HybridResultEntry> responses, bool dryRun) { const double stepSize = 0.1; @@ -907,7 +920,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies continue; } - var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, emTorque, u, allowIceOff); + var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, emTorque, u, allowIceOff, dryRun); responses.Add(tmp); } @@ -917,11 +930,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var emTorqueM = emTqReq * maxU; if (!responses.Any(x => x.Gear == nextGear && x.U.IsEqual(maxU)) && emTorqueM.IsBetween( 0.SI<NewtonMeter>(), firstResponse.ElectricMotor.MaxDriveTorque)) { - var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, emTorqueM, maxU, allowIceOff); + var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, emTorqueM, maxU, allowIceOff, dryRun); responses.Add(tmp); } if (maxEmTorque.IsSmaller(0) && emTqReq.IsGreater(-maxEmTorque)) { - var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, maxEmTorque, maxEmTorque / emTqReq, allowIceOff); + var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, maxEmTorque, maxEmTorque / emTqReq, allowIceOff, dryRun); if (!tmp.Response.ElectricSystem.ConsumerPower.IsSmaller(emDrivePower)) { responses.Add(tmp); } @@ -941,7 +954,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies !emDriveTorque.IsEqual(emDragTorque, 1.SI<NewtonMeter>())) { var tmp = TryConfiguration( absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, emDriveTorque, emDriveTorque / emTqReq, - allowIceOff); + allowIceOff, dryRun); responses.Add(tmp); } } @@ -977,7 +990,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies // only consider when within allowed EM torque range var tmp = TryConfiguration( absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, emTorqueICEOff, emTorqueICEOff / emTqReq, - allowIceOff); + allowIceOff, dryRun); responses.Add(tmp); } } catch (Exception ) { @@ -995,7 +1008,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies continue; } - var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, emTorque, u, allowIceOff); + var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, emTorque, u, allowIceOff, dryRun); responses.Add(tmp); } var maxEmTorqueRecuperate = firstResponse.ElectricMotor.MaxRecuperationTorque ?? 0.SI<NewtonMeter>(); @@ -1032,7 +1045,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var tmp = TryConfiguration( absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, emTorqueICEOff, emTorqueICEOff / maxEmTorqueRecuperate, - allowIceOff); + allowIceOff, dryRun); responses.Add(tmp); } } catch (Exception) { @@ -1040,7 +1053,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } } else { if (maxEmTorqueRecuperate.IsGreater(0) && (-emTqReq).IsBetween(maxEmTorqueRecuperate, 0.SI<NewtonMeter>())) { - var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, -emTqReq, -emTqReq / maxEmTorqueRecuperate, allowIceOff); + var tmp = TryConfiguration(absTime, dt, outTorque, outAngularVelocity, nextGear, emPos, + -emTqReq, -emTqReq / maxEmTorqueRecuperate, allowIceOff, dryRun); responses.Add(tmp); } } @@ -1048,7 +1062,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } } - private HybridResultEntry TryConfiguration(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, uint nextGear, PowertrainPosition emPos, NewtonMeter emTorque, double u, bool allowIceOff) + private HybridResultEntry TryConfiguration(Second absTime, Second dt, NewtonMeter outTorque, + PerSecond outAngularVelocity, uint nextGear, PowertrainPosition emPos, NewtonMeter emTorque, double u, + bool allowIceOff, bool dryRun) { var cfg = new HybridStrategyResponse() { CombustionEngineOn = true, @@ -1065,7 +1081,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies Response = resp, Gear = nextGear, }; - CalcualteCosts(resp, dt, tmp, allowIceOff); + CalcualteCosts(resp, dt, tmp, allowIceOff, dryRun); return tmp; } @@ -1078,7 +1094,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies TestPowertrain.HybridController.ApplyStrategySettings(cfg); TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity); TestPowertrain.Clutch.Initialize(DataBus.ClutchInfo.ClutchLosses); - TestPowertrain.Battery.Initialize(DataBus.BatteryInfo.StateOfCharge); + TestPowertrain.Battery?.Initialize(DataBus.BatteryInfo.StateOfCharge); + TestPowertrain.SuperCap?.Initialize(DataBus.BatteryInfo.StateOfCharge); var currentGear = PreviousState.GearboxEngaged ? DataBus.GearboxInfo.Gear : Controller.ShiftStrategy.NextGear.Gear; @@ -1135,6 +1152,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies //} + var pos = ModelData.ElectricMachinesData.FirstOrDefault().Item1; + TestPowertrain.ElectricMotor.ThermalBuffer = + (DataBus.ElectricMotorInfo(pos) as ElectricMotor).ThermalBuffer; + TestPowertrain.ElectricMotor.DeRatingActive = + (DataBus.ElectricMotorInfo(pos) as ElectricMotor).DeRatingActive; + if (/*nextGear != DataBus.GearboxInfo.Gear && */TestPowertrain.ElectricMotorP2 != null) { TestPowertrain.ElectricMotorP2.PreviousState.OutAngularVelocity = DataBus.ElectricMotorInfo(PowertrainPosition.HybridP2).ElectricMotorSpeed; @@ -1149,7 +1172,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies return retVal as ResponseDryRun; } - private void CalcualteCosts(IResponse resp, Second dt, HybridResultEntry tmp, bool allowIceOff) + private void CalcualteCosts(IResponse resp, Second dt, HybridResultEntry tmp, bool allowIceOff, bool dryRun) { tmp.IgnoreReason = 0; if (resp == null) { @@ -1158,7 +1181,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies return; } - if (!resp.Engine.TotalTorqueDemand.IsBetween( + var iceOff = allowIceOff && resp.Engine.TorqueOutDemand.IsEqual(0, 1e-3); + if (DataBus.DriverInfo.DrivingAction == DrivingAction.Accelerate && dryRun) { + // this means we search for an acceleration the vehicle is capable to do - so treat ICE overload regularly + iceOff = false; + } + + if (!iceOff && !resp.Engine.TotalTorqueDemand.IsBetween( resp.Engine.DragTorque, resp.Engine.DynamicFullLoadTorque)) { tmp.FuelCosts = double.NaN; tmp.IgnoreReason |= resp.Engine.TotalTorqueDemand.IsGreater(resp.Engine.DynamicFullLoadTorque) @@ -1193,7 +1222,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var absTime = DataBus.AbsTime; // todo! if (DataBus.GearboxInfo.GearEngaged(absTime)) { - if (allowIceOff && resp.Engine.TorqueOutDemand.IsEqual(0)) { + if (iceOff) { // no torque from ICE requested, ICE could be turned off tmp.FuelCosts = 0; tmp.ICEOff = true; @@ -1214,7 +1243,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies ? HybridConfigurationIgnoreReason.EngineTorqueDemandTooHigh : HybridConfigurationIgnoreReason.EngineTorqueDemandTooLow; } - if (allowIceOff && resp.Engine.TorqueOutDemand.IsEqual(0, 1e-3)) { + if (iceOff) { // no torque from ICE requested, ICE could be turned off tmp.FuelCosts = 0; tmp.ICEOff = true; @@ -1227,8 +1256,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } } - var maxSoC = Math.Min(ModelData.BatteryData.MaxSOC, StrategyParameters.MaxSoC); - var minSoC = Math.Max(ModelData.BatteryData.MinSOC, StrategyParameters.MinSoC); + var maxSoC = Math.Min(DataBus.BatteryInfo.MaxSoC, StrategyParameters.MaxSoC); + var minSoC = Math.Max(DataBus.BatteryInfo.MinSoC , StrategyParameters.MinSoC); tmp.SoCPenalty = 1 - Math.Pow((DataBus.BatteryInfo.StateOfCharge - StrategyParameters.TargetSoC) / (0.5 * (maxSoC - minSoC)), 5); var socthreshold = StrategyParameters.MinSoC + (StrategyParameters.MaxSoC - StrategyParameters.MinSoC) * 0.1; @@ -1260,14 +1289,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies private void SetBatteryCosts(IResponse resp, Second dt, HybridResultEntry tmp) { var batEnergyStored = DataBus.BatteryInfo.StoredEnergy; - var batEnergy = resp.ElectricSystem.BatteryPowerDemand * dt; - var batPower = resp.ElectricSystem.BatteryResponse.BatteryPower; + var batEnergy = resp.ElectricSystem.RESSPowerDemand * dt; + var batPower = resp.ElectricSystem.RESSResponse.PowerDemand; - if (batPower.IsSmaller(resp.ElectricSystem.BatteryResponse.MaxBatteryLoadDischarge) || batPower.IsGreater(resp.ElectricSystem.BatteryResponse.MaxBatteryLoadCharge)) { + if (batPower.IsSmaller(resp.ElectricSystem.RESSResponse.MaxDischargePower) || batPower.IsGreater(resp.ElectricSystem.RESSResponse.MaxChargePower)) { // battery power demand too high - would discharge below min SoC / charge above max SoC tmp.BatCosts = double.NaN; tmp.IgnoreReason |= batPower.IsSmaller( - resp.ElectricSystem.BatteryResponse.MaxBatteryLoadDischarge) + resp.ElectricSystem.RESSResponse.MaxDischargePower) ? HybridConfigurationIgnoreReason.BatteryBelowMinSoC : HybridConfigurationIgnoreReason.BatteryAboveMaxSoc; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs index aa4e9d7bd211c072909489e2f6932fb63720e3d3..a45c1abac69e146bd4ef1335cb769fb39b697dd1 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Utils; @@ -16,6 +17,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies { public Gearbox Gearbox; public SimpleHybridController HybridController; public Battery Battery; + public SuperCap SuperCap; public Clutch Clutch; public IBrakes Brakes; @@ -23,6 +25,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies { public IDrivingCycleInfo DrivingCycle; public StopStartCombustionEngine CombustionEngine; + public ElectricMotor ElectricMotor; public ElectricMotor ElectricMotorP2; public ElectricMotor ElectricMotorP3; @@ -32,8 +35,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies { Gearbox = Container.GearboxCtl as Gearbox; HybridController = Container.HybridController as SimpleHybridController; Battery = Container.BatteryInfo as Battery; + SuperCap = Container.BatteryInfo as SuperCap; Clutch = Container.ClutchInfo as Clutch; CombustionEngine = Container.EngineInfo as StopStartCombustionEngine; + ElectricMotor = container.ElectricMotors.FirstOrDefault().Value as ElectricMotor; ElectricMotorP2 = container.ElectricMotors.ContainsKey(PowertrainPosition.HybridP2) ? container.ElectricMotors[PowertrainPosition.HybridP2] as ElectricMotor : null; diff --git a/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs index 7cbf6515a36c37020251f284e25df28dfeb7045c..9a8daf9561414c59521fcc248633567766dc655f 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs @@ -36,6 +36,8 @@ public class JSONFileWriter : IOutputFileWriter private const int ElectricMotorFormatVersion = 1; + private const int REESSFormatVersion = 1; + private const int HybridStrategyParamsVersion = 1; private static JSONFileWriter _instance; @@ -81,23 +83,25 @@ public class JSONFileWriter : IOutputFileWriter body.Add("DragCurve", GetRelativePath(electricMachine.DragCurve.Source, Path.GetDirectoryName(filename))); body.Add("EfficiencyMap", GetRelativePath(electricMachine.EfficiencyMap.Source, Path.GetDirectoryName(filename))); body.Add("Inertia", electricMachine.Inertia.Value()); - + body.Add("ContinuousPower", electricMachine.ContinuousPower.Value()); + body.Add("ThermalOverloadBuffer", electricMachine.OverloadBuffer.Value() / 1e6); + body.Add("ThermalOverloadRecoveryFactor", electricMachine.OverloadRecoveryFactor); WriteFile(header, body, filename); } public void SaveBattery(IBatteryPackEngineeringInputData battery, string filename, bool declMode) { - var header = GetHeader(ElectricMotorFormatVersion); + var header = GetHeader(REESSFormatVersion); var body = new Dictionary<string, object>(); body.Add("SavedInDeclMode", declMode); - + body.Add("REESSType", "Battery"); body.Add("Model", battery.Model); body.Add("Capacity", battery.Capacity.AsAmpHour); body.Add("SOC_min", battery.MinSOC * 100.0); body.Add("SOC_max",battery.MaxSOC * 100.0); - body.Add("MaxCurrentFactor", battery.MaxCurrentFactor); + body.Add("MaxCurrentFactor", battery.MaxCurrentFactor.ConvertToPerHour().Value); body.Add("InternalResistanceCurve", GetRelativePath(battery.InternalResistanceCurve.Source, Path.GetDirectoryName(filename))); body.Add("SoCCurve", GetRelativePath(battery.VoltageCurve.Source, Path.GetDirectoryName(filename))); @@ -105,7 +109,24 @@ public class JSONFileWriter : IOutputFileWriter WriteFile(header, body, filename); } - public void SaveEngine(IEngineEngineeringInputData eng, string filename, bool DeclMode) + public void SaveSuperCap(ISuperCapEngineeringInputData superCap, string filename, bool declMode) + { + var header = GetHeader(REESSFormatVersion); + + var body = new Dictionary<string, object>(); + + body.Add("SavedInDeclMode", declMode); + body.Add("REESSType", "SuperCap"); + body.Add("Model", superCap.Model); + body.Add("Capacity", superCap.Capacity.Value()); + body.Add("InternalResistance", superCap.InternalResistance.Value()); + body.Add("U_min", superCap.MinVoltage.Value()); + body.Add("U_max", superCap.MaxVoltage.Value()); + + WriteFile(header, body, filename); + } + + public void SaveEngine(IEngineEngineeringInputData eng, string filename, bool DeclMode) { // Header var header = GetHeader(EngineFormatVersion); @@ -526,7 +547,7 @@ public class JSONFileWriter : IOutputFileWriter var retVal = new Dictionary<string, object>() { {"NumPacks", vehicle.Components.ElectricStorage.Count}, - {"BatteryFile", GetRelativePath(vehicle.Components.ElectricStorage.BatteryPack.DataSource.SourceFile, basePath)} + {"BatteryFile", GetRelativePath(vehicle.Components.ElectricStorage.REESSPack.DataSource.SourceFile, basePath)} }; return retVal; } diff --git a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs index 5e30bbd75a04a84d14dc7989516ae4eff2227591..480279985ede623f72987839bd673de4790efc42 100644 --- a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs @@ -355,23 +355,23 @@ namespace TUGraz.VectoCore.OutputData public static WattSecond WorkBatteryChargeTerminal(this IModalDataContainer data) { - return data.TimeIntegral<WattSecond>(ModalResultField.P_battery_terminal, x => x.IsGreater(0)); + return data.TimeIntegral<WattSecond>(ModalResultField.P_reess_terminal, x => x.IsGreater(0)); } public static WattSecond WorkBatteryDischargeTerminal(this IModalDataContainer data) { - return -data.TimeIntegral<WattSecond>(ModalResultField.P_battery_terminal, x => x.IsSmaller(0)); + return -data.TimeIntegral<WattSecond>(ModalResultField.P_reess_terminal, x => x.IsSmaller(0)); } public static WattSecond WorkBatteryChargeInternal(this IModalDataContainer data) { - return data.TimeIntegral<WattSecond>(ModalResultField.P_battery_int, x => x.IsGreater(0)); + return data.TimeIntegral<WattSecond>(ModalResultField.P_reess_int, x => x.IsGreater(0)); } public static WattSecond WorkBatteryDischargeInternal(this IModalDataContainer data) { - return -data.TimeIntegral<WattSecond>(ModalResultField.P_battery_int, x => x.IsSmaller(0)); + return -data.TimeIntegral<WattSecond>(ModalResultField.P_reess_int, x => x.IsSmaller(0)); } public static KilogramPerSecond FuelConsumptionPerSecond(this IModalDataContainer data, ModalResultField mrf, IFuelProperties fuelData) diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs index 52b73de6087563b223dcebdbd79004d8b6837ad9..57582061c3ee9ba5c19c7c8aff3734a59c6e7e22 100644 --- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs @@ -71,7 +71,7 @@ namespace TUGraz.VectoCore.OutputData ModalResultField.P_electricMotor_mech_, ModalResultField.P_electricMotor_el_, ModalResultField.P_electricMotorLoss_, ModalResultField.P_electricMotorInertiaLoss_, /*ModalResultField.P_electricMotor_brake_,*/ ModalResultField.P_electricMotor_drive_max_, - ModalResultField.P_electricMotor_gen_max_ + ModalResultField.P_electricMotor_gen_max_, ModalResultField.ElectricMotor_OvlBuffer_ }; public static readonly IList<ModalResultField> FuelConsumptionSignals = new[] { @@ -360,22 +360,22 @@ namespace TUGraz.VectoCore.OutputData public double BatteryStartSoC() { - return Data.AsEnumerable().Cast<DataRow>().First().Field<SI>(ModalResultField.BatteryStateOfCharge.GetName()).Value() * 100; + return Data.AsEnumerable().Cast<DataRow>().First().Field<SI>(ModalResultField.REESSStateOfCharge.GetName()).Value() * 100; } public double BatteryEndSoC() { - return Data.AsEnumerable().Cast<DataRow>().Last().Field<SI>(ModalResultField.BatteryStateOfCharge.GetName()).Value() * 100; + return Data.AsEnumerable().Cast<DataRow>().Last().Field<SI>(ModalResultField.REESSStateOfCharge.GetName()).Value() * 100; } public WattSecond BatteryLoss() { - return TimeIntegral<WattSecond>(ModalResultField.P_battery_loss); + return TimeIntegral<WattSecond>(ModalResultField.P_reess_loss); } public WattSecond BatteryEnergyEnd() { - return Data.AsEnumerable().Cast<DataRow>().Last().Field<SI>(ModalResultField.E_Bat.GetName()) + return Data.AsEnumerable().Cast<DataRow>().Last().Field<SI>(ModalResultField.E_RESS.GetName()) .Cast<WattSecond>(); } @@ -574,16 +574,16 @@ namespace TUGraz.VectoCore.OutputData }.Select(x => x.GetName())); if (ElectricMotors.Count > 0) { dataColumns.AddRange(new[] { - ModalResultField.P_battery_terminal, - ModalResultField.P_battery_int, - ModalResultField.P_battery_loss, - ModalResultField.P_battery_charge_max, - ModalResultField.P_battery_discharge_max, - ModalResultField.BatteryStateOfCharge, - ModalResultField.U_bat_terminal, - ModalResultField.U0_bat, - ModalResultField.I_bat, - ModalResultField.E_Bat + ModalResultField.P_reess_terminal, + ModalResultField.P_reess_int, + ModalResultField.P_reess_loss, + ModalResultField.P_reess_charge_max, + ModalResultField.P_reess_discharge_max, + ModalResultField.REESSStateOfCharge, + ModalResultField.U_reess_terminal, + ModalResultField.U0_reess, + ModalResultField.I_reess, + ModalResultField.E_RESS }.Select(x => x.GetName())); foreach (var em in ElectricMotors.OrderBy(x => x).Reverse()) { dataColumns.AddRange(_electricMotorColumns.Select(emCol => diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index 25abe7a75e5c511f71b5186483be2dcac2a16434..aabcfd8380b4c038cf444ed131f902b2299593a1 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -331,7 +331,7 @@ namespace TUGraz.VectoCore.OutputData } row[Fields.ElectricEnergyConsumptionPerKm] = - (-modData.TimeIntegral<WattSecond>(ModalResultField.P_battery_terminal) / modData.Distance).Cast<JoulePerMeter>().ConvertToKiloWattHourPerKiloMeter(); + (-modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_terminal) / modData.Distance).Cast<JoulePerMeter>().ConvertToKiloWattHourPerKiloMeter(); } } diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index df3dc04f0dd867410091b87ed77222387db1407c..6fee0df0162621df96df838bf7bb491f276624fa 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -285,7 +285,7 @@ <Compile Include="InputData\Reader\DataObjectAdapter\DeclarationDataAdapterPrimaryBus.cs" /> <Compile Include="InputData\Reader\ComponentData\ElectricFullLoadCurveReader.cs" /> <Compile Include="Models\Connector\Ports\Impl\BatteryResponse.cs" /> - <Compile Include="Models\Connector\Ports\IBatteryPort.cs" /> + <Compile Include="Models\Connector\Ports\IElectricEnergyStoragePort.cs" /> <Compile Include="Models\SimulationComponent\Data\Battery\BatteryData.cs" /> <Compile Include="InputData\Reader\ComponentData\BatterySOCReader.cs" /> <Compile Include="InputData\Reader\DataObjectAdapter\DeclarationDataAdapterSingleBus.cs" /> @@ -395,7 +395,7 @@ <Compile Include="InputData\Reader\ComponentData\WHRPowerReader.cs" /> <Compile Include="Models\SimulationComponent\Data\HybridStrategyParameters.cs" /> <Compile Include="Models\SimulationComponent\ElectricSystem.cs" /> - <Compile Include="Models\SimulationComponent\IBattery.cs" /> + <Compile Include="Models\SimulationComponent\IElectricEnergyStorage.cs" /> <Compile Include="Models\SimulationComponent\IElectricMotor.cs" /> <Compile Include="Models\SimulationComponent\IElectricMotorControl.cs" /> <Compile Include="Models\SimulationComponent\IHybridControlledGearbox.cs" /> @@ -409,11 +409,12 @@ <Compile Include="Models\SimulationComponent\IHybridController.cs" /> <Compile Include="Models\SimulationComponent\Impl\SimpleHybridController.cs" /> <Compile Include="Models\SimulationComponent\Impl\StopStartCombustionEngine.cs" /> + <Compile Include="Models\SimulationComponent\Impl\SuperCap.cs" /> <Compile Include="Models\SimulationComponent\Strategies\DelegateParallelHybridStrategy.cs" /> <Compile Include="Models\SimulationComponent\Strategies\HybridStrategy.cs" /> <Compile Include="Models\SimulationComponent\Strategies\TestPowertrain.cs" /> <Compile Include="Models\SimulationComponent\SwitchableClutch.cs" /> - <Compile Include="Models\Simulation\DataBus\IBatteryInfo.cs" /> + <Compile Include="Models\Simulation\DataBus\IRESSInfo.cs" /> <Compile Include="Models\Simulation\DataBus\IElectricMotorInfo.cs" /> <Compile Include="Models\Simulation\DataBus\IEngineControl.cs" /> <Compile Include="InputData\Reader\Impl\DeclarationModeSingleBusVectoRunDataFactory.cs" /> diff --git a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs index 77b360af34420ea72441e4516394b7311bd7f6bb..094f128d4c7864a5ca53c732fcc622fc622352e5 100644 --- a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs +++ b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs @@ -28,7 +28,7 @@ namespace TUGraz.VectoCore.Tests.FileIO [TestCase()] public void TestReadBatteryPack() { - var inputProvider = JSONInputDataFactory.ReadBatteryData(@"TestData\Hybrids\Battery\GenericBattery.vbat", false); + var inputProvider = JSONInputDataFactory.ReadREESSData(@"TestData\Hybrids\Battery\GenericBattery.vbat", false) as IBatteryPackEngineeringInputData; Assert.AreEqual(7.5.SI(Unit.SI.Ampere.Hour), inputProvider.Capacity); @@ -120,12 +120,13 @@ namespace TUGraz.VectoCore.Tests.FileIO Assert.NotNull(engineering); Assert.AreEqual(0.8, engineering.JobInputData.Vehicle.InitialSOC); - var bat = engineering.JobInputData.Vehicle.Components.ElectricStorage; + var bat = engineering.JobInputData.Vehicle.Components.ElectricStorage.REESSPack as IBatteryPackEngineeringInputData; - var ri = BatteryInternalResistanceReader.Create(bat.BatteryPack.InternalResistanceCurve, 1); + + var ri = BatteryInternalResistanceReader.Create(bat.InternalResistanceCurve, 1); Assert.NotNull(bat); - Assert.AreEqual(2, bat.Count); - Assert.AreEqual(50, bat.BatteryPack.MaxCurrentFactor); + Assert.AreEqual(2, engineering.JobInputData.Vehicle.Components.ElectricStorage.Count); + Assert.AreEqual(50, bat.MaxCurrentFactor); Assert.AreEqual(0.04, ri.Lookup(0.5).Value()); var em = engineering.JobInputData.Vehicle.Components.ElectricMachines; diff --git a/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs b/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs index d58cdf38c4ee3533a8f1d6ea4f602c643d9a9f19..52033cb5dfde75d48a10329c63c3403783cb0a20 100644 --- a/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs +++ b/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs @@ -8,6 +8,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.FileIO.JSON; using TUGraz.VectoCore.InputData.Impl; using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.Models.Declaration; @@ -33,9 +34,11 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric public class BatteryElectricTest { + protected const string BEV_Job = @"TestData\BatteryElectric\GenericVehicleB4\BEV_ENG.vecto"; + protected const string BEV_Job_Cont30kW = @"TestData\BatteryElectric\GenericVehicleB4\BEV_ENG_Cont30kW.vecto"; + - //private ModalResultField[] Yfields; public const string MotorFile = @"TestData\BatteryElectric\GenericVehicleB4\GenericEMotor_125kW_485Nm.vem"; public const string BatFile = @"TestData\BatteryElectric\GenericVehicleB4\GenericBattery_243kWh_750V.vbat"; @@ -65,7 +68,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric var Yfields = new[] { ModalResultField.v_act, ModalResultField.altitude, ModalResultField.acc, ModalResultField.Gear, - ModalResultField.BatterySOC, + ModalResultField.REESSStateOfCharge, }.Concat(yFields).ToArray(); graphWriter.Xfields = new[] { ModalResultField.dist }; graphWriter.Yfields = yFields; @@ -77,24 +80,24 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric [ - TestCase(30, 0.7, 0, 0, TestName = "B4 BEV ConstantSpeed 30km/h SoC: 0.7, level"), - TestCase(50, 0.7, 0, 0, TestName = "B4 BEV ConstantSpeed 50km/h SoC: 0.7, level"), - //TestCase(80, 0.7, 0, 0, TestName = "B4 BEV ConstantSpeed 80km/h SoC: 0.7, level"), + TestCase(30, 0.7, 0, 0, TestName = "BEV E4 ConstantSpeed 30km/h SoC: 0.7, level"), + TestCase(50, 0.7, 0, 0, TestName = "BEV E4 ConstantSpeed 50km/h SoC: 0.7, level"), + //TestCase(80, 0.7, 0, 0, TestName = "BEV E4 ConstantSpeed 80km/h SoC: 0.7, level"), - TestCase(30, 0.25, 0, 0, TestName = "B4 BEV ConstantSpeed 30km/h SoC: 0.25, level"), - TestCase(50, 0.25, 0, 0, TestName = "B4 BEV ConstantSpeed 50km/h SoC: 0.25, level"), - //TestCase(80, 0.25, 0, 0, TestName = "B4 BEV ConstantSpeed 80km/h SoC: 0.25, level"), + TestCase(30, 0.25, 0, 0, TestName = "BEV E4 ConstantSpeed 30km/h SoC: 0.25, level"), + TestCase(50, 0.25, 0, 0, TestName = "BEV E4 ConstantSpeed 50km/h SoC: 0.25, level"), + //TestCase(80, 0.25, 0, 0, TestName = "BEV E4 ConstantSpeed 80km/h SoC: 0.25, level"), - TestCase(30, 0.5, 5, 0, TestName = "B4 BEV ConstantSpeed 30km/h SoC: 0.5, UH 5%"), - TestCase(50, 0.5, 5, 0, TestName = "B4 BEV ConstantSpeed 50km/h SoC: 0.5, UH 5%"), - //TestCase(80, 0.5, 5, 0, TestName = "B4 BEV ConstantSpeed 80km/h SoC: 0.5, UH 5%"), + TestCase(30, 0.5, 5, 0, TestName = "BEV E4 ConstantSpeed 30km/h SoC: 0.5, UH 5%"), + TestCase(50, 0.5, 5, 0, TestName = "BEV E4 ConstantSpeed 50km/h SoC: 0.5, UH 5%"), + //TestCase(80, 0.5, 5, 0, TestName = "BEV E4 ConstantSpeed 80km/h SoC: 0.5, UH 5%"), - TestCase(30, 0.5, -5, 0, TestName = "B4 BEV ConstantSpeed 30km/h SoC: 0.5, DH 5%"), - TestCase(50, 0.5, -5, 0, TestName = "B4 BEV ConstantSpeed 50km/h SoC: 0.5, DH 5%"), - //TestCase(80, 0.5, -5, 0, TestName = "B4 BEV ConstantSpeed 80km/h SoC: 0.5, DH 5%"), + TestCase(30, 0.5, -5, 0, TestName = "BEV E4 ConstantSpeed 30km/h SoC: 0.5, DH 5%"), + TestCase(50, 0.5, -5, 0, TestName = "BEV E4 ConstantSpeed 50km/h SoC: 0.5, DH 5%"), + //TestCase(80, 0.5, -5, 0, TestName = "BEV E4 ConstantSpeed 80km/h SoC: 0.5, DH 5%"), - TestCase(30, 0.25, 0, 1000, TestName = "B4 BEV ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 1kW"), - TestCase(30, 0.25, 0, 5000, TestName = "B4 BEV ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 5kW"), + TestCase(30, 0.25, 0, 1000, TestName = "BEV E4 ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 1kW"), + TestCase(30, 0.25, 0, 5000, TestName = "BEV E4 ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 5kW"), ] // the vehicle can drive max. 56km/h!! 80km/h testcase makes no sense public void B4BEVConstantSpeed(double vmax, double initialSoC, double slope, double pAuxEl) { @@ -128,9 +131,9 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric [ - TestCase(30, 0.7, 0, TestName = "B4 BEV DriveOff 30km/h SoC: 0.7, level"), - TestCase(80, 0.7, 0, TestName = "B4 BEV DriveOff 80km/h SoC: 0.7, level"), - TestCase(30, 0.25, 0, TestName = "B4 BEV DriveOff 30km/h SoC: 0.25, level") + TestCase(30, 0.7, 0, TestName = "BEV E4 DriveOff 30km/h SoC: 0.7, level"), + TestCase(80, 0.7, 0, TestName = "BEV E4 DriveOff 80km/h SoC: 0.7, level"), + TestCase(30, 0.25, 0, TestName = "BEV E4 DriveOff 30km/h SoC: 0.25, level") ] public void B4BEVDriveOff(double vmax, double initialSoC, double slope) { @@ -158,14 +161,14 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric } [ - TestCase("LongHaul", 2000, 0.8, 0, TestName = "B4 BEV DriveCycle LongHaul, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("RegionalDelivery", 2000, 0.8, 0, TestName = "B4 BEV DriveCycle RegionalDelivery, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("UrbanDelivery", 2000, 0.8, 0, TestName = "B4 BEV DriveCycle UrbanDelivery, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Construction", 2000, 0.8, 0, TestName = "B4 BEV DriveCycle Construction, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Urban", 2000, 0.8, 0, TestName = "B4 BEV DriveCycle Urban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Suburban", 2000, 0.8, 0, TestName = "B4 BEV DriveCycle SubUrban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Interurban", 2000, 0.8, 0, TestName = "B4 BEV DriveCycle InterUrban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Coach", 2000, 0.8, 0, TestName = "B4 BEV DriveCycle Coach, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("LongHaul", 2000, 0.8, 0, TestName = "BEV E4 DriveCycle LongHaul, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("RegionalDelivery", 2000, 0.8, 0, TestName = "BEV E4 DriveCycle RegionalDelivery, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("UrbanDelivery", 2000, 0.8, 0, TestName = "BEV E4 DriveCycle UrbanDelivery, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Construction", 2000, 0.8, 0, TestName = "BEV E4 DriveCycle Construction, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Urban", 2000, 0.8, 0, TestName = "BEV E4 DriveCycle Urban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Suburban", 2000, 0.8, 0, TestName = "BEV E4 DriveCycle SubUrban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Interurban", 2000, 0.8, 0, TestName = "BEV E4 DriveCycle InterUrban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Coach", 2000, 0.8, 0, TestName = "BEV E4 DriveCycle Coach, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), ] public void B4BEVDriveCycle(string declarationMission, double payload, double initialSoC, double pAuxEl) { @@ -199,27 +202,59 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric graphWriter.Write(modFilename + ".vmod"); } + [TestCase(BEV_Job, 0, TestName = "BEV E4 Job RD"), + TestCase(BEV_Job_Cont30kW, 0, TestName = "BEV E4 Job Cont. 80kW RD") + ] + public void B4BEVRunJob(string jobFile, int cycleIdx) + { + var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile); + + var writer = new FileOutputWriter(jobFile); + var factory = new SimulatorFactory(ExecutionMode.Engineering, inputProvider, writer) + { + Validate = false, + WriteModalResults = true, + }; + + var sumContainer = new SummaryDataContainer(writer); + var jobContainer = new JobContainer(sumContainer); + + factory.SumData = sumContainer; + + var run = factory.SimulationRuns().ToArray()[cycleIdx]; + + Assert.NotNull(run); + + var pt = run.GetContainer(); + + Assert.NotNull(pt); + + run.Run(); + Assert.IsTrue(run.FinishedWithoutErrors); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [ - TestCase(30, 0.7, 0, 0, TestName = "B3 BEV ConstantSpeed 30km/h SoC: 0.7, level"), - TestCase(50, 0.7, 0, 0, TestName = "B3 BEV ConstantSpeed 50km/h SoC: 0.7, level"), - //TestCase(80, 0.7, 0, 0, TestName = "B4 BEV ConstantSpeed 80km/h SoC: 0.7, level"), + TestCase(30, 0.7, 0, 0, TestName = "BEV E3 ConstantSpeed 30km/h SoC: 0.7, level"), + TestCase(50, 0.7, 0, 0, TestName = "BEV E3 ConstantSpeed 50km/h SoC: 0.7, level"), + //TestCase(80, 0.7, 0, 0, TestName = "BEV E4 ConstantSpeed 80km/h SoC: 0.7, level"), - TestCase(30, 0.25, 0, 0, TestName = "B3 BEV ConstantSpeed 30km/h SoC: 0.25, level"), - TestCase(50, 0.25, 0, 0, TestName = "B3 BEV ConstantSpeed 50km/h SoC: 0.25, level"), - //TestCase(80, 0.25, 0, 0, TestName = "B4 BEV ConstantSpeed 80km/h SoC: 0.25, level"), + TestCase(30, 0.25, 0, 0, TestName = "BEV E3 ConstantSpeed 30km/h SoC: 0.25, level"), + TestCase(50, 0.25, 0, 0, TestName = "BEV E3 ConstantSpeed 50km/h SoC: 0.25, level"), + //TestCase(80, 0.25, 0, 0, TestName = "BEV E4 ConstantSpeed 80km/h SoC: 0.25, level"), - TestCase(30, 0.5, 5, 0, TestName = "B3 BEV ConstantSpeed 30km/h SoC: 0.5, UH 5%"), - TestCase(50, 0.5, 5, 0, TestName = "B3 BEV ConstantSpeed 50km/h SoC: 0.5, UH 5%"), - //TestCase(80, 0.5, 5, 0, TestName = "B4 BEV ConstantSpeed 80km/h SoC: 0.5, UH 5%"), + TestCase(30, 0.5, 5, 0, TestName = "BEV E3 ConstantSpeed 30km/h SoC: 0.5, UH 5%"), + TestCase(50, 0.5, 5, 0, TestName = "BEV E3 ConstantSpeed 50km/h SoC: 0.5, UH 5%"), + //TestCase(80, 0.5, 5, 0, TestName = "BEV E4 ConstantSpeed 80km/h SoC: 0.5, UH 5%"), - TestCase(30, 0.5, -5, 0, TestName = "B3 BEV ConstantSpeed 30km/h SoC: 0.5, DH 5%"), - TestCase(50, 0.5, -5, 0, TestName = "B3 BEV ConstantSpeed 50km/h SoC: 0.5, DH 5%"), - //TestCase(80, 0.5, -5, 0, TestName = "B4 BEV ConstantSpeed 80km/h SoC: 0.5, DH 5%"), + TestCase(30, 0.5, -5, 0, TestName = "BEV E3 ConstantSpeed 30km/h SoC: 0.5, DH 5%"), + TestCase(50, 0.5, -5, 0, TestName = "BEV E3 ConstantSpeed 50km/h SoC: 0.5, DH 5%"), + //TestCase(80, 0.5, -5, 0, TestName = "BEV E4 ConstantSpeed 80km/h SoC: 0.5, DH 5%"), - TestCase(30, 0.25, 0, 1000, TestName = "B3 BEV ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 1kW"), - TestCase(30, 0.25, 0, 5000, TestName = "B3 BEV ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 5kW"), + TestCase(30, 0.25, 0, 1000, TestName = "BEV E3 ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 1kW"), + TestCase(30, 0.25, 0, 5000, TestName = "BEV E3 ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 5kW"), ] // the vehicle can drive max. 56km/h!! 80km/h testcase makes no sense public void B3BEVConstantSpeed(double vmax, double initialSoC, double slope, double pAuxEl) { @@ -253,9 +288,9 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric [ - TestCase(30, 0.7, 0, TestName = "B3 BEV DriveOff 30km/h SoC: 0.7, level"), - TestCase(80, 0.7, 0, TestName = "B3 BEV DriveOff 80km/h SoC: 0.7, level"), - TestCase(30, 0.25, 0, TestName = "B3 BEV DriveOff 30km/h SoC: 0.25, level") + TestCase(30, 0.7, 0, TestName = "BEV E3 DriveOff 30km/h SoC: 0.7, level"), + TestCase(80, 0.7, 0, TestName = "BEV E3 DriveOff 80km/h SoC: 0.7, level"), + TestCase(30, 0.25, 0, TestName = "BEV E3 DriveOff 30km/h SoC: 0.25, level") ] public void B3BEVDriveOff(double vmax, double initialSoC, double slope) { @@ -283,14 +318,14 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric } [ - TestCase("LongHaul", 2000, 0.8, 0, TestName = "B3 BEV DriveCycle LongHaul, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("RegionalDelivery", 2000, 0.8, 0, TestName = "B3 BEV DriveCycle RegionalDelivery, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("UrbanDelivery", 2000, 0.8, 0, TestName = "B3 BEV DriveCycle UrbanDelivery, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Construction", 2000, 0.8, 0, TestName = "B3 BEV DriveCycle Construction, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Urban", 2000, 0.8, 0, TestName = "B3 BEV DriveCycle Urban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Suburban", 2000, 0.8, 0, TestName = "B3 BEV DriveCycle SubUrban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Interurban", 2000, 0.8, 0, TestName = "B3 BEV DriveCycle InterUrban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), - TestCase("Coach", 2000, 0.8, 0, TestName = "B3 BEV DriveCycle Coach, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("LongHaul", 2000, 0.8, 0, TestName = "BEV E3 DriveCycle LongHaul, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("RegionalDelivery", 2000, 0.8, 0, TestName = "BEV E3 DriveCycle RegionalDelivery, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("UrbanDelivery", 2000, 0.8, 0, TestName = "BEV E3 DriveCycle UrbanDelivery, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Construction", 2000, 0.8, 0, TestName = "BEV E3 DriveCycle Construction, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Urban", 2000, 0.8, 0, TestName = "BEV E3 DriveCycle Urban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Suburban", 2000, 0.8, 0, TestName = "BEV E3 DriveCycle SubUrban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Interurban", 2000, 0.8, 0, TestName = "BEV E3 DriveCycle InterUrban, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), + TestCase("Coach", 2000, 0.8, 0, TestName = "BEV E3 DriveCycle Coach, SoC: 0.8 Payload: 2t P_auxEl: 0kW"), ] public void B3BEVDriveCycle(string declarationMission, double payload, double initialSoC, double pAuxEl) { diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs index 3f9bc9a147cdcd6996e41717ead6cd9cfda054f7..880f6ea8c506b8c7c201d23c63ced97e913ad4d8 100644 --- a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs @@ -61,7 +61,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid { var Yfields = new[] { ModalResultField.v_act, ModalResultField.altitude, ModalResultField.acc, ModalResultField.Gear, - ModalResultField.P_ice_out, ModalResultField.BatterySOC, ModalResultField.FCMap + ModalResultField.P_ice_out, ModalResultField.REESSStateOfCharge, ModalResultField.FCMap }.Concat(emYFields).ToArray(); var graphWriter = new GraphWriter(); @@ -322,6 +322,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid public const string Group5TestJob2 = @"TestData\Hybrids\Hyb_P2_Group5\Hyb_P2_Group5.vecto"; + public const string Group2TestJobSuperCapOvl = @"TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Class2_RigidTruck_ParHyb_SuperCap_Ovl_ENG.vecto"; + public const string CityBus6x2 = @"TestData\Hybrids\Input CityBus 6x2_HEV_P2\CityBus_6x2_HEV_P2.vecto"; [ @@ -403,7 +405,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid //TestCase(Group5TestJob325kW_noESS, 7, TestName = "P2 Hybrid Group 5 325kW NoESS DriveCycle Suburban"), // error //TestCase(Group5TestJob325kW_noESS, 8, TestName = "P2 Hybrid Group 5 325kW NoESS DriveCycle Urban"), // error //TestCase(Group5TestJob325kW_noESS, 9, TestName = "P2 Hybrid Group 5 325kW NoESS DriveCycle UrbanDelivery"), // error - + //TestCase(CityBus6x2, 0, TestName = "P2 Hybrid CityBus DriveCycle Coach"), // error //TestCase(CityBus6x2, 1, TestName = "P2 Hybrid CityBus DriveCycle HeavyUrban"), // error //TestCase(CityBus6x2, 2, TestName = "P2 Hybrid CityBus DriveCycle Interurban"), // error @@ -413,7 +415,17 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid //TestCase(CityBus6x2, 6, TestName = "P2 Hybrid CityBus DriveCycle Urban"), // error //TestCase(CityBus6x2, 7, TestName = "P2 Hybrid CityBus DriveCycle UrbanDelivery"), // error - ] + TestCase(Group2TestJobSuperCapOvl, 0, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle LongHaul"), + TestCase(Group2TestJobSuperCapOvl, 1, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle Coach"), + TestCase(Group2TestJobSuperCapOvl, 2, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle Construction"), + TestCase(Group2TestJobSuperCapOvl, 3, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle HeavyUrban"), + TestCase(Group2TestJobSuperCapOvl, 4, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle Interurban"), + TestCase(Group2TestJobSuperCapOvl, 5, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle MunicipalUtility"), + TestCase(Group2TestJobSuperCapOvl, 6, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle RegionalDelivery"), + TestCase(Group2TestJobSuperCapOvl, 7, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle Suburban"), + TestCase(Group2TestJobSuperCapOvl, 8, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle Urban"), + TestCase(Group2TestJobSuperCapOvl, 9, TestName = "P2 Hybrid Group 2 SuperCap Ovl, DriveCycle UrbanDelivery"), + ] public void P2HybridGroup5DriveCycle(string jobFile, int cycleIdx) { var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile); diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/BatteryTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/BatteryTest.cs index 228ed6c197ed07f27eec2f13dd32e77153bbf7ff..e4c7ea4929c722538a8adaaba711925f3f1c7ff0 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/BatteryTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/BatteryTest.cs @@ -34,13 +34,13 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent public void BatteryRequestTest(double initialSoC, double simInterval, double powerDemand, double expectedSoC) { - var inputData = JSONInputDataFactory.ReadBatteryData(componentFile, false); + var inputData = JSONInputDataFactory.ReadREESSData(componentFile, false) ; Assert.NotNull(inputData); var dao = new EngineeringDataAdapter(); var tmp = new MockBatteryInputData() { - BatteryPack = inputData, + REESSPack = inputData, Count = 1 }; var batteryData = dao.CreateBatteryData(tmp, 0.8); @@ -55,7 +55,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var absTime = 0.SI<Second>(); var dt = simInterval.SI<Second>(); var response = bat.Request(absTime, dt, powerDemand.SI<Watt>()); - Assert.IsInstanceOf<BatteryResponseSuccess>(response); + Assert.IsInstanceOf<RESSResponseSuccess>(response); bat.CommitSimulationStep(absTime, dt, modData); Assert.AreEqual(expectedSoC, bat.StateOfCharge, 1e-9); @@ -70,13 +70,13 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent double maxPowerDischarge, double battLoss) { - var inputData = JSONInputDataFactory.ReadBatteryData(componentFile, false); + var inputData = JSONInputDataFactory.ReadREESSData(componentFile, false); Assert.NotNull(inputData); var dao = new EngineeringDataAdapter(); var tmp = new MockBatteryInputData() { - BatteryPack = inputData, + REESSPack = inputData, Count = 1 }; var batteryData = dao.CreateBatteryData(tmp, 0.8); @@ -87,11 +87,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent bat.Initialize(initialSoC); var response = bat.Request(0.SI<Second>(), dt.SI<Second>(), powerDemand.SI<Watt>()); - Assert.IsInstanceOf<BatteryUnderloadResponse>(response); + Assert.IsInstanceOf<RESSUnderloadResponse>(response); - Assert.AreEqual(maxPowerDischarge, response.MaxBatteryLoadDischarge.Value(), 1e-2); - Assert.AreEqual(battLoss, response.BatteryLoss.Value(), 1e-2); - Assert.AreEqual(powerDemand, response.BatteryPower.Value(), 1e-2); + Assert.AreEqual(maxPowerDischarge, response.MaxDischargePower.Value(), 1e-2); + Assert.AreEqual(battLoss, response.LossPower.Value(), 1e-2); + Assert.AreEqual(powerDemand, response.PowerDemand.Value(), 1e-2); } [TestCase(0.5, 0.5, -500000, 10000, -169875, 70125), @@ -103,13 +103,13 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent double maxPowerDischarge, double battLoss) { - var inputData = JSONInputDataFactory.ReadBatteryData(componentFile, false); + var inputData = JSONInputDataFactory.ReadREESSData(componentFile, false); Assert.NotNull(inputData); var dao = new EngineeringDataAdapter(); var tmp = new MockBatteryInputData() { - BatteryPack = inputData, + REESSPack = inputData, Count = 1 }; var batteryData = dao.CreateBatteryData(tmp, 0.8); @@ -124,10 +124,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var response = es.Request(0.SI<Second>(), dt.SI<Second>(), powerDemand.SI<Watt>()); Assert.IsInstanceOf<ElectricSystemUnderloadResponse>(response); - Assert.AreEqual(maxPowerDischarge, response.BatteryResponse.MaxBatteryLoadDischarge.Value(), 1e-2); - Assert.AreEqual(battLoss, response.BatteryResponse.BatteryLoss.Value(), 1e-2); + Assert.AreEqual(maxPowerDischarge, response.RESSResponse.MaxDischargePower.Value(), 1e-2); + Assert.AreEqual(battLoss, response.RESSResponse.LossPower.Value(), 1e-2); Assert.AreEqual(auxPower, response.AuxPower.Value(), 1e-2); - Assert.AreEqual(powerDemand - auxPower, response.BatteryResponse.BatteryPower.Value(), 1e-2); + Assert.AreEqual(powerDemand - auxPower, response.RESSResponse.PowerDemand.Value(), 1e-2); } [TestCase(0.5, 0.5, 500000, 310125, 70125), @@ -140,13 +140,13 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent double maxPowerDischarge, double battLoss) { - var inputData = JSONInputDataFactory.ReadBatteryData(componentFile, false); + var inputData = JSONInputDataFactory.ReadREESSData(componentFile, false); Assert.NotNull(inputData); var dao = new EngineeringDataAdapter(); var tmp = new MockBatteryInputData() { - BatteryPack = inputData, + REESSPack = inputData, Count = 1 }; var batteryData = dao.CreateBatteryData(tmp, 0.8); @@ -157,11 +157,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent bat.Initialize(initialSoC); var response = bat.Request(0.SI<Second>(), dt.SI<Second>(), powerDemand.SI<Watt>()); - Assert.IsInstanceOf<BatteryOverloadResponse>(response); + Assert.IsInstanceOf<RESSOverloadResponse>(response); - Assert.AreEqual(maxPowerDischarge, response.MaxBatteryLoadCharge.Value(), 1e-2); - Assert.AreEqual(battLoss, response.BatteryLoss.Value(), 1e-2); - Assert.AreEqual(powerDemand, response.BatteryPower.Value(), 1e-2); + Assert.AreEqual(maxPowerDischarge, response.MaxChargePower.Value(), 1e-2); + Assert.AreEqual(battLoss, response.LossPower.Value(), 1e-2); + Assert.AreEqual(powerDemand, response.PowerDemand.Value(), 1e-2); } [TestCase(0.5, 0.5, 500000, 10000, 310125, 70125), @@ -174,13 +174,13 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent double maxPowerDischarge, double battLoss) { - var inputData = JSONInputDataFactory.ReadBatteryData(componentFile, false); + var inputData = JSONInputDataFactory.ReadREESSData(componentFile, false); Assert.NotNull(inputData); var dao = new EngineeringDataAdapter(); var tmp = new MockBatteryInputData() { - BatteryPack = inputData, + REESSPack = inputData, Count = 1 }; var batteryData = dao.CreateBatteryData(tmp, 0.8); @@ -195,10 +195,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var response = es.Request(0.SI<Second>(), dt.SI<Second>(), powerDemand.SI<Watt>()); Assert.IsInstanceOf<ElectricSystemOverloadResponse>(response); - Assert.AreEqual(maxPowerDischarge, response.BatteryResponse.MaxBatteryLoadCharge.Value(), 1e-2); - Assert.AreEqual(battLoss, response.BatteryResponse.BatteryLoss.Value(), 1e-2); + Assert.AreEqual(maxPowerDischarge, response.RESSResponse.MaxChargePower.Value(), 1e-2); + Assert.AreEqual(battLoss, response.RESSResponse.LossPower.Value(), 1e-2); Assert.AreEqual(auxPower, response.AuxPower.Value(), 1e-2); - Assert.AreEqual(powerDemand - auxPower, response.BatteryResponse.BatteryPower.Value(), 1e-2); + Assert.AreEqual(powerDemand - auxPower, response.RESSResponse.PowerDemand.Value(), 1e-2); } } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs index 7564d5066f559706b5d0cce0ee586fc52a63b52d..3677c008ca765694dfbc8573fd9627ae4f01edb6 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs @@ -4,12 +4,16 @@ using System.IO; using System.Linq; using NUnit.Framework; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.JSON; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; using TUGraz.VectoCore.Models.Connector.Ports.Impl; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent; using TUGraz.VectoCore.Models.SimulationComponent.Impl; +using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.Tests.Utils; namespace TUGraz.VectoCore.Tests.Models.SimulationComponent @@ -68,7 +72,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(0, response.Engine.PowerRequest.Value(), 1e-6); Assert.AreEqual(enginePower.Value(), response.ElectricMotor.ElectricMotorPowerMech.Value(), 1e-6); Assert.AreEqual(expectedBatteryPower, response.ElectricSystem.ConsumerPower.Value(), 1e-6); - Assert.AreEqual(expectedBatteryPower, response.ElectricSystem.BatteryResponse.BatteryPower.Value(), 1e-6); + Assert.AreEqual(expectedBatteryPower, response.ElectricSystem.RESSResponse.PowerDemand.Value(), 1e-6); Assert.IsTrue(response.ElectricSystem.ConsumerPower.Value() < enginePower.Value()); } @@ -118,7 +122,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(enginePower.Value(), response.Engine.PowerRequest.Value(), 1e-6); Assert.AreEqual(motorMechPower, response.ElectricMotor.ElectricMotorPowerMech); Assert.AreEqual(expectedBatteryPower, response.ElectricSystem.ConsumerPower.Value(), 1e-6); - Assert.AreEqual(expectedBatteryPower, response.ElectricSystem.BatteryResponse.BatteryPower.Value(), 1e-6); + Assert.AreEqual(expectedBatteryPower, response.ElectricSystem.RESSResponse.PowerDemand.Value(), 1e-6); Assert.IsTrue(response.ElectricSystem.ConsumerPower.Value() < response.ElectricMotor.ElectricMotorPowerMech.Value()); } @@ -143,9 +147,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var data = dao.CreateElectricMachines(electricMachine); var strategy = new MockHybridControl(); - var batInput = JSONInputDataFactory.ReadBatteryData(BatFile, false); + var batInput = JSONInputDataFactory.ReadREESSData(BatFile, false); var tmp = new MockBatteryInputData() { - BatteryPack = batInput, + REESSPack = batInput, Count = 1 }; var batteryData = dao.CreateBatteryData(tmp, 0.8); @@ -173,7 +177,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(enginePower.Value(), response.Engine.PowerRequest.Value(), 1e-6); Assert.AreEqual(motorMechPower.Value(), response.ElectricMotor.ElectricMotorPowerMech.Value(), 1e-6); Assert.AreEqual(0, response.ElectricSystem.ConsumerPower.Value(), 1e-6); - Assert.AreEqual(0, response.ElectricSystem.BatteryResponse.BatteryPower.Value(), 1e-6); + Assert.AreEqual(0, response.ElectricSystem.RESSResponse.PowerDemand.Value(), 1e-6); var modData = new MockModalDataContainer(); battery.CommitSimulationStep(absTime, dt, modData); } @@ -190,7 +194,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var container = new MockVehicleContainer(); var inputData = JSONInputDataFactory.ReadElectricMotorData(MotorFile, false); - var batInput = JSONInputDataFactory.ReadBatteryData(BatFile, false); + var batInput = JSONInputDataFactory.ReadREESSData(BatFile, false); var dao = new EngineeringDataAdapter(); var electricMachine = new MockElectricMachinesInputData() { @@ -208,7 +212,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var tmp = new MockBatteryInputData() { - BatteryPack = batInput, + REESSPack = batInput, Count = 1 }; var batteryData = dao.CreateBatteryData(tmp, 0.8); @@ -229,9 +233,100 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(0, response.Engine.PowerRequest.Value(), 1e-6); Assert.AreEqual(enginePower.Value(), response.ElectricMotor.ElectricMotorPowerMech.Value(), 1e-6); Assert.AreEqual(expectedBatteryPower, response.ElectricSystem.ConsumerPower.Value(), 1e-6); - Assert.AreEqual(expectedBatteryPower, response.ElectricSystem.BatteryResponse.BatteryPower.Value(), 1e-6); + Assert.AreEqual(expectedBatteryPower, response.ElectricSystem.RESSResponse.PowerDemand.Value(), 1e-6); Assert.IsTrue(response.ElectricSystem.ConsumerPower.Value() < enginePower.Value()); - Assert.AreEqual(expectedBatteryLoss, response.ElectricSystem.BatteryResponse.BatteryLoss.Value(), 1e-4); + Assert.AreEqual(expectedBatteryLoss, response.ElectricSystem.RESSResponse.LossPower.Value(), 1e-4); + } + + + [TestCase()] + public void TestElectricMotorThermalDeRating() + { + var initialSoc = 0.8; + var torque = 334.SI<NewtonMeter>(); + var speed = 2000.RPMtoRad(); + + + + var inputData = JSONInputDataFactory.ReadElectricMotorData(MotorFile, false); + var batInput = JSONInputDataFactory.ReadREESSData(BatFile, false); + var dao = new EngineeringDataAdapter(); + var electricMachine = new MockElectricMachinesInputData() + { + Entries = new List<ElectricMachineEntry<IElectricMotorEngineeringInputData>>() { + new ElectricMachineEntry<IElectricMotorEngineeringInputData>() { + ElectricMachine = inputData, + Position = PowertrainPosition.HybridP2, + Count = 1, + Ratio = 1, + MechanicalEfficiency = 1 + } + } + }; + var data = dao.CreateElectricMachines(electricMachine); + var strategy = new MockHybridControl(); + + var tmp = new MockBatteryInputData() + { + REESSPack = batInput, + Count = 1 + }; + var batteryData = dao.CreateBatteryData(tmp, 0.8); + + var runData = new VectoRunData() { + ElectricMachinesData = data + }; + + var modData = new ModalDataContainer(runData, null, null); + modData.AddElectricMotor(PowertrainPosition.HybridP2); + var container = new VehicleContainer(ExecutionMode.Engineering, modData); + new EngineOnlyGearboxInfo(container); + + var battery = new Battery(container, batteryData); + var es = new ElectricSystem(container); + es.Connect(battery); + battery.Initialize(initialSoc); + var motor = new ElectricMotor(container, data.First().Item2, strategy, PowertrainPosition.HybridP2); + motor.Connect(es); + + + strategy.ElectricShare = -torque; + motor.Initialize(0.SI<NewtonMeter>(), speed); + + var i = 0; + + // energy buffer is empty - overload is available + for (; i <= 60; i++) { + var dt = 0.5.SI<Second>(); + var absTime = i * dt; + + var response = motor.Request(absTime, dt, torque, speed); + Assert.AreEqual(-334.23, response.ElectricMotor.MaxDriveTorque.Value(), 1e-2); + motor.CommitSimulationStep(absTime, dt, modData); + } + + // energy buffer reached - only P_cont is available + + strategy.ElectricShare = -torque * 0.5; + for (; i <= 70; i++) { + var dt = 0.5.SI<Second>(); + var absTime = i * dt; + + var response = motor.Request(absTime, dt, torque * 0.5, speed); + Assert.AreEqual(-238.73, response.ElectricMotor.MaxDriveTorque.Value(), 1e-2); + motor.CommitSimulationStep(absTime, dt, modData); + } + + + // energy buffer below lower threshold - overload is available again + for (; i < 100; i++) { + var dt = 0.5.SI<Second>(); + var absTime = i * dt; + + var response = motor.Request(absTime, dt, torque * 0.5, speed); + Assert.AreEqual(-334.23, response.ElectricMotor.MaxDriveTorque.Value(), 1e-2); + motor.CommitSimulationStep(absTime, dt, modData); + } } } diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/SuperCapTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/SuperCapTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..a8d02f0bb6379cb13662356af37e47c01fd39afc --- /dev/null +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/SuperCapTest.cs @@ -0,0 +1,57 @@ +using System.IO; +using NUnit.Framework; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.JSON; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; +using TUGraz.VectoCore.Models.Connector.Ports.Impl; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Battery; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; +using TUGraz.VectoCore.Tests.Utils; + +namespace TUGraz.VectoCore.Tests.Models.SimulationComponent +{ + [TestFixture] + public class SuperCapTest + { + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + + [ + TestCase(0.5, 0.5, -500, 0.499875863), + TestCase(0.5, 1, -14000, 0.4929779240), + TestCase(0.5, 1, 7000, 0.503456863), + TestCase(0.35, 0.5, -200, 0.3499290696), + TestCase(0.35, 0.5, -16000, 0.3441842440), + TestCase(0.75, 0.5, -300, 0.7499503587), + TestCase(0.75, 0.5, -14500, 0.74758944005), + ] + + public void SuperCapRequestTest(double initialSoC, double simInterval, double powerDemand, double expectedSoC) + { + var batteryData = new SuperCapData() { + Capacity = 37.SI<Farad>(), + InternalResistance = 0.02.SI<Ohm>(), + MinVoltage = 0.SI<Volt>(), + MaxVoltage = 330.SI<Volt>(), + }; + + var container = new MockVehicleContainer(); + var superCap = new SuperCap(container, batteryData); + var modData = new MockModalDataContainer(); + superCap.Initialize(initialSoC); + + //Assert.AreEqual(3.2*200, bat.Voltage.Value()); + + var absTime = 0.SI<Second>(); + var dt = simInterval.SI<Second>(); + var response = superCap.Request(absTime, dt, powerDemand.SI<Watt>(), false); + Assert.IsInstanceOf<RESSResponseSuccess>(response); + superCap.CommitSimulationStep(absTime, dt, modData); + + Assert.AreEqual(expectedSoC, superCap.StateOfCharge, 1e-9); + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BEV_ENG_Cont30kW.vecto b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BEV_ENG_Cont30kW.vecto new file mode 100644 index 0000000000000000000000000000000000000000..be8d73fdb11646b66651b82315ea192a86ae68bc --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BEV_ENG_Cont30kW.vecto @@ -0,0 +1,36 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T08:55:18.2100810Z", + "AppVersion": "3", + "FileVersion": 9 + }, + "Body": { + "SavedInDeclMode": false, + "EngineOnlyMode": false, + "VehicleFile": "BatteryElectricVehicle_Cont30kW.vveh", + + "Padd_electric": 3540.0, + + "VACC": "Truck.vacc", + + "LAC": { + "Enabled": true, + "PreviewDistanceFactor": 10.0, + "DF_offset": 2.5, + "DF_scaling": 1.5, + "DF_targetSpeedLookup": "", + "Df_velocityDropLookup": "" + }, + "OverSpeedEcoRoll": { + "Mode": "Off", + "MinSpeed": 50.0, + "OverSpeed": 5.0, + "UnderSpeed": 5.0 + }, + "Cycles": [ + "RegionalDelivery" + + ] + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BatteryElectricVehicle_Cont30kW.vveh b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BatteryElectricVehicle_Cont30kW.vveh new file mode 100644 index 0000000000000000000000000000000000000000..206d360c913e1011f878574dc02a3dd7f6ba235d --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/BatteryElectricVehicle_Cont30kW.vveh @@ -0,0 +1,84 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2017-07-13T14:14:29.3226830Z", + "AppVersion": "3", + "FileVersion": 10 + }, + "Body": { + "SavedInDeclMode": false, + "VehCat": "RigidTruck", + "LegislativeClass": "Unknown", + "CurbWeight": 4670.0, + "CurbWeightExtra": 1900.0, + "Loading": 3020.0, + "MassMax": 11.99, + "rdyn": 421.0, + "PowertrainConfiguration": "BatteryElectric", + "CdCorrMode": "CdofVdecl", + "CdCorrFile": "", + "ElectricMotors": [ + { + "Count": 2, + "Ratio": 22.6, + "MechanicalEfficiency": 0.97, + "Position": "B4", + "MotorFile": "GenericEMotor_125kW_485Nm_Cont30kW.vem" + } + ], + "Battery": { + "NumPacks": 2, + "BatteryFile": "GenericBattery_243kWh_750V.vbat" + }, + "InitialSoC": 80, + "TorqueLimits": {}, + "IdlingSpeed": 0.0, + "AxleConfig": { + "Type": "4x2", + "Axles": [ + { + "Inertia": 6.5, + "Wheels": "265/70 R19.5", + "AxleWeightShare": 0.2, + "TwinTyres": false, + "RRCISO": 0.0065, + "FzISO": 20850.0, + "Type": "VehicleNonDriven" + }, + { + "Inertia": 6.5, + "Wheels": "265/70 R19.5", + "AxleWeightShare": 0.3, + "TwinTyres": true, + "RRCISO": 0.0075, + "FzISO": 20850.0, + "Type": "VehicleDriven" + }, + { + "Inertia": 4.5, + "Wheels": "235/75 R17.5", + "AxleWeightShare": 0.25, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 16680.0, + "Type": "VehicleNonDriven" + }, + { + "Inertia": 4.5, + "Wheels": "235/75 R17.5", + "AxleWeightShare": 0.25, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 16680.0, + "Type": "VehicleNonDriven" + } + ] + }, + "EngineStopStart": true, + "EcoRoll": "None", + "PredictiveCruiseControl": "None", + "ATEcoRollReleaseLockupClutch": false, + "CdxA": 4.83, + "VehicleHeight": 3.0 + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm.vem b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm.vem index c0a57a974a3014e456ffe5cb2d4c6f1ed3b056b4..5349c859137d90673f911a095bdcd19e813d7f21 100644 --- a/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm.vem +++ b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm.vem @@ -7,11 +7,13 @@ }, "Body": { "SavedInDeclMode": false, - "Model": "Generic Electric Motor", + "Model": "Generic Electric Motor", "FullLoadCurve": "GenericEMotor_125kW_485Nm.vemp", - "DragCurve": "GenericDrag_125kW_485Nm.vemd", + "DragCurve": "GenericDrag_125kW_485Nm.vemd", "EfficiencyMap": "GenericMap_125kW_485Nm.vemo", - "Inertia" : 0.225 - - } + "Inertia": 0.225, + "ContinuousPower": 5000000, + "ThermalOverloadBuffer": 0.6, + "ThermalOverloadRecoveryFactor": 0.9 +} } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm_Cont30kW.vem b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm_Cont30kW.vem new file mode 100644 index 0000000000000000000000000000000000000000..8f35e87656ff24fec0b8982931473e7aa1e3ce15 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/BatteryElectric/GenericVehicleB4/GenericEMotor_125kW_485Nm_Cont30kW.vem @@ -0,0 +1,19 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T08:54:28.7387223Z", + "AppVersion": "3", + "FileVersion": 1 + }, + "Body": { + "SavedInDeclMode": false, + "Model": "Generic Electric Motor", + "FullLoadCurve": "GenericEMotor_125kW_485Nm.vemp", + "DragCurve": "GenericDrag_125kW_485Nm.vemd", + "EfficiencyMap": "GenericMap_125kW_485Nm.vemo", + "Inertia": 0.225, + "ContinuousPower": 30000, + "ThermalOverloadBuffer": 0.7, + "ThermalOverloadRecoveryFactor": 0.9 +} +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/ElectricMotor/GenericEMotor.vem b/VectoCore/VectoCoreTest/TestData/Hybrids/ElectricMotor/GenericEMotor.vem index 93436e0ffad5cfd10ebd9929b6929ff7d66e875f..63b5fcce6facc27c59cd450ccf2af27e75b7acbf 100644 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/ElectricMotor/GenericEMotor.vem +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/ElectricMotor/GenericEMotor.vem @@ -7,11 +7,13 @@ }, "Body": { "SavedInDeclMode": false, - "Model": "Generic Electric Motor", + "Model": "Generic Electric Motor", "FullLoadCurve": "GenericEMotor.vemp", - "DragCurve": "GenericDrag.vemd", + "DragCurve": "GenericDrag.vemd", "EfficiencyMap": "GenericMap.vemo", - "Inertia" : 0.15 - - } + "Inertia": 0.15, + "ContinuousPower": 50000, + "ThermalOverloadBuffer": 0.6, + "ThermalOverloadRecoveryFactor": 0.9 + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group2_P2/GenericEMotor.vem b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group2_P2/GenericEMotor.vem index c7cf6e448f26bb28479a9841a29c85af1b37b78e..2d2596a49d91f8bd70e99ea2289219f3acf61ff2 100644 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group2_P2/GenericEMotor.vem +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group2_P2/GenericEMotor.vem @@ -7,10 +7,13 @@ }, "Body": { "SavedInDeclMode": false, - "Model": "Generic Electric Motor", - "FullLoadCurve": "GenericEMotor.vemp", - "EfficiencyMap": "GenericMap.vemo", - "DragCurve": "GenericDrag.vemd", - "Inertia": 0.15 + "Model": "Generic Electric Motor", + "FullLoadCurve": "GenericEMotor.vemp", + "EfficiencyMap": "GenericMap.vemo", + "DragCurve": "GenericDrag.vemd", + "Inertia": 0.15, + "ContinuousPower": 5000000, + "ThermalOverloadBuffer": 0.6, + "ThermalOverloadRecoveryFactor": 0.9 } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group2_P2/GenericEMotor240kW.vem b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group2_P2/GenericEMotor240kW.vem index 74a934daae91119a5da613b6787fc05b2ea33d24..0057af67263c0a330401a007ef06190870d2c211 100644 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group2_P2/GenericEMotor240kW.vem +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group2_P2/GenericEMotor240kW.vem @@ -7,10 +7,13 @@ }, "Body": { "SavedInDeclMode": false, - "Model": "Generic Electric Motor", - "FullLoadCurve": "GenericEMotor240kW.vemp", - "DragCurve": "GenericDrag.vemd", + "Model": "Generic Electric Motor", + "FullLoadCurve": "GenericEMotor240kW.vemp", + "DragCurve": "GenericDrag.vemd", "EfficiencyMap": "GenericMap240kW.vemo", - "Inertia" : 0.2 + "Inertia": 0.2, + "ContinuousPower": 5000000, + "ThermalOverloadBuffer": 0.6, + "ThermalOverloadRecoveryFactor": 0.9 } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group5_P2/ElectricMotor/Inputdaten P2 Group 5/Electric components/GenericEMotor_140kW_936Nm.vem b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group5_P2/ElectricMotor/Inputdaten P2 Group 5/Electric components/GenericEMotor_140kW_936Nm.vem index 82a40d961eb97014685b253d8e7ead6b9d32b8c9..1a27269d815af6619f636c9744d569e6096e87fe 100644 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group5_P2/ElectricMotor/Inputdaten P2 Group 5/Electric components/GenericEMotor_140kW_936Nm.vem +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_Group5_P2/ElectricMotor/Inputdaten P2 Group 5/Electric components/GenericEMotor_140kW_936Nm.vem @@ -7,11 +7,13 @@ }, "Body": { "SavedInDeclMode": false, - "Model": "Generic Electric Motor", + "Model": "Generic Electric Motor", "FullLoadCurve": "GenericEMotor_140kW_936Nm.vemp", - "DragCurve": "GenericDrag_140kW_936Nm.vemd", + "DragCurve": "GenericDrag_140kW_936Nm.vemd", "EfficiencyMap": "GenericMap_140kW_936Nm.vemo", - "Inertia" : 0.5 - - } + "Inertia": 0.5, + "ContinuousPower": 5000000, + "ThermalOverloadBuffer": 0.6, + "ThermalOverloadRecoveryFactor": 0.9 +} } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2/GenericEM_47kW.vem b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2/GenericEM_47kW.vem index 2ecb3fbc1d8dfbd65b81c96277b3e1915596f777..55bf540a4cf9b53443ea9b611c6a3e35600a8151 100644 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2/GenericEM_47kW.vem +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2/GenericEM_47kW.vem @@ -7,10 +7,13 @@ }, "Body": { "SavedInDeclMode": false, - "Model": "Generic EM 47kW", - "FullLoadCurve": "GenericEM_47kW.vemp", - "EfficiencyMap": "GenericEM_47kW.vemo", - "DragCurve": "GenericEM_47kW.vemd", - "Inertia": 0.1 + "Model": "Generic EM 47kW", + "FullLoadCurve": "GenericEM_47kW.vemp", + "EfficiencyMap": "GenericEM_47kW.vemo", + "DragCurve": "GenericEM_47kW.vemd", + "Inertia": 0.1, + "ContinuousPower": 5000000, + "ThermalOverloadBuffer": 0.6, + "ThermalOverloadRecoveryFactor": 0.9 } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/175kW.vfld b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/175kW.vfld new file mode 100644 index 0000000000000000000000000000000000000000..c18c5c3cae86325fc562fc5a4ec0d10239f2a882 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/175kW.vfld @@ -0,0 +1,252 @@ +engine speed [1/min], full load torque [Nm], motoring torque [Nm] +600,478,-35 +608,485.52,-35.31693 +616,493.04,-35.63385 +624,500.56,-35.95077 +632,508.08,-36.26769 +640,515.6,-36.58462 +648,523.12,-36.90154 +656,530.64,-37.21846 +664,538.16,-37.53539 +672,545.68,-37.85231 +680,553.2,-38.16923 +688,560.72,-38.48615 +696,568.24,-38.80308 +704,575.76,-39.12 +712,583.28,-39.43692 +720,590.8,-39.75385 +728,598.32,-40.07077 +736,605.84,-40.3877 +744,613.36,-40.70462 +752,620.88,-41.02154 +760,628.4,-41.33846 +768,635.92,-41.65539 +776,643.44,-41.97231 +784,650.96,-42.28923 +792,658.48,-42.60616 +800,666,-42.92308 +808,673.44,-43.24 +816,680.88,-43.48 +824,688.32,-43.72 +832,695.76,-43.96 +840,703.2,-44.2 +848,710.64,-44.44 +856,718.08,-44.68 +864,725.52,-44.92 +872,732.96,-45.16 +880,740.4,-45.4 +888,747.84,-45.64 +896,755.28,-45.88 +904,762.72,-46.12 +912,770.16,-46.36 +920,777.6,-46.6 +928,785.04,-46.84 +936,792.48,-47.08 +944,799.92,-47.32 +952,807.36,-47.56 +960,814.8,-47.8 +968,822.24,-48.04 +976,829.68,-48.28 +984,837.12,-48.52 +992,844.56,-48.76 +1000,852,-49 +1008,856.16,-49.4 +1016,860.32,-49.8 +1024,864.48,-50.19579 +1032,868.64,-50.59098 +1040,872.8,-50.98618 +1048,876.96,-51.38137 +1056,881.12,-51.77656 +1064,885.28,-52.17175 +1072,889.44,-52.56694 +1080,893.6,-52.96214 +1088,897.76,-53.35733 +1096,901.92,-53.75252 +1104,906.08,-54.14772 +1112,910.24,-54.54291 +1120,914.4,-54.9381 +1128,918.56,-55.33329 +1136,922.72,-55.72849 +1144,926.88,-56.12368 +1152,931.04,-56.51887 +1160,935.2,-56.91406 +1168,939.36,-57.30925 +1176,943.52,-57.70444 +1184,947.68,-58.09964 +1192,951.84,-58.49483 +1200,956,-58.89002 +1208,956,-59.28522 +1216,956,-59.68041 +1224,956,-60.0756 +1232,956,-60.44 +1240,956,-60.8 +1248,956,-61.16 +1256,956,-61.52 +1264,956,-61.88 +1272,956,-62.24 +1280,956,-62.6 +1288,956,-62.96 +1296,956,-63.32 +1304,956,-63.68 +1312,956,-64.04 +1320,956,-64.4 +1328,956,-64.76 +1336,956,-65.12 +1344,956,-65.48 +1352,956,-65.84 +1360,956,-66.2 +1368,956,-66.56 +1376,956,-66.92 +1384,956,-67.28 +1392,956,-67.64 +1400,956,-68 +1408,956,-68.36 +1416,956,-68.72 +1424,956,-69.08 +1432,956,-69.44 +1440,956,-69.76736 +1448,956,-70.08386 +1456,956,-70.40035 +1464,956,-70.71684 +1472,956,-71.03333 +1480,956,-71.34982 +1488,956,-71.66631 +1496,956,-71.9828 +1504,956,-72.2993 +1512,956,-72.61579 +1520,956,-72.93228 +1528,956,-73.24877 +1536,956,-73.56526 +1544,956,-73.88175 +1552,956,-74.19825 +1560,956,-74.51474 +1568,956,-74.83123 +1576,956,-75.14772 +1584,956,-75.46421 +1592,956,-75.7807 +1600,956,-76.0972 +1608,953.56,-76.41369 +1616,951.12,-76.73018 +1624,948.68,-77.04667 +1632,946.24,-77.36316 +1640,943.8,-77.67965 +1648,941.36,-77.99614 +1656,938.92,-78.31264 +1664,936.48,-78.6 +1672,934.04,-78.8 +1680,931.6,-79 +1688,929.16,-79.2 +1696,926.72,-79.4 +1704,924.28,-79.6 +1712,921.84,-79.8 +1720,919.4,-80 +1728,916.96,-80.2 +1736,914.52,-80.4 +1744,912.08,-80.6 +1752,909.64,-80.8 +1760,907.2,-81 +1768,904.76,-81.2 +1776,902.32,-81.4 +1784,899.88,-81.6 +1792,897.44,-81.8 +1800,895,-82 +1808,892.24,-82.24 +1816,889.48,-82.48 +1824,886.72,-82.72 +1832,883.96,-82.96 +1840,881.2,-83.2 +1848,878.44,-83.44 +1856,875.68,-83.68 +1864,872.92,-83.92 +1872,870.16,-84.16 +1880,867.4,-84.4 +1888,864.64,-84.64 +1896,861.88,-84.88 +1904,859.12,-85.12 +1912,856.36,-85.36 +1920,853.6,-85.6 +1928,850.84,-85.84 +1936,848.08,-86.08 +1944,845.32,-86.32 +1952,842.56,-86.56 +1960,839.8,-86.8 +1968,837.04,-87.04 +1976,834.28,-87.28 +1984,831.52,-87.52 +1992,828.76,-87.76 +2000,826,-88 +2008,823.36,-88.44 +2016,820.72,-88.88 +2024,818.08,-89.32 +2032,815.44,-89.76 +2040,812.8,-90.2 +2048,810.16,-90.64 +2056,807.52,-91.08 +2064,804.88,-91.52 +2072,802.24,-91.96 +2080,799.6,-92.4 +2088,796.96,-92.84 +2096,794.32,-93.28 +2104,791.68,-93.72 +2112,789.04,-94.16 +2120,786.4,-94.6 +2128,783.76,-95.04 +2136,781.12,-95.48 +2144,778.48,-95.92 +2152,775.84,-96.36 +2160,773.2,-96.8 +2168,770.56,-97.24 +2176,767.92,-97.68 +2184,765.28,-98.06694 +2192,762.64,-98.40081 +2200,760,-98.73468 +2208,755.56,-99.06856 +2216,751.12,-99.40243 +2224,746.68,-99.73631 +2232,742.24,-100.0702 +2240,737.8,-100.404 +2248,733.36,-100.7379 +2256,728.92,-101.0718 +2264,724.48,-101.4057 +2272,720.04,-101.7395 +2280,715.6,-102.0734 +2288,711.16,-102.4073 +2296,706.72,-102.7412 +2304,702.28,-103.075 +2312,697.84,-103.4089 +2320,693.4,-103.7428 +2328,688.96,-104.0767 +2336,684.52,-104.4105 +2344,680.08,-104.7444 +2352,675.64,-105.0783 +2360,671.2,-105.4 +2368,666.76,-105.72 +2376,662.32,-106.04 +2384,657.88,-106.36 +2392,653.44,-106.68 +2400,649,-107 +2408,642.36,-107.32 +2416,635.72,-107.64 +2424,629.08,-107.96 +2432,622.44,-108.28 +2440,615.8,-108.6 +2448,609.16,-108.92 +2456,602.52,-109.24 +2464,595.88,-109.56 +2472,589.24,-109.88 +2480,582.6,-110.2 +2488,575.96,-110.52 +2496,569.32,-110.84 +2504,543.36,-111.16 +2512,498.08,-111.48 +2520,452.8,-111.8 +2528,407.52,-112.12 +2536,362.24,-112.44 +2544,316.96,-112.76 +2552,271.68,-113.08 +2560,226.4,-113.4 +2568,181.12,-113.72 +2576,135.84,-114.04 +2584,90.56,-114.36 +2592,45.28,-114.68 +2600,0,-115 diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/175kW.vmap b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/175kW.vmap new file mode 100644 index 0000000000000000000000000000000000000000..2cb356074807c6c2a1576af4a68ae166746eaf06 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/175kW.vmap @@ -0,0 +1,137 @@ +engine speed [rpm], torque [Nm], fuel consumption [g/h] +500,-31,0 +500,0,508 +500,95.6,1814.959 +500,191.2,3075.43 +500,286.8,4327.79 +500,382.4,6036.866 +500,478,7983 +500,573.6,9771.095 +600,-35,0 +600,0,508 +600,95.6,1814.959 +600,191.2,3075.43 +600,286.8,4327.79 +600,382.4,6036.866 +600,478,7983 +600,573.6,9771.095 +808,-43.24,0 +808.5,0,737.35 +808.5,95.6,2156.667 +808.5,191.2,3750.051 +808.5,286.8,5348.091 +808.5,382.4,7281.769 +808.5,478,9331.995 +808.5,573.6,11361.22 +808.5,669.2,13292.96 +808.5,673.905,13387.96 +808,769.505,15319.69 +1017,-49.85,0 +1017,0,966.7 +1017,95.6,2499.359 +1017,191.2,4425.586 +1017,286.8,6368.761 +1017,382.4,8527.475 +1017,478,10681.08 +1017,573.6,12806.98 +1017,669.2,14926.89 +1017,764.8,17075.42 +1017,860.4,19211.62 +1017,860.84,19221.39 +1017,956.44,21357.58 +1225,-60.125,0 +1225.4,0,1216.133 +1225.4,95.6,2867.396 +1225.4,191.2,5129.114 +1225.4,286.8,7421.546 +1225.4,382.4,9808.684 +1225.4,478,12096.76 +1225.4,573.6,14371.23 +1225.4,669.2,16697.39 +1225.4,764.8,19043.79 +1225.4,860.4,21380.34 +1225.4,956,23976.15 +1225,1051.6,26399.12 +1434,-69.53,0 +1433.9,0,1607.511 +1433.9,95.6,3422.282 +1433.9,191.2,6045.75 +1433.9,286.8,8717.55 +1433.9,382.4,11388.84 +1433.9,478,14040.14 +1433.9,573.6,16812.16 +1433.9,669.2,19499.88 +1433.9,764.8,22089.68 +1433.9,860.4,24706.84 +1433.9,956,27415.66 +1434,1051.6,30063.37 +1662,-78.55,0 +1661.8,0,2026.982 +1661.8,95.6,4054.852 +1661.8,191.2,7064.631 +1661.8,286.8,10168.59 +1661.8,382.4,13313.27 +1661.8,478,16389.77 +1661.8,573.6,19514.32 +1661.8,669.2,22625.12 +1661.8,764.8,25652.52 +1661.8,860.4,28788.1 +1661.8,937.151,31372.42 +1662,1032.751,34529.97 +1835,-83.05,0 +1834.7,0,2385.627 +1834.7,95.6,4596.783 +1834.7,191.2,7871.156 +1834.7,286.8,11300.52 +1834.7,382.4,14757.68 +1834.7,478,18117.38 +1834.7,573.6,21557.68 +1834.7,669.2,25079.78 +1834.7,764.8,28600.34 +1834.7,860.4,32191.22 +1834.7,883.0285,33047.82 +1835,978.6285,36639.92 +2008,-88.44,0 +2007.5,0,2806.425 +2007.5,95.6,5238.11 +2007.5,191.2,8755.323 +2007.5,286.8,12501.62 +2007.5,382.4,16278.62 +2007.5,478,20040.57 +2007.5,573.6,23826.03 +2007.5,669.2,27760.66 +2007.5,764.8,31692.9 +2007.5,823.525,34019.71 +2008,919.125,37924.6 +2180,-97.9,0 +2180.3,0,3323.097 +2180.3,95.6,5859.055 +2180.3,191.2,9668.133 +2180.3,286.8,13730.37 +2180.3,382.4,17786.81 +2180.3,478,21943.1 +2180.3,573.6,26354.73 +2180.3,669.2,30668.08 +2180.3,764.8,34924.28 +2180.3,766.501,35000.3 +2180,862.101,39256.51 +2353,-105.12,0 +2353.2,0,3807.896 +2353.2,95.6,6495.978 +2353.2,191.2,10634.86 +2353.2,286.8,15048 +2353.2,382.4,19654.95 +2353.2,478,24298.67 +2353.2,573.6,29311.43 +2353.2,669.2,34144.93 +2353,764.8,39097.94 +2453,-109.12,0 +2453.2,0,3807.896 +2453.2,95.6,6495.978 +2453.2,191.2,10634.86 +2453.2,286.8,15048 +2453.2,382.4,19654.95 +2453.2,478,24298.67 +2453.2,573.6,29311.43 +2453.2,669.2,34144.93 +2453,764.8,39097.94 diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/AMT_6.vgbx b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/AMT_6.vgbx new file mode 100644 index 0000000000000000000000000000000000000000..09f3569f11bce4184afc54ff02e9b6d7e688893f --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/AMT_6.vgbx @@ -0,0 +1,75 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2020-08-25T16:36:19.6217691Z", + "AppVersion": "3", + "FileVersion": 6 + }, + "Body": { + "SavedInDeclMode": false, + "ModelName": "6speed AMT GBX", + "Inertia": 0.0, + "TracInt": 1.0, + "Gears": [ + { + "Ratio": 4.18, + "LossMap": "Axle_4x2.vtlm" + }, + { + "Ratio": 6.7, + "LossMap": "Gear_1.vtlm", + "ShiftPolygon": "", + "MaxTorque": "", + "MaxSpeed": "" + }, + { + "Ratio": 3.8, + "LossMap": "Gear_2.vtlm", + "ShiftPolygon": "", + "MaxTorque": "", + "MaxSpeed": "" + }, + { + "Ratio": 2.29, + "LossMap": "Gear_3.vtlm", + "ShiftPolygon": "", + "MaxTorque": "", + "MaxSpeed": "" + }, + { + "Ratio": 1.48, + "LossMap": "Gear_4.vtlm", + "ShiftPolygon": "", + "MaxTorque": "", + "MaxSpeed": "" + }, + { + "Ratio": 1.0, + "LossMap": "Gear_5.vtlm", + "ShiftPolygon": "", + "MaxTorque": "", + "MaxSpeed": "" + }, + { + "Ratio": 0.73, + "LossMap": "Gear_6.vtlm", + "ShiftPolygon": "", + "MaxTorque": "", + "MaxSpeed": "" + } + ], + "TqReserve": 20.0, + "ShiftTime": 2.0, + "StartTqReserve": 20.0, + "StartSpeed": 2.0, + "StartAcc": 0.8, + "GearboxType": "AMT", + "TorqueConverter": { + "Enabled": false + }, + "DownshiftAfterUpshiftDelay": 6.0, + "UpshiftAfterDownshiftDelay": 10.0, + "UpshiftMinAcceleration": 0.1, + "PowershiftShiftTime": 0.8 + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Axle_4x2.vtlm b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Axle_4x2.vtlm new file mode 100644 index 0000000000000000000000000000000000000000..71d6c149cb6fc65aa4789e62ae186fc0991477c0 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Axle_4x2.vtlm @@ -0,0 +1,834 @@ +Input Speed [rpm],Input Torque [Nm],Torque Loss [Nm] +0,-6993.8,183.2 +0,-6525.1,173.5 +0,-6056.4,163.7 +0,-5587.7,153.9 +0,-5119,144.2 +0,-4650.3,134.4 +0,-4181.6,124.6 +0,-3712.9,114.9 +0,-3244.2,105.1 +0,-2775.5,95.3 +0,-2306.8,85.6 +0,-2072.4,80.7 +0,-1838.1,75.8 +0,-1603.7,70.9 +0,-1369.4,66 +0,-1135,61.2 +0,-900.7,56.3 +0,-666.3,51.4 +0,-432,46.5 +0,-314.8,44.1 +0,-197.6,41.6 +0,-139,40.4 +0,-80.4,39.2 +0,-21.8,38 +0,38,38 +0,97.8,38 +0,158.8,39.2 +0,219.8,40.4 +0,280.9,41.6 +0,402.9,44.1 +0,525,46.5 +0,769.1,51.4 +0,1013.2,56.3 +0,1257.3,61.2 +0,1501.4,66 +0,1745.6,70.9 +0,1989.7,75.8 +0,2233.8,80.7 +0,2477.9,85.6 +0,2966.1,95.3 +0,3454.4,105.1 +0,3942.6,114.9 +0,4430.8,124.6 +0,4919.1,134.4 +0,5407.3,144.2 +0,5895.5,153.9 +0,6383.8,163.7 +0,6872,173.5 +0,7360.2,183.2 +209,-6993.8,183.2 +209,-6525.1,173.5 +209,-6056.4,163.7 +209,-5587.7,153.9 +209,-5119,144.2 +209,-4650.3,134.4 +209,-4181.6,124.6 +209,-3712.9,114.9 +209,-3244.2,105.1 +209,-2775.5,95.3 +209,-2306.8,85.6 +209,-2072.4,80.7 +209,-1838.1,75.8 +209,-1603.7,70.9 +209,-1369.4,66 +209,-1135,61.2 +209,-900.7,56.3 +209,-666.3,51.4 +209,-432,46.5 +209,-314.8,44.1 +209,-197.6,41.6 +209,-139,40.4 +209,-80.4,39.2 +209,-21.8,38 +209,38,38 +209,97.8,38 +209,158.8,39.2 +209,219.8,40.4 +209,280.9,41.6 +209,402.9,44.1 +209,525,46.5 +209,769.1,51.4 +209,1013.2,56.3 +209,1257.3,61.2 +209,1501.4,66 +209,1745.6,70.9 +209,1989.7,75.8 +209,2233.8,80.7 +209,2477.9,85.6 +209,2966.1,95.3 +209,3454.4,105.1 +209,3942.6,114.9 +209,4430.8,124.6 +209,4919.1,134.4 +209,5407.3,144.2 +209,5895.5,153.9 +209,6383.8,163.7 +209,6872,173.5 +209,7360.2,183.2 +418,-6993.8,183.2 +418,-6525.1,173.5 +418,-6056.4,163.7 +418,-5587.7,153.9 +418,-5119,144.2 +418,-4650.3,134.4 +418,-4181.6,124.6 +418,-3712.9,114.9 +418,-3244.2,105.1 +418,-2775.5,95.3 +418,-2306.8,85.6 +418,-2072.4,80.7 +418,-1838.1,75.8 +418,-1603.7,70.9 +418,-1369.4,66 +418,-1135,61.2 +418,-900.7,56.3 +418,-666.3,51.4 +418,-432,46.5 +418,-314.8,44.1 +418,-197.6,41.6 +418,-139,40.4 +418,-80.4,39.2 +418,-21.8,38 +418,38,38 +418,97.8,38 +418,158.8,39.2 +418,219.8,40.4 +418,280.9,41.6 +418,402.9,44.1 +418,525,46.5 +418,769.1,51.4 +418,1013.2,56.3 +418,1257.3,61.2 +418,1501.4,66 +418,1745.6,70.9 +418,1989.7,75.8 +418,2233.8,80.7 +418,2477.9,85.6 +418,2966.1,95.3 +418,3454.4,105.1 +418,3942.6,114.9 +418,4430.8,124.6 +418,4919.1,134.4 +418,5407.3,144.2 +418,5895.5,153.9 +418,6383.8,163.7 +418,6872,173.5 +418,7360.2,183.2 +627,-6993.8,183.2 +627,-6525.1,173.5 +627,-6056.4,163.7 +627,-5587.7,153.9 +627,-5119,144.2 +627,-4650.3,134.4 +627,-4181.6,124.6 +627,-3712.9,114.9 +627,-3244.2,105.1 +627,-2775.5,95.3 +627,-2306.8,85.6 +627,-2072.4,80.7 +627,-1838.1,75.8 +627,-1603.7,70.9 +627,-1369.4,66 +627,-1135,61.2 +627,-900.7,56.3 +627,-666.3,51.4 +627,-432,46.5 +627,-314.8,44.1 +627,-197.6,41.6 +627,-139,40.4 +627,-80.4,39.2 +627,-21.8,38 +627,38,38 +627,97.8,38 +627,158.8,39.2 +627,219.8,40.4 +627,280.9,41.6 +627,402.9,44.1 +627,525,46.5 +627,769.1,51.4 +627,1013.2,56.3 +627,1257.3,61.2 +627,1501.4,66 +627,1745.6,70.9 +627,1989.7,75.8 +627,2233.8,80.7 +627,2477.9,85.6 +627,2966.1,95.3 +627,3454.4,105.1 +627,3942.6,114.9 +627,4430.8,124.6 +627,4919.1,134.4 +627,5407.3,144.2 +627,5895.5,153.9 +627,6383.8,163.7 +627,6872,173.5 +627,7360.2,183.2 +836,-6993.8,183.2 +836,-6525.1,173.5 +836,-6056.4,163.7 +836,-5587.7,153.9 +836,-5119,144.2 +836,-4650.3,134.4 +836,-4181.6,124.6 +836,-3712.9,114.9 +836,-3244.2,105.1 +836,-2775.5,95.3 +836,-2306.8,85.6 +836,-2072.4,80.7 +836,-1838.1,75.8 +836,-1603.7,70.9 +836,-1369.4,66 +836,-1135,61.2 +836,-900.7,56.3 +836,-666.3,51.4 +836,-432,46.5 +836,-314.8,44.1 +836,-197.6,41.6 +836,-139,40.4 +836,-80.4,39.2 +836,-21.8,38 +836,38,38 +836,97.8,38 +836,158.8,39.2 +836,219.8,40.4 +836,280.9,41.6 +836,402.9,44.1 +836,525,46.5 +836,769.1,51.4 +836,1013.2,56.3 +836,1257.3,61.2 +836,1501.4,66 +836,1745.6,70.9 +836,1989.7,75.8 +836,2233.8,80.7 +836,2477.9,85.6 +836,2966.1,95.3 +836,3454.4,105.1 +836,3942.6,114.9 +836,4430.8,124.6 +836,4919.1,134.4 +836,5407.3,144.2 +836,5895.5,153.9 +836,6383.8,163.7 +836,6872,173.5 +836,7360.2,183.2 +1045,-6993.8,183.2 +1045,-6525.1,173.5 +1045,-6056.4,163.7 +1045,-5587.7,153.9 +1045,-5119,144.2 +1045,-4650.3,134.4 +1045,-4181.6,124.6 +1045,-3712.9,114.9 +1045,-3244.2,105.1 +1045,-2775.5,95.3 +1045,-2306.8,85.6 +1045,-2072.4,80.7 +1045,-1838.1,75.8 +1045,-1603.7,70.9 +1045,-1369.4,66 +1045,-1135,61.2 +1045,-900.7,56.3 +1045,-666.3,51.4 +1045,-432,46.5 +1045,-314.8,44.1 +1045,-197.6,41.6 +1045,-139,40.4 +1045,-80.4,39.2 +1045,-21.8,38 +1045,38,38 +1045,97.8,38 +1045,158.8,39.2 +1045,219.8,40.4 +1045,280.9,41.6 +1045,402.9,44.1 +1045,525,46.5 +1045,769.1,51.4 +1045,1013.2,56.3 +1045,1257.3,61.2 +1045,1501.4,66 +1045,1745.6,70.9 +1045,1989.7,75.8 +1045,2233.8,80.7 +1045,2477.9,85.6 +1045,2966.1,95.3 +1045,3454.4,105.1 +1045,3942.6,114.9 +1045,4430.8,124.6 +1045,4919.1,134.4 +1045,5407.3,144.2 +1045,5895.5,153.9 +1045,6383.8,163.7 +1045,6872,173.5 +1045,7360.2,183.2 +1254,-6993.8,183.2 +1254,-6525.1,173.5 +1254,-6056.4,163.7 +1254,-5587.7,153.9 +1254,-5119,144.2 +1254,-4650.3,134.4 +1254,-4181.6,124.6 +1254,-3712.9,114.9 +1254,-3244.2,105.1 +1254,-2775.5,95.3 +1254,-2306.8,85.6 +1254,-2072.4,80.7 +1254,-1838.1,75.8 +1254,-1603.7,70.9 +1254,-1369.4,66 +1254,-1135,61.2 +1254,-900.7,56.3 +1254,-666.3,51.4 +1254,-432,46.5 +1254,-314.8,44.1 +1254,-197.6,41.6 +1254,-139,40.4 +1254,-80.4,39.2 +1254,-21.8,38 +1254,38,38 +1254,97.8,38 +1254,158.8,39.2 +1254,219.8,40.4 +1254,280.9,41.6 +1254,402.9,44.1 +1254,525,46.5 +1254,769.1,51.4 +1254,1013.2,56.3 +1254,1257.3,61.2 +1254,1501.4,66 +1254,1745.6,70.9 +1254,1989.7,75.8 +1254,2233.8,80.7 +1254,2477.9,85.6 +1254,2966.1,95.3 +1254,3454.4,105.1 +1254,3942.6,114.9 +1254,4430.8,124.6 +1254,4919.1,134.4 +1254,5407.3,144.2 +1254,5895.5,153.9 +1254,6383.8,163.7 +1254,6872,173.5 +1254,7360.2,183.2 +1463,-6993.8,183.2 +1463,-6525.1,173.5 +1463,-6056.4,163.7 +1463,-5587.7,153.9 +1463,-5119,144.2 +1463,-4650.3,134.4 +1463,-4181.6,124.6 +1463,-3712.9,114.9 +1463,-3244.2,105.1 +1463,-2775.5,95.3 +1463,-2306.8,85.6 +1463,-2072.4,80.7 +1463,-1838.1,75.8 +1463,-1603.7,70.9 +1463,-1369.4,66 +1463,-1135,61.2 +1463,-900.7,56.3 +1463,-666.3,51.4 +1463,-432,46.5 +1463,-314.8,44.1 +1463,-197.6,41.6 +1463,-139,40.4 +1463,-80.4,39.2 +1463,-21.8,38 +1463,38,38 +1463,97.8,38 +1463,158.8,39.2 +1463,219.8,40.4 +1463,280.9,41.6 +1463,402.9,44.1 +1463,525,46.5 +1463,769.1,51.4 +1463,1013.2,56.3 +1463,1257.3,61.2 +1463,1501.4,66 +1463,1745.6,70.9 +1463,1989.7,75.8 +1463,2233.8,80.7 +1463,2477.9,85.6 +1463,2966.1,95.3 +1463,3454.4,105.1 +1463,3942.6,114.9 +1463,4430.8,124.6 +1463,4919.1,134.4 +1463,5407.3,144.2 +1463,5895.5,153.9 +1463,6383.8,163.7 +1463,6872,173.5 +1463,7360.2,183.2 +1672,-6993.8,183.2 +1672,-6525.1,173.5 +1672,-6056.4,163.7 +1672,-5587.7,153.9 +1672,-5119,144.2 +1672,-4650.3,134.4 +1672,-4181.6,124.6 +1672,-3712.9,114.9 +1672,-3244.2,105.1 +1672,-2775.5,95.3 +1672,-2306.8,85.6 +1672,-2072.4,80.7 +1672,-1838.1,75.8 +1672,-1603.7,70.9 +1672,-1369.4,66 +1672,-1135,61.2 +1672,-900.7,56.3 +1672,-666.3,51.4 +1672,-432,46.5 +1672,-314.8,44.1 +1672,-197.6,41.6 +1672,-139,40.4 +1672,-80.4,39.2 +1672,-21.8,38 +1672,38,38 +1672,97.8,38 +1672,158.8,39.2 +1672,219.8,40.4 +1672,280.9,41.6 +1672,402.9,44.1 +1672,525,46.5 +1672,769.1,51.4 +1672,1013.2,56.3 +1672,1257.3,61.2 +1672,1501.4,66 +1672,1745.6,70.9 +1672,1989.7,75.8 +1672,2233.8,80.7 +1672,2477.9,85.6 +1672,2966.1,95.3 +1672,3454.4,105.1 +1672,3942.6,114.9 +1672,4430.8,124.6 +1672,4919.1,134.4 +1672,5407.3,144.2 +1672,5895.5,153.9 +1672,6383.8,163.7 +1672,6872,173.5 +1672,7360.2,183.2 +1881,-6993.8,183.2 +1881,-6525.1,173.5 +1881,-6056.4,163.7 +1881,-5587.7,153.9 +1881,-5119,144.2 +1881,-4650.3,134.4 +1881,-4181.6,124.6 +1881,-3712.9,114.9 +1881,-3244.2,105.1 +1881,-2775.5,95.3 +1881,-2306.8,85.6 +1881,-2072.4,80.7 +1881,-1838.1,75.8 +1881,-1603.7,70.9 +1881,-1369.4,66 +1881,-1135,61.2 +1881,-900.7,56.3 +1881,-666.3,51.4 +1881,-432,46.5 +1881,-314.8,44.1 +1881,-197.6,41.6 +1881,-139,40.4 +1881,-80.4,39.2 +1881,-21.8,38 +1881,38,38 +1881,97.8,38 +1881,158.8,39.2 +1881,219.8,40.4 +1881,280.9,41.6 +1881,402.9,44.1 +1881,525,46.5 +1881,769.1,51.4 +1881,1013.2,56.3 +1881,1257.3,61.2 +1881,1501.4,66 +1881,1745.6,70.9 +1881,1989.7,75.8 +1881,2233.8,80.7 +1881,2477.9,85.6 +1881,2966.1,95.3 +1881,3454.4,105.1 +1881,3942.6,114.9 +1881,4430.8,124.6 +1881,4919.1,134.4 +1881,5407.3,144.2 +1881,5895.5,153.9 +1881,6383.8,163.7 +1881,6872,173.5 +1881,7360.2,183.2 +2090,-6993.8,183.2 +2090,-6525.1,173.5 +2090,-6056.4,163.7 +2090,-5587.7,153.9 +2090,-5119,144.2 +2090,-4650.3,134.4 +2090,-4181.6,124.6 +2090,-3712.9,114.9 +2090,-3244.2,105.1 +2090,-2775.5,95.3 +2090,-2306.8,85.6 +2090,-2072.4,80.7 +2090,-1838.1,75.8 +2090,-1603.7,70.9 +2090,-1369.4,66 +2090,-1135,61.2 +2090,-900.7,56.3 +2090,-666.3,51.4 +2090,-432,46.5 +2090,-314.8,44.1 +2090,-197.6,41.6 +2090,-139,40.4 +2090,-80.4,39.2 +2090,-21.8,38 +2090,38,38 +2090,97.8,38 +2090,158.8,39.2 +2090,219.8,40.4 +2090,280.9,41.6 +2090,402.9,44.1 +2090,525,46.5 +2090,769.1,51.4 +2090,1013.2,56.3 +2090,1257.3,61.2 +2090,1501.4,66 +2090,1745.6,70.9 +2090,1989.7,75.8 +2090,2233.8,80.7 +2090,2477.9,85.6 +2090,2966.1,95.3 +2090,3454.4,105.1 +2090,3942.6,114.9 +2090,4430.8,124.6 +2090,4919.1,134.4 +2090,5407.3,144.2 +2090,5895.5,153.9 +2090,6383.8,163.7 +2090,6872,173.5 +2090,7360.2,183.2 +2299,-6993.8,183.2 +2299,-6525.1,173.5 +2299,-6056.4,163.7 +2299,-5587.7,153.9 +2299,-5119,144.2 +2299,-4650.3,134.4 +2299,-4181.6,124.6 +2299,-3712.9,114.9 +2299,-3244.2,105.1 +2299,-2775.5,95.3 +2299,-2306.8,85.6 +2299,-2072.4,80.7 +2299,-1838.1,75.8 +2299,-1603.7,70.9 +2299,-1369.4,66 +2299,-1135,61.2 +2299,-900.7,56.3 +2299,-666.3,51.4 +2299,-432,46.5 +2299,-314.8,44.1 +2299,-197.6,41.6 +2299,-139,40.4 +2299,-80.4,39.2 +2299,-21.8,38 +2299,38,38 +2299,97.8,38 +2299,158.8,39.2 +2299,219.8,40.4 +2299,280.9,41.6 +2299,402.9,44.1 +2299,525,46.5 +2299,769.1,51.4 +2299,1013.2,56.3 +2299,1257.3,61.2 +2299,1501.4,66 +2299,1745.6,70.9 +2299,1989.7,75.8 +2299,2233.8,80.7 +2299,2477.9,85.6 +2299,2966.1,95.3 +2299,3454.4,105.1 +2299,3942.6,114.9 +2299,4430.8,124.6 +2299,4919.1,134.4 +2299,5407.3,144.2 +2299,5895.5,153.9 +2299,6383.8,163.7 +2299,6872,173.5 +2299,7360.2,183.2 +2508,-6993.8,183.2 +2508,-6525.1,173.5 +2508,-6056.4,163.7 +2508,-5587.7,153.9 +2508,-5119,144.2 +2508,-4650.3,134.4 +2508,-4181.6,124.6 +2508,-3712.9,114.9 +2508,-3244.2,105.1 +2508,-2775.5,95.3 +2508,-2306.8,85.6 +2508,-2072.4,80.7 +2508,-1838.1,75.8 +2508,-1603.7,70.9 +2508,-1369.4,66 +2508,-1135,61.2 +2508,-900.7,56.3 +2508,-666.3,51.4 +2508,-432,46.5 +2508,-314.8,44.1 +2508,-197.6,41.6 +2508,-139,40.4 +2508,-80.4,39.2 +2508,-21.8,38 +2508,38,38 +2508,97.8,38 +2508,158.8,39.2 +2508,219.8,40.4 +2508,280.9,41.6 +2508,402.9,44.1 +2508,525,46.5 +2508,769.1,51.4 +2508,1013.2,56.3 +2508,1257.3,61.2 +2508,1501.4,66 +2508,1745.6,70.9 +2508,1989.7,75.8 +2508,2233.8,80.7 +2508,2477.9,85.6 +2508,2966.1,95.3 +2508,3454.4,105.1 +2508,3942.6,114.9 +2508,4430.8,124.6 +2508,4919.1,134.4 +2508,5407.3,144.2 +2508,5895.5,153.9 +2508,6383.8,163.7 +2508,6872,173.5 +2508,7360.2,183.2 +2717,-6993.8,183.2 +2717,-6525.1,173.5 +2717,-6056.4,163.7 +2717,-5587.7,153.9 +2717,-5119,144.2 +2717,-4650.3,134.4 +2717,-4181.6,124.6 +2717,-3712.9,114.9 +2717,-3244.2,105.1 +2717,-2775.5,95.3 +2717,-2306.8,85.6 +2717,-2072.4,80.7 +2717,-1838.1,75.8 +2717,-1603.7,70.9 +2717,-1369.4,66 +2717,-1135,61.2 +2717,-900.7,56.3 +2717,-666.3,51.4 +2717,-432,46.5 +2717,-314.8,44.1 +2717,-197.6,41.6 +2717,-139,40.4 +2717,-80.4,39.2 +2717,-21.8,38 +2717,38,38 +2717,97.8,38 +2717,158.8,39.2 +2717,219.8,40.4 +2717,280.9,41.6 +2717,402.9,44.1 +2717,525,46.5 +2717,769.1,51.4 +2717,1013.2,56.3 +2717,1257.3,61.2 +2717,1501.4,66 +2717,1745.6,70.9 +2717,1989.7,75.8 +2717,2233.8,80.7 +2717,2477.9,85.6 +2717,2966.1,95.3 +2717,3454.4,105.1 +2717,3942.6,114.9 +2717,4430.8,124.6 +2717,4919.1,134.4 +2717,5407.3,144.2 +2717,5895.5,153.9 +2717,6383.8,163.7 +2717,6872,173.5 +2717,7360.2,183.2 +2926,-6993.8,183.2 +2926,-6525.1,173.5 +2926,-6056.4,163.7 +2926,-5587.7,153.9 +2926,-5119,144.2 +2926,-4650.3,134.4 +2926,-4181.6,124.6 +2926,-3712.9,114.9 +2926,-3244.2,105.1 +2926,-2775.5,95.3 +2926,-2306.8,85.6 +2926,-2072.4,80.7 +2926,-1838.1,75.8 +2926,-1603.7,70.9 +2926,-1369.4,66 +2926,-1135,61.2 +2926,-900.7,56.3 +2926,-666.3,51.4 +2926,-432,46.5 +2926,-314.8,44.1 +2926,-197.6,41.6 +2926,-139,40.4 +2926,-80.4,39.2 +2926,-21.8,38 +2926,38,38 +2926,97.8,38 +2926,158.8,39.2 +2926,219.8,40.4 +2926,280.9,41.6 +2926,402.9,44.1 +2926,525,46.5 +2926,769.1,51.4 +2926,1013.2,56.3 +2926,1257.3,61.2 +2926,1501.4,66 +2926,1745.6,70.9 +2926,1989.7,75.8 +2926,2233.8,80.7 +2926,2477.9,85.6 +2926,2966.1,95.3 +2926,3454.4,105.1 +2926,3942.6,114.9 +2926,4430.8,124.6 +2926,4919.1,134.4 +2926,5407.3,144.2 +2926,5895.5,153.9 +2926,6383.8,163.7 +2926,6872,173.5 +2926,7360.2,183.2 +3135,-6993.8,183.2 +3135,-6525.1,173.5 +3135,-6056.4,163.7 +3135,-5587.7,153.9 +3135,-5119,144.2 +3135,-4650.3,134.4 +3135,-4181.6,124.6 +3135,-3712.9,114.9 +3135,-3244.2,105.1 +3135,-2775.5,95.3 +3135,-2306.8,85.6 +3135,-2072.4,80.7 +3135,-1838.1,75.8 +3135,-1603.7,70.9 +3135,-1369.4,66 +3135,-1135,61.2 +3135,-900.7,56.3 +3135,-666.3,51.4 +3135,-432,46.5 +3135,-314.8,44.1 +3135,-197.6,41.6 +3135,-139,40.4 +3135,-80.4,39.2 +3135,-21.8,38 +3135,38,38 +3135,97.8,38 +3135,158.8,39.2 +3135,219.8,40.4 +3135,280.9,41.6 +3135,402.9,44.1 +3135,525,46.5 +3135,769.1,51.4 +3135,1013.2,56.3 +3135,1257.3,61.2 +3135,1501.4,66 +3135,1745.6,70.9 +3135,1989.7,75.8 +3135,2233.8,80.7 +3135,2477.9,85.6 +3135,2966.1,95.3 +3135,3454.4,105.1 +3135,3942.6,114.9 +3135,4430.8,124.6 +3135,4919.1,134.4 +3135,5407.3,144.2 +3135,5895.5,153.9 +3135,6383.8,163.7 +3135,6872,173.5 +3135,7360.2,183.2 +3344,-6993.8,183.2 +3344,-6525.1,173.5 +3344,-6056.4,163.7 +3344,-5587.7,153.9 +3344,-5119,144.2 +3344,-4650.3,134.4 +3344,-4181.6,124.6 +3344,-3712.9,114.9 +3344,-3244.2,105.1 +3344,-2775.5,95.3 +3344,-2306.8,85.6 +3344,-2072.4,80.7 +3344,-1838.1,75.8 +3344,-1603.7,70.9 +3344,-1369.4,66 +3344,-1135,61.2 +3344,-900.7,56.3 +3344,-666.3,51.4 +3344,-432,46.5 +3344,-314.8,44.1 +3344,-197.6,41.6 +3344,-139,40.4 +3344,-80.4,39.2 +3344,-21.8,38 +3344,38,38 +3344,97.8,38 +3344,158.8,39.2 +3344,219.8,40.4 +3344,280.9,41.6 +3344,402.9,44.1 +3344,525,46.5 +3344,769.1,51.4 +3344,1013.2,56.3 +3344,1257.3,61.2 +3344,1501.4,66 +3344,1745.6,70.9 +3344,1989.7,75.8 +3344,2233.8,80.7 +3344,2477.9,85.6 +3344,2966.1,95.3 +3344,3454.4,105.1 +3344,3942.6,114.9 +3344,4430.8,124.6 +3344,4919.1,134.4 +3344,5407.3,144.2 +3344,5895.5,153.9 +3344,6383.8,163.7 +3344,6872,173.5 +3344,7360.2,183.2 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Class2_RigidTruck.vveh b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Class2_RigidTruck.vveh new file mode 100644 index 0000000000000000000000000000000000000000..a351966947979d93c41e075eb163f081a26accd8 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Class2_RigidTruck.vveh @@ -0,0 +1,100 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2020-09-21T11:55:57.0138776Z", + "AppVersion": "3", + "FileVersion": 10 + }, + "Body": { + "SavedInDeclMode": false, + "VehCat": "RigidTruck", + "LegislativeClass": "Unknown", + "CurbWeight": 4670.0, + "CurbWeightExtra": 1900.0, + "MassMax": 11.99, + "Loading": 3020.0, + "rdyn": 421.0, + "CdCorrMode": "CdofVdecl", + "CdCorrFile": "", + "AxleConfig": { + "Type": "4x2", + "Axles": [ + { + "Inertia": 6.5, + "Wheels": "265/70 R19.5", + "AxleWeightShare": 0.2, + "TwinTyres": false, + "RRCISO": 0.0065, + "FzISO": 20850.0, + "Type": "VehicleNonDriven" + }, + { + "Inertia": 6.5, + "Wheels": "265/70 R19.5", + "AxleWeightShare": 0.3, + "TwinTyres": true, + "RRCISO": 0.0075, + "FzISO": 20850.0, + "Type": "VehicleDriven" + }, + { + "Inertia": 4.5, + "Wheels": "235/75 R17.5", + "AxleWeightShare": 0.25, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 16680.0, + "Type": "VehicleNonDriven" + }, + { + "Inertia": 4.5, + "Wheels": "235/75 R17.5", + "AxleWeightShare": 0.25, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 16680.0, + "Type": "VehicleNonDriven" + } + ] + }, + "EngineStopStart": true, + "EcoRoll": "None", + "PredictiveCruiseControl": "None", + "ATEcoRollReleaseLockupClutch": false, + "CdA": 4.83, + "VehicleHeight": 3.0, + "IdlingSpeed": 600.0, + "Retarder": { + "Type": "secondary", + "Ratio": 1.0, + "File": "Default.vrlm" + }, + "Angledrive": { + "Type": "None", + "Ratio": 0.0, + "LossMap": "" + }, + "PTO": { + "Type": "None", + "LossMap": "", + "Cycle": "" + }, + "TorqueLimits": {}, + "MaxDrivetrainPower": 1800000.0, + "InitialSoC": 50.0, + "PowertrainConfiguration": "ParallelHybrid", + "ElectricMotors": [ + { + "Count": 1, + "Ratio": 1.0, + "MechanicalEfficiency": 1.0, + "Position": "P2", + "MotorFile": "GenericEM_47kW.vem" + } + ], + "Battery": { + "NumPacks": 1, + "BatteryFile": "SuperCap.vreess" + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Class2_RigidTruck_ParHyb_SuperCap_Ovl_ENG.vecto b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Class2_RigidTruck_ParHyb_SuperCap_Ovl_ENG.vecto new file mode 100644 index 0000000000000000000000000000000000000000..c8ae6294df5578916abc58a2545032a1af7a34db --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Class2_RigidTruck_ParHyb_SuperCap_Ovl_ENG.vecto @@ -0,0 +1,64 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2020-08-25T16:36:24.0489384Z", + "AppVersion": "3", + "FileVersion": 8 + }, + "Body": { + "SavedInDeclMode": false, + "EngineOnlyMode": false, + "VehicleFile": "Class2_RigidTruck.vveh", + "EngineFile": "Engine_175kW_6.8l.veng", + "GearboxFile": "AMT_6.vgbx", + "TCU": "AMT_6.vgbx", + "ShiftStrategy": "", + "HybridStrategyParams": "HybridStrategyParams.vhctl", + "AuxiliaryAssembly": "Classic", + "AuxiliaryVersion": "CLASSIC", + "AdvancedAuxiliaryFilePath": "", + "Aux": [], + "Padd": 3540.0, + "Padd_electric": 0.0, + "VACC": "Truck.vacc", + "EngineStopStartAtVehicleStopThreshold": 2.0, + "EngineStopStartMaxOffTimespan": 120.0, + "EngineStopStartUtilityFactor": 0.8, + "EcoRollMinSpeed": 60.000000000000007, + "EcoRollActivationDelay": 2.0, + "EcoRollUnderspeedThreshold": 0.0, + "EcoRollMaxAcceleration": 0.1, + "PCCEnableSpeed": 80.0, + "PCCMinSpeed": 50.0, + "PCCUnderspeed": 8.0, + "PCCOverSpeed": 5.0, + "PCCPreviewDistanceUC1": 1500.0, + "PCCPreviewDistanceUC2": 1000.0, + "LAC": { + "Enabled": true, + "PreviewDistanceFactor": 10.0, + "DF_offset": 2.5, + "DF_scaling": 1.5, + "DF_targetSpeedLookup": "", + "Df_velocityDropLookup": "", + "MinSpeed": 50.0 + }, + "OverSpeedEcoRoll": { + "Mode": "Off", + "MinSpeed": 50.0, + "OverSpeed": 5.0 + }, + "Cycles": [ + "LongHaul", + "RegionalDelivery", + "UrbanDelivery", + "Coach", + "Construction", + "HeavyUrban", + "Interurban", + "MunicipalUtility", + "Suburban", + "Urban" + ] + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Default.vrlm b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Default.vrlm new file mode 100644 index 0000000000000000000000000000000000000000..eb575b99973291e5414c4826da086c1f03a7f179 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Default.vrlm @@ -0,0 +1,32 @@ +Retarder Speed [1/min],Torque Loss [Nm] +0,10 +100,10 +200,10.1 +300,10.2 +400,10.3 +500,10.5 +600,10.7 +700,11 +800,11.3 +900,11.6 +1000,12 +1100,12.4 +1200,12.9 +1300,13.4 +1400,13.9 +1500,14.5 +1600,15.1 +1700,15.8 +1800,16.5 +1900,17.2 +2000,18 +2100,18.8 +2200,19.7 +2300,20.6 +2400,21.5 +2500,22.5 +2600,23.5 +2700,24.6 +2800,25.7 +2900,26.8 +3000,28 diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Engine_175kW_6.8l.veng b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Engine_175kW_6.8l.veng new file mode 100644 index 0000000000000000000000000000000000000000..d9c60344f343ba4367ccc97baa111ded999d9b8c --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Engine_175kW_6.8l.veng @@ -0,0 +1,21 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T08:54:28.7387223Z", + "AppVersion": "3", + "FileVersion": 3 + }, + "Body": { + "SavedInDeclMode": false, + "ModelName": "175kW 6.8l Engine", + "Displacement": "6871", + "IdlingSpeed": 600.0, + "Inertia": 3.565, + "FullLoadCurve": "175kW.vfld", + "FuelMap": "175kW.vmap", + "WHTC-Urban": 0.0, + "WHTC-Rural": 0.0, + "WHTC-Motorway": 0.0, + "ColdHotBalancingFactor": 0.0 + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_1.vtlm b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_1.vtlm new file mode 100644 index 0000000000000000000000000000000000000000..b4274373230f50e6df7eb9702010c7a868dc967e --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_1.vtlm @@ -0,0 +1,233 @@ +Input Speed [rpm],Input Torque [Nm],Torque Loss [Nm] +0,-5500.0,229.6 +0,-5000.0,209.6 +0,-4500.0,169.6 +0,-4000.0,169.6 +0,-3500.0,149.6 +0,-3000.0,129.6 +0,-2500.0,109.6 +0,-2000.0,89.6 +0,-1600.0,73.6 +0,-1200.0,57.6 +0,-900.0,45.6 +0,-600.0,33.6 +0,-400.0,25.6 +0,-200.0,17.6 +0,0.0,17.6 +0,200.0,17.6 +0,400.0,25.6 +0,600.0,33.6 +0,900.0,45.6 +0,1200.0,57.6 +0,1600.0,73.6 +0,2000.0,89.6 +0,2500.0,109.6 +0,3000.0,129.6 +0,3500.0,149.6 +0,4000.0,169.6 +0,4500.0,189.6 +0,5000.0,209.6 +0,5500.0,229.6 +600,-5500.0,229.6 +600,-5000.0,209.6 +600,-4500.0,169.6 +600,-4000.0,169.6 +600,-3500.0,149.6 +600,-3000.0,129.6 +600,-2500.0,109.6 +600,-2000.0,89.6 +600,-1600.0,73.6 +600,-1200.0,57.6 +600,-900.0,45.6 +600,-600.0,33.6 +600,-400.0,25.6 +600,-200.0,17.6 +600,0.0,17.6 +600,200.0,17.6 +600,400.0,25.6 +600,600.0,33.6 +600,900.0,45.6 +600,1200.0,57.6 +600,1600.0,73.6 +600,2000.0,89.6 +600,2500.0,109.6 +600,3000.0,129.6 +600,3500.0,149.6 +600,4000.0,169.6 +600,4500.0,189.6 +600,5000.0,209.6 +600,5500.0,229.6 +900,-5500.0,231.4 +900,-5000.0,211.4 +900,-4500.0,171.4 +900,-4000.0,171.4 +900,-3500.0,151.4 +900,-3000.0,131.4 +900,-2500.0,111.4 +900,-2000.0,91.4 +900,-1600.0,75.4 +900,-1200.0,59.4 +900,-900.0,47.4 +900,-600.0,35.4 +900,-400.0,27.4 +900,-200.0,19.4 +900,0.0,19.4 +900,200.0,19.4 +900,400.0,27.4 +900,600.0,35.4 +900,900.0,47.4 +900,1200.0,59.4 +900,1600.0,75.4 +900,2000.0,91.4 +900,2500.0,111.4 +900,3000.0,131.4 +900,3500.0,151.4 +900,4000.0,171.4 +900,4500.0,191.4 +900,5000.0,211.4 +900,5500.0,231.4 +1200,-5500.0,233.2 +1200,-5000.0,213.2 +1200,-4500.0,173.2 +1200,-4000.0,173.2 +1200,-3500.0,153.2 +1200,-3000.0,133.2 +1200,-2500.0,113.2 +1200,-2000.0,93.2 +1200,-1600.0,77.2 +1200,-1200.0,61.2 +1200,-900.0,49.2 +1200,-600.0,37.2 +1200,-400.0,29.2 +1200,-200.0,21.2 +1200,0.0,21.2 +1200,200.0,21.2 +1200,400.0,29.2 +1200,600.0,37.2 +1200,900.0,49.2 +1200,1200.0,61.2 +1200,1600.0,77.2 +1200,2000.0,93.2 +1200,2500.0,113.2 +1200,3000.0,133.2 +1200,3500.0,153.2 +1200,4000.0,173.2 +1200,4500.0,193.2 +1200,5000.0,213.2 +1200,5500.0,233.2 +1600,-5500.0,235.6 +1600,-5000.0,215.6 +1600,-4500.0,175.6 +1600,-4000.0,175.6 +1600,-3500.0,155.6 +1600,-3000.0,135.6 +1600,-2500.0,115.6 +1600,-2000.0,95.6 +1600,-1600.0,79.6 +1600,-1200.0,63.6 +1600,-900.0,51.6 +1600,-600.0,39.6 +1600,-400.0,31.6 +1600,-200.0,23.6 +1600,0.0,23.6 +1600,200.0,23.6 +1600,400.0,31.6 +1600,600.0,39.6 +1600,900.0,51.6 +1600,1200.0,63.6 +1600,1600.0,79.6 +1600,2000.0,95.6 +1600,2500.0,115.6 +1600,3000.0,135.6 +1600,3500.0,155.6 +1600,4000.0,175.6 +1600,4500.0,195.6 +1600,5000.0,215.6 +1600,5500.0,235.6 +2000,-5500.0,238.0 +2000,-5000.0,218.0 +2000,-4500.0,178.0 +2000,-4000.0,178.0 +2000,-3500.0,158.0 +2000,-3000.0,138.0 +2000,-2500.0,118.0 +2000,-2000.0,98.0 +2000,-1600.0,82.0 +2000,-1200.0,66.0 +2000,-900.0,54.0 +2000,-600.0,42.0 +2000,-400.0,34.0 +2000,-200.0,26.0 +2000,0.0,26.0 +2000,200.0,26.0 +2000,400.0,34.0 +2000,600.0,42.0 +2000,900.0,54.0 +2000,1200.0,66.0 +2000,1600.0,82.0 +2000,2000.0,98.0 +2000,2500.0,118.0 +2000,3000.0,138.0 +2000,3500.0,158.0 +2000,4000.0,178.0 +2000,4500.0,198.0 +2000,5000.0,218.0 +2000,5500.0,238.0 +2500,-5500.0,241.0 +2500,-5000.0,221.0 +2500,-4500.0,181.0 +2500,-4000.0,181.0 +2500,-3500.0,161.0 +2500,-3000.0,141.0 +2500,-2500.0,121.0 +2500,-2000.0,101.0 +2500,-1600.0,85.0 +2500,-1200.0,69.0 +2500,-900.0,57.0 +2500,-600.0,45.0 +2500,-400.0,37.0 +2500,-200.0,29.0 +2500,0.0,29.0 +2500,200.0,29.0 +2500,400.0,37.0 +2500,600.0,45.0 +2500,900.0,57.0 +2500,1200.0,69.0 +2500,1600.0,85.0 +2500,2000.0,101.0 +2500,2500.0,121.0 +2500,3000.0,141.0 +2500,3500.0,161.0 +2500,4000.0,181.0 +2500,4500.0,201.0 +2500,5000.0,221.0 +2500,5500.0,241.0 +3000,-5500.0,244.0 +3000,-5000.0,224.0 +3000,-4500.0,184.0 +3000,-4000.0,184.0 +3000,-3500.0,164.0 +3000,-3000.0,144.0 +3000,-2500.0,124.0 +3000,-2000.0,104.0 +3000,-1600.0,88.0 +3000,-1200.0,72.0 +3000,-900.0,60.0 +3000,-600.0,48.0 +3000,-400.0,40.0 +3000,-200.0,32.0 +3000,0.0,32.0 +3000,200.0,32.0 +3000,400.0,40.0 +3000,600.0,48.0 +3000,900.0,60.0 +3000,1200.0,72.0 +3000,1600.0,88.0 +3000,2000.0,104.0 +3000,2500.0,124.0 +3000,3000.0,144.0 +3000,3500.0,164.0 +3000,4000.0,184.0 +3000,4500.0,204.0 +3000,5000.0,224.0 +3000,5500.0,244.0 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_2.vtlm b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_2.vtlm new file mode 100644 index 0000000000000000000000000000000000000000..b4274373230f50e6df7eb9702010c7a868dc967e --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_2.vtlm @@ -0,0 +1,233 @@ +Input Speed [rpm],Input Torque [Nm],Torque Loss [Nm] +0,-5500.0,229.6 +0,-5000.0,209.6 +0,-4500.0,169.6 +0,-4000.0,169.6 +0,-3500.0,149.6 +0,-3000.0,129.6 +0,-2500.0,109.6 +0,-2000.0,89.6 +0,-1600.0,73.6 +0,-1200.0,57.6 +0,-900.0,45.6 +0,-600.0,33.6 +0,-400.0,25.6 +0,-200.0,17.6 +0,0.0,17.6 +0,200.0,17.6 +0,400.0,25.6 +0,600.0,33.6 +0,900.0,45.6 +0,1200.0,57.6 +0,1600.0,73.6 +0,2000.0,89.6 +0,2500.0,109.6 +0,3000.0,129.6 +0,3500.0,149.6 +0,4000.0,169.6 +0,4500.0,189.6 +0,5000.0,209.6 +0,5500.0,229.6 +600,-5500.0,229.6 +600,-5000.0,209.6 +600,-4500.0,169.6 +600,-4000.0,169.6 +600,-3500.0,149.6 +600,-3000.0,129.6 +600,-2500.0,109.6 +600,-2000.0,89.6 +600,-1600.0,73.6 +600,-1200.0,57.6 +600,-900.0,45.6 +600,-600.0,33.6 +600,-400.0,25.6 +600,-200.0,17.6 +600,0.0,17.6 +600,200.0,17.6 +600,400.0,25.6 +600,600.0,33.6 +600,900.0,45.6 +600,1200.0,57.6 +600,1600.0,73.6 +600,2000.0,89.6 +600,2500.0,109.6 +600,3000.0,129.6 +600,3500.0,149.6 +600,4000.0,169.6 +600,4500.0,189.6 +600,5000.0,209.6 +600,5500.0,229.6 +900,-5500.0,231.4 +900,-5000.0,211.4 +900,-4500.0,171.4 +900,-4000.0,171.4 +900,-3500.0,151.4 +900,-3000.0,131.4 +900,-2500.0,111.4 +900,-2000.0,91.4 +900,-1600.0,75.4 +900,-1200.0,59.4 +900,-900.0,47.4 +900,-600.0,35.4 +900,-400.0,27.4 +900,-200.0,19.4 +900,0.0,19.4 +900,200.0,19.4 +900,400.0,27.4 +900,600.0,35.4 +900,900.0,47.4 +900,1200.0,59.4 +900,1600.0,75.4 +900,2000.0,91.4 +900,2500.0,111.4 +900,3000.0,131.4 +900,3500.0,151.4 +900,4000.0,171.4 +900,4500.0,191.4 +900,5000.0,211.4 +900,5500.0,231.4 +1200,-5500.0,233.2 +1200,-5000.0,213.2 +1200,-4500.0,173.2 +1200,-4000.0,173.2 +1200,-3500.0,153.2 +1200,-3000.0,133.2 +1200,-2500.0,113.2 +1200,-2000.0,93.2 +1200,-1600.0,77.2 +1200,-1200.0,61.2 +1200,-900.0,49.2 +1200,-600.0,37.2 +1200,-400.0,29.2 +1200,-200.0,21.2 +1200,0.0,21.2 +1200,200.0,21.2 +1200,400.0,29.2 +1200,600.0,37.2 +1200,900.0,49.2 +1200,1200.0,61.2 +1200,1600.0,77.2 +1200,2000.0,93.2 +1200,2500.0,113.2 +1200,3000.0,133.2 +1200,3500.0,153.2 +1200,4000.0,173.2 +1200,4500.0,193.2 +1200,5000.0,213.2 +1200,5500.0,233.2 +1600,-5500.0,235.6 +1600,-5000.0,215.6 +1600,-4500.0,175.6 +1600,-4000.0,175.6 +1600,-3500.0,155.6 +1600,-3000.0,135.6 +1600,-2500.0,115.6 +1600,-2000.0,95.6 +1600,-1600.0,79.6 +1600,-1200.0,63.6 +1600,-900.0,51.6 +1600,-600.0,39.6 +1600,-400.0,31.6 +1600,-200.0,23.6 +1600,0.0,23.6 +1600,200.0,23.6 +1600,400.0,31.6 +1600,600.0,39.6 +1600,900.0,51.6 +1600,1200.0,63.6 +1600,1600.0,79.6 +1600,2000.0,95.6 +1600,2500.0,115.6 +1600,3000.0,135.6 +1600,3500.0,155.6 +1600,4000.0,175.6 +1600,4500.0,195.6 +1600,5000.0,215.6 +1600,5500.0,235.6 +2000,-5500.0,238.0 +2000,-5000.0,218.0 +2000,-4500.0,178.0 +2000,-4000.0,178.0 +2000,-3500.0,158.0 +2000,-3000.0,138.0 +2000,-2500.0,118.0 +2000,-2000.0,98.0 +2000,-1600.0,82.0 +2000,-1200.0,66.0 +2000,-900.0,54.0 +2000,-600.0,42.0 +2000,-400.0,34.0 +2000,-200.0,26.0 +2000,0.0,26.0 +2000,200.0,26.0 +2000,400.0,34.0 +2000,600.0,42.0 +2000,900.0,54.0 +2000,1200.0,66.0 +2000,1600.0,82.0 +2000,2000.0,98.0 +2000,2500.0,118.0 +2000,3000.0,138.0 +2000,3500.0,158.0 +2000,4000.0,178.0 +2000,4500.0,198.0 +2000,5000.0,218.0 +2000,5500.0,238.0 +2500,-5500.0,241.0 +2500,-5000.0,221.0 +2500,-4500.0,181.0 +2500,-4000.0,181.0 +2500,-3500.0,161.0 +2500,-3000.0,141.0 +2500,-2500.0,121.0 +2500,-2000.0,101.0 +2500,-1600.0,85.0 +2500,-1200.0,69.0 +2500,-900.0,57.0 +2500,-600.0,45.0 +2500,-400.0,37.0 +2500,-200.0,29.0 +2500,0.0,29.0 +2500,200.0,29.0 +2500,400.0,37.0 +2500,600.0,45.0 +2500,900.0,57.0 +2500,1200.0,69.0 +2500,1600.0,85.0 +2500,2000.0,101.0 +2500,2500.0,121.0 +2500,3000.0,141.0 +2500,3500.0,161.0 +2500,4000.0,181.0 +2500,4500.0,201.0 +2500,5000.0,221.0 +2500,5500.0,241.0 +3000,-5500.0,244.0 +3000,-5000.0,224.0 +3000,-4500.0,184.0 +3000,-4000.0,184.0 +3000,-3500.0,164.0 +3000,-3000.0,144.0 +3000,-2500.0,124.0 +3000,-2000.0,104.0 +3000,-1600.0,88.0 +3000,-1200.0,72.0 +3000,-900.0,60.0 +3000,-600.0,48.0 +3000,-400.0,40.0 +3000,-200.0,32.0 +3000,0.0,32.0 +3000,200.0,32.0 +3000,400.0,40.0 +3000,600.0,48.0 +3000,900.0,60.0 +3000,1200.0,72.0 +3000,1600.0,88.0 +3000,2000.0,104.0 +3000,2500.0,124.0 +3000,3000.0,144.0 +3000,3500.0,164.0 +3000,4000.0,184.0 +3000,4500.0,204.0 +3000,5000.0,224.0 +3000,5500.0,244.0 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_3.vtlm b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_3.vtlm new file mode 100644 index 0000000000000000000000000000000000000000..b4274373230f50e6df7eb9702010c7a868dc967e --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_3.vtlm @@ -0,0 +1,233 @@ +Input Speed [rpm],Input Torque [Nm],Torque Loss [Nm] +0,-5500.0,229.6 +0,-5000.0,209.6 +0,-4500.0,169.6 +0,-4000.0,169.6 +0,-3500.0,149.6 +0,-3000.0,129.6 +0,-2500.0,109.6 +0,-2000.0,89.6 +0,-1600.0,73.6 +0,-1200.0,57.6 +0,-900.0,45.6 +0,-600.0,33.6 +0,-400.0,25.6 +0,-200.0,17.6 +0,0.0,17.6 +0,200.0,17.6 +0,400.0,25.6 +0,600.0,33.6 +0,900.0,45.6 +0,1200.0,57.6 +0,1600.0,73.6 +0,2000.0,89.6 +0,2500.0,109.6 +0,3000.0,129.6 +0,3500.0,149.6 +0,4000.0,169.6 +0,4500.0,189.6 +0,5000.0,209.6 +0,5500.0,229.6 +600,-5500.0,229.6 +600,-5000.0,209.6 +600,-4500.0,169.6 +600,-4000.0,169.6 +600,-3500.0,149.6 +600,-3000.0,129.6 +600,-2500.0,109.6 +600,-2000.0,89.6 +600,-1600.0,73.6 +600,-1200.0,57.6 +600,-900.0,45.6 +600,-600.0,33.6 +600,-400.0,25.6 +600,-200.0,17.6 +600,0.0,17.6 +600,200.0,17.6 +600,400.0,25.6 +600,600.0,33.6 +600,900.0,45.6 +600,1200.0,57.6 +600,1600.0,73.6 +600,2000.0,89.6 +600,2500.0,109.6 +600,3000.0,129.6 +600,3500.0,149.6 +600,4000.0,169.6 +600,4500.0,189.6 +600,5000.0,209.6 +600,5500.0,229.6 +900,-5500.0,231.4 +900,-5000.0,211.4 +900,-4500.0,171.4 +900,-4000.0,171.4 +900,-3500.0,151.4 +900,-3000.0,131.4 +900,-2500.0,111.4 +900,-2000.0,91.4 +900,-1600.0,75.4 +900,-1200.0,59.4 +900,-900.0,47.4 +900,-600.0,35.4 +900,-400.0,27.4 +900,-200.0,19.4 +900,0.0,19.4 +900,200.0,19.4 +900,400.0,27.4 +900,600.0,35.4 +900,900.0,47.4 +900,1200.0,59.4 +900,1600.0,75.4 +900,2000.0,91.4 +900,2500.0,111.4 +900,3000.0,131.4 +900,3500.0,151.4 +900,4000.0,171.4 +900,4500.0,191.4 +900,5000.0,211.4 +900,5500.0,231.4 +1200,-5500.0,233.2 +1200,-5000.0,213.2 +1200,-4500.0,173.2 +1200,-4000.0,173.2 +1200,-3500.0,153.2 +1200,-3000.0,133.2 +1200,-2500.0,113.2 +1200,-2000.0,93.2 +1200,-1600.0,77.2 +1200,-1200.0,61.2 +1200,-900.0,49.2 +1200,-600.0,37.2 +1200,-400.0,29.2 +1200,-200.0,21.2 +1200,0.0,21.2 +1200,200.0,21.2 +1200,400.0,29.2 +1200,600.0,37.2 +1200,900.0,49.2 +1200,1200.0,61.2 +1200,1600.0,77.2 +1200,2000.0,93.2 +1200,2500.0,113.2 +1200,3000.0,133.2 +1200,3500.0,153.2 +1200,4000.0,173.2 +1200,4500.0,193.2 +1200,5000.0,213.2 +1200,5500.0,233.2 +1600,-5500.0,235.6 +1600,-5000.0,215.6 +1600,-4500.0,175.6 +1600,-4000.0,175.6 +1600,-3500.0,155.6 +1600,-3000.0,135.6 +1600,-2500.0,115.6 +1600,-2000.0,95.6 +1600,-1600.0,79.6 +1600,-1200.0,63.6 +1600,-900.0,51.6 +1600,-600.0,39.6 +1600,-400.0,31.6 +1600,-200.0,23.6 +1600,0.0,23.6 +1600,200.0,23.6 +1600,400.0,31.6 +1600,600.0,39.6 +1600,900.0,51.6 +1600,1200.0,63.6 +1600,1600.0,79.6 +1600,2000.0,95.6 +1600,2500.0,115.6 +1600,3000.0,135.6 +1600,3500.0,155.6 +1600,4000.0,175.6 +1600,4500.0,195.6 +1600,5000.0,215.6 +1600,5500.0,235.6 +2000,-5500.0,238.0 +2000,-5000.0,218.0 +2000,-4500.0,178.0 +2000,-4000.0,178.0 +2000,-3500.0,158.0 +2000,-3000.0,138.0 +2000,-2500.0,118.0 +2000,-2000.0,98.0 +2000,-1600.0,82.0 +2000,-1200.0,66.0 +2000,-900.0,54.0 +2000,-600.0,42.0 +2000,-400.0,34.0 +2000,-200.0,26.0 +2000,0.0,26.0 +2000,200.0,26.0 +2000,400.0,34.0 +2000,600.0,42.0 +2000,900.0,54.0 +2000,1200.0,66.0 +2000,1600.0,82.0 +2000,2000.0,98.0 +2000,2500.0,118.0 +2000,3000.0,138.0 +2000,3500.0,158.0 +2000,4000.0,178.0 +2000,4500.0,198.0 +2000,5000.0,218.0 +2000,5500.0,238.0 +2500,-5500.0,241.0 +2500,-5000.0,221.0 +2500,-4500.0,181.0 +2500,-4000.0,181.0 +2500,-3500.0,161.0 +2500,-3000.0,141.0 +2500,-2500.0,121.0 +2500,-2000.0,101.0 +2500,-1600.0,85.0 +2500,-1200.0,69.0 +2500,-900.0,57.0 +2500,-600.0,45.0 +2500,-400.0,37.0 +2500,-200.0,29.0 +2500,0.0,29.0 +2500,200.0,29.0 +2500,400.0,37.0 +2500,600.0,45.0 +2500,900.0,57.0 +2500,1200.0,69.0 +2500,1600.0,85.0 +2500,2000.0,101.0 +2500,2500.0,121.0 +2500,3000.0,141.0 +2500,3500.0,161.0 +2500,4000.0,181.0 +2500,4500.0,201.0 +2500,5000.0,221.0 +2500,5500.0,241.0 +3000,-5500.0,244.0 +3000,-5000.0,224.0 +3000,-4500.0,184.0 +3000,-4000.0,184.0 +3000,-3500.0,164.0 +3000,-3000.0,144.0 +3000,-2500.0,124.0 +3000,-2000.0,104.0 +3000,-1600.0,88.0 +3000,-1200.0,72.0 +3000,-900.0,60.0 +3000,-600.0,48.0 +3000,-400.0,40.0 +3000,-200.0,32.0 +3000,0.0,32.0 +3000,200.0,32.0 +3000,400.0,40.0 +3000,600.0,48.0 +3000,900.0,60.0 +3000,1200.0,72.0 +3000,1600.0,88.0 +3000,2000.0,104.0 +3000,2500.0,124.0 +3000,3000.0,144.0 +3000,3500.0,164.0 +3000,4000.0,184.0 +3000,4500.0,204.0 +3000,5000.0,224.0 +3000,5500.0,244.0 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_4.vtlm b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_4.vtlm new file mode 100644 index 0000000000000000000000000000000000000000..b4274373230f50e6df7eb9702010c7a868dc967e --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_4.vtlm @@ -0,0 +1,233 @@ +Input Speed [rpm],Input Torque [Nm],Torque Loss [Nm] +0,-5500.0,229.6 +0,-5000.0,209.6 +0,-4500.0,169.6 +0,-4000.0,169.6 +0,-3500.0,149.6 +0,-3000.0,129.6 +0,-2500.0,109.6 +0,-2000.0,89.6 +0,-1600.0,73.6 +0,-1200.0,57.6 +0,-900.0,45.6 +0,-600.0,33.6 +0,-400.0,25.6 +0,-200.0,17.6 +0,0.0,17.6 +0,200.0,17.6 +0,400.0,25.6 +0,600.0,33.6 +0,900.0,45.6 +0,1200.0,57.6 +0,1600.0,73.6 +0,2000.0,89.6 +0,2500.0,109.6 +0,3000.0,129.6 +0,3500.0,149.6 +0,4000.0,169.6 +0,4500.0,189.6 +0,5000.0,209.6 +0,5500.0,229.6 +600,-5500.0,229.6 +600,-5000.0,209.6 +600,-4500.0,169.6 +600,-4000.0,169.6 +600,-3500.0,149.6 +600,-3000.0,129.6 +600,-2500.0,109.6 +600,-2000.0,89.6 +600,-1600.0,73.6 +600,-1200.0,57.6 +600,-900.0,45.6 +600,-600.0,33.6 +600,-400.0,25.6 +600,-200.0,17.6 +600,0.0,17.6 +600,200.0,17.6 +600,400.0,25.6 +600,600.0,33.6 +600,900.0,45.6 +600,1200.0,57.6 +600,1600.0,73.6 +600,2000.0,89.6 +600,2500.0,109.6 +600,3000.0,129.6 +600,3500.0,149.6 +600,4000.0,169.6 +600,4500.0,189.6 +600,5000.0,209.6 +600,5500.0,229.6 +900,-5500.0,231.4 +900,-5000.0,211.4 +900,-4500.0,171.4 +900,-4000.0,171.4 +900,-3500.0,151.4 +900,-3000.0,131.4 +900,-2500.0,111.4 +900,-2000.0,91.4 +900,-1600.0,75.4 +900,-1200.0,59.4 +900,-900.0,47.4 +900,-600.0,35.4 +900,-400.0,27.4 +900,-200.0,19.4 +900,0.0,19.4 +900,200.0,19.4 +900,400.0,27.4 +900,600.0,35.4 +900,900.0,47.4 +900,1200.0,59.4 +900,1600.0,75.4 +900,2000.0,91.4 +900,2500.0,111.4 +900,3000.0,131.4 +900,3500.0,151.4 +900,4000.0,171.4 +900,4500.0,191.4 +900,5000.0,211.4 +900,5500.0,231.4 +1200,-5500.0,233.2 +1200,-5000.0,213.2 +1200,-4500.0,173.2 +1200,-4000.0,173.2 +1200,-3500.0,153.2 +1200,-3000.0,133.2 +1200,-2500.0,113.2 +1200,-2000.0,93.2 +1200,-1600.0,77.2 +1200,-1200.0,61.2 +1200,-900.0,49.2 +1200,-600.0,37.2 +1200,-400.0,29.2 +1200,-200.0,21.2 +1200,0.0,21.2 +1200,200.0,21.2 +1200,400.0,29.2 +1200,600.0,37.2 +1200,900.0,49.2 +1200,1200.0,61.2 +1200,1600.0,77.2 +1200,2000.0,93.2 +1200,2500.0,113.2 +1200,3000.0,133.2 +1200,3500.0,153.2 +1200,4000.0,173.2 +1200,4500.0,193.2 +1200,5000.0,213.2 +1200,5500.0,233.2 +1600,-5500.0,235.6 +1600,-5000.0,215.6 +1600,-4500.0,175.6 +1600,-4000.0,175.6 +1600,-3500.0,155.6 +1600,-3000.0,135.6 +1600,-2500.0,115.6 +1600,-2000.0,95.6 +1600,-1600.0,79.6 +1600,-1200.0,63.6 +1600,-900.0,51.6 +1600,-600.0,39.6 +1600,-400.0,31.6 +1600,-200.0,23.6 +1600,0.0,23.6 +1600,200.0,23.6 +1600,400.0,31.6 +1600,600.0,39.6 +1600,900.0,51.6 +1600,1200.0,63.6 +1600,1600.0,79.6 +1600,2000.0,95.6 +1600,2500.0,115.6 +1600,3000.0,135.6 +1600,3500.0,155.6 +1600,4000.0,175.6 +1600,4500.0,195.6 +1600,5000.0,215.6 +1600,5500.0,235.6 +2000,-5500.0,238.0 +2000,-5000.0,218.0 +2000,-4500.0,178.0 +2000,-4000.0,178.0 +2000,-3500.0,158.0 +2000,-3000.0,138.0 +2000,-2500.0,118.0 +2000,-2000.0,98.0 +2000,-1600.0,82.0 +2000,-1200.0,66.0 +2000,-900.0,54.0 +2000,-600.0,42.0 +2000,-400.0,34.0 +2000,-200.0,26.0 +2000,0.0,26.0 +2000,200.0,26.0 +2000,400.0,34.0 +2000,600.0,42.0 +2000,900.0,54.0 +2000,1200.0,66.0 +2000,1600.0,82.0 +2000,2000.0,98.0 +2000,2500.0,118.0 +2000,3000.0,138.0 +2000,3500.0,158.0 +2000,4000.0,178.0 +2000,4500.0,198.0 +2000,5000.0,218.0 +2000,5500.0,238.0 +2500,-5500.0,241.0 +2500,-5000.0,221.0 +2500,-4500.0,181.0 +2500,-4000.0,181.0 +2500,-3500.0,161.0 +2500,-3000.0,141.0 +2500,-2500.0,121.0 +2500,-2000.0,101.0 +2500,-1600.0,85.0 +2500,-1200.0,69.0 +2500,-900.0,57.0 +2500,-600.0,45.0 +2500,-400.0,37.0 +2500,-200.0,29.0 +2500,0.0,29.0 +2500,200.0,29.0 +2500,400.0,37.0 +2500,600.0,45.0 +2500,900.0,57.0 +2500,1200.0,69.0 +2500,1600.0,85.0 +2500,2000.0,101.0 +2500,2500.0,121.0 +2500,3000.0,141.0 +2500,3500.0,161.0 +2500,4000.0,181.0 +2500,4500.0,201.0 +2500,5000.0,221.0 +2500,5500.0,241.0 +3000,-5500.0,244.0 +3000,-5000.0,224.0 +3000,-4500.0,184.0 +3000,-4000.0,184.0 +3000,-3500.0,164.0 +3000,-3000.0,144.0 +3000,-2500.0,124.0 +3000,-2000.0,104.0 +3000,-1600.0,88.0 +3000,-1200.0,72.0 +3000,-900.0,60.0 +3000,-600.0,48.0 +3000,-400.0,40.0 +3000,-200.0,32.0 +3000,0.0,32.0 +3000,200.0,32.0 +3000,400.0,40.0 +3000,600.0,48.0 +3000,900.0,60.0 +3000,1200.0,72.0 +3000,1600.0,88.0 +3000,2000.0,104.0 +3000,2500.0,124.0 +3000,3000.0,144.0 +3000,3500.0,164.0 +3000,4000.0,184.0 +3000,4500.0,204.0 +3000,5000.0,224.0 +3000,5500.0,244.0 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_5.vtlm b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_5.vtlm new file mode 100644 index 0000000000000000000000000000000000000000..981092222c94b37a692b22b8d5c4087055fb14e2 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_5.vtlm @@ -0,0 +1,233 @@ +Input Speed [rpm],Input Torque [Nm],Torque Loss [Nm] +0,-5500.0,64.6 +0,-5000.0,59.6 +0,-4500.0,49.6 +0,-4000.0,49.6 +0,-3500.0,44.6 +0,-3000.0,39.6 +0,-2500.0,34.6 +0,-2000.0,29.6 +0,-1600.0,25.6 +0,-1200.0,21.6 +0,-900.0,18.6 +0,-600.0,15.6 +0,-400.0,13.6 +0,-200.0,11.6 +0,0.0,11.6 +0,200.0,11.6 +0,400.0,13.6 +0,600.0,15.6 +0,900.0,18.6 +0,1200.0,21.6 +0,1600.0,25.6 +0,2000.0,29.6 +0,2500.0,34.6 +0,3000.0,39.6 +0,3500.0,44.6 +0,4000.0,49.6 +0,4500.0,54.6 +0,5000.0,59.6 +0,5500.0,64.6 +600,-5500.0,64.6 +600,-5000.0,59.6 +600,-4500.0,49.6 +600,-4000.0,49.6 +600,-3500.0,44.6 +600,-3000.0,39.6 +600,-2500.0,34.6 +600,-2000.0,29.6 +600,-1600.0,25.6 +600,-1200.0,21.6 +600,-900.0,18.6 +600,-600.0,15.6 +600,-400.0,13.6 +600,-200.0,11.6 +600,0.0,11.6 +600,200.0,11.6 +600,400.0,13.6 +600,600.0,15.6 +600,900.0,18.6 +600,1200.0,21.6 +600,1600.0,25.6 +600,2000.0,29.6 +600,2500.0,34.6 +600,3000.0,39.6 +600,3500.0,44.6 +600,4000.0,49.6 +600,4500.0,54.6 +600,5000.0,59.6 +600,5500.0,64.6 +900,-5500.0,66.4 +900,-5000.0,61.4 +900,-4500.0,51.4 +900,-4000.0,51.4 +900,-3500.0,46.4 +900,-3000.0,41.4 +900,-2500.0,36.4 +900,-2000.0,31.4 +900,-1600.0,27.4 +900,-1200.0,23.4 +900,-900.0,20.4 +900,-600.0,17.4 +900,-400.0,15.4 +900,-200.0,13.4 +900,0.0,13.4 +900,200.0,13.4 +900,400.0,15.4 +900,600.0,17.4 +900,900.0,20.4 +900,1200.0,23.4 +900,1600.0,27.4 +900,2000.0,31.4 +900,2500.0,36.4 +900,3000.0,41.4 +900,3500.0,46.4 +900,4000.0,51.4 +900,4500.0,56.4 +900,5000.0,61.4 +900,5500.0,66.4 +1200,-5500.0,68.2 +1200,-5000.0,63.2 +1200,-4500.0,53.2 +1200,-4000.0,53.2 +1200,-3500.0,48.2 +1200,-3000.0,43.2 +1200,-2500.0,38.2 +1200,-2000.0,33.2 +1200,-1600.0,29.2 +1200,-1200.0,25.2 +1200,-900.0,22.2 +1200,-600.0,19.2 +1200,-400.0,17.2 +1200,-200.0,15.2 +1200,0.0,15.2 +1200,200.0,15.2 +1200,400.0,17.2 +1200,600.0,19.2 +1200,900.0,22.2 +1200,1200.0,25.2 +1200,1600.0,29.2 +1200,2000.0,33.2 +1200,2500.0,38.2 +1200,3000.0,43.2 +1200,3500.0,48.2 +1200,4000.0,53.2 +1200,4500.0,58.2 +1200,5000.0,63.2 +1200,5500.0,68.2 +1600,-5500.0,70.6 +1600,-5000.0,65.6 +1600,-4500.0,55.6 +1600,-4000.0,55.6 +1600,-3500.0,50.6 +1600,-3000.0,45.6 +1600,-2500.0,40.6 +1600,-2000.0,35.6 +1600,-1600.0,31.6 +1600,-1200.0,27.6 +1600,-900.0,24.6 +1600,-600.0,21.6 +1600,-400.0,19.6 +1600,-200.0,17.6 +1600,0.0,17.6 +1600,200.0,17.6 +1600,400.0,19.6 +1600,600.0,21.6 +1600,900.0,24.6 +1600,1200.0,27.6 +1600,1600.0,31.6 +1600,2000.0,35.6 +1600,2500.0,40.6 +1600,3000.0,45.6 +1600,3500.0,50.6 +1600,4000.0,55.6 +1600,4500.0,60.6 +1600,5000.0,65.6 +1600,5500.0,70.6 +2000,-5500.0,73.0 +2000,-5000.0,68.0 +2000,-4500.0,58.0 +2000,-4000.0,58.0 +2000,-3500.0,53.0 +2000,-3000.0,48.0 +2000,-2500.0,43.0 +2000,-2000.0,38.0 +2000,-1600.0,34.0 +2000,-1200.0,30.0 +2000,-900.0,27.0 +2000,-600.0,24.0 +2000,-400.0,22.0 +2000,-200.0,20.0 +2000,0.0,20.0 +2000,200.0,20.0 +2000,400.0,22.0 +2000,600.0,24.0 +2000,900.0,27.0 +2000,1200.0,30.0 +2000,1600.0,34.0 +2000,2000.0,38.0 +2000,2500.0,43.0 +2000,3000.0,48.0 +2000,3500.0,53.0 +2000,4000.0,58.0 +2000,4500.0,63.0 +2000,5000.0,68.0 +2000,5500.0,73.0 +2500,-5500.0,76.0 +2500,-5000.0,71.0 +2500,-4500.0,61.0 +2500,-4000.0,61.0 +2500,-3500.0,56.0 +2500,-3000.0,51.0 +2500,-2500.0,46.0 +2500,-2000.0,41.0 +2500,-1600.0,37.0 +2500,-1200.0,33.0 +2500,-900.0,30.0 +2500,-600.0,27.0 +2500,-400.0,25.0 +2500,-200.0,23.0 +2500,0.0,23.0 +2500,200.0,23.0 +2500,400.0,25.0 +2500,600.0,27.0 +2500,900.0,30.0 +2500,1200.0,33.0 +2500,1600.0,37.0 +2500,2000.0,41.0 +2500,2500.0,46.0 +2500,3000.0,51.0 +2500,3500.0,56.0 +2500,4000.0,61.0 +2500,4500.0,66.0 +2500,5000.0,71.0 +2500,5500.0,76.0 +3000,-5500.0,79.0 +3000,-5000.0,74.0 +3000,-4500.0,64.0 +3000,-4000.0,64.0 +3000,-3500.0,59.0 +3000,-3000.0,54.0 +3000,-2500.0,49.0 +3000,-2000.0,44.0 +3000,-1600.0,40.0 +3000,-1200.0,36.0 +3000,-900.0,33.0 +3000,-600.0,30.0 +3000,-400.0,28.0 +3000,-200.0,26.0 +3000,0.0,26.0 +3000,200.0,26.0 +3000,400.0,28.0 +3000,600.0,30.0 +3000,900.0,33.0 +3000,1200.0,36.0 +3000,1600.0,40.0 +3000,2000.0,44.0 +3000,2500.0,49.0 +3000,3000.0,54.0 +3000,3500.0,59.0 +3000,4000.0,64.0 +3000,4500.0,69.0 +3000,5000.0,74.0 +3000,5500.0,79.0 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_6.vtlm b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_6.vtlm new file mode 100644 index 0000000000000000000000000000000000000000..b4274373230f50e6df7eb9702010c7a868dc967e --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Gear_6.vtlm @@ -0,0 +1,233 @@ +Input Speed [rpm],Input Torque [Nm],Torque Loss [Nm] +0,-5500.0,229.6 +0,-5000.0,209.6 +0,-4500.0,169.6 +0,-4000.0,169.6 +0,-3500.0,149.6 +0,-3000.0,129.6 +0,-2500.0,109.6 +0,-2000.0,89.6 +0,-1600.0,73.6 +0,-1200.0,57.6 +0,-900.0,45.6 +0,-600.0,33.6 +0,-400.0,25.6 +0,-200.0,17.6 +0,0.0,17.6 +0,200.0,17.6 +0,400.0,25.6 +0,600.0,33.6 +0,900.0,45.6 +0,1200.0,57.6 +0,1600.0,73.6 +0,2000.0,89.6 +0,2500.0,109.6 +0,3000.0,129.6 +0,3500.0,149.6 +0,4000.0,169.6 +0,4500.0,189.6 +0,5000.0,209.6 +0,5500.0,229.6 +600,-5500.0,229.6 +600,-5000.0,209.6 +600,-4500.0,169.6 +600,-4000.0,169.6 +600,-3500.0,149.6 +600,-3000.0,129.6 +600,-2500.0,109.6 +600,-2000.0,89.6 +600,-1600.0,73.6 +600,-1200.0,57.6 +600,-900.0,45.6 +600,-600.0,33.6 +600,-400.0,25.6 +600,-200.0,17.6 +600,0.0,17.6 +600,200.0,17.6 +600,400.0,25.6 +600,600.0,33.6 +600,900.0,45.6 +600,1200.0,57.6 +600,1600.0,73.6 +600,2000.0,89.6 +600,2500.0,109.6 +600,3000.0,129.6 +600,3500.0,149.6 +600,4000.0,169.6 +600,4500.0,189.6 +600,5000.0,209.6 +600,5500.0,229.6 +900,-5500.0,231.4 +900,-5000.0,211.4 +900,-4500.0,171.4 +900,-4000.0,171.4 +900,-3500.0,151.4 +900,-3000.0,131.4 +900,-2500.0,111.4 +900,-2000.0,91.4 +900,-1600.0,75.4 +900,-1200.0,59.4 +900,-900.0,47.4 +900,-600.0,35.4 +900,-400.0,27.4 +900,-200.0,19.4 +900,0.0,19.4 +900,200.0,19.4 +900,400.0,27.4 +900,600.0,35.4 +900,900.0,47.4 +900,1200.0,59.4 +900,1600.0,75.4 +900,2000.0,91.4 +900,2500.0,111.4 +900,3000.0,131.4 +900,3500.0,151.4 +900,4000.0,171.4 +900,4500.0,191.4 +900,5000.0,211.4 +900,5500.0,231.4 +1200,-5500.0,233.2 +1200,-5000.0,213.2 +1200,-4500.0,173.2 +1200,-4000.0,173.2 +1200,-3500.0,153.2 +1200,-3000.0,133.2 +1200,-2500.0,113.2 +1200,-2000.0,93.2 +1200,-1600.0,77.2 +1200,-1200.0,61.2 +1200,-900.0,49.2 +1200,-600.0,37.2 +1200,-400.0,29.2 +1200,-200.0,21.2 +1200,0.0,21.2 +1200,200.0,21.2 +1200,400.0,29.2 +1200,600.0,37.2 +1200,900.0,49.2 +1200,1200.0,61.2 +1200,1600.0,77.2 +1200,2000.0,93.2 +1200,2500.0,113.2 +1200,3000.0,133.2 +1200,3500.0,153.2 +1200,4000.0,173.2 +1200,4500.0,193.2 +1200,5000.0,213.2 +1200,5500.0,233.2 +1600,-5500.0,235.6 +1600,-5000.0,215.6 +1600,-4500.0,175.6 +1600,-4000.0,175.6 +1600,-3500.0,155.6 +1600,-3000.0,135.6 +1600,-2500.0,115.6 +1600,-2000.0,95.6 +1600,-1600.0,79.6 +1600,-1200.0,63.6 +1600,-900.0,51.6 +1600,-600.0,39.6 +1600,-400.0,31.6 +1600,-200.0,23.6 +1600,0.0,23.6 +1600,200.0,23.6 +1600,400.0,31.6 +1600,600.0,39.6 +1600,900.0,51.6 +1600,1200.0,63.6 +1600,1600.0,79.6 +1600,2000.0,95.6 +1600,2500.0,115.6 +1600,3000.0,135.6 +1600,3500.0,155.6 +1600,4000.0,175.6 +1600,4500.0,195.6 +1600,5000.0,215.6 +1600,5500.0,235.6 +2000,-5500.0,238.0 +2000,-5000.0,218.0 +2000,-4500.0,178.0 +2000,-4000.0,178.0 +2000,-3500.0,158.0 +2000,-3000.0,138.0 +2000,-2500.0,118.0 +2000,-2000.0,98.0 +2000,-1600.0,82.0 +2000,-1200.0,66.0 +2000,-900.0,54.0 +2000,-600.0,42.0 +2000,-400.0,34.0 +2000,-200.0,26.0 +2000,0.0,26.0 +2000,200.0,26.0 +2000,400.0,34.0 +2000,600.0,42.0 +2000,900.0,54.0 +2000,1200.0,66.0 +2000,1600.0,82.0 +2000,2000.0,98.0 +2000,2500.0,118.0 +2000,3000.0,138.0 +2000,3500.0,158.0 +2000,4000.0,178.0 +2000,4500.0,198.0 +2000,5000.0,218.0 +2000,5500.0,238.0 +2500,-5500.0,241.0 +2500,-5000.0,221.0 +2500,-4500.0,181.0 +2500,-4000.0,181.0 +2500,-3500.0,161.0 +2500,-3000.0,141.0 +2500,-2500.0,121.0 +2500,-2000.0,101.0 +2500,-1600.0,85.0 +2500,-1200.0,69.0 +2500,-900.0,57.0 +2500,-600.0,45.0 +2500,-400.0,37.0 +2500,-200.0,29.0 +2500,0.0,29.0 +2500,200.0,29.0 +2500,400.0,37.0 +2500,600.0,45.0 +2500,900.0,57.0 +2500,1200.0,69.0 +2500,1600.0,85.0 +2500,2000.0,101.0 +2500,2500.0,121.0 +2500,3000.0,141.0 +2500,3500.0,161.0 +2500,4000.0,181.0 +2500,4500.0,201.0 +2500,5000.0,221.0 +2500,5500.0,241.0 +3000,-5500.0,244.0 +3000,-5000.0,224.0 +3000,-4500.0,184.0 +3000,-4000.0,184.0 +3000,-3500.0,164.0 +3000,-3000.0,144.0 +3000,-2500.0,124.0 +3000,-2000.0,104.0 +3000,-1600.0,88.0 +3000,-1200.0,72.0 +3000,-900.0,60.0 +3000,-600.0,48.0 +3000,-400.0,40.0 +3000,-200.0,32.0 +3000,0.0,32.0 +3000,200.0,32.0 +3000,400.0,40.0 +3000,600.0,48.0 +3000,900.0,60.0 +3000,1200.0,72.0 +3000,1600.0,88.0 +3000,2000.0,104.0 +3000,2500.0,124.0 +3000,3000.0,144.0 +3000,3500.0,164.0 +3000,4000.0,184.0 +3000,4500.0,204.0 +3000,5000.0,224.0 +3000,5500.0,244.0 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vem b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vem new file mode 100644 index 0000000000000000000000000000000000000000..8f60e9a767ef2c7ce938c2695b26ab913b527caf --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vem @@ -0,0 +1,19 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T08:54:28.7387223Z", + "AppVersion": "3", + "FileVersion": 1 + }, + "Body": { + "SavedInDeclMode": false, + "Model": "Generic EM 47kW", + "FullLoadCurve": "GenericEM_47kW.vemp", + "EfficiencyMap": "GenericEM_47kW.vemo", + "DragCurve": "GenericEM_47kW.vemd", + "Inertia": 0.1, + "ContinuousPower": 31000, + "ThermalOverloadBuffer": 0.5, + "ThermalOverloadRecoveryFactor": 0.9 + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vemd b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vemd new file mode 100644 index 0000000000000000000000000000000000000000..fa6451dd75c4faf9a2f26a8cec2d28d9929ae22e --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vemd @@ -0,0 +1,3 @@ +n [rpm] , T_drag [Nm] +0 , -5 +5000 , -28 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vemo b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vemo new file mode 100644 index 0000000000000000000000000000000000000000..77eb6c5f7e989510b6402bd5c60d116cf04053f0 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vemo @@ -0,0 +1,2016 @@ +n [rpm] , T [Nm] , P_el [kW] +0,-450,9.8449 +0,-435.9375,9.2719 +0,-421.875,8.7161 +0,-407.8125,8.1773 +0,-393.75,7.6558 +0,-379.6875,7.1514 +0,-365.625,6.6641 +0,-351.5625,6.194 +0,-337.5,5.741 +0,-323.4375,5.3052 +0,-309.375,4.8866 +0,-295.3125,4.4851 +0,-281.25,4.1007 +0,-267.1875,3.7335 +0,-253.125,3.3834 +0,-239.0625,3.0505 +0,-225,2.7348 +0,-210.9375,2.4362 +0,-196.875,2.1547 +0,-182.8125,1.8904 +0,-168.75,1.6433 +0,-154.6875,1.4133 +0,-140.625,1.2004 +0,-126.5625,1.0047 +0,-112.5,0.82617 +0,-98.4375,0.66478 +0,-84.375,0.52053 +0,-70.3125,0.39344 +0,-56.25,0.28349 +0,-42.1875,0.1907 +0,-28.125,0.11506 +0,-14.0625,0.056566 +0,0,0.0361 +0,14.0625,0.086979 +0,28.125,0.15501 +0,42.1875,0.24019 +0,56.25,0.34252 +0,70.3125,0.462 +0,84.375,0.59864 +0,98.4375,0.75242 +0,112.5,0.92335 +0,126.5625,1.1114 +0,140.625,1.3167 +0,154.6875,1.5391 +0,168.75,1.7786 +0,182.8125,2.0353 +0,196.875,2.3091 +0,210.9375,2.6001 +0,225,2.9083 +0,239.0625,3.2336 +0,253.125,3.576 +0,267.1875,3.9356 +0,281.25,4.3123 +0,295.3125,4.7062 +0,309.375,5.1173 +0,323.4375,5.5455 +0,337.5,5.9908 +0,351.5625,6.4533 +0,365.625,6.933 +0,379.6875,7.4298 +0,393.75,7.9437 +0,407.8125,8.4748 +0,421.875,9.0231 +0,435.9375,9.5885 +0,450,10.171 +28.57113959,-450,5.8367 +28.57113959,-435.9375,5.3901 +28.57113959,-421.875,4.9606 +28.57113959,-407.8125,4.5482 +28.57113959,-393.75,4.153 +28.57113959,-379.6875,3.775 +28.57113959,-365.625,3.4141 +28.57113959,-351.5625,3.0704 +28.57113959,-337.5,2.7438 +28.57113959,-323.4375,2.4344 +28.57113959,-309.375,2.1421 +28.57113959,-295.3125,1.8669 +28.57113959,-281.25,1.609 +28.57113959,-267.1875,1.3681 +28.57113959,-253.125,1.1445 +28.57113959,-239.0625,0.93793 +28.57113959,-225,0.74855 +28.57113959,-210.9375,0.57729 +28.57113959,-196.875,0.4236 +28.57113959,-182.8125,0.28766 +28.57113959,-168.75,0.16853 +28.57113959,-154.6875,0.066217 +28.57113959,-140.625,-0.019286 +28.57113959,-126.5625,-0.087979 +28.57113959,-112.5,-0.13986 +28.57113959,-98.4375,-0.17493 +28.57113959,-84.375,-0.19319 +28.57113959,-70.3125,-0.19464 +28.57113959,-56.25,-0.17927 +28.57113959,-42.1875,-0.1471 +28.57113959,-28.125,-0.09811 +28.57113959,-14.0625,-0.032313 +28.57113959,0,0.07245 +28.57113959,14.0625,0.24971 +28.57113959,28.125,0.44411 +28.57113959,42.1875,0.65567 +28.57113959,56.25,0.88437 +28.57113959,70.3125,1.1302 +28.57113959,84.375,1.3932 +28.57113959,98.4375,1.6734 +28.57113959,112.5,1.9707 +28.57113959,126.5625,2.2852 +28.57113959,140.625,2.6168 +28.57113959,154.6875,2.9655 +28.57113959,168.75,3.3315 +28.57113959,182.8125,3.7145 +28.57113959,196.875,4.1147 +28.57113959,210.9375,4.5321 +28.57113959,225,4.9666 +28.57113959,239.0625,5.4183 +28.57113959,253.125,5.8871 +28.57113959,267.1875,6.3731 +28.57113959,281.25,6.8762 +28.57113959,295.3125,7.3965 +28.57113959,309.375,7.9339 +28.57113959,323.4375,8.4885 +28.57113959,337.5,9.0602 +28.57113959,351.5625,9.6491 +28.57113959,365.625,10.255 +28.57113959,379.6875,10.878 +28.57113959,393.75,11.519 +28.57113959,407.8125,12.176 +28.57113959,421.875,12.851 +28.57113959,435.9375,13.542 +28.57113959,450,14.251 +57.14287758,-450,1.8303 +57.14287758,-435.9375,1.5101 +57.14287758,-421.875,1.2075 +57.14287758,-407.8125,0.92457 +57.14287758,-393.75,0.66034 +57.14287758,-379.6875,0.41292 +57.14287758,-365.625,0.18231 +57.14287758,-351.5625,-0.031493 +57.14287758,-337.5,-0.22848 +57.14287758,-323.4375,-0.40866 +57.14287758,-309.375,-0.57202 +57.14287758,-295.3125,-0.71858 +57.14287758,-281.25,-0.84832 +57.14287758,-267.1875,-0.96125 +57.14287758,-253.125,-1.0574 +57.14287758,-239.0625,-1.1367 +57.14287758,-225,-1.1992 +57.14287758,-210.9375,-1.2449 +57.14287758,-196.875,-1.2737 +57.14287758,-182.8125,-1.2858 +57.14287758,-168.75,-1.2811 +57.14287758,-154.6875,-1.2595 +57.14287758,-140.625,-1.2211 +57.14287758,-126.5625,-1.1659 +57.14287758,-112.5,-1.0939 +57.14287758,-98.4375,-1.0051 +57.14287758,-84.375,-0.89953 +57.14287758,-70.3125,-0.7771 +57.14287758,-56.25,-0.63787 +57.14287758,-42.1875,-0.48182 +57.14287758,-28.125,-0.30896 +57.14287758,-14.0625,-0.11929 +57.14287758,0,0.11065 +57.14287758,14.0625,0.41428 +57.14287758,28.125,0.73507 +57.14287758,42.1875,1.073 +57.14287758,56.25,1.4281 +57.14287758,70.3125,1.8003 +57.14287758,84.375,2.1897 +57.14287758,98.4375,2.5962 +57.14287758,112.5,3.0199 +57.14287758,126.5625,3.4608 +57.14287758,140.625,3.9188 +57.14287758,154.6875,4.3939 +57.14287758,168.75,4.8862 +57.14287758,182.8125,5.3956 +57.14287758,196.875,5.9222 +57.14287758,210.9375,6.466 +57.14287758,225,7.0269 +57.14287758,239.0625,7.6049 +57.14287758,253.125,8.2001 +57.14287758,267.1875,8.8124 +57.14287758,281.25,9.4419 +57.14287758,295.3125,10.089 +57.14287758,309.375,10.752 +57.14287758,323.4375,11.433 +57.14287758,337.5,12.131 +57.14287758,351.5625,12.847 +57.14287758,365.625,13.579 +57.14287758,379.6875,14.329 +57.14287758,393.75,15.095 +57.14287758,407.8125,15.879 +57.14287758,421.875,16.68 +57.14287758,435.9375,17.498 +57.14287758,450,18.334 +85.71461556,-450,-2.1071 +85.71461556,-435.9375,-2.2979 +85.71461556,-421.875,-2.4719 +85.71461556,-407.8125,-2.629 +85.71461556,-393.75,-2.7694 +85.71461556,-379.6875,-2.8929 +85.71461556,-365.625,-2.9997 +85.71461556,-351.5625,-3.0896 +85.71461556,-337.5,-3.1627 +85.71461556,-323.4375,-3.219 +85.71461556,-309.375,-3.2585 +85.71461556,-295.3125,-3.2812 +85.71461556,-281.25,-3.2871 +85.71461556,-267.1875,-3.2761 +85.71461556,-253.125,-3.2484 +85.71461556,-239.0625,-3.2038 +85.71461556,-225,-3.1424 +85.71461556,-210.9375,-3.0642 +85.71461556,-196.875,-2.9692 +85.71461556,-182.8125,-2.8574 +85.71461556,-168.75,-2.7288 +85.71461556,-154.6875,-2.5834 +85.71461556,-140.625,-2.4211 +85.71461556,-126.5625,-2.2421 +85.71461556,-112.5,-2.0462 +85.71461556,-98.4375,-1.8335 +85.71461556,-84.375,-1.604 +85.71461556,-70.3125,-1.3577 +85.71461556,-56.25,-1.0946 +85.71461556,-42.1875,-0.81471 +85.71461556,-28.125,-0.51798 +85.71461556,-14.0625,-0.20444 +85.71461556,0,0.15072 +85.71461556,14.0625,0.58072 +85.71461556,28.125,1.0279 +85.71461556,42.1875,1.4922 +85.71461556,56.25,1.9737 +85.71461556,70.3125,2.4723 +85.71461556,84.375,2.988 +85.71461556,98.4375,3.5209 +85.71461556,112.5,4.071 +85.71461556,126.5625,4.6382 +85.71461556,140.625,5.2226 +85.71461556,154.6875,5.8241 +85.71461556,168.75,6.4428 +85.71461556,182.8125,7.0786 +85.71461556,196.875,7.7315 +85.71461556,210.9375,8.4017 +85.71461556,225,9.0889 +85.71461556,239.0625,9.7934 +85.71461556,253.125,10.515 +85.71461556,267.1875,11.254 +85.71461556,281.25,12.01 +85.71461556,295.3125,12.783 +85.71461556,309.375,13.573 +85.71461556,323.4375,14.38 +85.71461556,337.5,15.205 +85.71461556,351.5625,16.046 +85.71461556,365.625,16.905 +85.71461556,379.6875,17.781 +85.71461556,393.75,18.674 +85.71461556,407.8125,19.584 +85.71461556,421.875,20.512 +85.71461556,435.9375,21.456 +85.71461556,450,22.418 +114.2881487,-450,-6.0305 +114.2881487,-435.9375,-6.0974 +114.2881487,-421.875,-6.1475 +114.2881487,-407.8125,-6.1808 +114.2881487,-393.75,-6.1973 +114.2881487,-379.6875,-6.197 +114.2881487,-365.625,-6.1799 +114.2881487,-351.5625,-6.1459 +114.2881487,-337.5,-6.0951 +114.2881487,-323.4375,-6.0276 +114.2881487,-309.375,-5.9432 +114.2881487,-295.3125,-5.842 +114.2881487,-281.25,-5.724 +114.2881487,-267.1875,-5.5892 +114.2881487,-253.125,-5.4376 +114.2881487,-239.0625,-5.2691 +114.2881487,-225,-5.0839 +114.2881487,-210.9375,-4.8818 +114.2881487,-196.875,-4.6629 +114.2881487,-182.8125,-4.4272 +114.2881487,-168.75,-4.1748 +114.2881487,-154.6875,-3.9054 +114.2881487,-140.625,-3.6193 +114.2881487,-126.5625,-3.3164 +114.2881487,-112.5,-2.9967 +114.2881487,-98.4375,-2.6601 +114.2881487,-84.375,-2.3067 +114.2881487,-70.3125,-1.9366 +114.2881487,-56.25,-1.5496 +114.2881487,-42.1875,-1.1458 +114.2881487,-28.125,-0.72519 +114.2881487,-14.0625,-0.28777 +114.2881487,0,0.19264 +114.2881487,14.0625,0.74902 +114.2881487,28.125,1.3226 +114.2881487,42.1875,1.9132 +114.2881487,56.25,2.5211 +114.2881487,70.3125,3.1461 +114.2881487,84.375,3.7882 +114.2881487,98.4375,4.4475 +114.2881487,112.5,5.1239 +114.2881487,126.5625,5.8175 +114.2881487,140.625,6.5283 +114.2881487,154.6875,7.2561 +114.2881487,168.75,8.0012 +114.2881487,182.8125,8.7634 +114.2881487,196.875,9.5427 +114.2881487,210.9375,10.339 +114.2881487,225,11.153 +114.2881487,239.0625,11.984 +114.2881487,253.125,12.832 +114.2881487,267.1875,13.697 +114.2881487,281.25,14.579 +114.2881487,295.3125,15.478 +114.2881487,309.375,16.395 +114.2881487,323.4375,17.329 +114.2881487,337.5,18.279 +114.2881487,351.5625,19.247 +114.2881487,365.625,20.233 +114.2881487,379.6875,21.235 +114.2881487,393.75,22.254 +114.2881487,407.8125,23.291 +114.2881487,421.875,24.345 +114.2881487,435.9375,25.416 +114.2881487,450,26.504 +142.8556979,-450,-9.9521 +142.8556979,-435.9375,-9.8951 +142.8556979,-421.875,-9.8214 +142.8556979,-407.8125,-9.7308 +142.8556979,-393.75,-9.6234 +142.8556979,-379.6875,-9.4992 +142.8556979,-365.625,-9.3582 +142.8556979,-351.5625,-9.2004 +142.8556979,-337.5,-9.0258 +142.8556979,-323.4375,-8.8343 +142.8556979,-309.375,-8.626 +142.8556979,-295.3125,-8.401 +142.8556979,-281.25,-8.1591 +142.8556979,-267.1875,-7.9004 +142.8556979,-253.125,-7.6249 +142.8556979,-239.0625,-7.3326 +142.8556979,-225,-7.0235 +142.8556979,-210.9375,-6.6975 +142.8556979,-196.875,-6.3548 +142.8556979,-182.8125,-5.9952 +142.8556979,-168.75,-5.6189 +142.8556979,-154.6875,-5.2257 +142.8556979,-140.625,-4.8157 +142.8556979,-126.5625,-4.3889 +142.8556979,-112.5,-3.9453 +142.8556979,-98.4375,-3.4849 +142.8556979,-84.375,-3.0076 +142.8556979,-70.3125,-2.5136 +142.8556979,-56.25,-2.0027 +142.8556979,-42.1875,-1.475 +142.8556979,-28.125,-0.93057 +142.8556979,-14.0625,-0.36928 +142.8556979,0,0.23641 +142.8556979,14.0625,0.91917 +142.8556979,28.125,1.6191 +142.8556979,42.1875,2.3361 +142.8556979,56.25,3.0704 +142.8556979,70.3125,3.8217 +142.8556979,84.375,4.5902 +142.8556979,98.4375,5.3759 +142.8556979,112.5,6.1787 +142.8556979,126.5625,6.9987 +142.8556979,140.625,7.8358 +142.8556979,154.6875,8.6901 +142.8556979,168.75,9.5615 +142.8556979,182.8125,10.45 +142.8556979,196.875,11.356 +142.8556979,210.9375,12.279 +142.8556979,225,13.219 +142.8556979,239.0625,14.176 +142.8556979,253.125,15.15 +142.8556979,267.1875,16.142 +142.8556979,281.25,17.15 +142.8556979,295.3125,18.176 +142.8556979,309.375,19.219 +142.8556979,323.4375,20.279 +142.8556979,337.5,21.356 +142.8556979,351.5625,22.451 +142.8556979,365.625,23.562 +142.8556979,379.6875,24.691 +142.8556979,393.75,25.837 +142.8556979,407.8125,27 +142.8556979,421.875,28.18 +142.8556979,435.9375,29.377 +142.8556979,450,30.592 +171.4292311,-450,-13.872 +171.4292311,-435.9375,-13.691 +171.4292311,-421.875,-13.493 +171.4292311,-407.8125,-13.279 +171.4292311,-393.75,-13.048 +171.4292311,-379.6875,-12.8 +171.4292311,-365.625,-12.535 +171.4292311,-351.5625,-12.253 +171.4292311,-337.5,-11.955 +171.4292311,-323.4375,-11.639 +171.4292311,-309.375,-11.307 +171.4292311,-295.3125,-10.958 +171.4292311,-281.25,-10.592 +171.4292311,-267.1875,-10.21 +171.4292311,-253.125,-9.8105 +171.4292311,-239.0625,-9.3943 +171.4292311,-225,-8.9613 +171.4292311,-210.9375,-8.5115 +171.4292311,-196.875,-8.0448 +171.4292311,-182.8125,-7.5614 +171.4292311,-168.75,-7.0612 +171.4292311,-154.6875,-6.5441 +171.4292311,-140.625,-6.0103 +171.4292311,-126.5625,-5.4596 +171.4292311,-112.5,-4.8921 +171.4292311,-98.4375,-4.3078 +171.4292311,-84.375,-3.7067 +171.4292311,-70.3125,-3.0888 +171.4292311,-56.25,-2.454 +171.4292311,-42.1875,-1.8025 +171.4292311,-28.125,-1.1341 +171.4292311,-14.0625,-0.44896 +171.4292311,0,0.28205 +171.4292311,14.0625,1.0912 +171.4292311,28.125,1.9175 +171.4292311,42.1875,2.7609 +171.4292311,56.25,3.6215 +171.4292311,70.3125,4.4992 +171.4292311,84.375,5.3941 +171.4292311,98.4375,6.3062 +171.4292311,112.5,7.2354 +171.4292311,126.5625,8.1817 +171.4292311,140.625,9.1452 +171.4292311,154.6875,10.126 +171.4292311,168.75,11.124 +171.4292311,182.8125,12.139 +171.4292311,196.875,13.171 +171.4292311,210.9375,14.22 +171.4292311,225,15.286 +171.4292311,239.0625,16.37 +171.4292311,253.125,17.471 +171.4292311,267.1875,18.588 +171.4292311,281.25,19.723 +171.4292311,295.3125,20.876 +171.4292311,309.375,22.045 +171.4292311,323.4375,23.231 +171.4292311,337.5,24.435 +171.4292311,351.5625,25.656 +171.4292311,365.625,26.894 +171.4292311,379.6875,28.149 +171.4292311,393.75,29.421 +171.4292311,407.8125,30.71 +171.4292311,421.875,32.017 +171.4292311,435.9375,33.34 +171.4292311,450,34.681 +200.0027643,-450,-17.79 +200.0027643,-435.9375,-17.485 +200.0027643,-421.875,-17.164 +200.0027643,-407.8125,-16.825 +200.0027643,-393.75,-16.47 +200.0027643,-379.6875,-16.098 +200.0027643,-365.625,-15.709 +200.0027643,-351.5625,-15.304 +200.0027643,-337.5,-14.881 +200.0027643,-323.4375,-14.442 +200.0027643,-309.375,-13.986 +200.0027643,-295.3125,-13.513 +200.0027643,-281.25,-13.024 +200.0027643,-267.1875,-12.517 +200.0027643,-253.125,-11.994 +200.0027643,-239.0625,-11.454 +200.0027643,-225,-10.897 +200.0027643,-210.9375,-10.324 +200.0027643,-196.875,-9.7331 +200.0027643,-182.8125,-9.1258 +200.0027643,-168.75,-8.5016 +200.0027643,-154.6875,-7.8607 +200.0027643,-140.625,-7.203 +200.0027643,-126.5625,-6.5284 +200.0027643,-112.5,-5.8371 +200.0027643,-98.4375,-5.1289 +200.0027643,-84.375,-4.4039 +200.0027643,-70.3125,-3.6621 +200.0027643,-56.25,-2.9035 +200.0027643,-42.1875,-2.1281 +200.0027643,-28.125,-1.3359 +200.0027643,-14.0625,-0.52683 +200.0027643,0,0.32954 +200.0027643,14.0625,1.2651 +200.0027643,28.125,2.2177 +200.0027643,42.1875,3.1875 +200.0027643,56.25,4.1745 +200.0027643,70.3125,5.1786 +200.0027643,84.375,6.1999 +200.0027643,98.4375,7.2383 +200.0027643,112.5,8.2939 +200.0027643,126.5625,9.3666 +200.0027643,140.625,10.456 +200.0027643,154.6875,11.563 +200.0027643,168.75,12.688 +200.0027643,182.8125,13.829 +200.0027643,196.875,14.987 +200.0027643,210.9375,16.163 +200.0027643,225,17.356 +200.0027643,239.0625,18.566 +200.0027643,253.125,19.793 +200.0027643,267.1875,21.037 +200.0027643,281.25,22.298 +200.0027643,295.3125,23.577 +200.0027643,309.375,24.873 +200.0027643,323.4375,26.185 +200.0027643,337.5,27.515 +200.0027643,351.5625,28.863 +200.0027643,365.625,30.227 +200.0027643,379.6875,31.608 +200.0027643,393.75,33.007 +200.0027643,407.8125,34.423 +200.0027643,421.875,35.856 +200.0027643,435.9375,37.306 +200.0027643,450,38.773 +228.5703135,-450,-21.706 +228.5703135,-435.9375,-21.277 +228.5703135,-421.875,-20.832 +228.5703135,-407.8125,-20.37 +228.5703135,-393.75,-19.891 +228.5703135,-379.6875,-19.395 +228.5703135,-365.625,-18.882 +228.5703135,-351.5625,-18.353 +228.5703135,-337.5,-17.807 +228.5703135,-323.4375,-17.244 +228.5703135,-309.375,-16.664 +228.5703135,-295.3125,-16.067 +228.5703135,-281.25,-15.454 +228.5703135,-267.1875,-14.823 +228.5703135,-253.125,-14.176 +228.5703135,-239.0625,-13.512 +228.5703135,-225,-12.831 +228.5703135,-210.9375,-12.134 +228.5703135,-196.875,-11.419 +228.5703135,-182.8125,-10.688 +228.5703135,-168.75,-9.9403 +228.5703135,-154.6875,-9.1755 +228.5703135,-140.625,-8.3939 +228.5703135,-126.5625,-7.5955 +228.5703135,-112.5,-6.7802 +228.5703135,-98.4375,-5.9482 +228.5703135,-84.375,-5.0993 +228.5703135,-70.3125,-4.2337 +228.5703135,-56.25,-3.3512 +228.5703135,-42.1875,-2.4519 +228.5703135,-28.125,-1.5358 +228.5703135,-14.0625,-0.60288 +228.5703135,0,0.37889 +228.5703135,14.0625,1.4408 +228.5703135,28.125,2.5198 +228.5703135,42.1875,3.616 +228.5703135,56.25,4.7293 +228.5703135,70.3125,5.8598 +228.5703135,84.375,7.0075 +228.5703135,98.4375,8.1723 +228.5703135,112.5,9.3542 +228.5703135,126.5625,10.553 +228.5703135,140.625,11.77 +228.5703135,154.6875,13.003 +228.5703135,168.75,14.254 +228.5703135,182.8125,15.521 +228.5703135,196.875,16.806 +228.5703135,210.9375,18.108 +228.5703135,225,19.427 +228.5703135,239.0625,20.764 +228.5703135,253.125,22.117 +228.5703135,267.1875,23.488 +228.5703135,281.25,24.875 +228.5703135,295.3125,26.28 +228.5703135,309.375,27.702 +228.5703135,323.4375,29.141 +228.5703135,337.5,30.598 +228.5703135,351.5625,32.071 +228.5703135,365.625,33.562 +228.5703135,379.6875,35.07 +228.5703135,393.75,36.595 +228.5703135,407.8125,38.137 +228.5703135,421.875,39.696 +228.5703135,435.9375,41.273 +228.5703135,450,42.866 +257.1438467,-450,-25.62 +257.1438467,-435.9375,-25.068 +257.1438467,-421.875,-24.499 +257.1438467,-407.8125,-23.912 +257.1438467,-393.75,-23.31 +257.1438467,-379.6875,-22.69 +257.1438467,-365.625,-22.053 +257.1438467,-351.5625,-21.4 +257.1438467,-337.5,-20.73 +257.1438467,-323.4375,-20.043 +257.1438467,-309.375,-19.339 +257.1438467,-295.3125,-18.619 +257.1438467,-281.25,-17.881 +257.1438467,-267.1875,-17.127 +257.1438467,-253.125,-16.356 +257.1438467,-239.0625,-15.568 +257.1438467,-225,-14.764 +257.1438467,-210.9375,-13.942 +257.1438467,-196.875,-13.104 +257.1438467,-182.8125,-12.249 +257.1438467,-168.75,-11.377 +257.1438467,-154.6875,-10.488 +257.1438467,-140.625,-9.583 +257.1438467,-126.5625,-8.6607 +257.1438467,-112.5,-7.7216 +257.1438467,-98.4375,-6.7657 +257.1438467,-84.375,-5.7929 +257.1438467,-70.3125,-4.8034 +257.1438467,-56.25,-3.797 +257.1438467,-42.1875,-2.7739 +257.1438467,-28.125,-1.7339 +257.1438467,-14.0625,-0.67711 +257.1438467,0,0.4301 +257.1438467,14.0625,1.6184 +257.1438467,28.125,2.8238 +257.1438467,42.1875,4.0463 +257.1438467,56.25,5.2861 +257.1438467,70.3125,6.5429 +257.1438467,84.375,7.8169 +257.1438467,98.4375,9.1081 +257.1438467,112.5,10.416 +257.1438467,126.5625,11.742 +257.1438467,140.625,13.085 +257.1438467,154.6875,14.444 +257.1438467,168.75,15.821 +257.1438467,182.8125,17.215 +257.1438467,196.875,18.627 +257.1438467,210.9375,20.055 +257.1438467,225,21.5 +257.1438467,239.0625,22.963 +257.1438467,253.125,24.443 +257.1438467,267.1875,25.94 +257.1438467,281.25,27.454 +257.1438467,295.3125,28.985 +257.1438467,309.375,30.534 +257.1438467,323.4375,32.099 +257.1438467,337.5,33.682 +257.1438467,351.5625,35.282 +257.1438467,365.625,36.899 +257.1438467,379.6875,38.533 +257.1438467,393.75,40.185 +257.1438467,407.8125,41.853 +257.1438467,421.875,43.539 +257.1438467,435.9375,45.241 +257.1438467,450,46.961 +285.7113959,-450,-29.533 +285.7113959,-435.9375,-28.856 +285.7113959,-421.875,-28.163 +285.7113959,-407.8125,-27.453 +285.7113959,-393.75,-26.727 +285.7113959,-379.6875,-25.983 +285.7113959,-365.625,-25.223 +285.7113959,-351.5625,-24.445 +285.7113959,-337.5,-23.651 +285.7113959,-323.4375,-22.841 +285.7113959,-309.375,-22.013 +285.7113959,-295.3125,-21.169 +285.7113959,-281.25,-20.307 +285.7113959,-267.1875,-19.429 +285.7113959,-253.125,-18.534 +285.7113959,-239.0625,-17.623 +285.7113959,-225,-16.694 +285.7113959,-210.9375,-15.749 +285.7113959,-196.875,-14.787 +285.7113959,-182.8125,-13.808 +285.7113959,-168.75,-12.812 +285.7113959,-154.6875,-11.8 +285.7113959,-140.625,-10.77 +285.7113959,-126.5625,-9.7241 +285.7113959,-112.5,-8.6611 +285.7113959,-98.4375,-7.5813 +285.7113959,-84.375,-6.4847 +285.7113959,-70.3125,-5.3713 +285.7113959,-56.25,-4.2411 +285.7113959,-42.1875,-3.094 +285.7113959,-28.125,-1.9302 +285.7113959,-14.0625,-0.74951 +285.7113959,0,0.48317 +285.7113959,14.0625,1.7978 +285.7113959,28.125,3.1296 +285.7113959,42.1875,4.4785 +285.7113959,56.25,5.8446 +285.7113959,70.3125,7.2279 +285.7113959,84.375,8.6283 +285.7113959,98.4375,10.046 +285.7113959,112.5,11.481 +285.7113959,126.5625,12.932 +285.7113959,140.625,14.401 +285.7113959,154.6875,15.888 +285.7113959,168.75,17.391 +285.7113959,182.8125,18.911 +285.7113959,196.875,20.449 +285.7113959,210.9375,22.004 +285.7113959,225,23.576 +285.7113959,239.0625,25.165 +285.7113959,253.125,26.771 +285.7113959,267.1875,28.394 +285.7113959,281.25,30.035 +285.7113959,295.3125,31.692 +285.7113959,309.375,33.367 +285.7113959,323.4375,35.059 +285.7113959,337.5,36.768 +285.7113959,351.5625,38.494 +285.7113959,365.625,40.238 +285.7113959,379.6875,41.998 +285.7113959,393.75,43.776 +285.7113959,407.8125,45.571 +285.7113959,421.875,47.383 +285.7113959,435.9375,49.212 +285.7113959,450,51.058 +314.2849291,-450,-33.443 +314.2849291,-435.9375,-32.643 +314.2849291,-421.875,-31.826 +314.2849291,-407.8125,-30.992 +314.2849291,-393.75,-30.142 +314.2849291,-379.6875,-29.274 +314.2849291,-365.625,-28.39 +314.2849291,-351.5625,-27.489 +314.2849291,-337.5,-26.571 +314.2849291,-323.4375,-25.636 +314.2849291,-309.375,-24.685 +314.2849291,-295.3125,-23.717 +314.2849291,-281.25,-22.732 +314.2849291,-267.1875,-21.73 +314.2849291,-253.125,-20.711 +314.2849291,-239.0625,-19.675 +314.2849291,-225,-18.623 +314.2849291,-210.9375,-17.554 +314.2849291,-196.875,-16.468 +314.2849291,-182.8125,-15.365 +314.2849291,-168.75,-14.245 +314.2849291,-154.6875,-13.109 +314.2849291,-140.625,-11.956 +314.2849291,-126.5625,-10.786 +314.2849291,-112.5,-9.5988 +314.2849291,-98.4375,-8.3951 +314.2849291,-84.375,-7.1747 +314.2849291,-70.3125,-5.9374 +314.2849291,-56.25,-4.6833 +314.2849291,-42.1875,-3.4124 +314.2849291,-28.125,-2.1246 +314.2849291,-14.0625,-0.82009 +314.2849291,0,0.53809 +314.2849291,14.0625,1.9791 +314.2849291,28.125,3.4373 +314.2849291,42.1875,4.9126 +314.2849291,56.25,6.4051 +314.2849291,70.3125,7.9147 +314.2849291,84.375,9.4414 +314.2849291,98.4375,10.985 +314.2849291,112.5,12.546 +314.2849291,126.5625,14.125 +314.2849291,140.625,15.72 +314.2849291,154.6875,17.333 +314.2849291,168.75,18.962 +314.2849291,182.8125,20.609 +314.2849291,196.875,22.273 +314.2849291,210.9375,23.954 +314.2849291,225,25.652 +314.2849291,239.0625,27.368 +314.2849291,253.125,29.1 +314.2849291,267.1875,30.85 +314.2849291,281.25,32.617 +314.2849291,295.3125,34.401 +314.2849291,309.375,36.202 +314.2849291,323.4375,38.021 +314.2849291,337.5,39.856 +314.2849291,351.5625,41.709 +314.2849291,365.625,43.579 +314.2849291,379.6875,45.465 +314.2849291,393.75,47.37 +314.2849291,407.8125,49.291 +314.2849291,421.875,51.229 +314.2849291,435.9375,53.185 +314.2849291,450,55.157 +342.8584622,-450,-37.352 +342.8584622,-435.9375,-36.428 +342.8584622,-421.875,-35.487 +342.8584622,-407.8125,-34.53 +342.8584622,-393.75,-33.555 +342.8584622,-379.6875,-32.564 +342.8584622,-365.625,-31.556 +342.8584622,-351.5625,-30.531 +342.8584622,-337.5,-29.489 +342.8584622,-323.4375,-28.43 +342.8584622,-309.375,-27.355 +342.8584622,-295.3125,-26.263 +342.8584622,-281.25,-25.154 +342.8584622,-267.1875,-24.028 +342.8584622,-253.125,-22.885 +342.8584622,-239.0625,-21.726 +342.8584622,-225,-20.55 +342.8584622,-210.9375,-19.357 +342.8584622,-196.875,-18.147 +342.8584622,-182.8125,-16.92 +342.8584622,-168.75,-15.677 +342.8584622,-154.6875,-14.416 +342.8584622,-140.625,-13.139 +342.8584622,-126.5625,-11.845 +342.8584622,-112.5,-10.535 +342.8584622,-98.4375,-9.2071 +342.8584622,-84.375,-7.8628 +342.8584622,-70.3125,-6.5016 +342.8584622,-56.25,-5.1236 +342.8584622,-42.1875,-3.7289 +342.8584622,-28.125,-2.3173 +342.8584622,-14.0625,-0.88886 +342.8584622,0,0.59487 +342.8584622,14.0625,2.1623 +342.8584622,28.125,3.7468 +342.8584622,42.1875,5.3485 +342.8584622,56.25,6.9673 +342.8584622,70.3125,8.6033 +342.8584622,84.375,10.256 +342.8584622,98.4375,11.927 +342.8584622,112.5,13.614 +342.8584622,126.5625,15.319 +342.8584622,140.625,17.041 +342.8584622,154.6875,18.779 +342.8584622,168.75,20.536 +342.8584622,182.8125,22.309 +342.8584622,196.875,24.099 +342.8584622,210.9375,25.907 +342.8584622,225,27.731 +342.8584622,239.0625,29.573 +342.8584622,253.125,31.432 +342.8584622,267.1875,33.308 +342.8584622,281.25,35.201 +342.8584622,295.3125,37.112 +342.8584622,309.375,39.039 +342.8584622,323.4375,40.984 +342.8584622,337.5,42.946 +342.8584622,351.5625,44.925 +342.8584622,365.625,46.921 +342.8584622,379.6875,48.934 +342.8584622,393.75,50.965 +342.8584622,407.8125,53.012 +342.8584622,421.875,55.077 +342.8584622,435.9375,57.159 +342.8584622,450,59.258 +571.4287758,-450,-68.557 +571.4287758,-435.9375,-66.642 +571.4287758,-421.875,-64.711 +571.4287758,-407.8125,-62.762 +571.4287758,-393.75,-60.796 +571.4287758,-379.6875,-58.814 +571.4287758,-365.625,-56.815 +571.4287758,-351.5625,-54.799 +571.4287758,-337.5,-52.766 +571.4287758,-323.4375,-50.717 +571.4287758,-309.375,-48.65 +571.4287758,-295.3125,-46.567 +571.4287758,-281.25,-44.467 +571.4287758,-267.1875,-42.35 +571.4287758,-253.125,-40.217 +571.4287758,-239.0625,-38.066 +571.4287758,-225,-35.899 +571.4287758,-210.9375,-33.715 +571.4287758,-196.875,-31.514 +571.4287758,-182.8125,-29.297 +571.4287758,-168.75,-27.062 +571.4287758,-154.6875,-24.811 +571.4287758,-140.625,-22.543 +571.4287758,-126.5625,-20.258 +571.4287758,-112.5,-17.956 +571.4287758,-98.4375,-15.638 +571.4287758,-84.375,-13.302 +571.4287758,-70.3125,-10.95 +571.4287758,-56.25,-8.5812 +571.4287758,-42.1875,-6.1954 +571.4287758,-28.125,-3.7928 +571.4287758,-14.0625,-1.3734 +571.4287758,0,1.116 +571.4287758,14.0625,3.6944 +571.4287758,28.125,6.29 +571.4287758,42.1875,8.9027 +571.4287758,56.25,11.533 +571.4287758,70.3125,14.18 +571.4287758,84.375,16.844 +571.4287758,98.4375,19.525 +571.4287758,112.5,22.223 +571.4287758,126.5625,24.939 +571.4287758,140.625,27.672 +571.4287758,154.6875,30.422 +571.4287758,168.75,33.189 +571.4287758,182.8125,35.973 +571.4287758,196.875,38.774 +571.4287758,210.9375,41.593 +571.4287758,225,44.429 +571.4287758,239.0625,47.281 +571.4287758,253.125,50.151 +571.4287758,267.1875,53.038 +571.4287758,281.25,55.943 +571.4287758,295.3125,58.864 +571.4287758,309.375,61.803 +571.4287758,323.4375,64.758 +571.4287758,337.5,67.731 +571.4287758,351.5625,70.721 +571.4287758,365.625,73.728 +571.4287758,379.6875,76.753 +571.4287758,393.75,79.794 +571.4287758,407.8125,82.853 +571.4287758,421.875,85.929 +571.4287758,435.9375,89.022 +571.4287758,450,92.132 +714.3084096,-450,-88.002 +714.3084096,-435.9375,-85.467 +714.3084096,-421.875,-82.916 +714.3084096,-407.8125,-80.348 +714.3084096,-393.75,-77.763 +714.3084096,-379.6875,-75.161 +714.3084096,-365.625,-72.543 +714.3084096,-351.5625,-69.908 +714.3084096,-337.5,-67.255 +714.3084096,-323.4375,-64.586 +714.3084096,-309.375,-61.901 +714.3084096,-295.3125,-59.198 +714.3084096,-281.25,-56.479 +714.3084096,-267.1875,-53.743 +714.3084096,-253.125,-50.99 +714.3084096,-239.0625,-48.22 +714.3084096,-225,-45.433 +714.3084096,-210.9375,-42.63 +714.3084096,-196.875,-39.81 +714.3084096,-182.8125,-36.973 +714.3084096,-168.75,-34.119 +714.3084096,-154.6875,-31.248 +714.3084096,-140.625,-28.361 +714.3084096,-126.5625,-25.456 +714.3084096,-112.5,-22.535 +714.3084096,-98.4375,-19.597 +714.3084096,-84.375,-16.643 +714.3084096,-70.3125,-13.671 +714.3084096,-56.25,-10.683 +714.3084096,-42.1875,-7.6778 +714.3084096,-28.125,-4.6558 +714.3084096,-14.0625,-1.6171 +714.3084096,0,1.5021 +714.3084096,14.0625,4.7124 +714.3084096,28.125,7.9398 +714.3084096,42.1875,11.184 +714.3084096,56.25,14.446 +714.3084096,70.3125,17.725 +714.3084096,84.375,21.021 +714.3084096,98.4375,24.334 +714.3084096,112.5,27.665 +714.3084096,126.5625,31.012 +714.3084096,140.625,34.377 +714.3084096,154.6875,37.758 +714.3084096,168.75,41.157 +714.3084096,182.8125,44.574 +714.3084096,196.875,48.007 +714.3084096,210.9375,51.457 +714.3084096,225,54.925 +714.3084096,239.0625,58.409 +714.3084096,253.125,61.911 +714.3084096,267.1875,65.43 +714.3084096,281.25,68.966 +714.3084096,295.3125,72.52 +714.3084096,309.375,76.09 +714.3084096,323.4375,79.678 +714.3084096,337.5,83.282 +714.3084096,351.5625,86.904 +714.3084096,365.625,90.543 +714.3084096,379.6875,94.2 +714.3084096,393.75,97.873 +714.3084096,407.8125,101.56 +714.3084096,421.875,105.27 +714.3084096,435.9375,109 +714.3084096,450,112.74 +857.1461556,-450,-107.4 +857.1461556,-435.9375,-104.25 +857.1461556,-421.875,-101.08 +857.1461556,-407.8125,-97.888 +857.1461556,-393.75,-94.684 +857.1461556,-379.6875,-91.463 +857.1461556,-365.625,-88.225 +857.1461556,-351.5625,-84.97 +857.1461556,-337.5,-81.699 +857.1461556,-323.4375,-78.411 +857.1461556,-309.375,-75.106 +857.1461556,-295.3125,-71.784 +857.1461556,-281.25,-68.445 +857.1461556,-267.1875,-65.089 +857.1461556,-253.125,-61.717 +857.1461556,-239.0625,-58.328 +857.1461556,-225,-54.922 +857.1461556,-210.9375,-51.499 +857.1461556,-196.875,-48.06 +857.1461556,-182.8125,-44.603 +857.1461556,-168.75,-41.13 +857.1461556,-154.6875,-37.64 +857.1461556,-140.625,-34.133 +857.1461556,-126.5625,-30.61 +857.1461556,-112.5,-27.069 +857.1461556,-98.4375,-23.512 +857.1461556,-84.375,-19.938 +857.1461556,-70.3125,-16.347 +857.1461556,-56.25,-12.739 +857.1461556,-42.1875,-9.1147 +857.1461556,-28.125,-5.4734 +857.1461556,-14.0625,-1.8152 +857.1461556,0,1.9346 +857.1461556,14.0625,5.7768 +857.1461556,28.125,9.6361 +857.1461556,42.1875,13.513 +857.1461556,56.25,17.406 +857.1461556,70.3125,21.317 +857.1461556,84.375,25.245 +857.1461556,98.4375,29.19 +857.1461556,112.5,33.152 +857.1461556,126.5625,37.131 +857.1461556,140.625,41.128 +857.1461556,154.6875,45.142 +857.1461556,168.75,49.173 +857.1461556,182.8125,53.22 +857.1461556,196.875,57.286 +857.1461556,210.9375,61.368 +857.1461556,225,65.467 +857.1461556,239.0625,69.584 +857.1461556,253.125,73.718 +857.1461556,267.1875,77.868 +857.1461556,281.25,82.037 +857.1461556,295.3125,86.222 +857.1461556,309.375,90.424 +857.1461556,323.4375,94.644 +857.1461556,337.5,98.88 +857.1461556,351.5625,103.13 +857.1461556,365.625,107.4 +857.1461556,379.6875,111.69 +857.1461556,393.75,116 +857.1461556,407.8125,120.32 +857.1461556,421.875,124.66 +857.1461556,435.9375,129.02 +857.1461556,450,133.39 +999.9839016,-450,-126.75 +999.9839016,-435.9375,-122.98 +999.9839016,-421.875,-119.19 +999.9839016,-407.8125,-115.38 +999.9839016,-393.75,-111.56 +999.9839016,-379.6875,-107.72 +999.9839016,-365.625,-103.86 +999.9839016,-351.5625,-99.988 +999.9839016,-337.5,-96.097 +999.9839016,-323.4375,-92.189 +999.9839016,-309.375,-88.265 +999.9839016,-295.3125,-84.324 +999.9839016,-281.25,-80.366 +999.9839016,-267.1875,-76.391 +999.9839016,-253.125,-72.399 +999.9839016,-239.0625,-68.391 +999.9839016,-225,-64.365 +999.9839016,-210.9375,-60.323 +999.9839016,-196.875,-56.264 +999.9839016,-182.8125,-52.188 +999.9839016,-168.75,-48.096 +999.9839016,-154.6875,-43.986 +999.9839016,-140.625,-39.86 +999.9839016,-126.5625,-35.717 +999.9839016,-112.5,-31.557 +999.9839016,-98.4375,-27.381 +999.9839016,-84.375,-23.187 +999.9839016,-70.3125,-18.977 +999.9839016,-56.25,-14.75 +999.9839016,-42.1875,-10.506 +999.9839016,-28.125,-6.2453 +999.9839016,-14.0625,-1.9678 +999.9839016,0,2.4136 +999.9839016,14.0625,6.8876 +999.9839016,28.125,11.379 +999.9839016,42.1875,15.887 +999.9839016,56.25,20.413 +999.9839016,70.3125,24.955 +999.9839016,84.375,29.515 +999.9839016,98.4375,34.092 +999.9839016,112.5,38.686 +999.9839016,126.5625,43.297 +999.9839016,140.625,47.926 +999.9839016,154.6875,52.571 +999.9839016,168.75,57.234 +999.9839016,182.8125,61.914 +999.9839016,196.875,66.611 +999.9839016,210.9375,71.325 +999.9839016,225,76.056 +999.9839016,239.0625,80.805 +999.9839016,253.125,85.57 +999.9839016,267.1875,90.353 +999.9839016,281.25,95.153 +999.9839016,295.3125,99.97 +999.9839016,309.375,104.8 +999.9839016,323.4375,109.66 +999.9839016,337.5,114.52 +999.9839016,351.5625,119.41 +999.9839016,365.625,124.31 +999.9839016,379.6875,129.23 +999.9839016,393.75,134.17 +999.9839016,407.8125,139.12 +999.9839016,421.875,144.1 +999.9839016,435.9375,149.08 +999.9839016,450,154.09 +1142.881487,-450,-146.06 +1142.881487,-435.9375,-141.67 +1142.881487,-421.875,-137.26 +1142.881487,-407.8125,-132.83 +1142.881487,-393.75,-128.39 +1142.881487,-379.6875,-123.93 +1142.881487,-365.625,-119.45 +1142.881487,-351.5625,-114.96 +1142.881487,-337.5,-110.45 +1142.881487,-323.4375,-105.92 +1142.881487,-309.375,-101.38 +1142.881487,-295.3125,-96.818 +1142.881487,-281.25,-92.241 +1142.881487,-267.1875,-87.646 +1142.881487,-253.125,-83.035 +1142.881487,-239.0625,-78.407 +1142.881487,-225,-73.763 +1142.881487,-210.9375,-69.101 +1142.881487,-196.875,-64.423 +1142.881487,-182.8125,-59.728 +1142.881487,-168.75,-55.016 +1142.881487,-154.6875,-50.287 +1142.881487,-140.625,-45.542 +1142.881487,-126.5625,-40.779 +1142.881487,-112.5,-36 +1142.881487,-98.4375,-31.204 +1142.881487,-84.375,-26.391 +1142.881487,-70.3125,-21.562 +1142.881487,-56.25,-16.715 +1142.881487,-42.1875,-11.852 +1142.881487,-28.125,-6.9718 +1142.881487,-14.0625,-2.0749 +1142.881487,0,2.939 +1142.881487,14.0625,8.0449 +1142.881487,28.125,13.168 +1142.881487,42.1875,18.308 +1142.881487,56.25,23.466 +1142.881487,70.3125,28.64 +1142.881487,84.375,33.832 +1142.881487,98.4375,39.041 +1142.881487,112.5,44.267 +1142.881487,126.5625,49.51 +1142.881487,140.625,54.77 +1142.881487,154.6875,60.047 +1142.881487,168.75,65.342 +1142.881487,182.8125,70.654 +1142.881487,196.875,75.983 +1142.881487,210.9375,81.329 +1142.881487,225,86.692 +1142.881487,239.0625,92.072 +1142.881487,253.125,97.47 +1142.881487,267.1875,102.88 +1142.881487,281.25,108.32 +1142.881487,295.3125,113.77 +1142.881487,309.375,119.23 +1142.881487,323.4375,124.71 +1142.881487,337.5,130.21 +1142.881487,351.5625,135.73 +1142.881487,365.625,141.27 +1142.881487,379.6875,146.82 +1142.881487,393.75,152.39 +1142.881487,407.8125,157.97 +1142.881487,421.875,163.58 +1142.881487,435.9375,169.2 +1142.881487,450,174.84 +1285.719233,-450,-165.32 +1285.719233,-435.9375,-160.31 +1285.719233,-421.875,-155.28 +1285.719233,-407.8125,-150.24 +1285.719233,-393.75,-145.17 +1285.719233,-379.6875,-140.1 +1285.719233,-365.625,-135 +1285.719233,-351.5625,-129.89 +1285.719233,-337.5,-124.76 +1285.719233,-323.4375,-119.61 +1285.719233,-309.375,-114.45 +1285.719233,-295.3125,-109.27 +1285.719233,-281.25,-104.07 +1285.719233,-267.1875,-98.857 +1285.719233,-253.125,-93.626 +1285.719233,-239.0625,-88.379 +1285.719233,-225,-83.115 +1285.719233,-210.9375,-77.834 +1285.719233,-196.875,-72.536 +1285.719233,-182.8125,-67.222 +1285.719233,-168.75,-61.891 +1285.719233,-154.6875,-56.542 +1285.719233,-140.625,-51.177 +1285.719233,-126.5625,-45.796 +1285.719233,-112.5,-40.397 +1285.719233,-98.4375,-34.982 +1285.719233,-84.375,-29.55 +1285.719233,-70.3125,-24.101 +1285.719233,-56.25,-18.635 +1285.719233,-42.1875,-13.152 +1285.719233,-28.125,-7.6528 +1285.719233,-14.0625,-2.1365 +1285.719233,0,3.5108 +1285.719233,14.0625,9.2486 +1285.719233,28.125,15.004 +1285.719233,42.1875,20.776 +1285.719233,56.25,26.565 +1285.719233,70.3125,32.371 +1285.719233,84.375,38.195 +1285.719233,98.4375,44.036 +1285.719233,112.5,49.893 +1285.719233,126.5625,55.768 +1285.719233,140.625,61.661 +1285.719233,154.6875,67.57 +1285.719233,168.75,73.496 +1285.719233,182.8125,79.44 +1285.719233,196.875,85.401 +1285.719233,210.9375,91.379 +1285.719233,225,97.374 +1285.719233,239.0625,103.39 +1285.719233,253.125,109.42 +1285.719233,267.1875,115.46 +1285.719233,281.25,121.53 +1285.719233,295.3125,127.61 +1285.719233,309.375,133.7 +1285.719233,323.4375,139.82 +1285.719233,337.5,145.95 +1285.719233,351.5625,152.1 +1285.719233,365.625,158.27 +1285.719233,379.6875,164.45 +1285.719233,393.75,170.65 +1285.719233,407.8125,176.87 +1285.719233,421.875,183.11 +1285.719233,435.9375,189.36 +1285.719233,450,195.63 +1428.556979,-450,-184.54 +1428.556979,-435.9375,-178.91 +1428.556979,-421.875,-173.26 +1428.556979,-407.8125,-167.59 +1428.556979,-393.75,-161.91 +1428.556979,-379.6875,-156.21 +1428.556979,-365.625,-150.5 +1428.556979,-351.5625,-144.77 +1428.556979,-337.5,-139.02 +1428.556979,-323.4375,-133.25 +1428.556979,-309.375,-127.47 +1428.556979,-295.3125,-121.67 +1428.556979,-281.25,-115.85 +1428.556979,-267.1875,-110.02 +1428.556979,-253.125,-104.17 +1428.556979,-239.0625,-98.305 +1428.556979,-225,-92.421 +1428.556979,-210.9375,-86.521 +1428.556979,-196.875,-80.604 +1428.556979,-182.8125,-74.67 +1428.556979,-168.75,-68.72 +1428.556979,-154.6875,-62.752 +1428.556979,-140.625,-56.768 +1428.556979,-126.5625,-50.767 +1428.556979,-112.5,-44.749 +1428.556979,-98.4375,-38.714 +1428.556979,-84.375,-32.662 +1428.556979,-70.3125,-26.594 +1428.556979,-56.25,-20.509 +1428.556979,-42.1875,-14.407 +1428.556979,-28.125,-8.2882 +1428.556979,-14.0625,-2.1526 +1428.556979,0,4.1291 +1428.556979,14.0625,10.499 +1428.556979,28.125,16.886 +1428.556979,42.1875,23.29 +1428.556979,56.25,29.711 +1428.556979,70.3125,36.149 +1428.556979,84.375,42.604 +1428.556979,98.4375,49.077 +1428.556979,112.5,55.567 +1428.556979,126.5625,62.074 +1428.556979,140.625,68.598 +1428.556979,154.6875,75.139 +1428.556979,168.75,81.697 +1428.556979,182.8125,88.273 +1428.556979,196.875,94.865 +1428.556979,210.9375,101.48 +1428.556979,225,108.1 +1428.556979,239.0625,114.75 +1428.556979,253.125,121.41 +1428.556979,267.1875,128.09 +1428.556979,281.25,134.78 +1428.556979,295.3125,141.49 +1428.556979,309.375,148.22 +1428.556979,323.4375,154.97 +1428.556979,337.5,161.74 +1428.556979,351.5625,168.52 +1428.556979,365.625,175.31 +1428.556979,379.6875,182.13 +1428.556979,393.75,188.96 +1428.556979,407.8125,195.81 +1428.556979,421.875,202.68 +1428.556979,435.9375,209.56 +1428.556979,450,216.47 +1571.454565,-450,-203.71 +1571.454565,-435.9375,-197.46 +1571.454565,-421.875,-191.19 +1571.454565,-407.8125,-184.91 +1571.454565,-393.75,-178.61 +1571.454565,-379.6875,-172.29 +1571.454565,-365.625,-165.95 +1571.454565,-351.5625,-159.6 +1571.454565,-337.5,-153.23 +1571.454565,-323.4375,-146.85 +1571.454565,-309.375,-140.45 +1571.454565,-295.3125,-134.03 +1571.454565,-281.25,-127.59 +1571.454565,-267.1875,-121.14 +1571.454565,-253.125,-114.67 +1571.454565,-239.0625,-108.19 +1571.454565,-225,-101.68 +1571.454565,-210.9375,-95.163 +1571.454565,-196.875,-88.626 +1571.454565,-182.8125,-82.073 +1571.454565,-168.75,-75.503 +1571.454565,-154.6875,-68.916 +1571.454565,-140.625,-62.313 +1571.454565,-126.5625,-55.692 +1571.454565,-112.5,-49.055 +1571.454565,-98.4375,-42.401 +1571.454565,-84.375,-35.73 +1571.454565,-70.3125,-29.042 +1571.454565,-56.25,-22.338 +1571.454565,-42.1875,-15.616 +1571.454565,-28.125,-8.8781 +1571.454565,-14.0625,-2.1231 +1571.454565,0,4.7938 +1571.454565,14.0625,11.795 +1571.454565,28.125,18.814 +1571.454565,42.1875,25.85 +1571.454565,56.25,32.903 +1571.454565,70.3125,39.973 +1571.454565,84.375,47.06 +1571.454565,98.4375,54.165 +1571.454565,112.5,61.287 +1571.454565,126.5625,68.425 +1571.454565,140.625,75.581 +1571.454565,154.6875,82.754 +1571.454565,168.75,89.945 +1571.454565,182.8125,97.152 +1571.454565,196.875,104.38 +1571.454565,210.9375,111.62 +1571.454565,225,118.88 +1571.454565,239.0625,126.15 +1571.454565,253.125,133.45 +1571.454565,267.1875,140.76 +1571.454565,281.25,148.08 +1571.454565,295.3125,155.43 +1571.454565,309.375,162.79 +1571.454565,323.4375,170.17 +1571.454565,337.5,177.57 +1571.454565,351.5625,184.98 +1571.454565,365.625,192.41 +1571.454565,379.6875,199.86 +1571.454565,393.75,207.32 +1571.454565,407.8125,214.8 +1571.454565,421.875,222.3 +1571.454565,435.9375,229.82 +1571.454565,450,237.35 +1714.292311,-450,-222.84 +1714.292311,-435.9375,-215.97 +1714.292311,-421.875,-209.08 +1714.292311,-407.8125,-202.18 +1714.292311,-393.75,-195.25 +1714.292311,-379.6875,-188.32 +1714.292311,-365.625,-181.36 +1714.292311,-351.5625,-174.39 +1714.292311,-337.5,-167.4 +1714.292311,-323.4375,-160.4 +1714.292311,-309.375,-153.38 +1714.292311,-295.3125,-146.34 +1714.292311,-281.25,-139.29 +1714.292311,-267.1875,-132.21 +1714.292311,-253.125,-125.13 +1714.292311,-239.0625,-118.02 +1714.292311,-225,-110.9 +1714.292311,-210.9375,-103.76 +1714.292311,-196.875,-96.603 +1714.292311,-182.8125,-89.431 +1714.292311,-168.75,-82.241 +1714.292311,-154.6875,-75.035 +1714.292311,-140.625,-67.812 +1714.292311,-126.5625,-60.572 +1714.292311,-112.5,-53.315 +1714.292311,-98.4375,-46.042 +1714.292311,-84.375,-38.752 +1714.292311,-70.3125,-31.445 +1714.292311,-56.25,-24.121 +1714.292311,-42.1875,-16.78 +1714.292311,-28.125,-9.4225 +1714.292311,-14.0625,-2.0481 +1714.292311,0,5.505 +1714.292311,14.0625,13.138 +1714.292311,28.125,20.789 +1714.292311,42.1875,28.457 +1714.292311,56.25,36.142 +1714.292311,70.3125,43.844 +1714.292311,84.375,51.563 +1714.292311,98.4375,59.299 +1714.292311,112.5,67.053 +1714.292311,126.5625,74.823 +1714.292311,140.625,82.611 +1714.292311,154.6875,90.416 +1714.292311,168.75,98.238 +1714.292311,182.8125,106.08 +1714.292311,196.875,113.93 +1714.292311,210.9375,121.81 +1714.292311,225,129.7 +1714.292311,239.0625,137.61 +1714.292311,253.125,145.53 +1714.292311,267.1875,153.47 +1714.292311,281.25,161.43 +1714.292311,295.3125,169.41 +1714.292311,309.375,177.4 +1714.292311,323.4375,185.41 +1714.292311,337.5,193.44 +1714.292311,351.5625,201.49 +1714.292311,365.625,209.55 +1714.292311,379.6875,217.63 +1714.292311,393.75,225.72 +1714.292311,407.8125,233.84 +1714.292311,421.875,241.97 +1714.292311,435.9375,250.12 +1714.292311,450,258.28 +1857.130057,-450,-241.92 +1857.130057,-435.9375,-234.43 +1857.130057,-421.875,-226.92 +1857.130057,-407.8125,-219.4 +1857.130057,-393.75,-211.86 +1857.130057,-379.6875,-204.3 +1857.130057,-365.625,-196.73 +1857.130057,-351.5625,-189.14 +1857.130057,-337.5,-181.53 +1857.130057,-323.4375,-173.91 +1857.130057,-309.375,-166.27 +1857.130057,-295.3125,-158.61 +1857.130057,-281.25,-150.93 +1857.130057,-267.1875,-143.24 +1857.130057,-253.125,-135.53 +1857.130057,-239.0625,-127.81 +1857.130057,-225,-120.07 +1857.130057,-210.9375,-112.31 +1857.130057,-196.875,-104.53 +1857.130057,-182.8125,-96.743 +1857.130057,-168.75,-88.934 +1857.130057,-154.6875,-81.108 +1857.130057,-140.625,-73.266 +1857.130057,-126.5625,-65.407 +1857.130057,-112.5,-57.531 +1857.130057,-98.4375,-49.638 +1857.130057,-84.375,-41.728 +1857.130057,-70.3125,-33.802 +1857.130057,-56.25,-25.858 +1857.130057,-42.1875,-17.898 +1857.130057,-28.125,-9.9213 +1857.130057,-14.0625,-1.9276 +1857.130057,0,6.2626 +1857.130057,14.0625,14.528 +1857.130057,28.125,22.81 +1857.130057,42.1875,31.11 +1857.130057,56.25,39.427 +1857.130057,70.3125,47.761 +1857.130057,84.375,56.112 +1857.130057,98.4375,64.48 +1857.130057,112.5,72.865 +1857.130057,126.5625,81.268 +1857.130057,140.625,89.688 +1857.130057,154.6875,98.125 +1857.130057,168.75,106.58 +1857.130057,182.8125,115.05 +1857.130057,196.875,123.54 +1857.130057,210.9375,132.04 +1857.130057,225,140.57 +1857.130057,239.0625,149.11 +1857.130057,253.125,157.66 +1857.130057,267.1875,166.24 +1857.130057,281.25,174.83 +1857.130057,295.3125,183.44 +1857.130057,309.375,192.06 +1857.130057,323.4375,200.7 +1857.130057,337.5,209.36 +1857.130057,351.5625,218.04 +1857.130057,365.625,226.74 +1857.130057,379.6875,235.45 +1857.130057,393.75,244.17 +1857.130057,407.8125,252.92 +1857.130057,421.875,261.68 +1857.130057,435.9375,270.46 +1857.130057,450,279.26 +2000.027643,-450,-260.95 +2000.027643,-435.9375,-252.84 +2000.027643,-421.875,-244.72 +2000.027643,-407.8125,-236.57 +2000.027643,-393.75,-228.41 +2000.027643,-379.6875,-220.24 +2000.027643,-365.625,-212.05 +2000.027643,-351.5625,-203.84 +2000.027643,-337.5,-195.61 +2000.027643,-323.4375,-187.37 +2000.027643,-309.375,-179.11 +2000.027643,-295.3125,-170.83 +2000.027643,-281.25,-162.54 +2000.027643,-267.1875,-154.22 +2000.027643,-253.125,-145.9 +2000.027643,-239.0625,-137.55 +2000.027643,-225,-129.19 +2000.027643,-210.9375,-120.81 +2000.027643,-196.875,-112.42 +2000.027643,-182.8125,-104.01 +2000.027643,-168.75,-95.581 +2000.027643,-154.6875,-87.136 +2000.027643,-140.625,-78.674 +2000.027643,-126.5625,-70.195 +2000.027643,-112.5,-61.7 +2000.027643,-98.4375,-53.188 +2000.027643,-84.375,-44.659 +2000.027643,-70.3125,-36.113 +2000.027643,-56.25,-27.55 +2000.027643,-42.1875,-18.971 +2000.027643,-28.125,-10.375 +2000.027643,-14.0625,-1.7616 +2000.027643,0,7.0667 +2000.027643,14.0625,15.964 +2000.027643,28.125,24.878 +2000.027643,42.1875,33.81 +2000.027643,56.25,42.758 +2000.027643,70.3125,51.724 +2000.027643,84.375,60.707 +2000.027643,98.4375,69.707 +2000.027643,112.5,78.725 +2000.027643,126.5625,87.759 +2000.027643,140.625,96.811 +2000.027643,154.6875,105.88 +2000.027643,168.75,114.97 +2000.027643,182.8125,124.07 +2000.027643,196.875,133.19 +2000.027643,210.9375,142.33 +2000.027643,225,151.48 +2000.027643,239.0625,160.65 +2000.027643,253.125,169.84 +2000.027643,267.1875,179.05 +2000.027643,281.25,188.27 +2000.027643,295.3125,197.51 +2000.027643,309.375,206.77 +2000.027643,323.4375,216.04 +2000.027643,337.5,225.33 +2000.027643,351.5625,234.64 +2000.027643,365.625,243.97 +2000.027643,379.6875,253.31 +2000.027643,393.75,262.67 +2000.027643,407.8125,272.05 +2000.027643,421.875,281.44 +2000.027643,435.9375,290.86 +2000.027643,450,300.28 +2142.865389,-450,-279.94 +2142.865389,-435.9375,-271.21 +2142.865389,-421.875,-262.47 +2142.865389,-407.8125,-253.7 +2142.865389,-393.75,-244.93 +2142.865389,-379.6875,-236.13 +2142.865389,-365.625,-227.32 +2142.865389,-351.5625,-218.49 +2142.865389,-337.5,-209.64 +2142.865389,-323.4375,-200.78 +2142.865389,-309.375,-191.9 +2142.865389,-295.3125,-183 +2142.865389,-281.25,-174.09 +2142.865389,-267.1875,-165.16 +2142.865389,-253.125,-156.22 +2142.865389,-239.0625,-147.25 +2142.865389,-225,-138.27 +2142.865389,-210.9375,-129.27 +2142.865389,-196.875,-120.26 +2142.865389,-182.8125,-111.23 +2142.865389,-168.75,-102.18 +2142.865389,-154.6875,-93.118 +2142.865389,-140.625,-84.037 +2142.865389,-126.5625,-74.939 +2142.865389,-112.5,-65.824 +2142.865389,-98.4375,-56.693 +2142.865389,-84.375,-47.544 +2142.865389,-70.3125,-38.379 +2142.865389,-56.25,-29.197 +2142.865389,-42.1875,-19.998 +2142.865389,-28.125,-10.782 +2142.865389,-14.0625,-1.55 +2142.865389,0,7.9172 +2142.865389,14.0625,17.446 +2142.865389,28.125,26.993 +2142.865389,42.1875,36.556 +2142.865389,56.25,46.136 +2142.865389,70.3125,55.734 +2142.865389,84.375,65.349 +2142.865389,98.4375,74.981 +2142.865389,112.5,84.63 +2142.865389,126.5625,94.296 +2142.865389,140.625,103.98 +2142.865389,154.6875,113.68 +2142.865389,168.75,123.4 +2142.865389,182.8125,133.13 +2142.865389,196.875,142.89 +2142.865389,210.9375,152.65 +2142.865389,225,162.44 +2142.865389,239.0625,172.24 +2142.865389,253.125,182.06 +2142.865389,267.1875,191.9 +2142.865389,281.25,201.76 +2142.865389,295.3125,211.63 +2142.865389,309.375,221.52 +2142.865389,323.4375,231.43 +2142.865389,337.5,241.35 +2142.865389,351.5625,251.29 +2142.865389,365.625,261.25 +2142.865389,379.6875,271.22 +2142.865389,393.75,281.21 +2142.865389,407.8125,291.22 +2142.865389,421.875,301.25 +2142.865389,435.9375,311.29 +2142.865389,450,321.35 +2285.703135,-450,-298.88 +2285.703135,-435.9375,-289.53 +2285.703135,-421.875,-280.17 +2285.703135,-407.8125,-270.79 +2285.703135,-393.75,-261.39 +2285.703135,-379.6875,-251.98 +2285.703135,-365.625,-242.54 +2285.703135,-351.5625,-233.1 +2285.703135,-337.5,-223.63 +2285.703135,-323.4375,-214.15 +2285.703135,-309.375,-204.65 +2285.703135,-295.3125,-195.14 +2285.703135,-281.25,-185.6 +2285.703135,-267.1875,-176.05 +2285.703135,-253.125,-166.49 +2285.703135,-239.0625,-156.9 +2285.703135,-225,-147.3 +2285.703135,-210.9375,-137.69 +2285.703135,-196.875,-128.06 +2285.703135,-182.8125,-118.41 +2285.703135,-168.75,-108.74 +2285.703135,-154.6875,-99.055 +2285.703135,-140.625,-89.354 +2285.703135,-126.5625,-79.637 +2285.703135,-112.5,-69.903 +2285.703135,-98.4375,-60.152 +2285.703135,-84.375,-50.384 +2285.703135,-70.3125,-40.599 +2285.703135,-56.25,-30.798 +2285.703135,-42.1875,-20.98 +2285.703135,-28.125,-11.145 +2285.703135,-14.0625,-1.2929 +2285.703135,0,8.8141 +2285.703135,14.0625,18.975 +2285.703135,28.125,29.153 +2285.703135,42.1875,39.348 +2285.703135,56.25,49.561 +2285.703135,70.3125,59.79 +2285.703135,84.375,70.037 +2285.703135,98.4375,80.301 +2285.703135,112.5,90.582 +2285.703135,126.5625,100.88 +2285.703135,140.625,111.2 +2285.703135,154.6875,121.53 +2285.703135,168.75,131.88 +2285.703135,182.8125,142.24 +2285.703135,196.875,152.63 +2285.703135,210.9375,163.03 +2285.703135,225,173.45 +2285.703135,239.0625,183.88 +2285.703135,253.125,194.34 +2285.703135,267.1875,204.81 +2285.703135,281.25,215.29 +2285.703135,295.3125,225.8 +2285.703135,309.375,236.32 +2285.703135,323.4375,246.86 +2285.703135,337.5,257.41 +2285.703135,351.5625,267.98 +2285.703135,365.625,278.57 +2285.703135,379.6875,289.18 +2285.703135,393.75,299.8 +2285.703135,407.8125,310.45 +2285.703135,421.875,321.1 +2285.703135,435.9375,331.78 +2285.703135,450,342.47 +2428.600721,-450,-317.78 +2428.600721,-435.9375,-307.81 +2428.600721,-421.875,-297.83 +2428.600721,-407.8125,-287.83 +2428.600721,-393.75,-277.81 +2428.600721,-379.6875,-267.78 +2428.600721,-365.625,-257.73 +2428.600721,-351.5625,-247.66 +2428.600721,-337.5,-237.57 +2428.600721,-323.4375,-227.47 +2428.600721,-309.375,-217.35 +2428.600721,-295.3125,-207.22 +2428.600721,-281.25,-197.07 +2428.600721,-267.1875,-186.9 +2428.600721,-253.125,-176.71 +2428.600721,-239.0625,-166.51 +2428.600721,-225,-156.29 +2428.600721,-210.9375,-146.06 +2428.600721,-196.875,-135.8 +2428.600721,-182.8125,-125.53 +2428.600721,-168.75,-115.25 +2428.600721,-154.6875,-104.95 +2428.600721,-140.625,-94.626 +2428.600721,-126.5625,-84.289 +2428.600721,-112.5,-73.936 +2428.600721,-98.4375,-63.565 +2428.600721,-84.375,-53.178 +2428.600721,-70.3125,-42.774 +2428.600721,-56.25,-32.353 +2428.600721,-42.1875,-21.916 +2428.600721,-28.125,-11.462 +2428.600721,-14.0625,-0.99032 +2428.600721,0,9.7575 +2428.600721,14.0625,20.55 +2428.600721,28.125,31.36 +2428.600721,42.1875,42.188 +2428.600721,56.25,53.032 +2428.600721,70.3125,63.893 +2428.600721,84.375,74.772 +2428.600721,98.4375,85.668 +2428.600721,112.5,96.581 +2428.600721,126.5625,107.51 +2428.600721,140.625,118.46 +2428.600721,154.6875,129.42 +2428.600721,168.75,140.4 +2428.600721,182.8125,151.4 +2428.600721,196.875,162.42 +2428.600721,210.9375,173.45 +2428.600721,225,184.5 +2428.600721,239.0625,195.57 +2428.600721,253.125,206.65 +2428.600721,267.1875,217.75 +2428.600721,281.25,228.87 +2428.600721,295.3125,240.01 +2428.600721,309.375,251.16 +2428.600721,323.4375,262.33 +2428.600721,337.5,273.52 +2428.600721,351.5625,284.72 +2428.600721,365.625,295.95 +2428.600721,379.6875,307.18 +2428.600721,393.75,318.44 +2428.600721,407.8125,329.71 +2428.600721,421.875,341 +2428.600721,435.9375,352.31 +2428.600721,450,363.64 +2571.438467,-450,-336.63 +2571.438467,-435.9375,-326.05 +2571.438467,-421.875,-315.44 +2571.438467,-407.8125,-304.82 +2571.438467,-393.75,-294.19 +2571.438467,-379.6875,-283.53 +2571.438467,-365.625,-272.86 +2571.438467,-351.5625,-262.18 +2571.438467,-337.5,-251.47 +2571.438467,-323.4375,-240.75 +2571.438467,-309.375,-230.01 +2571.438467,-295.3125,-219.26 +2571.438467,-281.25,-208.49 +2571.438467,-267.1875,-197.7 +2571.438467,-253.125,-186.9 +2571.438467,-239.0625,-176.07 +2571.438467,-225,-165.24 +2571.438467,-210.9375,-154.38 +2571.438467,-196.875,-143.51 +2571.438467,-182.8125,-132.62 +2571.438467,-168.75,-121.71 +2571.438467,-154.6875,-110.79 +2571.438467,-140.625,-99.852 +2571.438467,-126.5625,-88.896 +2571.438467,-112.5,-77.923 +2571.438467,-98.4375,-66.933 +2571.438467,-84.375,-55.927 +2571.438467,-70.3125,-44.904 +2571.438467,-56.25,-33.863 +2571.438467,-42.1875,-22.806 +2571.438467,-28.125,-11.733 +2571.438467,-14.0625,-0.64219 +2571.438467,0,10.747 +2571.438467,14.0625,22.172 +2571.438467,28.125,33.614 +2571.438467,42.1875,45.073 +2571.438467,56.25,56.549 +2571.438467,70.3125,68.043 +2571.438467,84.375,79.553 +2571.438467,98.4375,91.081 +2571.438467,112.5,102.63 +2571.438467,126.5625,114.19 +2571.438467,140.625,125.77 +2571.438467,154.6875,137.36 +2571.438467,168.75,148.98 +2571.438467,182.8125,160.61 +2571.438467,196.875,172.25 +2571.438467,210.9375,183.92 +2571.438467,225,195.6 +2571.438467,239.0625,207.3 +2571.438467,253.125,219.02 +2571.438467,267.1875,230.75 +2571.438467,281.25,242.5 +2571.438467,295.3125,254.27 +2571.438467,309.375,266.05 +2571.438467,323.4375,277.86 +2571.438467,337.5,289.67 +2571.438467,351.5625,301.51 +2571.438467,365.625,313.36 +2571.438467,379.6875,325.23 +2571.438467,393.75,337.12 +2571.438467,407.8125,349.03 +2571.438467,421.875,360.95 +2571.438467,435.9375,372.89 +2571.438467,450,384.85 +2714.276213,-450,-355.44 +2714.276213,-435.9375,-344.23 +2714.276213,-421.875,-333.01 +2714.276213,-407.8125,-321.77 +2714.276213,-393.75,-310.52 +2714.276213,-379.6875,-299.24 +2714.276213,-365.625,-287.95 +2714.276213,-351.5625,-276.65 +2714.276213,-337.5,-265.32 +2714.276213,-323.4375,-253.98 +2714.276213,-309.375,-242.63 +2714.276213,-295.3125,-231.25 +2714.276213,-281.25,-219.86 +2714.276213,-267.1875,-208.45 +2714.276213,-253.125,-197.03 +2714.276213,-239.0625,-185.59 +2714.276213,-225,-174.13 +2714.276213,-210.9375,-162.66 +2714.276213,-196.875,-151.17 +2714.276213,-182.8125,-139.66 +2714.276213,-168.75,-128.13 +2714.276213,-154.6875,-116.59 +2714.276213,-140.625,-105.03 +2714.276213,-126.5625,-93.457 +2714.276213,-112.5,-81.865 +2714.276213,-98.4375,-70.256 +2714.276213,-84.375,-58.63 +2714.276213,-70.3125,-46.987 +2714.276213,-56.25,-35.328 +2714.276213,-42.1875,-23.652 +2714.276213,-28.125,-11.958 +2714.276213,-14.0625,-0.24855 +2714.276213,0,11.784 +2714.276213,14.0625,23.84 +2714.276213,28.125,35.914 +2714.276213,42.1875,48.005 +2714.276213,56.25,60.113 +2714.276213,70.3125,72.238 +2714.276213,84.375,84.381 +2714.276213,98.4375,96.54 +2714.276213,112.5,108.72 +2714.276213,126.5625,120.91 +2714.276213,140.625,133.12 +2714.276213,154.6875,145.35 +2714.276213,168.75,157.59 +2714.276213,182.8125,169.86 +2714.276213,196.875,182.14 +2714.276213,210.9375,194.43 +2714.276213,225,206.75 +2714.276213,239.0625,219.08 +2714.276213,253.125,231.43 +2714.276213,267.1875,243.79 +2714.276213,281.25,256.17 +2714.276213,295.3125,268.57 +2714.276213,309.375,280.99 +2714.276213,323.4375,293.42 +2714.276213,337.5,305.88 +2714.276213,351.5625,318.34 +2714.276213,365.625,330.83 +2714.276213,379.6875,343.33 +2714.276213,393.75,355.85 +2714.276213,407.8125,368.39 +2714.276213,421.875,380.94 +2714.276213,435.9375,393.51 +2714.276213,450,406.1 +2857.113959,-450,-374.2 +2857.113959,-435.9375,-362.38 +2857.113959,-421.875,-350.53 +2857.113959,-407.8125,-338.67 +2857.113959,-393.75,-326.8 +2857.113959,-379.6875,-314.91 +2857.113959,-365.625,-303 +2857.113959,-351.5625,-291.07 +2857.113959,-337.5,-279.13 +2857.113959,-323.4375,-267.17 +2857.113959,-309.375,-255.19 +2857.113959,-295.3125,-243.2 +2857.113959,-281.25,-231.19 +2857.113959,-267.1875,-219.16 +2857.113959,-253.125,-207.12 +2857.113959,-239.0625,-195.06 +2857.113959,-225,-182.98 +2857.113959,-210.9375,-170.89 +2857.113959,-196.875,-158.78 +2857.113959,-182.8125,-146.65 +2857.113959,-168.75,-134.51 +2857.113959,-154.6875,-122.35 +2857.113959,-140.625,-110.17 +2857.113959,-126.5625,-97.973 +2857.113959,-112.5,-85.761 +2857.113959,-98.4375,-73.533 +2857.113959,-84.375,-61.288 +2857.113959,-70.3125,-49.026 +2857.113959,-56.25,-36.747 +2857.113959,-42.1875,-24.451 +2857.113959,-28.125,-12.139 +2857.113959,-14.0625,0.19499 +2857.113959,0,12.866 +2857.113959,14.0625,25.555 +2857.113959,28.125,38.26 +2857.113959,42.1875,50.983 +2857.113959,56.25,63.723 +2857.113959,70.3125,76.48 +2857.113959,84.375,89.255 +2857.113959,98.4375,102.05 +2857.113959,112.5,114.85 +2857.113959,126.5625,127.68 +2857.113959,140.625,140.52 +2857.113959,154.6875,153.38 +2857.113959,168.75,166.26 +2857.113959,182.8125,179.15 +2857.113959,196.875,192.07 +2857.113959,210.9375,204.99 +2857.113959,225,217.94 +2857.113959,239.0625,230.9 +2857.113959,253.125,243.88 +2857.113959,267.1875,256.88 +2857.113959,281.25,269.89 +2857.113959,295.3125,282.93 +2857.113959,309.375,295.97 +2857.113959,323.4375,309.04 +2857.113959,337.5,322.12 +2857.113959,351.5625,335.22 +2857.113959,365.625,348.34 +2857.113959,379.6875,361.48 +2857.113959,393.75,374.63 +2857.113959,407.8125,387.8 +2857.113959,421.875,400.98 +2857.113959,435.9375,414.18 +2857.113959,450,427.4 +2988.582131,-450,-391.42 +2988.582131,-435.9375,-379.03 +2988.582131,-421.875,-366.61 +2988.582131,-407.8125,-354.19 +2988.582131,-393.75,-341.74 +2988.582131,-379.6875,-329.28 +2988.582131,-365.625,-316.8 +2988.582131,-351.5625,-304.3 +2988.582131,-337.5,-291.79 +2988.582131,-323.4375,-279.26 +2988.582131,-309.375,-266.72 +2988.582131,-295.3125,-254.15 +2988.582131,-281.25,-241.57 +2988.582131,-267.1875,-228.98 +2988.582131,-253.125,-216.36 +2988.582131,-239.0625,-203.73 +2988.582131,-225,-191.09 +2988.582131,-210.9375,-178.42 +2988.582131,-196.875,-165.74 +2988.582131,-182.8125,-153.04 +2988.582131,-168.75,-140.33 +2988.582131,-154.6875,-127.6 +2988.582131,-140.625,-114.85 +2988.582131,-126.5625,-102.09 +2988.582131,-112.5,-89.306 +2988.582131,-98.4375,-76.508 +2988.582131,-84.375,-63.693 +2988.582131,-70.3125,-50.861 +2988.582131,-56.25,-38.012 +2988.582131,-42.1875,-25.147 +2988.582131,-28.125,-12.264 +2988.582131,-14.0625,0.65077 +2988.582131,0,13.903 +2988.582131,14.0625,27.173 +2988.582131,28.125,40.46 +2988.582131,42.1875,53.764 +2988.582131,56.25,67.086 +2988.582131,70.3125,80.424 +2988.582131,84.375,93.78 +2988.582131,98.4375,107.15 +2988.582131,112.5,120.54 +2988.582131,126.5625,133.95 +2988.582131,140.625,147.37 +2988.582131,154.6875,160.81 +2988.582131,168.75,174.27 +2988.582131,182.8125,187.75 +2988.582131,196.875,201.24 +2988.582131,210.9375,214.75 +2988.582131,225,228.28 +2988.582131,239.0625,241.82 +2988.582131,253.125,255.38 +2988.582131,267.1875,268.96 +2988.582131,281.25,282.56 +2988.582131,295.3125,296.17 +2988.582131,309.375,309.8 +2988.582131,323.4375,323.45 +2988.582131,337.5,337.11 +2988.582131,351.5625,350.79 +2988.582131,365.625,364.49 +2988.582131,379.6875,378.21 +2988.582131,393.75,391.94 +2988.582131,407.8125,405.69 +2988.582131,421.875,419.46 +2988.582131,435.9375,433.24 +2988.582131,450,447.04 diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vemp b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vemp new file mode 100644 index 0000000000000000000000000000000000000000..c44a6288e8e2d77fd572780005b57752ff59f52a --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/GenericEM_47kW.vemp @@ -0,0 +1,74 @@ +n [rpm] , T_drive [Nm] , T_recuperation [Nm] +0,450,-450 +1000,450,-450 +996.3336701,450,-450 +1002.317656,448.965,-448.965 +1008.301642,446.29875,-446.29875 +1014.285628,443.66625,-443.66625 +1017.277621,442.36125,-442.36125 +1047.197551,429.71625,-429.71625 +1077.117481,417.78,-417.78 +1107.037411,406.485,-406.485 +1136.957341,395.7975,-395.7975 +1166.877271,385.65,-385.65 +1196.797201,376.00875,-376.00875 +1226.717131,366.82875,-366.82875 +1256.637061,358.09875,-358.09875 +1286.556991,349.77375,-349.77375 +1316.476922,341.82,-341.82 +1346.396852,334.22625,-334.22625 +1376.316782,326.95875,-326.95875 +1406.236712,320.00625,-320.00625 +1436.156642,313.335,-313.335 +1466.076572,306.945,-306.945 +1495.996502,300.8025,-300.8025 +1525.916432,294.9075,-294.9075 +1555.836362,289.2375,-289.2375 +1585.756292,283.78125,-283.78125 +1615.676222,278.51625,-278.51625 +1645.596152,273.45375,-273.45375 +1675.516082,268.57125,-268.57125 +1705.436012,263.8575,-263.8575 +1735.355942,259.3125,-259.3125 +1765.275872,254.91375,-254.91375 +1795.195802,250.6725,-250.6725 +1825.115732,246.555,-246.555 +1855.035662,242.58375,-242.58375 +1884.955592,238.73625,-238.73625 +1914.875522,235.00125,-235.00125 +1944.795452,231.39,-231.39 +1974.715382,227.88,-227.88 +2004.635312,224.4825,-224.4825 +2034.555242,221.175,-221.175 +2064.475172,217.96875,-217.96875 +2094.395102,214.86375,-214.86375 +2124.315032,211.8375,-211.8375 +2154.234962,208.89,-208.89 +2184.154892,206.0325,-206.0325 +2214.074823,203.2425,-203.2425 +2243.994753,200.53125,-200.53125 +2273.914683,197.89875,-197.89875 +2303.834613,195.3225,-195.3225 +2333.754543,192.825,-192.825 +2363.674473,190.38375,-190.38375 +2393.594403,187.99875,-187.99875 +2423.514333,185.68125,-185.68125 +2453.434263,183.42,-183.42 +2483.354193,181.20375,-181.20375 +2513.274123,179.04375,-179.04375 +2543.194053,176.94,-176.94 +2573.113983,174.88125,-174.88125 +2603.033913,172.87875,-172.87875 +2632.953843,170.91,-170.91 +2662.873773,168.98625,-168.98625 +2692.793703,167.1075,-167.1075 +2722.713633,165.27375,-165.27375 +2752.633563,163.485,-163.485 +2782.553493,161.71875,-161.71875 +2812.473423,159.9975,-159.9975 +2842.393353,158.32125,-158.32125 +2872.313283,156.6675,-156.6675 +2902.233213,155.0475,-155.0475 +2932.153143,153.4725,-153.4725 +2962.073073,151.92,-151.92 +2991.993003,150.40125,-150.40125 \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/HybridStrategyParams.vhctl b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/HybridStrategyParams.vhctl new file mode 100644 index 0000000000000000000000000000000000000000..e38a9d4f64e2f60dcec592f7cab47ebbcb228e7e --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/HybridStrategyParams.vhctl @@ -0,0 +1,17 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2020-08-04T07:11:24.0318977Z", + "AppVersion": "3", + "FileVersion": 1 + }, + "Body": { + "EquivalenceFactor": 2.5, + "MinSoC": 20.0, + "MaxSoC": 80.0, + "TargetSoC": 50.0, + "MinICEOnTime": 3, + "AuxBufferTime": 5, + "AuxBufferChgTime": 3 + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/SuperCap.vreess b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/SuperCap.vreess new file mode 100644 index 0000000000000000000000000000000000000000..306a580137c2eaf36820c47a05323032c3066ade --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/SuperCap.vreess @@ -0,0 +1,17 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2020-09-21T11:55:45.6900821Z", + "AppVersion": "3", + "FileVersion": 1 + }, + "Body": { + "SavedInDeclMode": false, + "REESSType": "SuperCap", + "Model": "Generic Manufacturer", + "Capacity": 37.0, + "InternalResistance": 0.02, + "U_min": 0.0, + "U_max": 330.0 + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Truck.vacc b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Truck.vacc new file mode 100644 index 0000000000000000000000000000000000000000..54e77864874d21d67e8f8d69a97b35c5c6031749 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group2SuperCapOvl/Truck.vacc @@ -0,0 +1,6 @@ +v [km/h],acc [m/s�],dec [m/s�] +0,1,-1 +25,1,-1 +50,0.642857143,-1 +60,0.5,-0.5 +120,0.5,-0.5 diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group5/GenericEMotor_140kW_936Nm.vem b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group5/GenericEMotor_140kW_936Nm.vem index e6c3abcfa852d968862713b51366de5ebecd0281..4361bec83fa16d99058599a0fca32037f5a7d36e 100644 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group5/GenericEMotor_140kW_936Nm.vem +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Hyb_P2_Group5/GenericEMotor_140kW_936Nm.vem @@ -7,11 +7,13 @@ }, "Body": { "SavedInDeclMode": false, - "Model": "Generic Electric Motor", + "Model": "Generic Electric Motor", "FullLoadCurve": "GenericEMotor_140kW_900Nm.vemp", - "DragCurve": "GenericDrag_140kW_936Nm.vemd", + "DragCurve": "GenericDrag_140kW_936Nm.vemd", "EfficiencyMap": "GenericMap_140kW_936Nm.vemo", - "Inertia" : 0.5 - - } + "Inertia": 0.5, + "ContinuousPower": 5000000, + "ThermalOverloadBuffer": 0.6, + "ThermalOverloadRecoveryFactor": 0.9 + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/Input CityBus 6x2_HEV_P2/Electric components/GenericEMotor_150kW_998Nm.vem b/VectoCore/VectoCoreTest/TestData/Hybrids/Input CityBus 6x2_HEV_P2/Electric components/GenericEMotor_150kW_998Nm.vem index 250fc8cd4986409390c5241b06fedf90a8cf99ad..10a7b40be0cfaaa5c9e532435581d07d4c635203 100644 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/Input CityBus 6x2_HEV_P2/Electric components/GenericEMotor_150kW_998Nm.vem +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/Input CityBus 6x2_HEV_P2/Electric components/GenericEMotor_150kW_998Nm.vem @@ -11,6 +11,9 @@ "FullLoadCurve": "GenericEMotor_150kW_998Nm.vemp", "DragCurve": "GenericDrag_150kW_998Nm.vemd", "EfficiencyMap": "GenericMap_150kW_998Nm.vemo", - "Inertia": 0.545 + "Inertia": 0.545, + "ContinuousPower": 5000000, + "ThermalOverloadBuffer": 0.6, + "ThermalOverloadRecoveryFactor": 0.9 } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Utils/MockBattery.cs b/VectoCore/VectoCoreTest/Utils/MockBattery.cs index e7bbf090235cb9dc95bcca9ee284efc1ca24753b..da546f91f30fad4aa94874f0507d17df44a2959b 100644 --- a/VectoCore/VectoCoreTest/Utils/MockBattery.cs +++ b/VectoCore/VectoCoreTest/Utils/MockBattery.cs @@ -4,22 +4,22 @@ using TUGraz.VectoCore.Models.Connector.Ports.Impl; using TUGraz.VectoCore.Models.SimulationComponent; namespace TUGraz.VectoCore.Tests.Utils { - public class MockBattery : IBattery, IBatteryPort, IElectricAuxConnecor + public class MockBattery : IElectricEnergyStorage, IElectricEnergyStoragePort, IElectricAuxConnecor { - public Volt InternalCellVoltage + public Volt InternalVoltage { get { return 640.SI<Volt>(); } } - public IBatteryResponse Request(Second absTime, Second dt, Watt powerdemand, bool dryRun = false) + public IRESSResponse Request(Second absTime, Second dt, Watt powerdemand, bool dryRun = false) { - return new BatteryResponseSuccess(this) + return new RESSResponseSuccess(this) { - MaxBatteryLoadDischarge = -InternalCellVoltage * MaxCurrent, + MaxDischargePower = -InternalVoltage * MaxCurrent, AbsTime = absTime, - BatteryLoss = 0.SI<Watt>(), - MaxBatteryLoadCharge = InternalCellVoltage * MaxCurrent, - BatteryPower = powerdemand, + LossPower = 0.SI<Watt>(), + MaxChargePower = InternalVoltage * MaxCurrent, + PowerDemand = powerdemand, SimulationInterval = dt, }; } @@ -46,7 +46,16 @@ namespace TUGraz.VectoCore.Tests.Utils { throw new System.NotImplementedException(); } - public IBatteryPort MainBatteryPort + public double MinSoC + { + get { return 0; } + } + public double MaxSoC + { + get { return 1; } + } + + public IElectricEnergyStoragePort MainBatteryPort { get { return this; } } @@ -61,14 +70,14 @@ namespace TUGraz.VectoCore.Tests.Utils { StateOfCharge = initialSoC; } - public void Connect(IBatteryAuxPort aux) + public void Connect(IElectricAuxPort aux) { throw new System.NotImplementedException(); } #region Implementation of IBatteryChargeProvider - public void Connect(IBatteryChargePort charger) + public void Connect(IElectricChargerPort charger) { throw new System.NotImplementedException(); } diff --git a/VectoCore/VectoCoreTest/Utils/MockBatteryInputData.cs b/VectoCore/VectoCoreTest/Utils/MockBatteryInputData.cs index da4e71a9bdac6dd974b9768c29eefc4f1c953be9..a300b4f5a2d12e57a27cabb4dcc2e6dc86376034 100644 --- a/VectoCore/VectoCoreTest/Utils/MockBatteryInputData.cs +++ b/VectoCore/VectoCoreTest/Utils/MockBatteryInputData.cs @@ -3,9 +3,7 @@ namespace TUGraz.VectoCore.Tests.Utils { public class MockBatteryInputData : IElectricStorageEngineeringInputData { - IBatteryPackDeclarationInputData IElectricStorageDeclarationInputData.BatteryPack => BatteryPack; - - public IBatteryPackEngineeringInputData BatteryPack { get; set; } + public IREESSPackInputData REESSPack { get; set; } public int Count { get; set; } } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Utils/MockElectricConsumer.cs b/VectoCore/VectoCoreTest/Utils/MockElectricConsumer.cs index b7dad2e02270fac6a04d9c9ce89138b54aaea112..010de0dde39cae5d26cc19ac2519ef85073aa608 100644 --- a/VectoCore/VectoCoreTest/Utils/MockElectricConsumer.cs +++ b/VectoCore/VectoCoreTest/Utils/MockElectricConsumer.cs @@ -2,7 +2,7 @@ using TUGraz.VectoCore.Models.Connector.Ports.Impl; namespace TUGraz.VectoCore.Tests.Utils { - public class MockElectricConsumer : IBatteryAuxPort + public class MockElectricConsumer : IElectricAuxPort { private Watt PowwerDemand; diff --git a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs index c5354de71445ca56b83a822db77580ff94fe7587..36315647e3bb1dc7bb0750eb31b967923b3a0807 100644 --- a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs +++ b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs @@ -194,8 +194,8 @@ namespace TUGraz.VectoCore.Tests.Utils public static BatteryData CreateBatteryData(string file, double initialSoC, int cnt = 1) { - var inputData = JSONInputDataFactory.ReadBatteryData(file, false); - return new EngineeringDataAdapter().CreateBatteryData(new MockBatteryInputData() {Count = cnt, BatteryPack = inputData}, initialSoC); + var inputData = JSONInputDataFactory.ReadREESSData(file, false); + return new EngineeringDataAdapter().CreateBatteryData(new MockBatteryInputData() {Count = cnt, REESSPack = inputData}, initialSoC); } } } diff --git a/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs b/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs index 3db922ff62a785849db6ea95b2704520e34762fa..d5c93e6b0237c6db1c8dcab81d2382851870b64f 100644 --- a/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs +++ b/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs @@ -144,7 +144,7 @@ namespace TUGraz.VectoCore.Tests.Utils return null; } - public IBatteryInfo BatteryInfo + public IRESSInfo BatteryInfo { get { throw new NotImplementedException(); } } @@ -159,6 +159,8 @@ namespace TUGraz.VectoCore.Tests.Utils get { return this; } } + public IHybridControllerInfo HybridControllerInfo { get; } + public Watt GearboxLoss() { throw new System.NotImplementedException(); diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 17e8e9b2b3f340e844cff37c8e82943f00808d54..df7f7736a6a0dce2e712be86aaf8faecf6d0e056 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -148,6 +148,7 @@ <Compile Include="Models\SimulationComponent\ElectricMotorTest.cs" /> <Compile Include="Models\SimulationComponent\EngineFanAuxTest.cs" /> <Compile Include="Models\SimulationComponent\GearboxShiftLossesTest.cs" /> + <Compile Include="Models\SimulationComponent\SuperCapTest.cs" /> <Compile Include="Utils\MockElectricConsumer.cs" /> <Compile Include="Utils\MockHybridControl.cs" /> <Compile Include="Utils\MockBattery.cs" /> @@ -241,9 +242,15 @@ <SubType>Designer</SubType> </None> <None Include="default.runsettings" /> + <None Include="TestData\BatteryElectric\GenericVehicleB4\BatteryElectricVehicle_Cont30kW.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\BatteryElectric\GenericVehicleB4\BatteryElectricVehicle.vveh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\BatteryElectric\GenericVehicleB4\BEV_ENG_Cont30kW.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\BatteryElectric\GenericVehicleB4\BEV_ENG.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> @@ -259,6 +266,9 @@ <None Include="TestData\BatteryElectric\GenericVehicleB4\GenericDrag_125kW_485Nm.vemd"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\BatteryElectric\GenericVehicleB4\GenericEMotor_125kW_485Nm_Cont30kW.vem"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\BatteryElectric\GenericVehicleB4\GenericEMotor_125kW_485Nm.vem"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> @@ -571,6 +581,69 @@ <None Include="TestData\Hybrids\GenericVehicle_Group5_P2\VKM\Engine_325kW_12.7l.veng"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\175kW.vfld"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\175kW.vmap"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\AMT_6.vgbx"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Axle_4x2.vtlm"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Class2_RigidTruck.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Class2_RigidTruck_ParHyb_SuperCap_Ovl_ENG.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Default.vrlm"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Engine_175kW_6.8l.veng"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Gear_1.vtlm"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Gear_2.vtlm"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Gear_3.vtlm"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Gear_4.vtlm"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Gear_5.vtlm"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Gear_6.vtlm"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\GenericEM_47kW.vem"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\GenericEM_47kW.vemd"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\GenericEM_47kW.vemo"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\GenericEM_47kW.vemp"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\HybridStrategyParams.vhctl"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\SuperCap.vreess"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\Truck.vacc"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Hybrids\Hyb_P2_Group2\175kW.vfld"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None>