diff --git a/VECTO/GUI/EngineForm.vb b/VECTO/GUI/EngineForm.vb index 5360a41ee5361cbb0d35ec4d3b584635b7fcd857..15f98cfe1b90db447af4a11a4163ff81c3ab39bf 100644 --- a/VECTO/GUI/EngineForm.vb +++ b/VECTO/GUI/EngineForm.vb @@ -166,7 +166,7 @@ Public Class EngineForm Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file), IEngineeringInputDataProvider) - engine = inputData.EngineInputData + engine = inputData.JobInputData.Vehicle.EngineInputData If Cfg.DeclMode <> engine.SavedInDeclarationMode Then @@ -555,4 +555,4 @@ Public Class EngineForm MsgBox("Failed to load file! " & ex.Message, MsgBoxStyle.Critical) End Try End Sub -End Class \ No newline at end of file +End Class diff --git a/VECTO/GUI/GearboxForm.vb b/VECTO/GUI/GearboxForm.vb index 35a3a71fe59787ce31f0dc481c7d08c68c6192a6..2594175e17b3011f43071aee38bd9d3b2f8d5aa4 100644 --- a/VECTO/GUI/GearboxForm.vb +++ b/VECTO/GUI/GearboxForm.vb @@ -1,1071 +1,1072 @@ -' Copyright 2017 European Union. -' Licensed under the EUPL (the 'Licence'); -' -' * You may not use this work except in compliance with the Licence. -' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl -' * Unless required by applicable law or agreed to in writing, -' software distributed under the Licence is distributed on an "AS IS" basis, -' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -' -' See the LICENSE.txt for the specific language governing permissions and limitations. -Imports System.Collections.Generic -Imports System.Drawing.Imaging -Imports System.Globalization -Imports System.IO -Imports System.Linq -Imports System.Windows.Forms.DataVisualization.Charting -Imports System.Xml.Linq -Imports TUGraz.VECTO.Input_Files -Imports TUGraz.VectoCommon.InputData -Imports TUGraz.VectoCommon.Models -Imports TUGraz.VectoCommon.Utils -Imports TUGraz.VectoCore.InputData.FileIO.JSON -Imports TUGraz.VectoCore.InputData.Impl -Imports TUGraz.VectoCore.InputData.Reader -Imports TUGraz.VectoCore.Models.Declaration -Imports TUGraz.VectoCore.Models.SimulationComponent.Data -Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Engine -Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox -Imports TUGraz.VectoCore.OutputData.FileIO -Imports TUGraz.VectoCore.OutputData.XML -Imports TUGraz.VectoCore.Utils - -''' <summary> -''' Gearbox Editor -''' </summary> -''' <remarks></remarks> -Public Class GearboxForm - Private Enum GearboxTbl - GearNr = 0 - 'TorqueConverter = 1 - Ratio = 1 - LossMapEfficiency = 2 - ShiftPolygons = 3 - MaxTorque = 4 - MaxSpeed = 5 - End Enum - - Private _gbxFile As String = "" - Public AutoSendTo As Boolean = False - Public JobDir As String = "" - Private _gearDialog As GearboxGearDialog - - Private _changed As Boolean = False - - 'Before closing Editor: Check if file was changed and ask to save. - Private Sub F_GBX_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing - If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then - e.Cancel = ChangeCheckCancel() - End If - End Sub - - 'Initialise. - Private Sub F_GBX_Load(sender As Object, e As EventArgs) Handles Me.Load - - _gearDialog = New GearboxGearDialog - - PnInertiaTI.Enabled = Not Cfg.DeclMode - GrGearShift.Enabled = Not Cfg.DeclMode - 'ChTCon.Enabled = Not Cfg.DeclMode - - CbGStype.Items.Clear() - CbGStype.ValueMember = "Value" - CbGStype.DisplayMember = "Label" - - If (Cfg.DeclMode) Then - CbGStype.DataSource = [Enum].GetValues(GetType(GearboxType)) _ - .Cast (Of GearboxType)() _ - .Where(Function(type) type.ManualTransmission() OrElse type = GearboxType.ATSerial) _ - .Select(Function(type) New With {Key .Value = type, .Label = type.GetLabel()}).ToList() - Else - CbGStype.DataSource = [Enum].GetValues(GetType(GearboxType)) _ - .Cast (Of GearboxType)() _ - .Where(Function(type) type.ManualTransmission() OrElse type.AutomaticTransmission()) _ - .Select(Function(type) New With {Key .Value = type, .Label = type.GetLabel()}).ToList() - End If - DeclInit() - - _changed = False - NewGbx() - End Sub - - 'Set generic values for Declaration mode. - Private Sub DeclInit() - Dim gbxType As GearboxType - Dim lv0 As ListViewItem - - If Not Cfg.DeclMode Then Exit Sub - - TBI_getr.Text = DeclarationData.Gearbox.Inertia.ToGUIFormat() 'cDeclaration.GbInertia - - gbxType = CType(CbGStype.SelectedValue, GearboxType) 'CType(Me.CbGStype.SelectedIndex, tGearbox) - - TbTracInt.Text = gbxType.TractionInterruption().ToGUIFormat() - TbMinTimeBetweenShifts.Text = DeclarationData.Gearbox.MinTimeBetweenGearshifts.ToGUIFormat() - 'cDeclaration.MinTimeBetweenGearshift(GStype) - - TbTqResv.Text = (DeclarationData.Gearbox.TorqueReserve*100).ToGUIFormat() ' cDeclaration.TqResv - TbTqResvStart.Text = (DeclarationData.Gearbox.TorqueReserveStart*100).ToGUIFormat() 'cDeclaration.TqResvStart - TbStartSpeed.Text = DeclarationData.Gearbox.StartSpeed.ToGUIFormat() 'cDeclaration.StartSpeed - TbStartAcc.Text = DeclarationData.Gearbox.StartAcceleration.ToGUIFormat() ' cDeclaration.StartAcc - - tbUpshiftMinAcceleration.Text = DeclarationData.Gearbox.UpshiftMinAcceleration.ToGUIFormat() - tbTCCUpshiftMinAcceleration.Text = "" - tbTCLUpshiftMinAcceleration.Text = "" - - tbDownshiftAfterUpshift.Text = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat() - tbUpshiftAfterDownshift.Text = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat() - - 'ChTCon.Checked = GStype.AutomaticTransmission() - For Each lv0 In LvGears.Items - lv0.SubItems(GearboxTbl.ShiftPolygons).Text = "" - Next - End Sub - -#Region "Toolbar" - - Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click - NewGbx() - End Sub - - Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click - If GearboxFileBrowser.OpenDialog(_gbxFile) Then - Try - OpenGbx(GearboxFileBrowser.Files(0), VehicleCategory.RigidTruck) - Catch ex As Exception - MsgBox("Failed to open Gearbox File: " + ex.Message) - End Try - End If - End Sub - - Private Sub ToolStripBtSave_Click(sender As Object, e As EventArgs) Handles ToolStripBtSave.Click - SaveOrSaveAs(False) - End Sub - - Private Sub ToolStripBtSaveAs_Click(sender As Object, e As EventArgs) Handles ToolStripBtSaveAs.Click - SaveOrSaveAs(True) - End Sub - - Private Sub ToolStripBtSendTo_Click(sender As Object, e As EventArgs) Handles ToolStripBtSendTo.Click - - If ChangeCheckCancel() Then Exit Sub - - If _gbxFile = "" Then - If MsgBox("Save file now?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - If Not SaveOrSaveAs(True) Then Exit Sub - Else - Exit Sub - End If - End If - - If Not VectoJobForm.Visible Then - JobDir = "" - VectoJobForm.Show() - VectoJobForm.VectoNew() - Else - VectoJobForm.WindowState = FormWindowState.Normal - End If - - VectoJobForm.TbGBX.Text = GetFilenameWithoutDirectory(_gbxFile, JobDir) - End Sub - - 'Help - Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click - If File.Exists(MyAppPath & "User Manual\help.html") Then - Dim defaultBrowserPath As String = BrowserUtils.GetDefaultBrowserPath() - Process.Start(defaultBrowserPath, - String.Format("""file://{0}{1}""", MyAppPath, "User Manual\help.html#gearbox-editor")) - Else - MsgBox("User Manual not found!", MsgBoxStyle.Critical) - End If - End Sub - -#End Region - - 'New file - Private Sub NewGbx() - 'Dim lvi As ListViewItem - - If ChangeCheckCancel() Then Exit Sub - - 'CbGStype.SelectedIndex = 0 - - TbName.Text = "" - TbTracInt.Text = "" - TBI_getr.Text = "" - - LvGears.Items.Clear() - - LvGears.Items.Add(CreateListviewItem("Axle", 1, "1", "", "", "")) - - 'Me.ChSkipGears.Checked = False 'set by CbGStype.SelectedIndexChanged - 'Me.ChShiftInside.Checked = False 'set by CbGStype.SelectedIndexChanged - TbTqResv.Text = (DeclarationData.Gearbox.TorqueReserve*100).ToGUIFormat() - TbMinTimeBetweenShifts.Text = DeclarationData.Gearbox.MinTimeBetweenGearshifts.ToGUIFormat() - TbTqResvStart.Text = (DeclarationData.Gearbox.TorqueReserveStart*100).ToGUIFormat() - TbStartSpeed.Text = DeclarationData.Gearbox.StartSpeed.ToGUIFormat() ' in m/s! - TbStartAcc.Text = DeclarationData.Gearbox.StartAcceleration.ToGUIFormat() - - tbUpshiftMinAcceleration.Text = DeclarationData.Gearbox.UpshiftMinAcceleration.ToGUIFormat() - tbTCLUpshiftMinAcceleration.Text = "" - tbTCCUpshiftMinAcceleration.Text = "" - - tbDownshiftAfterUpshift.Text = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat() - tbUpshiftAfterDownshift.Text = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat() - - 'ChTCon.Checked = False 'set by CbGStype.SelectedIndexChanged - TbTCfile.Text = "" - TbTCrefrpm.Text = "" - TbTCinertia.Text = "" - - DeclInit() - - _gbxFile = "" - Text = "GBX Editor" - LbStatus.Text = "" - - - _changed = False - Try - UpdatePic() - Catch - End Try - End Sub - - 'Open file - Public Sub OpenGbx(file As String, vehicleCategory As VehicleCategory) - - If ChangeCheckCancel() Then Exit Sub - - Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file), - IEngineeringInputDataProvider) - Dim gearbox As IGearboxEngineeringInputData = inputData.GearboxInputData - Dim axlegear As IAxleGearInputData = inputData.AxleGearInputData - - _vehicleCategory = vehicleCategory - - If Cfg.DeclMode <> gearbox.SavedInDeclarationMode Then - Select Case WrongMode() - Case 1 - Close() - MainForm.RbDecl.Checked = Not MainForm.RbDecl.Checked - MainForm.OpenVectoFile(file) - Case - 1 - Exit Sub - End Select - End If - - Dim basePath As String = Path.GetDirectoryName(file) - TbName.Text = gearbox.Model - TbTracInt.Text = gearbox.TractionInterruption.ToGUIFormat() - TBI_getr.Text = gearbox.Inertia.ToGUIFormat() - - LvGears.Items.Clear() - - Dim lossmap As String = "" - Try - lossmap = If(axlegear.LossMap Is Nothing, axlegear.Efficiency.ToGUIFormat(), - GetRelativePath(axlegear.LossMap.Source, basePath)) - Catch ex As Exception - End Try - - LvGears.Items.Add(CreateListviewItem("Axle", axlegear.Ratio, lossmap, "", "", "")) - - For Each gear As ITransmissionInputData In gearbox.Gears - lossmap = "" - Try - lossmap = If(gear.LossMap Is Nothing, gear.Efficiency.ToGUIFormat(), GetRelativePath(gear.LossMap.Source, basePath)) - Catch ex As Exception - - End Try - LvGears.Items.Add(CreateListviewItem(gear.Gear.ToString("00"), gear.Ratio, - lossmap, - If(gear.ShiftPolygon Is Nothing, "", GetRelativePath(gear.ShiftPolygon.Source, basePath)), - If(gear.MaxTorque Is Nothing, "", gear.MaxTorque.ToGUIFormat()), - If(gear.MaxInputSpeed Is Nothing, "", gear.MaxInputSpeed.AsRPM.ToGUIFormat()))) - Next - - TbTqResv.Text = (gearbox.TorqueReserve*100).ToGUIFormat() - TbMinTimeBetweenShifts.Text = gearbox.MinTimeBetweenGearshift.ToGUIFormat() - TbTqResvStart.Text = (gearbox.StartTorqueReserve*100).ToGUIFormat() - TbStartSpeed.Text = gearbox.StartSpeed.ToGUIFormat() - TbStartAcc.Text = gearbox.StartAcceleration.ToGUIFormat() - - Dim torqueConverter As ITorqueConverterEngineeringInputData = gearbox.TorqueConverter - If torqueConverter Is Nothing OrElse gearbox.Type.ManualTransmission() Then - TbTCfile.Text = "" - TbTCrefrpm.Text = "" - TbTCinertia.Text = "" - TBTCShiftPolygon.Text = "" - tbTCmaxSpeed.Text = "" - tbTCLUpshiftMinAcceleration.Text = "" - tbTCCUpshiftMinAcceleration.Text = "" - - Else - TbTCfile.Text = If(torqueConverter.TCData Is Nothing, "", GetRelativePath(torqueConverter.TCData.Source, basePath)) - TbTCrefrpm.Text = If(torqueConverter.ReferenceRPM Is Nothing, "", torqueConverter.ReferenceRPM.AsRPM.ToGUIFormat()) - TbTCinertia.Text = If(torqueConverter.Inertia Is Nothing, "", torqueConverter.Inertia.ToGUIFormat()) - TBTCShiftPolygon.Text = - If(torqueConverter.ShiftPolygon Is Nothing, "", GetRelativePath(torqueConverter.ShiftPolygon.Source, basePath)) - tbTCmaxSpeed.Text = - If(torqueConverter.MaxInputSpeed Is Nothing, "", torqueConverter.MaxInputSpeed.AsRPM.ToGUIFormat()) - tbTCLUpshiftMinAcceleration.Text = torqueConverter.CLUpshiftMinAcceleration.ToGUIFormat() - tbTCCUpshiftMinAcceleration.Text = torqueConverter.CCUpshiftMinAcceleration.ToGUIFormat() - End If - - tbUpshiftMinAcceleration.Text = gearbox.UpshiftMinAcceleration.ToGUIFormat() - tbDownshiftAfterUpshift.Text = gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat() - tbUpshiftAfterDownshift.Text = gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat() - - tbATShiftTime.Text = gearbox.PowershiftShiftTime.ToGUIFormat() - - CbGStype.SelectedValue = gearbox.Type - - - DeclInit() - - - GearboxFileBrowser.UpdateHistory(file) - Text = GetFilenameWithoutPath(file, True) - LbStatus.Text = "" - UpdateGearboxInfoText() - _gbxFile = file - Activate() - - _changed = False - Try - UpdatePic() - Catch - End Try - End Sub - - Private Function CreateListviewItem(gear As String, ratio As Double, getrMap As String, - shiftPolygon As String, maxTorque As String, maxSpeed As String) As ListViewItem - Dim retVal As ListViewItem = New ListViewItem(gear) - 'retVal.SubItems.Add(tc) - retVal.SubItems.Add(ratio.ToGUIFormat()) - retVal.SubItems.Add(getrMap) - retVal.SubItems.Add(shiftPolygon) - retVal.SubItems.Add(maxTorque) - retVal.SubItems.Add(maxSpeed) - Return retVal - End Function - - 'Save or Save As function = true if file is saved - Private Function SaveOrSaveAs(saveAs As Boolean) As Boolean - If _gbxFile = "" Or saveAs Then - If GearboxFileBrowser.SaveDialog(_gbxFile) Then - _gbxFile = GearboxFileBrowser.Files(0) - Else - Return False - End If - End If - Return SaveGbx(_gbxFile) - End Function - - 'Save file - Private Function SaveGbx(file As String) As Boolean - - Dim gearbox As Gearbox = FillGearboxData(file) - - - If Not gearbox.SaveFile Then - MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical) - Return False - End If - - If AutoSendTo Then - If VectoJobForm.Visible Then - If UCase(FileRepl(VectoJobForm.TbGBX.Text, JobDir)) <> UCase(file) Then _ - VectoJobForm.TbGBX.Text = GetFilenameWithoutDirectory(file, JobDir) - VectoJobForm.UpdatePic() - End If - End If - - GearboxFileBrowser.UpdateHistory(file) - Text = GetFilenameWithoutPath(file, True) - LbStatus.Text = "" - - _changed = False - - Return True - End Function - - Private Function FillGearboxData(file As String) As Gearbox - Dim gearbox As Gearbox - Dim i As Integer - - gearbox = New Gearbox - gearbox.FilePath = file - - gearbox.ModelName = TbName.Text - If Trim(gearbox.ModelName) = "" Then gearbox.ModelName = "Undefined" - - gearbox.TracIntrSi = TbTracInt.Text.ToDouble(0) - gearbox.GbxInertia = TBI_getr.Text.ToDouble(0) - - For i = 0 To LvGears.Items.Count - 1 - 'GBX0.IsTCgear.Add(Me.LvGears.Items(i).SubItems(GearboxTbl.TorqueConverter).Text = "on" And i > 0) - gearbox.GearRatios.Add(LvGears.Items(i).SubItems(GearboxTbl.Ratio).Text.ToDouble(0)) - gearbox.GearLossmaps.Add(New SubPath) - gearbox.GearLossMap(i) = LvGears.Items(i).SubItems(GearboxTbl.LossMapEfficiency).Text - gearbox.GearshiftFiles.Add(New SubPath) - gearbox.ShiftPolygonFile(i) = LvGears.Items(i).SubItems(GearboxTbl.ShiftPolygons).Text - 'GBX0.FldFiles.Add(New cSubPath) - 'GBX0.FldFile(i) = Me.LvGears.Items(i).SubItems(GearboxTbl.MaxTorque).Text - gearbox.MaxTorque.Add(LvGears.Items(i).SubItems(GearboxTbl.MaxTorque).Text) - gearbox.MaxSpeed.Add(LvGears.Items(i).SubItems(GearboxTbl.MaxSpeed).Text) - Next - - gearbox.TorqueResv = TbTqResv.Text.ToDouble(0) - gearbox.ShiftTime = TbMinTimeBetweenShifts.Text.ToDouble(0) - gearbox.TorqueResvStart = TbTqResvStart.Text.ToDouble(0) - gearbox.StartSpeed = TbStartSpeed.Text.ToDouble(0) - gearbox.StartAcc = TbStartAcc.Text.ToDouble(0) - - gearbox.Type = CType(CbGStype.SelectedValue, GearboxType) - - gearbox.Type.AutomaticTransmission() - gearbox.TorqueConverterFile = TbTCfile.Text - gearbox.TorqueConverterReferenceRpm = TbTCrefrpm.Text.ToDouble(0) - gearbox.TorqueConverterInertia = TbTCinertia.Text.ToDouble(0) - gearbox.TorqueConverterShiftPolygonFile = TBTCShiftPolygon.Text - gearbox.TorqueConverterMaxSpeed = tbTCmaxSpeed.Text.ToDouble(0) - - gearbox.DownshiftAfterUpshift = tbDownshiftAfterUpshift.Text.ToDouble(0) - gearbox.UpshiftAfterDownshift = tbUpshiftAfterDownshift.Text.ToDouble(0) - - gearbox.UpshiftMinAcceleration = tbUpshiftMinAcceleration.Text.ToDouble(0) - gearbox.TCLUpshiftMinAcceleration = tbTCLUpshiftMinAcceleration.Text.ToDouble(0) - gearbox.TCCUpshiftMinAcceleration = tbTCCUpshiftMinAcceleration.Text.ToDouble(0) - - gearbox.PSShiftTime = tbATShiftTime.Text.ToDouble(0) - Return gearbox - End Function - -#Region "Change Events" - - 'Change Status ändern |@@| Change Status change - Private Sub Change() - If Not _changed Then - LbStatus.Text = "Unsaved changes in current file" - _changed = True - End If - End Sub - - ' "Save changes ?" ...liefert True wenn User Vorgang abbricht |@@| Save changes? "... Returns True if user aborts - Private Function ChangeCheckCancel() As Boolean - - If _changed Then - Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel) - Case MsgBoxResult.Yes - Return Not SaveOrSaveAs(False) - Case MsgBoxResult.Cancel - Return True - Case Else 'MsgBoxResult.No - _changed = False - Return False - End Select - - Else - - Return False - - End If - End Function - - Private Sub TbName_TextChanged(sender As Object, e As EventArgs) _ - Handles TbName.TextChanged, TBI_getr.TextChanged, TbTracInt.TextChanged, TbTqResv.TextChanged, - TbMinTimeBetweenShifts.TextChanged, TbTqResvStart.TextChanged, TbStartSpeed.TextChanged, TbStartAcc.TextChanged, - TbTCfile.TextChanged, - tbTCCUpshiftMinAcceleration.TextChanged, tbTCLUpshiftMinAcceleration.TextChanged - Change() - End Sub - -#End Region - - 'Save and close - Private Sub ButOK_Click(sender As Object, e As EventArgs) Handles ButOK.Click - If SaveOrSaveAs(False) Then Close() - End Sub - - 'Cancel - Private Sub ButCancel_Click(sender As Object, e As EventArgs) Handles ButCancel.Click - Close() - End Sub - - 'Enable/Disable settings for specific transmission types - Private Sub CbGStype_SelectedIndexChanged(sender As Object, e As EventArgs) _ - Handles CbGStype.SelectedIndexChanged - Dim gStype As GearboxType = CType(CbGStype.SelectedValue, GearboxType) - - Change() - - 'ChTCon.Enabled = (GStype.AutomaticTransmission()) - gbTC.Enabled = gStype.AutomaticTransmission() - pnTcEngineering.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission() - gbTCAccMin.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission() - gbPowershiftLosses.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission() - TbStartAcc.Enabled = Not gStype.AutomaticTransmission() - TbStartSpeed.Enabled = Not gStype.AutomaticTransmission() - TbTqResv.Enabled = Not gStype.AutomaticTransmission() - GroupBox2.Enabled = Not gStype.AutomaticTransmission() - TBI_getr.Enabled = Not gStype.AutomaticTransmission() - TbTracInt.Enabled = Not gStype.AutomaticTransmission() - tbDownshiftAfterUpshift.Enabled = Not gStype.AutomaticTransmission() - tbUpshiftAfterDownshift.Enabled = Not gStype.AutomaticTransmission() - UpdateGearboxInfoText() - End Sub - - Private Sub UpdateGearboxInfoText() - Dim gStype As GearboxType = CType(CbGStype.SelectedValue, GearboxType) - - Dim text As String = "" - If (gStype = GearboxType.ATSerial) Then - If LvGears.Items.Count > 2 Then - Dim ratio1 As Double = LvGears.Items.Item(1).SubItems(GearboxTbl.Ratio).Text.ToDouble(0) - Dim ratio2 As Double = LvGears.Items.Item(2).SubItems(GearboxTbl.Ratio).Text.ToDouble(0) - - If ratio1/ratio2 >= DeclarationData.Gearbox.TorqueConverterSecondGearThreshold(_vehicleCategory) Then - text = "Torque converter is used in 1st and 2nd gear" - Else - text = "Torque converter is used in 1st gear only" - End If - End If - End If - lblGbxInfo.Text = text - End Sub - - - Private Sub LvGears_SelectedIndexChanged(sender As Object, e As EventArgs) _ - Handles LvGears.SelectedIndexChanged - Try - UpdatePic() - btExportVGBS.Enabled = True - Catch - btExportVGBS.Enabled = False - End Try - End Sub - -#Region "Gears" - - 'Gear-DoubleClick - Private Sub LvGears_MouseDoubleClick(ByVal sender As Object, ByVal e As MouseEventArgs) _ - Handles LvGears.MouseDoubleClick - EditGear() - End Sub - - 'Gear-KeyDown - Private Sub LvGears_KeyDown(sender As Object, e As KeyEventArgs) Handles LvGears.KeyDown - Select Case e.KeyCode - Case Keys.Delete, Keys.Back - RemoveGear(False) - Case Keys.Enter - EditGear() - End Select - End Sub - - 'Remove Gear Button - Private Sub BtClearGear_Click(sender As Object, e As EventArgs) Handles BtRemGear.Click - RemoveGear(False) - End Sub - - 'Add Gear button - Private Sub BtAddGear_Click(sender As Object, e As EventArgs) Handles BtAddGear.Click - AddGear() - LvGears.Items(LvGears.Items.Count - 1).Selected = True - EditGear() - End Sub - - 'Edit Gear - Private Sub EditGear() - - Do - - 'GearDia.ChIsTCgear.Enabled = (Me.ChTCon.Checked And Me.LvGears.SelectedIndices(0) > 0) - _gearDialog.GearboxType = CType(CbGStype.SelectedValue, GearboxType) - _gearDialog.PnShiftPoly.Enabled = (Not Cfg.DeclMode And LvGears.SelectedIndices(0) > 0) - _gearDialog.PnFld.Enabled = (LvGears.SelectedIndices(0) > 0) - _gearDialog.GbxPath = GetPath(_gbxFile) - _gearDialog.TbGear.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.GearNr).Text - _gearDialog.TbRatio.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text - _gearDialog.TbMapPath.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.LossMapEfficiency).Text - If LvGears.SelectedIndices(0) > 0 Then - _gearDialog.TbShiftPolyFile.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text - _gearDialog.TbMaxTorque.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxTorque).Text - _gearDialog.tbMaxSpeed.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxSpeed).Text - Else - _gearDialog.TbShiftPolyFile.Text = "" - _gearDialog.TbMaxTorque.Text = "" - _gearDialog.tbMaxSpeed.Text = "" - End If - - If LvGears.SelectedItems(0).Index = 0 Then - _gearDialog.BtPrevious.Enabled = False - Else - _gearDialog.BtPrevious.Enabled = True - End If - - If _gearDialog.ShowDialog = DialogResult.OK Then - 'Me.LvGears.SelectedItems(0).SubItems(GearboxTbl.TorqueConverter).Text = "-" - LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text = _gearDialog.TbRatio.Text - LvGears.SelectedItems(0).SubItems(GearboxTbl.LossMapEfficiency).Text = _gearDialog.TbMapPath.Text - LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text = _gearDialog.TbShiftPolyFile.Text - LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxTorque).Text = _gearDialog.TbMaxTorque.Text - LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxSpeed).Text = _gearDialog.tbMaxSpeed.Text - - UpdateGearboxInfoText() - Try - UpdatePic() - Catch - End Try - - Change() - - Else - - If LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text = "" Then RemoveGear(True) - - End If - - If _gearDialog.NextGear Then - If LvGears.Items.Count - 1 = LvGears.SelectedIndices(0) Then AddGear() - - LvGears.Items(LvGears.SelectedIndices(0) + 1).Selected = True - End If - - If _gearDialog.PreviousGear AndAlso LvGears.SelectedIndices(0) > 0 Then - LvGears.Items(LvGears.SelectedIndices(0) - 1).Selected = True - End If - - Loop Until Not (_gearDialog.NextGear OrElse _gearDialog.PreviousGear) - End Sub - - 'Add Gear - Private Sub AddGear() - Dim lvi As ListViewItem - - lvi = CreateListviewItem(LvGears.Items.Count.ToString("00"), 1, "", "", "", "") - - LvGears.Items.Add(lvi) - - lvi.EnsureVisible() - UpdateGearboxInfoText() - LvGears.Focus() - - 'Change() => NO! Change() is already handled by EditGear - End Sub - - 'Remove Gear - Private Sub RemoveGear(noChange As Boolean) - Dim i0 As Integer - Dim i As Integer - Dim lv0 As ListViewItem - - If LvGears.Items.Count < 2 Then Exit Sub - - If LvGears.SelectedItems.Count = 0 Then LvGears.Items(LvGears.Items.Count - 1).Selected = True - - i0 = LvGears.SelectedItems(0).Index - - If i0 = 0 Then Exit Sub 'Must not remove axle - - LvGears.SelectedItems(0).Remove() - - i = 0 - For Each lv0 In LvGears.Items - If lv0.SubItems(GearboxTbl.GearNr).Text = "Axle" Then Continue For - i += 1 - lv0.SubItems(GearboxTbl.GearNr).Text = i.ToString("00") - Next - - If i0 < LvGears.Items.Count Then - LvGears.Items(i0).Selected = True - LvGears.Items(i0).EnsureVisible() - End If - UpdateGearboxInfoText() - LvGears.Focus() - Try - UpdatePic() - Catch - End Try - - If Not noChange Then Change() - End Sub - - -#End Region - - -#Region "Open File Context Menu" - - Private _contextMenuFiles As String() - Private _vehicleCategory As VehicleCategory - - Private Sub OpenFiles(ParamArray files() As String) - - If files.Length = 0 Then Exit Sub - - _contextMenuFiles = files - - OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName - - CmOpenFile.Show(Windows.Forms.Cursor.Position) - End Sub - - Private Sub OpenWithToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles OpenWithToolStripMenuItem.Click - If Not FileOpenAlt(_contextMenuFiles(0)) Then MsgBox("Failed to open file!") - End Sub - - Private Sub ShowInFolderToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles ShowInFolderToolStripMenuItem.Click - If File.Exists(_contextMenuFiles(0)) Then - Try - Process.Start("explorer", "/select,""" & _contextMenuFiles(0) & "") - Catch ex As Exception - MsgBox("Failed to open file!") - End Try - Else - MsgBox("File not found!") - End If - End Sub - -#End Region - - - Private Sub UpdatePic() - - Dim path As String - - Dim chart As Chart - Dim s As Series - Dim a As ChartArea - Dim img As Bitmap - Dim gear As Integer - 'Dim fullLoadCurve As EngineFullLoadCurve = Nothing - 'Dim shiftOk As Boolean - - - PicBox.Image = Nothing - - Dim shiftPolygon As ShiftPolygon = Nothing - 'Dim engineFld As FullLoadCurve - - If LvGears.Items.Count <= 1 Then Exit Sub - - Try - If LvGears.SelectedItems.Count > 0 AndAlso LvGears.SelectedIndices(0) > 0 Then - path = FileRepl(LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile)) - gear = LvGears.SelectedIndices(0) - Else - path = FileRepl(LvGears.Items(1).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile)) - gear = 1 - End If - - If File.Exists(path) Then shiftPolygon = ShiftPolygonReader.ReadFromFile(path) - - Catch ex As Exception - - End Try - - chart = New Chart - chart.Width = PicBox.Width - chart.Height = PicBox.Height - - a = New ChartArea - - 'Shiftpolygons from file - - If Not shiftPolygon Is Nothing Then - s = New Series - s.Points.DataBindXY(shiftPolygon.Upshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(), - shiftPolygon.Upshift.Select(Function(x) x.Torque.Value()).ToArray()) - s.ChartType = SeriesChartType.FastLine - s.BorderWidth = 2 - s.Color = Color.DarkRed - s.Name = "Upshift curve" - chart.Series.Add(s) - - s = New Series - s.Points.DataBindXY(shiftPolygon.Downshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(), - shiftPolygon.Downshift.Select(Function(x) x.Torque.Value()).ToArray()) - s.ChartType = SeriesChartType.FastLine - s.BorderWidth = 2 - s.Color = Color.DarkRed - s.Name = "Downshift curve" - chart.Series.Add(s) - End If - - 'Dim vectoJob As VectoJob = New VectoJob() With {.FilePath = VectoJobForm.VECTOfile} - 'Dim vectoOk As Boolean = vectoJob.ReadFile() - Dim jobFile As String = VectoJobForm.VectoFile - If Not jobFile Is Nothing AndAlso File.Exists(jobFile) Then - - Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadJsonJob(jobFile), - IEngineeringInputDataProvider) - If (inputData Is Nothing) Then - Exit Sub - End If - Dim vehicle As IVehicleEngineeringInputData = inputData.VehicleInputData - 'inputData = TryCast(JSONInputDataFactory.ReadComponentData(vectoJob.PathEng(False)), IEngineeringInputDataProvider) - Dim engine As IEngineEngineeringInputData = inputData.EngineInputData - Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.FullLoadCurve) - - - s = New Series - s.Points.DataBindXY(engineFld.FullLoadEntries.Select(Function(x) x.EngineSpeed.AsRPM).ToArray(), - engineFld.FullLoadEntries.Select(Function(x) x.TorqueFullLoad.Value()).ToArray()) - s.ChartType = SeriesChartType.FastLine - s.BorderWidth = 2 - s.Color = Color.DarkBlue - s.Name = "Full load" - chart.Series.Add(s) - - If VectoJobForm.Visible AndAlso engine.IdleSpeed > 0 Then - 'If FLD0.Init(VectoJobForm.n_idle) Then - - 'Dim fullLoadCurve As FullLoadCurve = ConvertToFullLoadCurve(FLD0.LnU, FLD0.LTq) - Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items) - Dim shiftLines As ShiftPolygon = GetShiftLines(engine.IdleSpeed, engineFld, vehicle, gears, gear) - If (Not IsNothing(shiftLines)) Then - - - s = New Series - - 's.Points.DataBindXY(Shiftpoly.gs_nUup, Shiftpoly.gs_TqUp) - s.Points.DataBindXY( - shiftLines.Upshift.Select(Function(pt) pt.AngularSpeed.AsRPM). - ToArray(), - shiftLines.Upshift.Select(Function(pt) pt.Torque.Value()).ToArray()) - s.ChartType = SeriesChartType.FastLine - s.BorderWidth = 2 - s.Color = Color.DarkRed - s.BorderDashStyle = ChartDashStyle.Dash - s.Name = "Upshift curve (generic)" - chart.Series.Add(s) - - s = New Series - 's.Points.DataBindXY(Shiftpoly.gs_nUdown, Shiftpoly.gs_TqDown) - s.Points.DataBindXY( - shiftLines.Downshift.Select(Function(pt) pt.AngularSpeed.AsRPM) _ - .ToArray(), - shiftLines.Downshift.Select(Function(pt) pt.Torque.Value()).ToArray()) - s.ChartType = SeriesChartType.FastLine - s.BorderWidth = 2 - s.Color = Color.DarkRed - s.BorderDashStyle = ChartDashStyle.Dash - s.Name = "Downshift curve (generic)" - chart.Series.Add(s) - End If - 'End If - End If - End If - - a.Name = "main" - - a.AxisX.Title = "engine speed [1/min]" - a.AxisX.TitleFont = New Font("Helvetica", 10) - a.AxisX.LabelStyle.Font = New Font("Helvetica", 8) - a.AxisX.LabelAutoFitStyle = LabelAutoFitStyles.None - a.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dot - - a.AxisY.Title = "engine torque [Nm]" - a.AxisY.TitleFont = New Font("Helvetica", 10) - a.AxisY.LabelStyle.Font = New Font("Helvetica", 8) - a.AxisY.LabelAutoFitStyle = LabelAutoFitStyles.None - a.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dot - - a.AxisX.Minimum = 300 - a.BorderDashStyle = ChartDashStyle.Solid - a.BorderWidth = 1 - - a.BackColor = Color.GhostWhite - - chart.ChartAreas.Add(a) - - chart.Titles.Add("Gear " & gear & " shift polygons") - chart.Titles(0).Font = New Font("Helvetica", 12) - - chart.Update() - - img = New Bitmap(chart.Width, chart.Height, PixelFormat.Format32bppArgb) - chart.DrawToBitmap(img, New Rectangle(0, 0, PicBox.Width, PicBox.Height)) - - PicBox.Image = img - End Sub - - - Private Function GetShiftLines(ByVal idleSpeed As PerSecond, engineFullLoadCurve As EngineFullLoadCurve, - vehicle As IVehicleEngineeringInputData, gears As IList(Of ITransmissionInputData), ByVal gear As Integer) _ - As ShiftPolygon - Dim maxTqStr As String = LvGears.Items(gear).SubItems(GearboxTbl.MaxTorque).Text - Dim engine As CombustionEngineData = ConvertToEngineData(engineFullLoadCurve, idleSpeed, gear, - If(String.IsNullOrWhiteSpace(maxTqStr), Nothing, maxTqStr.ToDouble(0).SI (Of NewtonMeter))) - If gears.Count <= 1 Then - Return Nothing - End If - Dim rDyn As Meter = vehicle.DynamicTyreRadius - If rDyn.IsEqual(0) Then - If (vehicle.Axles.Count < 2) Then - Return Nothing - End If - rDyn = DeclarationData.Wheels.Lookup(vehicle.Axles(1).Wheels).DynamicTyreRadius - End If - If (rDyn.IsEqual(0)) Then - Return Nothing - End If - Dim shiftLines As ShiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon( - CType(CbGStype.SelectedValue, GearboxType), gear - 1, - engine.FullLoadCurves(CType(gear, UInteger)), gears, engine, - Double.Parse(LvGears.Items(0).SubItems(GearboxTbl.Ratio).Text, CultureInfo.InvariantCulture), - (rDyn)) - Return shiftLines - End Function - - Private Function ConvertToGears(gbx As ListView.ListViewItemCollection) As IList(Of ITransmissionInputData) - Dim retVal As List(Of ITransmissionInputData) = New List(Of ITransmissionInputData) - Dim value As Double - - For i As Integer = 1 To gbx.Count - 1 - If _ - gbx(i).SubItems(GearboxTbl.Ratio).Text <> "" AndAlso Double.TryParse(gbx(i).SubItems(GearboxTbl.Ratio).Text, value) _ - Then - Dim maxSpeed As PerSecond = - If _ - (String.IsNullOrWhiteSpace(gbx(i).SubItems(GearboxTbl.MaxSpeed).Text), Nothing, - gbx(i).SubItems(GearboxTbl.MaxSpeed).Text.ToDouble().RPMtoRad()) - retVal.Add( - New TransmissionInputData() _ - With {.Ratio = value, .MaxInputSpeed = maxSpeed}) - - End If - Next - Return retVal - End Function - - -#Region "Torque Converter" - - - 'Browse TC file - Private Sub BtTCfileBrowse_Click(sender As Object, e As EventArgs) Handles BtTCfileBrowse.Click - If TorqueConverterFileBrowser.OpenDialog(FileRepl(TbTCfile.Text, GetPath(_gbxFile))) Then - TbTCfile.Text = GetFilenameWithoutDirectory(TorqueConverterFileBrowser.Files(0), GetPath(_gbxFile)) - End If - End Sub - - 'Open TC file - Private Sub BtTCfileOpen_Click(sender As Object, e As EventArgs) Handles BtTCfileOpen.Click - OpenFiles(FileRepl(TbTCfile.Text, GetPath(_gbxFile))) - End Sub - - -#End Region - - Private Sub GroupBox1_Enter(sender As Object, e As EventArgs) Handles GroupBox1.Enter - End Sub - - Public Sub New() - - ' Dieser Aufruf ist für den Designer erforderlich. - InitializeComponent() - - ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. - End Sub - - Private Sub BtTCShiftFileBrowse_Click(sender As Object, e As EventArgs) Handles BtTCShiftFileBrowse.Click - If TorqueConverterShiftPolygonFileBrowser.OpenDialog(FileRepl(TBTCShiftPolygon.Text, GetPath(_gbxFile))) Then - TBTCShiftPolygon.Text = GetFilenameWithoutDirectory(TorqueConverterShiftPolygonFileBrowser.Files(0), - GetPath(_gbxFile)) - End If - End Sub - - Private Sub btnExportXML_Click(sender As Object, e As EventArgs) Handles btnExportXML.Click - If Not Cfg.DeclMode Then - MsgBox("XML Export is only supported in Declaration Mode") - Exit Sub - End If - If Not FolderFileBrowser.OpenDialog("") Then - Exit Sub - End If - Dim filePath As String = FolderFileBrowser.Files(0) - - Dim data As Gearbox = FillGearboxData(_gbxFile) - If (Cfg.DeclMode) Then - Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data, data) - export.Save(Path.Combine(filePath, data.ModelName + ".xml")) - Else - Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data, - data) - export.Save(Path.Combine(filePath, data.ModelName + ".xml")) - End If - End Sub - - Private Sub btnExportAxlGearXML_Click(sender As Object, e As EventArgs) Handles btnExportAxlGearXML.Click - If Not Cfg.DeclMode Then - MsgBox("XML Export is only supported in Declaration Mode") - Exit Sub - End If - If Not FolderFileBrowser.OpenDialog("") Then - Exit Sub - End If - Dim filePath As String = FolderFileBrowser.Files(0) - - Dim data As Gearbox = FillGearboxData(_gbxFile) - If (Cfg.DeclMode) Then - Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data) - export.Save(Path.Combine(filePath, data.ModelName + ".xml")) - Else - Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data) - export.Save(Path.Combine(filePath, data.ModelName + ".xml")) - End If - End Sub +' Copyright 2017 European Union. +' Licensed under the EUPL (the 'Licence'); +' +' * You may not use this work except in compliance with the Licence. +' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl +' * Unless required by applicable law or agreed to in writing, +' software distributed under the Licence is distributed on an "AS IS" basis, +' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +' +' See the LICENSE.txt for the specific language governing permissions and limitations. +Imports System.Collections.Generic +Imports System.Drawing.Imaging +Imports System.Globalization +Imports System.IO +Imports System.Linq +Imports System.Windows.Forms.DataVisualization.Charting +Imports System.Xml.Linq +Imports TUGraz.VECTO.Input_Files +Imports TUGraz.VectoCommon.InputData +Imports TUGraz.VectoCommon.Models +Imports TUGraz.VectoCommon.Utils +Imports TUGraz.VectoCore.InputData.FileIO.JSON +Imports TUGraz.VectoCore.InputData.Impl +Imports TUGraz.VectoCore.InputData.Reader +Imports TUGraz.VectoCore.Models.Declaration +Imports TUGraz.VectoCore.Models.SimulationComponent.Data +Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Engine +Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox +Imports TUGraz.VectoCore.OutputData.FileIO +Imports TUGraz.VectoCore.OutputData.XML +Imports TUGraz.VectoCore.Utils + +''' <summary> +''' Gearbox Editor +''' </summary> +''' <remarks></remarks> +Public Class GearboxForm + Private Enum GearboxTbl + GearNr = 0 + 'TorqueConverter = 1 + Ratio = 1 + LossMapEfficiency = 2 + ShiftPolygons = 3 + MaxTorque = 4 + MaxSpeed = 5 + End Enum + + Private _gbxFile As String = "" + Public AutoSendTo As Boolean = False + Public JobDir As String = "" + Private _gearDialog As GearboxGearDialog + + Private _changed As Boolean = False + + 'Before closing Editor: Check if file was changed and ask to save. + Private Sub F_GBX_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing + If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then + e.Cancel = ChangeCheckCancel() + End If + End Sub + + 'Initialise. + Private Sub F_GBX_Load(sender As Object, e As EventArgs) Handles Me.Load + + _gearDialog = New GearboxGearDialog + + PnInertiaTI.Enabled = Not Cfg.DeclMode + GrGearShift.Enabled = Not Cfg.DeclMode + 'ChTCon.Enabled = Not Cfg.DeclMode + + CbGStype.Items.Clear() + CbGStype.ValueMember = "Value" + CbGStype.DisplayMember = "Label" + + If (Cfg.DeclMode) Then + CbGStype.DataSource = [Enum].GetValues(GetType(GearboxType)) _ + .Cast(Of GearboxType)() _ + .Where(Function(type) type.ManualTransmission() OrElse type = GearboxType.ATSerial) _ + .Select(Function(type) New With {Key .Value = type, .Label = type.GetLabel()}).ToList() + Else + CbGStype.DataSource = [Enum].GetValues(GetType(GearboxType)) _ + .Cast(Of GearboxType)() _ + .Where(Function(type) type.ManualTransmission() OrElse type.AutomaticTransmission()) _ + .Select(Function(type) New With {Key .Value = type, .Label = type.GetLabel()}).ToList() + End If + DeclInit() + + _changed = False + NewGbx() + End Sub + + 'Set generic values for Declaration mode. + Private Sub DeclInit() + Dim gbxType As GearboxType + Dim lv0 As ListViewItem + + If Not Cfg.DeclMode Then Exit Sub + + TBI_getr.Text = DeclarationData.Gearbox.Inertia.ToGUIFormat() 'cDeclaration.GbInertia + + gbxType = CType(CbGStype.SelectedValue, GearboxType) 'CType(Me.CbGStype.SelectedIndex, tGearbox) + + TbTracInt.Text = gbxType.TractionInterruption().ToGUIFormat() + TbMinTimeBetweenShifts.Text = DeclarationData.Gearbox.MinTimeBetweenGearshifts.ToGUIFormat() + 'cDeclaration.MinTimeBetweenGearshift(GStype) + + TbTqResv.Text = (DeclarationData.Gearbox.TorqueReserve * 100).ToGUIFormat() ' cDeclaration.TqResv + TbTqResvStart.Text = (DeclarationData.Gearbox.TorqueReserveStart * 100).ToGUIFormat() 'cDeclaration.TqResvStart + TbStartSpeed.Text = DeclarationData.Gearbox.StartSpeed.ToGUIFormat() 'cDeclaration.StartSpeed + TbStartAcc.Text = DeclarationData.Gearbox.StartAcceleration.ToGUIFormat() ' cDeclaration.StartAcc + + tbUpshiftMinAcceleration.Text = DeclarationData.Gearbox.UpshiftMinAcceleration.ToGUIFormat() + tbTCCUpshiftMinAcceleration.Text = "" + tbTCLUpshiftMinAcceleration.Text = "" + + tbDownshiftAfterUpshift.Text = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat() + tbUpshiftAfterDownshift.Text = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat() + + 'ChTCon.Checked = GStype.AutomaticTransmission() + For Each lv0 In LvGears.Items + lv0.SubItems(GearboxTbl.ShiftPolygons).Text = "" + Next + End Sub + +#Region "Toolbar" + + Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click + NewGbx() + End Sub + + Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click + If GearboxFileBrowser.OpenDialog(_gbxFile) Then + Try + OpenGbx(GearboxFileBrowser.Files(0), VehicleCategory.RigidTruck) + Catch ex As Exception + MsgBox("Failed to open Gearbox File: " + ex.Message) + End Try + End If + End Sub + + Private Sub ToolStripBtSave_Click(sender As Object, e As EventArgs) Handles ToolStripBtSave.Click + SaveOrSaveAs(False) + End Sub + + Private Sub ToolStripBtSaveAs_Click(sender As Object, e As EventArgs) Handles ToolStripBtSaveAs.Click + SaveOrSaveAs(True) + End Sub + + Private Sub ToolStripBtSendTo_Click(sender As Object, e As EventArgs) Handles ToolStripBtSendTo.Click + + If ChangeCheckCancel() Then Exit Sub + + If _gbxFile = "" Then + If MsgBox("Save file now?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + If Not SaveOrSaveAs(True) Then Exit Sub + Else + Exit Sub + End If + End If + + If Not VectoJobForm.Visible Then + JobDir = "" + VectoJobForm.Show() + VectoJobForm.VectoNew() + Else + VectoJobForm.WindowState = FormWindowState.Normal + End If + + VectoJobForm.TbGBX.Text = GetFilenameWithoutDirectory(_gbxFile, JobDir) + End Sub + + 'Help + Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click + If File.Exists(MyAppPath & "User Manual\help.html") Then + Dim defaultBrowserPath As String = BrowserUtils.GetDefaultBrowserPath() + Process.Start(defaultBrowserPath, + String.Format("""file://{0}{1}""", MyAppPath, "User Manual\help.html#gearbox-editor")) + Else + MsgBox("User Manual not found!", MsgBoxStyle.Critical) + End If + End Sub + +#End Region + + 'New file + Private Sub NewGbx() + 'Dim lvi As ListViewItem + + If ChangeCheckCancel() Then Exit Sub + + 'CbGStype.SelectedIndex = 0 + + TbName.Text = "" + TbTracInt.Text = "" + TBI_getr.Text = "" + + LvGears.Items.Clear() + + LvGears.Items.Add(CreateListviewItem("Axle", 1, "1", "", "", "")) + + 'Me.ChSkipGears.Checked = False 'set by CbGStype.SelectedIndexChanged + 'Me.ChShiftInside.Checked = False 'set by CbGStype.SelectedIndexChanged + TbTqResv.Text = (DeclarationData.Gearbox.TorqueReserve * 100).ToGUIFormat() + TbMinTimeBetweenShifts.Text = DeclarationData.Gearbox.MinTimeBetweenGearshifts.ToGUIFormat() + TbTqResvStart.Text = (DeclarationData.Gearbox.TorqueReserveStart * 100).ToGUIFormat() + TbStartSpeed.Text = DeclarationData.Gearbox.StartSpeed.ToGUIFormat() ' in m/s! + TbStartAcc.Text = DeclarationData.Gearbox.StartAcceleration.ToGUIFormat() + + tbUpshiftMinAcceleration.Text = DeclarationData.Gearbox.UpshiftMinAcceleration.ToGUIFormat() + tbTCLUpshiftMinAcceleration.Text = "" + tbTCCUpshiftMinAcceleration.Text = "" + + tbDownshiftAfterUpshift.Text = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat() + tbUpshiftAfterDownshift.Text = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat() + + 'ChTCon.Checked = False 'set by CbGStype.SelectedIndexChanged + TbTCfile.Text = "" + TbTCrefrpm.Text = "" + TbTCinertia.Text = "" + + DeclInit() + + _gbxFile = "" + Text = "GBX Editor" + LbStatus.Text = "" + + + _changed = False + Try + UpdatePic() + Catch + End Try + End Sub + + 'Open file + Public Sub OpenGbx(file As String, vehicleCategory As VehicleCategory) + + If ChangeCheckCancel() Then Exit Sub + + Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file), + IEngineeringInputDataProvider) + Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle + Dim gearbox As IGearboxEngineeringInputData = vehicle.GearboxInputData + Dim axlegear As IAxleGearInputData = vehicle.AxleGearInputData + + _vehicleCategory = vehicleCategory + + If Cfg.DeclMode <> gearbox.SavedInDeclarationMode Then + Select Case WrongMode() + Case 1 + Close() + MainForm.RbDecl.Checked = Not MainForm.RbDecl.Checked + MainForm.OpenVectoFile(file) + Case -1 + Exit Sub + End Select + End If + + Dim basePath As String = Path.GetDirectoryName(file) + TbName.Text = gearbox.Model + TbTracInt.Text = gearbox.TractionInterruption.ToGUIFormat() + TBI_getr.Text = gearbox.Inertia.ToGUIFormat() + + LvGears.Items.Clear() + + Dim lossmap As String = "" + Try + lossmap = If(axlegear.LossMap Is Nothing, axlegear.Efficiency.ToGUIFormat(), + GetRelativePath(axlegear.LossMap.Source, basePath)) + Catch ex As Exception + End Try + + LvGears.Items.Add(CreateListviewItem("Axle", axlegear.Ratio, lossmap, "", "", "")) + + For Each gear As ITransmissionInputData In gearbox.Gears + lossmap = "" + Try + lossmap = If(gear.LossMap Is Nothing, gear.Efficiency.ToGUIFormat(), GetRelativePath(gear.LossMap.Source, basePath)) + Catch ex As Exception + + End Try + LvGears.Items.Add(CreateListviewItem(gear.Gear.ToString("00"), gear.Ratio, + lossmap, + If(gear.ShiftPolygon Is Nothing, "", GetRelativePath(gear.ShiftPolygon.Source, basePath)), + If(gear.MaxTorque Is Nothing, "", gear.MaxTorque.ToGUIFormat()), + If(gear.MaxInputSpeed Is Nothing, "", gear.MaxInputSpeed.AsRPM.ToGUIFormat()))) + Next + + TbTqResv.Text = (gearbox.TorqueReserve * 100).ToGUIFormat() + TbMinTimeBetweenShifts.Text = gearbox.MinTimeBetweenGearshift.ToGUIFormat() + TbTqResvStart.Text = (gearbox.StartTorqueReserve * 100).ToGUIFormat() + TbStartSpeed.Text = gearbox.StartSpeed.ToGUIFormat() + TbStartAcc.Text = gearbox.StartAcceleration.ToGUIFormat() + + Dim torqueConverter As ITorqueConverterEngineeringInputData = gearbox.TorqueConverter + If torqueConverter Is Nothing OrElse gearbox.Type.ManualTransmission() Then + TbTCfile.Text = "" + TbTCrefrpm.Text = "" + TbTCinertia.Text = "" + TBTCShiftPolygon.Text = "" + tbTCmaxSpeed.Text = "" + tbTCLUpshiftMinAcceleration.Text = "" + tbTCCUpshiftMinAcceleration.Text = "" + + Else + TbTCfile.Text = If(torqueConverter.TCData Is Nothing, "", GetRelativePath(torqueConverter.TCData.Source, basePath)) + TbTCrefrpm.Text = If(torqueConverter.ReferenceRPM Is Nothing, "", torqueConverter.ReferenceRPM.AsRPM.ToGUIFormat()) + TbTCinertia.Text = If(torqueConverter.Inertia Is Nothing, "", torqueConverter.Inertia.ToGUIFormat()) + TBTCShiftPolygon.Text = + If(torqueConverter.ShiftPolygon Is Nothing, "", GetRelativePath(torqueConverter.ShiftPolygon.Source, basePath)) + tbTCmaxSpeed.Text = + If(torqueConverter.MaxInputSpeed Is Nothing, "", torqueConverter.MaxInputSpeed.AsRPM.ToGUIFormat()) + tbTCLUpshiftMinAcceleration.Text = torqueConverter.CLUpshiftMinAcceleration.ToGUIFormat() + tbTCCUpshiftMinAcceleration.Text = torqueConverter.CCUpshiftMinAcceleration.ToGUIFormat() + End If + + tbUpshiftMinAcceleration.Text = gearbox.UpshiftMinAcceleration.ToGUIFormat() + tbDownshiftAfterUpshift.Text = gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat() + tbUpshiftAfterDownshift.Text = gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat() + + tbATShiftTime.Text = gearbox.PowershiftShiftTime.ToGUIFormat() + + CbGStype.SelectedValue = gearbox.Type + + + DeclInit() + + + GearboxFileBrowser.UpdateHistory(file) + Text = GetFilenameWithoutPath(file, True) + LbStatus.Text = "" + UpdateGearboxInfoText() + _gbxFile = file + Activate() + + _changed = False + Try + UpdatePic() + Catch + End Try + End Sub + + Private Function CreateListviewItem(gear As String, ratio As Double, getrMap As String, + shiftPolygon As String, maxTorque As String, maxSpeed As String) As ListViewItem + Dim retVal As ListViewItem = New ListViewItem(gear) + 'retVal.SubItems.Add(tc) + retVal.SubItems.Add(ratio.ToGUIFormat()) + retVal.SubItems.Add(getrMap) + retVal.SubItems.Add(shiftPolygon) + retVal.SubItems.Add(maxTorque) + retVal.SubItems.Add(maxSpeed) + Return retVal + End Function + + 'Save or Save As function = true if file is saved + Private Function SaveOrSaveAs(saveAs As Boolean) As Boolean + If _gbxFile = "" Or saveAs Then + If GearboxFileBrowser.SaveDialog(_gbxFile) Then + _gbxFile = GearboxFileBrowser.Files(0) + Else + Return False + End If + End If + Return SaveGbx(_gbxFile) + End Function + + 'Save file + Private Function SaveGbx(file As String) As Boolean + + Dim gearbox As Gearbox = FillGearboxData(file) + + + If Not gearbox.SaveFile Then + MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical) + Return False + End If + + If AutoSendTo Then + If VectoJobForm.Visible Then + If UCase(FileRepl(VectoJobForm.TbGBX.Text, JobDir)) <> UCase(file) Then _ + VectoJobForm.TbGBX.Text = GetFilenameWithoutDirectory(file, JobDir) + VectoJobForm.UpdatePic() + End If + End If + + GearboxFileBrowser.UpdateHistory(file) + Text = GetFilenameWithoutPath(file, True) + LbStatus.Text = "" + + _changed = False + + Return True + End Function + + Private Function FillGearboxData(file As String) As Gearbox + Dim gearbox As Gearbox + Dim i As Integer + + gearbox = New Gearbox + gearbox.FilePath = file + + gearbox.ModelName = TbName.Text + If Trim(gearbox.ModelName) = "" Then gearbox.ModelName = "Undefined" + + gearbox.TracIntrSi = TbTracInt.Text.ToDouble(0) + gearbox.GbxInertia = TBI_getr.Text.ToDouble(0) + + For i = 0 To LvGears.Items.Count - 1 + 'GBX0.IsTCgear.Add(Me.LvGears.Items(i).SubItems(GearboxTbl.TorqueConverter).Text = "on" And i > 0) + gearbox.GearRatios.Add(LvGears.Items(i).SubItems(GearboxTbl.Ratio).Text.ToDouble(0)) + gearbox.GearLossmaps.Add(New SubPath) + gearbox.GearLossMap(i) = LvGears.Items(i).SubItems(GearboxTbl.LossMapEfficiency).Text + gearbox.GearshiftFiles.Add(New SubPath) + gearbox.ShiftPolygonFile(i) = LvGears.Items(i).SubItems(GearboxTbl.ShiftPolygons).Text + 'GBX0.FldFiles.Add(New cSubPath) + 'GBX0.FldFile(i) = Me.LvGears.Items(i).SubItems(GearboxTbl.MaxTorque).Text + gearbox.MaxTorque.Add(LvGears.Items(i).SubItems(GearboxTbl.MaxTorque).Text) + gearbox.MaxSpeed.Add(LvGears.Items(i).SubItems(GearboxTbl.MaxSpeed).Text) + Next + + gearbox.TorqueResv = TbTqResv.Text.ToDouble(0) + gearbox.ShiftTime = TbMinTimeBetweenShifts.Text.ToDouble(0) + gearbox.TorqueResvStart = TbTqResvStart.Text.ToDouble(0) + gearbox.StartSpeed = TbStartSpeed.Text.ToDouble(0) + gearbox.StartAcc = TbStartAcc.Text.ToDouble(0) + + gearbox.Type = CType(CbGStype.SelectedValue, GearboxType) + + gearbox.Type.AutomaticTransmission() + gearbox.TorqueConverterFile = TbTCfile.Text + gearbox.TorqueConverterReferenceRpm = TbTCrefrpm.Text.ToDouble(0) + gearbox.TorqueConverterInertia = TbTCinertia.Text.ToDouble(0) + gearbox.TorqueConverterShiftPolygonFile = TBTCShiftPolygon.Text + gearbox.TorqueConverterMaxSpeed = tbTCmaxSpeed.Text.ToDouble(0) + + gearbox.DownshiftAfterUpshift = tbDownshiftAfterUpshift.Text.ToDouble(0) + gearbox.UpshiftAfterDownshift = tbUpshiftAfterDownshift.Text.ToDouble(0) + + gearbox.UpshiftMinAcceleration = tbUpshiftMinAcceleration.Text.ToDouble(0) + gearbox.TCLUpshiftMinAcceleration = tbTCLUpshiftMinAcceleration.Text.ToDouble(0) + gearbox.TCCUpshiftMinAcceleration = tbTCCUpshiftMinAcceleration.Text.ToDouble(0) + + gearbox.PSShiftTime = tbATShiftTime.Text.ToDouble(0) + Return gearbox + End Function + +#Region "Change Events" + + 'Change Status ändern |@@| Change Status change + Private Sub Change() + If Not _changed Then + LbStatus.Text = "Unsaved changes in current file" + _changed = True + End If + End Sub + + ' "Save changes ?" ...liefert True wenn User Vorgang abbricht |@@| Save changes? "... Returns True if user aborts + Private Function ChangeCheckCancel() As Boolean + + If _changed Then + Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel) + Case MsgBoxResult.Yes + Return Not SaveOrSaveAs(False) + Case MsgBoxResult.Cancel + Return True + Case Else 'MsgBoxResult.No + _changed = False + Return False + End Select + + Else + + Return False + + End If + End Function + + Private Sub TbName_TextChanged(sender As Object, e As EventArgs) _ + Handles TbName.TextChanged, TBI_getr.TextChanged, TbTracInt.TextChanged, TbTqResv.TextChanged, + TbMinTimeBetweenShifts.TextChanged, TbTqResvStart.TextChanged, TbStartSpeed.TextChanged, TbStartAcc.TextChanged, + TbTCfile.TextChanged, + tbTCCUpshiftMinAcceleration.TextChanged, tbTCLUpshiftMinAcceleration.TextChanged + Change() + End Sub + +#End Region + + 'Save and close + Private Sub ButOK_Click(sender As Object, e As EventArgs) Handles ButOK.Click + If SaveOrSaveAs(False) Then Close() + End Sub + + 'Cancel + Private Sub ButCancel_Click(sender As Object, e As EventArgs) Handles ButCancel.Click + Close() + End Sub + + 'Enable/Disable settings for specific transmission types + Private Sub CbGStype_SelectedIndexChanged(sender As Object, e As EventArgs) _ + Handles CbGStype.SelectedIndexChanged + Dim gStype As GearboxType = CType(CbGStype.SelectedValue, GearboxType) + + Change() + + 'ChTCon.Enabled = (GStype.AutomaticTransmission()) + gbTC.Enabled = gStype.AutomaticTransmission() + pnTcEngineering.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission() + gbTCAccMin.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission() + gbPowershiftLosses.Enabled = Not Cfg.DeclMode AndAlso gStype.AutomaticTransmission() + TbStartAcc.Enabled = Not gStype.AutomaticTransmission() + TbStartSpeed.Enabled = Not gStype.AutomaticTransmission() + TbTqResv.Enabled = Not gStype.AutomaticTransmission() + GroupBox2.Enabled = Not gStype.AutomaticTransmission() + TBI_getr.Enabled = Not gStype.AutomaticTransmission() + TbTracInt.Enabled = Not gStype.AutomaticTransmission() + tbDownshiftAfterUpshift.Enabled = Not gStype.AutomaticTransmission() + tbUpshiftAfterDownshift.Enabled = Not gStype.AutomaticTransmission() + UpdateGearboxInfoText() + End Sub + + Private Sub UpdateGearboxInfoText() + Dim gStype As GearboxType = CType(CbGStype.SelectedValue, GearboxType) + + Dim text As String = "" + If (gStype = GearboxType.ATSerial) Then + If LvGears.Items.Count > 2 Then + Dim ratio1 As Double = LvGears.Items.Item(1).SubItems(GearboxTbl.Ratio).Text.ToDouble(0) + Dim ratio2 As Double = LvGears.Items.Item(2).SubItems(GearboxTbl.Ratio).Text.ToDouble(0) + + If ratio1 / ratio2 >= DeclarationData.Gearbox.TorqueConverterSecondGearThreshold(_vehicleCategory) Then + text = "Torque converter is used in 1st and 2nd gear" + Else + text = "Torque converter is used in 1st gear only" + End If + End If + End If + lblGbxInfo.Text = text + End Sub + + + Private Sub LvGears_SelectedIndexChanged(sender As Object, e As EventArgs) _ + Handles LvGears.SelectedIndexChanged + Try + UpdatePic() + btExportVGBS.Enabled = True + Catch + btExportVGBS.Enabled = False + End Try + End Sub + +#Region "Gears" + + 'Gear-DoubleClick + Private Sub LvGears_MouseDoubleClick(ByVal sender As Object, ByVal e As MouseEventArgs) _ + Handles LvGears.MouseDoubleClick + EditGear() + End Sub + + 'Gear-KeyDown + Private Sub LvGears_KeyDown(sender As Object, e As KeyEventArgs) Handles LvGears.KeyDown + Select Case e.KeyCode + Case Keys.Delete, Keys.Back + RemoveGear(False) + Case Keys.Enter + EditGear() + End Select + End Sub + + 'Remove Gear Button + Private Sub BtClearGear_Click(sender As Object, e As EventArgs) Handles BtRemGear.Click + RemoveGear(False) + End Sub + + 'Add Gear button + Private Sub BtAddGear_Click(sender As Object, e As EventArgs) Handles BtAddGear.Click + AddGear() + LvGears.Items(LvGears.Items.Count - 1).Selected = True + EditGear() + End Sub + + 'Edit Gear + Private Sub EditGear() + + Do + + 'GearDia.ChIsTCgear.Enabled = (Me.ChTCon.Checked And Me.LvGears.SelectedIndices(0) > 0) + _gearDialog.GearboxType = CType(CbGStype.SelectedValue, GearboxType) + _gearDialog.PnShiftPoly.Enabled = (Not Cfg.DeclMode And LvGears.SelectedIndices(0) > 0) + _gearDialog.PnFld.Enabled = (LvGears.SelectedIndices(0) > 0) + _gearDialog.GbxPath = GetPath(_gbxFile) + _gearDialog.TbGear.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.GearNr).Text + _gearDialog.TbRatio.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text + _gearDialog.TbMapPath.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.LossMapEfficiency).Text + If LvGears.SelectedIndices(0) > 0 Then + _gearDialog.TbShiftPolyFile.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text + _gearDialog.TbMaxTorque.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxTorque).Text + _gearDialog.tbMaxSpeed.Text = LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxSpeed).Text + Else + _gearDialog.TbShiftPolyFile.Text = "" + _gearDialog.TbMaxTorque.Text = "" + _gearDialog.tbMaxSpeed.Text = "" + End If + + If LvGears.SelectedItems(0).Index = 0 Then + _gearDialog.BtPrevious.Enabled = False + Else + _gearDialog.BtPrevious.Enabled = True + End If + + If _gearDialog.ShowDialog = DialogResult.OK Then + 'Me.LvGears.SelectedItems(0).SubItems(GearboxTbl.TorqueConverter).Text = "-" + LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text = _gearDialog.TbRatio.Text + LvGears.SelectedItems(0).SubItems(GearboxTbl.LossMapEfficiency).Text = _gearDialog.TbMapPath.Text + LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text = _gearDialog.TbShiftPolyFile.Text + LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxTorque).Text = _gearDialog.TbMaxTorque.Text + LvGears.SelectedItems(0).SubItems(GearboxTbl.MaxSpeed).Text = _gearDialog.tbMaxSpeed.Text + + UpdateGearboxInfoText() + Try + UpdatePic() + Catch + End Try + + Change() + + Else + + If LvGears.SelectedItems(0).SubItems(GearboxTbl.Ratio).Text = "" Then RemoveGear(True) + + End If + + If _gearDialog.NextGear Then + If LvGears.Items.Count - 1 = LvGears.SelectedIndices(0) Then AddGear() + + LvGears.Items(LvGears.SelectedIndices(0) + 1).Selected = True + End If + + If _gearDialog.PreviousGear AndAlso LvGears.SelectedIndices(0) > 0 Then + LvGears.Items(LvGears.SelectedIndices(0) - 1).Selected = True + End If + + Loop Until Not (_gearDialog.NextGear OrElse _gearDialog.PreviousGear) + End Sub + + 'Add Gear + Private Sub AddGear() + Dim lvi As ListViewItem + + lvi = CreateListviewItem(LvGears.Items.Count.ToString("00"), 1, "", "", "", "") + + LvGears.Items.Add(lvi) + + lvi.EnsureVisible() + UpdateGearboxInfoText() + LvGears.Focus() + + 'Change() => NO! Change() is already handled by EditGear + End Sub + + 'Remove Gear + Private Sub RemoveGear(noChange As Boolean) + Dim i0 As Integer + Dim i As Integer + Dim lv0 As ListViewItem + + If LvGears.Items.Count < 2 Then Exit Sub + + If LvGears.SelectedItems.Count = 0 Then LvGears.Items(LvGears.Items.Count - 1).Selected = True + + i0 = LvGears.SelectedItems(0).Index + + If i0 = 0 Then Exit Sub 'Must not remove axle + + LvGears.SelectedItems(0).Remove() + + i = 0 + For Each lv0 In LvGears.Items + If lv0.SubItems(GearboxTbl.GearNr).Text = "Axle" Then Continue For + i += 1 + lv0.SubItems(GearboxTbl.GearNr).Text = i.ToString("00") + Next + + If i0 < LvGears.Items.Count Then + LvGears.Items(i0).Selected = True + LvGears.Items(i0).EnsureVisible() + End If + UpdateGearboxInfoText() + LvGears.Focus() + Try + UpdatePic() + Catch + End Try + + If Not noChange Then Change() + End Sub + + +#End Region + + +#Region "Open File Context Menu" + + Private _contextMenuFiles As String() + Private _vehicleCategory As VehicleCategory + + Private Sub OpenFiles(ParamArray files() As String) + + If files.Length = 0 Then Exit Sub + + _contextMenuFiles = files + + OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName + + CmOpenFile.Show(Windows.Forms.Cursor.Position) + End Sub + + Private Sub OpenWithToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles OpenWithToolStripMenuItem.Click + If Not FileOpenAlt(_contextMenuFiles(0)) Then MsgBox("Failed to open file!") + End Sub + + Private Sub ShowInFolderToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles ShowInFolderToolStripMenuItem.Click + If File.Exists(_contextMenuFiles(0)) Then + Try + Process.Start("explorer", "/select,""" & _contextMenuFiles(0) & "") + Catch ex As Exception + MsgBox("Failed to open file!") + End Try + Else + MsgBox("File not found!") + End If + End Sub + +#End Region + + + Private Sub UpdatePic() + + Dim path As String + + Dim chart As Chart + Dim s As Series + Dim a As ChartArea + Dim img As Bitmap + Dim gear As Integer + 'Dim fullLoadCurve As EngineFullLoadCurve = Nothing + 'Dim shiftOk As Boolean + + + PicBox.Image = Nothing + + Dim shiftPolygon As ShiftPolygon = Nothing + 'Dim engineFld As FullLoadCurve + + If LvGears.Items.Count <= 1 Then Exit Sub + + Try + If LvGears.SelectedItems.Count > 0 AndAlso LvGears.SelectedIndices(0) > 0 Then + path = FileRepl(LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile)) + gear = LvGears.SelectedIndices(0) + Else + path = FileRepl(LvGears.Items(1).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile)) + gear = 1 + End If + + If File.Exists(path) Then shiftPolygon = ShiftPolygonReader.ReadFromFile(path) + + Catch ex As Exception + + End Try + + chart = New Chart + chart.Width = PicBox.Width + chart.Height = PicBox.Height + + a = New ChartArea + + 'Shiftpolygons from file + + If Not shiftPolygon Is Nothing Then + s = New Series + s.Points.DataBindXY(shiftPolygon.Upshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(), + shiftPolygon.Upshift.Select(Function(x) x.Torque.Value()).ToArray()) + s.ChartType = SeriesChartType.FastLine + s.BorderWidth = 2 + s.Color = Color.DarkRed + s.Name = "Upshift curve" + chart.Series.Add(s) + + s = New Series + s.Points.DataBindXY(shiftPolygon.Downshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(), + shiftPolygon.Downshift.Select(Function(x) x.Torque.Value()).ToArray()) + s.ChartType = SeriesChartType.FastLine + s.BorderWidth = 2 + s.Color = Color.DarkRed + s.Name = "Downshift curve" + chart.Series.Add(s) + End If + + 'Dim vectoJob As VectoJob = New VectoJob() With {.FilePath = VectoJobForm.VECTOfile} + 'Dim vectoOk As Boolean = vectoJob.ReadFile() + Dim jobFile As String = VectoJobForm.VectoFile + If Not jobFile Is Nothing AndAlso File.Exists(jobFile) Then + + Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadJsonJob(jobFile), + IEngineeringInputDataProvider) + If (inputData Is Nothing) Then + Exit Sub + End If + Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle + 'inputData = TryCast(JSONInputDataFactory.ReadComponentData(vectoJob.PathEng(False)), IEngineeringInputDataProvider) + Dim engine As IEngineEngineeringInputData = inputData.JobInputData.Vehicle.EngineInputData + Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.FullLoadCurve) + + + s = New Series + s.Points.DataBindXY(engineFld.FullLoadEntries.Select(Function(x) x.EngineSpeed.AsRPM).ToArray(), + engineFld.FullLoadEntries.Select(Function(x) x.TorqueFullLoad.Value()).ToArray()) + s.ChartType = SeriesChartType.FastLine + s.BorderWidth = 2 + s.Color = Color.DarkBlue + s.Name = "Full load" + chart.Series.Add(s) + + If VectoJobForm.Visible AndAlso engine.IdleSpeed > 0 Then + 'If FLD0.Init(VectoJobForm.n_idle) Then + + 'Dim fullLoadCurve As FullLoadCurve = ConvertToFullLoadCurve(FLD0.LnU, FLD0.LTq) + Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items) + Dim shiftLines As ShiftPolygon = GetShiftLines(engine.IdleSpeed, engineFld, vehicle, gears, gear) + If (Not IsNothing(shiftLines)) Then + + + s = New Series + + 's.Points.DataBindXY(Shiftpoly.gs_nUup, Shiftpoly.gs_TqUp) + s.Points.DataBindXY( + shiftLines.Upshift.Select(Function(pt) pt.AngularSpeed.AsRPM). + ToArray(), + shiftLines.Upshift.Select(Function(pt) pt.Torque.Value()).ToArray()) + s.ChartType = SeriesChartType.FastLine + s.BorderWidth = 2 + s.Color = Color.DarkRed + s.BorderDashStyle = ChartDashStyle.Dash + s.Name = "Upshift curve (generic)" + chart.Series.Add(s) + + s = New Series + 's.Points.DataBindXY(Shiftpoly.gs_nUdown, Shiftpoly.gs_TqDown) + s.Points.DataBindXY( + shiftLines.Downshift.Select(Function(pt) pt.AngularSpeed.AsRPM) _ + .ToArray(), + shiftLines.Downshift.Select(Function(pt) pt.Torque.Value()).ToArray()) + s.ChartType = SeriesChartType.FastLine + s.BorderWidth = 2 + s.Color = Color.DarkRed + s.BorderDashStyle = ChartDashStyle.Dash + s.Name = "Downshift curve (generic)" + chart.Series.Add(s) + End If + 'End If + End If + End If + + a.Name = "main" + + a.AxisX.Title = "engine speed [1/min]" + a.AxisX.TitleFont = New Font("Helvetica", 10) + a.AxisX.LabelStyle.Font = New Font("Helvetica", 8) + a.AxisX.LabelAutoFitStyle = LabelAutoFitStyles.None + a.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dot + + a.AxisY.Title = "engine torque [Nm]" + a.AxisY.TitleFont = New Font("Helvetica", 10) + a.AxisY.LabelStyle.Font = New Font("Helvetica", 8) + a.AxisY.LabelAutoFitStyle = LabelAutoFitStyles.None + a.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dot + + a.AxisX.Minimum = 300 + a.BorderDashStyle = ChartDashStyle.Solid + a.BorderWidth = 1 + + a.BackColor = Color.GhostWhite + + chart.ChartAreas.Add(a) + + chart.Titles.Add("Gear " & gear & " shift polygons") + chart.Titles(0).Font = New Font("Helvetica", 12) + + chart.Update() + + img = New Bitmap(chart.Width, chart.Height, PixelFormat.Format32bppArgb) + chart.DrawToBitmap(img, New Rectangle(0, 0, PicBox.Width, PicBox.Height)) + + PicBox.Image = img + End Sub + + + Private Function GetShiftLines(ByVal idleSpeed As PerSecond, engineFullLoadCurve As EngineFullLoadCurve, + vehicle As IVehicleEngineeringInputData, gears As IList(Of ITransmissionInputData), ByVal gear As Integer) _ + As ShiftPolygon + Dim maxTqStr As String = LvGears.Items(gear).SubItems(GearboxTbl.MaxTorque).Text + Dim engine As CombustionEngineData = ConvertToEngineData(engineFullLoadCurve, idleSpeed, gear, + If(String.IsNullOrWhiteSpace(maxTqStr), Nothing, maxTqStr.ToDouble(0).SI(Of NewtonMeter))) + If gears.Count <= 1 Then + Return Nothing + End If + Dim rDyn As Meter = vehicle.DynamicTyreRadius + If rDyn.IsEqual(0) Then + If (vehicle.Axles.Count < 2) Then + Return Nothing + End If + rDyn = DeclarationData.Wheels.Lookup(vehicle.Axles(1).Wheels).DynamicTyreRadius + End If + If (rDyn.IsEqual(0)) Then + Return Nothing + End If + Dim shiftLines As ShiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon( + CType(CbGStype.SelectedValue, GearboxType), gear - 1, + engine.FullLoadCurves(CType(gear, UInteger)), gears, engine, + Double.Parse(LvGears.Items(0).SubItems(GearboxTbl.Ratio).Text, CultureInfo.InvariantCulture), + (rDyn)) + Return shiftLines + End Function + + Private Function ConvertToGears(gbx As ListView.ListViewItemCollection) As IList(Of ITransmissionInputData) + Dim retVal As List(Of ITransmissionInputData) = New List(Of ITransmissionInputData) + Dim value As Double + + For i As Integer = 1 To gbx.Count - 1 + If _ + gbx(i).SubItems(GearboxTbl.Ratio).Text <> "" AndAlso Double.TryParse(gbx(i).SubItems(GearboxTbl.Ratio).Text, value) _ + Then + Dim maxSpeed As PerSecond = + If _ + (String.IsNullOrWhiteSpace(gbx(i).SubItems(GearboxTbl.MaxSpeed).Text), Nothing, + gbx(i).SubItems(GearboxTbl.MaxSpeed).Text.ToDouble().RPMtoRad()) + retVal.Add( + New TransmissionInputData() _ + With {.Ratio = value, .MaxInputSpeed = maxSpeed}) + + End If + Next + Return retVal + End Function + + +#Region "Torque Converter" + + + 'Browse TC file + Private Sub BtTCfileBrowse_Click(sender As Object, e As EventArgs) Handles BtTCfileBrowse.Click + If TorqueConverterFileBrowser.OpenDialog(FileRepl(TbTCfile.Text, GetPath(_gbxFile))) Then + TbTCfile.Text = GetFilenameWithoutDirectory(TorqueConverterFileBrowser.Files(0), GetPath(_gbxFile)) + End If + End Sub + + 'Open TC file + Private Sub BtTCfileOpen_Click(sender As Object, e As EventArgs) Handles BtTCfileOpen.Click + OpenFiles(FileRepl(TbTCfile.Text, GetPath(_gbxFile))) + End Sub + + +#End Region + + Private Sub GroupBox1_Enter(sender As Object, e As EventArgs) Handles GroupBox1.Enter + End Sub + + Public Sub New() + + ' Dieser Aufruf ist für den Designer erforderlich. + InitializeComponent() + + ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + End Sub + + Private Sub BtTCShiftFileBrowse_Click(sender As Object, e As EventArgs) Handles BtTCShiftFileBrowse.Click + If TorqueConverterShiftPolygonFileBrowser.OpenDialog(FileRepl(TBTCShiftPolygon.Text, GetPath(_gbxFile))) Then + TBTCShiftPolygon.Text = GetFilenameWithoutDirectory(TorqueConverterShiftPolygonFileBrowser.Files(0), + GetPath(_gbxFile)) + End If + End Sub + + Private Sub btnExportXML_Click(sender As Object, e As EventArgs) Handles btnExportXML.Click + If Not Cfg.DeclMode Then + MsgBox("XML Export is only supported in Declaration Mode") + Exit Sub + End If + If Not FolderFileBrowser.OpenDialog("") Then + Exit Sub + End If + Dim filePath As String = FolderFileBrowser.Files(0) + + Dim data As Gearbox = FillGearboxData(_gbxFile) + If (Cfg.DeclMode) Then + Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data, data) + export.Save(Path.Combine(filePath, data.ModelName + ".xml")) + Else + Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data, + data) + export.Save(Path.Combine(filePath, data.ModelName + ".xml")) + End If + End Sub + + Private Sub btnExportAxlGearXML_Click(sender As Object, e As EventArgs) Handles btnExportAxlGearXML.Click + If Not Cfg.DeclMode Then + MsgBox("XML Export is only supported in Declaration Mode") + Exit Sub + End If + If Not FolderFileBrowser.OpenDialog("") Then + Exit Sub + End If + Dim filePath As String = FolderFileBrowser.Files(0) + + Dim data As Gearbox = FillGearboxData(_gbxFile) + If (Cfg.DeclMode) Then + Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data) + export.Save(Path.Combine(filePath, data.ModelName + ".xml")) + Else + Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data) + export.Save(Path.Combine(filePath, data.ModelName + ".xml")) + End If + End Sub Private Sub btExportVGBS_Click(sender As Object, e As EventArgs) Handles btExportVGBS.Click - If LvGears.Items.Count <= 1 Then Exit Sub - - Dim shiftPolygon As ShiftPolygon = Nothing - Dim path As String - Dim gear As Integer - Try - If LvGears.SelectedItems.Count > 0 AndAlso LvGears.SelectedIndices(0) > 0 Then - path = FileRepl(LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile)) - gear = LvGears.SelectedIndices(0) - Else - path = FileRepl(LvGears.Items(1).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile)) - gear = 1 - End If - - If File.Exists(path) Then shiftPolygon = ShiftPolygonReader.ReadFromFile(path) - - If Not shiftPolygon Is Nothing Then - ShiftPolygonExport.WriteShiftPolygon(shiftPolygon, path & ".vgbs") - End If - Catch ex As Exception - End Try - - Dim jobFile As String = VectoJobForm.VectoFile - If Not jobFile Is Nothing AndAlso File.Exists(jobFile) Then - Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadJsonJob(jobFile), - IEngineeringInputDataProvider) - If (inputData Is Nothing) Then - Exit Sub - End If - - Dim vehicle As IVehicleEngineeringInputData = inputData.VehicleInputData - Dim engine As IEngineEngineeringInputData = inputData.EngineInputData - Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.FullLoadCurve) - - If VectoJobForm.Visible AndAlso engine.IdleSpeed > 0 Then - Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items) - Dim shiftLines As ShiftPolygon = GetShiftLines(engine.IdleSpeed, engineFld, vehicle, gears, gear) - If (Not IsNothing(shiftLines)) Then - ShiftPolygonExport.WriteShiftPolygon(shiftLines, jobFile & "_Gear " & gear & ".vgbs") - End If - End If + If LvGears.Items.Count <= 1 Then Exit Sub + + Dim shiftPolygon As ShiftPolygon = Nothing + Dim path As String + Dim gear As Integer + Try + If LvGears.SelectedItems.Count > 0 AndAlso LvGears.SelectedIndices(0) > 0 Then + path = FileRepl(LvGears.SelectedItems(0).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile)) + gear = LvGears.SelectedIndices(0) + Else + path = FileRepl(LvGears.Items(1).SubItems(GearboxTbl.ShiftPolygons).Text, GetPath(_gbxFile)) + gear = 1 + End If + + If File.Exists(path) Then shiftPolygon = ShiftPolygonReader.ReadFromFile(path) + + If Not shiftPolygon Is Nothing Then + ShiftPolygonExport.WriteShiftPolygon(shiftPolygon, path & ".vgbs") + End If + Catch ex As Exception + End Try + + Dim jobFile As String = VectoJobForm.VectoFile + If Not jobFile Is Nothing AndAlso File.Exists(jobFile) Then + Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadJsonJob(jobFile), + IEngineeringInputDataProvider) + If (inputData Is Nothing) Then + Exit Sub + End If + + Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle + Dim engine As IEngineEngineeringInputData = vehicle.EngineInputData + Dim engineFld As EngineFullLoadCurve = FullLoadCurveReader.Create(engine.FullLoadCurve) + + If VectoJobForm.Visible AndAlso engine.IdleSpeed > 0 Then + Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items) + Dim shiftLines As ShiftPolygon = GetShiftLines(engine.IdleSpeed, engineFld, vehicle, gears, gear) + If (Not IsNothing(shiftLines)) Then + ShiftPolygonExport.WriteShiftPolygon(shiftLines, jobFile & "_Gear " & gear & ".vgbs") + End If + End If End If End Sub -End Class - - +End Class + + diff --git a/VECTO/GUI/VectoEPTPJobForm.vb b/VECTO/GUI/VectoEPTPJobForm.vb index 0eb10face8ff43adf3c70063df086952fbba5553..fc6e84a975977697c13d9fc0cdd75218180ff89c 100644 --- a/VECTO/GUI/VectoEPTPJobForm.vb +++ b/VECTO/GUI/VectoEPTPJobForm.vb @@ -52,8 +52,7 @@ Public Class VectoEPTPJobForm 'Initialise form Private Sub F02_GEN_Load(sender As Object, e As EventArgs) Handles Me.Load - Dim x As Integer - + _auxDialog = New VehicleAuxiliariesDialog @@ -195,14 +194,14 @@ Public Class VectoEPTPJobForm 'Files ----------------------------- - TbVEH.Text = GetRelativePath(inputData.VehicleInputData.Source, _basePath) + TbVEH.Text = GetRelativePath(inputData.JobInputData.Vehicle.Source, _basePath) 'Start/Stop Dim driver As IDriverEngineeringInputData = inputData.DriverInputData Dim declarationInput As IDeclarationInputDataProvider = CType(inputData, IDeclarationInputDataProvider) - Dim auxInput As IAuxiliariesDeclarationInputData = declarationInput.AuxiliaryInputData() + Dim auxInput As IAuxiliariesDeclarationInputData = declarationInput.JobInputData.Vehicle.AuxiliaryInputData() LvAux.Items.Clear() Dim entry As IAuxiliaryDeclarationInputData @@ -255,7 +254,7 @@ Public Class VectoEPTPJobForm Dim message As String = String.Empty - Dim vectoJob As VectoJob = New VectoJob + Dim vectoJob As VectoEPTPJob = New VectoEPTPJob vectoJob.FilePath = file 'Files ------------------------------------------------- ----------------- @@ -268,24 +267,7 @@ Public Class VectoEPTPJobForm vectoJob.CycleFiles.Add(sb) Next - For Each lv0 As ListViewItem In LvAux.Items - Dim auxEntry As VectoJob.AuxEntry = New VectoJob.AuxEntry - - If Cfg.DeclMode Then - auxEntry.TechnologyList.Clear() - auxEntry.TechnologyList.AddRange( - lv0.SubItems(AuxViewColumns.AuxInputOrTech).Text.Split(";"c).Select( - Function(x) Trim(x))) - Else - auxEntry.Path.Init(GetPath(file), lv0.SubItems(AuxViewColumns.AuxInputOrTech).Text) - End If - - auxEntry.Type = AuxiliaryTypeHelper.ParseKey(lv0.SubItems(AuxViewColumns.AuxID).Text) - vectoJob.AuxPaths.Add(lv0.SubItems(AuxViewColumns.AuxID).Text, auxEntry) - Next - '------------------------------------------------------------ - 'SAVE If Not vectoJob.SaveFile Then MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical) @@ -504,9 +486,7 @@ Public Class VectoEPTPJobForm End Sub Private Sub UpdateGearboxPic(ByRef chartArea As Chart) - Dim s As Series - Dim i As Integer - + Dim gearbox As IGearboxEngineeringInputData = Nothing Dim vehicleFile As String = If(Not String.IsNullOrWhiteSpace(VectoFile), Path.Combine(Path.GetDirectoryName(VectoFile), TbVEH.Text), TbVEH.Text) @@ -514,7 +494,7 @@ Public Class VectoEPTPJobForm Try Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(vehicleFile), IEngineeringInputDataProvider) - gearbox = inputData.GearboxInputData + gearbox = inputData.JobInputData.Vehicle.GearboxInputData Catch End Try End If @@ -537,7 +517,7 @@ Public Class VectoEPTPJobForm Try Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(vehicleFile), IEngineeringInputDataProvider) - engine = inputData.EngineInputData + engine = inputData.JobInputData.Vehicle.EngineInputData Catch Return End Try @@ -613,7 +593,7 @@ Public Class VectoEPTPJobForm Try Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(vehicleFile), IEngineeringInputDataProvider) - vehicle = inputData.VehicleInputData + vehicle = inputData.JobInputData.Vehicle Catch End Try End If diff --git a/VECTO/GUI/VectoJobForm.vb b/VECTO/GUI/VectoJobForm.vb index 06575c2357f8fea6438aa55ee1a64878a029b010..8add30eee942d8790109646ef7bebefb50fc231f 100644 --- a/VECTO/GUI/VectoJobForm.vb +++ b/VECTO/GUI/VectoJobForm.vb @@ -301,7 +301,7 @@ Public Class VectoJobForm If Not Trim(f) = "" Then Dim vehInput As IVehicleDeclarationInputData = CType(JSONInputDataFactory.ReadComponentData(FileRepl(TbVEH.Text, GetPath(VectoFile))), - IEngineeringInputDataProvider).VehicleInputData + IEngineeringInputDataProvider).JobInputData.Vehicle vehicleType = vehInput.VehicleCategory End If @@ -423,7 +423,7 @@ Public Class VectoJobForm 'Update Form If inputData.JobInputData().EngineOnlyMode Then - TbENG.Text = GetRelativePath(inputData.EngineInputData.Source, _basePath) + TbENG.Text = GetRelativePath(inputData.JobInputData.Vehicle.EngineInputData.Source, _basePath) CbEngOnly.Checked = True Try Dim sb As ICycleData @@ -440,9 +440,9 @@ Public Class VectoJobForm CbEngOnly.Checked = False CheckEngOnly() 'Files ----------------------------- - TbVEH.Text = GetRelativePath(inputData.VehicleInputData.Source, _basePath) - TbENG.Text = GetRelativePath(inputData.EngineInputData.Source, _basePath) - TbGBX.Text = GetRelativePath(inputData.GearboxInputData.Source, _basePath) + TbVEH.Text = GetRelativePath(inputData.JobInputData.Vehicle.Source, _basePath) + TbENG.Text = GetRelativePath(inputData.JobInputData.Vehicle.EngineInputData.Source, _basePath) + TbGBX.Text = GetRelativePath(inputData.JobInputData.Vehicle.GearboxInputData.Source, _basePath) 'Start/Stop Dim driver As IDriverEngineeringInputData = inputData.DriverInputData @@ -452,7 +452,7 @@ Public Class VectoJobForm 'AA-TB 'Try and Select any previously selected Auxiliary Type Dim declarationInput As IDeclarationInputDataProvider = CType(inputData, IDeclarationInputDataProvider) - Dim auxInput As IAuxiliariesDeclarationInputData = declarationInput.AuxiliaryInputData() + Dim auxInput As IAuxiliariesDeclarationInputData = declarationInput.JobInputData.Vehicle.AuxiliaryInputData() cboAdvancedAuxiliaries.SelectedIndex = 0 cboAdvancedAuxiliaries.Enabled = False @@ -472,7 +472,7 @@ Public Class VectoJobForm If(driver.AccelerationCurve Is Nothing, "", GetRelativePath(driver.AccelerationCurve.Source, _basePath)) cboAdvancedAuxiliaries.Enabled = True - Dim auxInput As IAuxiliariesEngineeringInputData = inputData.AuxiliaryInputData() + Dim auxInput As IAuxiliariesEngineeringInputData = inputData.JobInputData.Vehicle.AuxiliaryInputData() For Each item As AdvancedAuxiliary In cboAdvancedAuxiliaries.Items If _ AuxiliaryModelHelper.Parse(item.AssemblyName) = auxInput.AuxiliaryAssembly AndAlso @@ -1144,7 +1144,7 @@ lbDlog: Try Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(gearboxFile), IEngineeringInputDataProvider) - gearbox = inputData.GearboxInputData + gearbox = inputData.JobInputData.Vehicle.GearboxInputData Catch End Try End If @@ -1228,7 +1228,7 @@ lbDlog: Try Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(engineFile), IEngineeringInputDataProvider) - engine = inputData.EngineInputData + engine = inputData.JobInputData.Vehicle.EngineInputData Catch Return End Try @@ -1304,7 +1304,7 @@ lbDlog: Try Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(vehicleFile), IEngineeringInputDataProvider) - vehicle = inputData.VehicleInputData + vehicle = inputData.JobInputData.Vehicle Catch End Try End If diff --git a/VECTO/GUI/VehicleForm.vb b/VECTO/GUI/VehicleForm.vb index d33f796457485e8908ecd75bb540a91617cc65d5..bb1c333c168a6844606e54265e971311ec7ab580 100644 --- a/VECTO/GUI/VehicleForm.vb +++ b/VECTO/GUI/VehicleForm.vb @@ -338,11 +338,11 @@ Public Class VehicleForm Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file), IEngineeringInputDataProvider) - Dim vehicle As IVehicleEngineeringInputData = inputData.VehicleInputData - Dim airdrag As IAirdragEngineeringInputData = inputData.AirdragInputData - Dim retarder As IRetarderInputData = inputData.RetarderInputData - Dim angledrive As IAngledriveInputData = inputData.AngledriveInputData - Dim pto As IPTOTransmissionInputData = inputData.PTOTransmissionInputData + Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle + Dim airdrag As IAirdragEngineeringInputData = inputData.JobInputData.Vehicle.AirdragInputData + Dim retarder As IRetarderInputData = inputData.JobInputData.Vehicle.RetarderInputData + Dim angledrive As IAngledriveInputData = inputData.JobInputData.Vehicle.AngledriveInputData + Dim pto As IPTOTransmissionInputData = inputData.JobInputData.Vehicle.PTOTransmissionInputData If Cfg.DeclMode <> vehicle.SavedInDeclarationMode Then Select Case WrongMode() diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index e2b8f1ba39c5d71867055e137be4d48cd6049ad7..7e7114271978b843958bfd2eb2a92587d0222212 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -208,7 +208,7 @@ Public Class Gearbox Dim vehiclecategory As VehicleCategory Dim rdyn As Meter = 0.5.SI(Of Meter)() Try - vehiclecategory = inputData.VehicleInputData.VehicleCategory + vehiclecategory = inputData.JobInputData.Vehicle.VehicleCategory Catch ex As Exception vehiclecategory = vehiclecategory.RigidTruck End Try @@ -217,7 +217,7 @@ Public Class Gearbox Try - engine = doa.CreateEngineData(inputData.EngineInputData, Nothing, gearbox, New List(Of ITorqueLimitInputData)) + engine = doa.CreateEngineData(inputData.JobInputData.Vehicle.EngineInputData, Nothing, gearbox, New List(Of ITorqueLimitInputData)) Catch engine = GetDefaultEngine(gearbox.Gears) End Try @@ -227,7 +227,7 @@ Public Class Gearbox Else Dim doa As EngineeringDataAdapter = New EngineeringDataAdapter() Try - engine = doa.CreateEngineData(inputData.EngineInputData, gearbox, New List(Of ITorqueLimitInputData)) + engine = doa.CreateEngineData(inputData.JobInputData.Vehicle.EngineInputData, gearbox, New List(Of ITorqueLimitInputData)) Catch engine = GetDefaultEngine(gearbox.Gears) End Try diff --git a/VECTO/Input Files/VectoEPTPJob.vb b/VECTO/Input Files/VectoEPTPJob.vb index f1069cbb6f1d5a72c6b77c1f33adb7a3d9f64698..94f1e7d4173076a287b988db27bc7d5dcc299cfe 100644 --- a/VECTO/Input Files/VectoEPTPJob.vb +++ b/VECTO/Input Files/VectoEPTPJob.vb @@ -1,16 +1,35 @@  Imports System.Collections.Generic +Imports System.ComponentModel.DataAnnotations Imports System.IO +Imports System.Linq +Imports System.Xml Imports TUGraz.VECTO.Input_Files +Imports TUGraz.VectoCommon.Exceptions Imports TUGraz.VectoCommon.InputData +Imports TUGraz.VectoCommon.Models +Imports TUGraz.VectoCommon.Utils +Imports TUGraz.VectoCore.InputData.FileIO.JSON +Imports TUGraz.VectoCore.InputData.FileIO.XML.Declaration +Imports TUGraz.VectoCore.InputData.Impl +Imports TUGraz.VectoCore.Models.Declaration +Imports TUGraz.VectoCore.Utils +<CustomValidation(GetType(VectoJob), "ValidateJob")> Public Class VectoEPTPJob - Implements IEPTPInputDataProvider + Implements IEPTPInputDataProvider, IEPTPJobInputData + Private _sFilePath As String Private _myPath As String Private ReadOnly _vehicleFile As SubPath + Public ReadOnly CycleFiles As List(Of SubPath) + + + Public Sub New() + CycleFiles = New List(Of SubPath) + End Sub Public Property FilePath As String Get @@ -41,13 +60,89 @@ Public Class VectoEPTPJob End Property - Public ReadOnly Property Vehicle As IDeclarationInputDataProvider Implements IEPTPInputDataProvider.Vehicle + Public Function SaveFile() As Boolean + Dim validationResults As IList(Of ValidationResult) = + Validate(ExecutionMode.Declaration, 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 Vecto Job") + Return False + End If + + Try + Dim writer As JSONFileWriter = JSONFileWriter.Instance + writer.SaveJob(Me, _sFilePath) + Catch ex As Exception + MsgBox("Failed to save Job file: " + ex.Message) + Return False + End Try + Return True + End Function + + ' ReSharper disable once UnusedMember.Global -- used by Validation + Public Shared Function ValidateJob(vectoJob As VectoEPTPJob, validationContext As ValidationContext) As ValidationResult + Dim modeService As VectoValidationModeServiceContainer = + TryCast(validationContext.GetService(GetType(VectoValidationModeServiceContainer)), + VectoValidationModeServiceContainer) + Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) + + Return ValidateVehicleJob(vectoJob, mode) + End Function + + Private Shared Function ValidateVehicleJob(vectoJob As VectoEPTPJob, mode As ExecutionMode) As ValidationResult + + + End Function + + Public ReadOnly Property Vehicle As IVehicleDeclarationInputData Implements IEPTPJobInputData.Vehicle + Get + If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + 'Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle + Return New XMLDeclarationInputDataProvider(XmlReader.Create(_vehicleFile.FullPath), True).JobInputData.Vehicle + End Get + End Property + + Public ReadOnly Property Cycles As IList(Of ICycleData) Implements IEPTPJobInputData.Cycles + Get + Dim retVal As ICycleData() = New ICycleData(CycleFiles.Count - 1) {} + Dim i As Integer = 0 + For Each cycleFile As SubPath In CycleFiles + Dim cycleData As TableData + If (File.Exists(cycleFile.FullPath)) Then + cycleData = VectoCSVFile.Read(cycleFile.FullPath) + Else + Try + Dim resourceName As String = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + + cycleFile.OriginalPath + TUGraz.VectoCore.Configuration.Constants.FileExtensions.CycleFile + Dim cycleDataRes As Stream = RessourceHelper.ReadStream(resourceName) + cycleData = VectoCSVFile.ReadStream(cycleDataRes, source:=resourceName) + Catch ex As Exception + Throw New VectoException("Driving Cycle could not be read: " + cycleFile.OriginalPath) + End Try + End If + retVal(i) = New CycleInputData With { + .Name = Path.GetFileNameWithoutExtension(cycleFile.FullPath), + .CycleData = cycleData + } + i += 1 + Next + Return retVal + + End Get + End Property + + Public ReadOnly Property FanPowerCoefficents As IEnumerable(Of Double) Implements IEPTPJobInputData.FanPowerCoefficents Get + Return New Double() {0, 0, 0} End Get End Property - Public ReadOnly Property Cycles As IList(Of ICycleData) Implements IEPTPInputDataProvider.Cycles + Public ReadOnly Property JobInputData As IEPTPJobInputData Implements IEPTPInputDataProvider.JobInputData Get + Return Me End Get End Property End Class diff --git a/VECTO/Input Files/VectoJob.vb b/VECTO/Input Files/VectoJob.vb index d4b167272a4e884ebfcfef60544aed470ee412bd..44659bd7edfb68991573d37152d86c99faae8b6f 100644 --- a/VECTO/Input Files/VectoJob.vb +++ b/VECTO/Input Files/VectoJob.vb @@ -110,7 +110,7 @@ Public Class VectoJob Public Function SaveFile() As Boolean Dim validationResults As IList(Of ValidationResult) = Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), - If(GearboxInputData Is Nothing, GearboxType.MT, GearboxInputData.Type), False) + Nothing, False) If validationResults.Count > 0 Then Dim messages As IEnumerable(Of String) = @@ -198,14 +198,14 @@ Public Class VectoJob End Get End Property - Public Property StartStop As Boolean - Get - Return _startStop - End Get - Set(value As Boolean) - _startStop = value - End Set - End Property + 'Public Property StartStop As Boolean + ' Get + ' Return _startStop + ' End Get + ' Set(value As Boolean) + ' _startStop = value + ' End Set + 'End Property Public ReadOnly Property IDriverEngineeringInputData_OverSpeedEcoRoll As IOverSpeedEcoRollEngineeringInputData _ Implements IDriverEngineeringInputData.OverSpeedEcoRoll @@ -227,13 +227,6 @@ Public Class VectoJob End Property - Public ReadOnly Property OverSpeedEcoRoll As IOverSpeedEcoRollDeclarationInputData _ - Implements IDriverDeclarationInputData.OverSpeedEcoRoll - Get - Return IDriverEngineeringInputData_OverSpeedEcoRoll - End Get - End Property - Public ReadOnly Property AccelerationCurve As TableData Implements IDriverEngineeringInputData.AccelerationCurve Get If String.IsNullOrWhiteSpace(_driverAccelerationFile.FullPath) Then Return Nothing @@ -315,7 +308,7 @@ Public Class VectoJob 'vectoJob._engineInputData = New JSONComponentInputData(vectoJob._engineFile.FullPath) - If vectoJob.EngineInputData Is Nothing Then _ + If vectoJob.Vehicle.EngineInputData Is Nothing Then _ result.Add(New ValidationResult("Engine File is missing or invalid")) If result.Any() Then Return _ @@ -336,9 +329,9 @@ Public Class VectoJob Dim result As IList(Of ValidationResult) = New List(Of ValidationResult) - Dim vehicleInputData As IVehicleEngineeringInputData = vectoJob.VehicleInputData - Dim engineInputData As IEngineEngineeringInputData = vectoJob.EngineInputData - Dim gearboxInputData As IGearboxEngineeringInputData = vectoJob.GearboxInputData + Dim vehicleInputData As IVehicleEngineeringInputData = vectoJob.JobInputData.Vehicle + Dim engineInputData As IEngineDeclarationInputData = vectoJob.Vehicle.EngineInputData + Dim gearboxInputData As IGearboxDeclarationInputData = vectoJob.Vehicle.GearboxInputData If vehicleInputData Is Nothing Then _ result.Add(New ValidationResult("Vehicle File is missing or invalid")) @@ -414,162 +407,158 @@ Public Class VectoJob #Region "IInputData" - Public Function JobInputData() As IEngineeringJobInputData Implements IEngineeringInputDataProvider.JobInputData - Return Me - End Function - - Public ReadOnly Property IDeclarationInputDataProvider_VehicleInputData As IVehicleDeclarationInputData _ - Implements IDeclarationInputDataProvider.VehicleInputData - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData - End Get - End Property - - Public ReadOnly Property VehicleInputData As IVehicleEngineeringInputData _ - Implements IEngineeringInputDataProvider.VehicleInputData - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData - End Get - End Property - - Public ReadOnly Property IDeclarationInputDataProvider_AirdragInputData As IAirdragDeclarationInputData _ - Implements IDeclarationInputDataProvider.AirdragInputData + Public ReadOnly Property JobInputData As IEngineeringJobInputData Implements IEngineeringInputDataProvider.JobInputData Get - Return AirdragInputData - End Get - End Property - - Public ReadOnly Property AirdragInputData As IAirdragEngineeringInputData _ - Implements IEngineeringInputDataProvider.AirdragInputData - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).AirdragInputData + Return Me End Get End Property - - Public Function IDeclarationInputDataProvider_JobInputData() As IDeclarationJobInputData _ + Public ReadOnly Property IDeclarationInputDataProvider_JobInputData As IDeclarationJobInputData _ Implements IDeclarationInputDataProvider.JobInputData - Return Me - End Function - - - Public ReadOnly Property IDeclarationInputDataProvider_GearboxInputData As IGearboxDeclarationInputData _ - Implements IDeclarationInputDataProvider.GearboxInputData - Get - If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_gearboxFile.FullPath).GearboxInputData - End Get - End Property - - Public ReadOnly Property GearboxInputData As IGearboxEngineeringInputData _ - Implements IEngineeringInputDataProvider.GearboxInputData - Get - If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_gearboxFile.FullPath).GearboxInputData - End Get - End Property - - Public ReadOnly Property IDeclarationInputDataProvider_TorqueConverterInputData As ITorqueConverterDeclarationInputData _ - Implements IDeclarationInputDataProvider.TorqueConverterInputData - Get - If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_gearboxFile.FullPath).TorqueConverterInputData - End Get - End Property - - Public ReadOnly Property TorqueConverterInputData As ITorqueConverterEngineeringInputData _ - Implements IEngineeringInputDataProvider.TorqueConverterInputData - Get - If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_gearboxFile.FullPath).TorqueConverterInputData - End Get - End Property - - Public ReadOnly Property IDeclarationInputDataProvider_AxleGearInputData As IAxleGearInputData _ - Implements IDeclarationInputDataProvider.AxleGearInputData Get - If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_gearboxFile.FullPath).AxleGearInputData - End Get - End Property - - Public ReadOnly Property AxleGearInputData As IAxleGearInputData _ - Implements IEngineeringInputDataProvider.AxleGearInputData - Get - If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_gearboxFile.FullPath).AxleGearInputData - End Get - End Property - - Public ReadOnly Property DeclarationInputDataProviderAngledriveInputData As IAngledriveInputData _ - Implements IDeclarationInputDataProvider.AngledriveInputData - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).AngledriveInputData - End Get - End Property - - Public ReadOnly Property AngledriveInputData As IAngledriveInputData _ - Implements IEngineeringInputDataProvider.AngledriveInputData - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).AngledriveInputData - End Get - End Property - - Public ReadOnly Property IDeclarationInputDataProvider_EngineInputData As IEngineDeclarationInputData _ - Implements IDeclarationInputDataProvider.EngineInputData - Get - If Not File.Exists(_engineFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_engineFile.FullPath).EngineInputData - End Get - End Property - - Public ReadOnly Property EngineInputData As IEngineEngineeringInputData _ - Implements IEngineeringInputDataProvider.EngineInputData - Get - If Not File.Exists(_engineFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_engineFile.FullPath).EngineInputData - End Get - End Property - - Public Function AuxiliaryInputData() As IAuxiliariesEngineeringInputData _ - Implements IEngineeringInputDataProvider.AuxiliaryInputData - - Return Me - End Function - - Public Function IDeclarationInputDataProvider_AuxiliaryInputData() As IAuxiliariesDeclarationInputData _ - Implements IDeclarationInputDataProvider.AuxiliaryInputData - - Return Me - End Function - - Public ReadOnly Property IDeclarationInputDataProvider_RetarderInputData As IRetarderInputData _ - Implements IDeclarationInputDataProvider.RetarderInputData - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).RetarderInputData + Return Me End Get End Property - Public ReadOnly Property RetarderInputData As IRetarderInputData _ - Implements IEngineeringInputDataProvider.RetarderInputData - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).RetarderInputData - End Get - End Property + 'Public ReadOnly Property IDeclarationInputDataProvider_VehicleInputData As IVehicleDeclarationInputData _ + ' Implements IDeclarationInputDataProvider.VehicleInputData + ' Get + ' If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData + ' End Get + 'End Property + + 'Public ReadOnly Property VehicleInputData As IVehicleEngineeringInputData _ + ' Implements IEngineeringInputDataProvider.VehicleInputData + ' Get + ' If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData + ' End Get + 'End Property + + 'Public ReadOnly Property IDeclarationInputDataProvider_AirdragInputData As IAirdragDeclarationInputData _ + ' Implements IVehicleDeclarationInputData.AirdragInputData + ' Get + ' Return AirdragInputData + ' End Get + 'End Property + + 'Public ReadOnly Property AirdragInputData As IAirdragEngineeringInputData _ + ' Implements IVehicleEngineeringInputData.AirdragInputData + ' Get + ' If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.AirdragInputData + ' End Get + 'End Property + + 'Public ReadOnly Property IDeclarationInputDataProvider_GearboxInputData As IGearboxDeclarationInputData _ + ' Implements IVehicleDeclarationInputData.GearboxInputData + ' Get + ' If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.GearboxInputData + ' End Get + 'End Property + + 'Public ReadOnly Property GearboxInputData As IGearboxEngineeringInputData _ + ' Implements IVehicleEngineeringInputData.GearboxInputData + ' Get + ' If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.GearboxInputData + ' End Get + 'End Property + + 'Public ReadOnly Property IDeclarationInputDataProvider_TorqueConverterInputData As ITorqueConverterDeclarationInputData _ + ' Implements IVehicleDeclarationInputData.TorqueConverterInputData + ' Get + ' If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.TorqueConverterInputData + ' End Get + 'End Property + + 'Public ReadOnly Property TorqueConverterInputData As ITorqueConverterEngineeringInputData _ + ' Implements IVehicleEngineeringInputData.TorqueConverterInputData + ' Get + ' If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.TorqueConverterInputData + ' End Get + 'End Property + + 'Public ReadOnly Property IDeclarationInputDataProvider_AxleGearInputData As IAxleGearInputData _ + ' Implements IVehicleDeclarationInputData.AxleGearInputData + ' Get + ' If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.AxleGearInputData + ' End Get + 'End Property + + 'Public ReadOnly Property AxleGearInputData As IAxleGearInputData _ + ' Implements IVehicleEngineeringInputData.AxleGearInputData + ' Get + ' If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.AxleGearInputData + ' End Get + 'End Property + + 'Public ReadOnly Property DeclarationInputDataProviderAngledriveInputData As IAngledriveInputData _ + ' Implements IVehicleDeclarationInputData.AngledriveInputData + ' Get + ' If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.AngledriveInputData + ' End Get + 'End Property + + 'Public ReadOnly Property AngledriveInputData As IAngledriveInputData _ + ' Implements IVehicleEngineeringInputData.AngledriveInputData + ' Get + ' If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.AngledriveInputData + ' End Get + 'End Property + + 'Public ReadOnly Property IDeclarationInputDataProvider_EngineInputData As IEngineDeclarationInputData _ + ' Implements IVehicleDeclarationInputData.EngineInputData + ' Get + ' If Not File.Exists(_engineFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData + ' End Get + 'End Property + + 'Public ReadOnly Property EngineInputData As IEngineEngineeringInputData _ + ' Implements IVehicleEngineeringInputData.EngineInputData + ' Get + ' If Not File.Exists(_engineFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData + ' End Get + 'End Property + + 'Public Function AuxiliaryInputData() As IAuxiliariesEngineeringInputData _ + ' Implements IVehicleEngineeringInputData.AuxiliaryInputData + + ' Return Me + 'End Function + + 'Public Function IDeclarationInputDataProvider_AuxiliaryInputData() As IAuxiliariesDeclarationInputData _ + ' Implements IVehicleDeclarationInputData.AuxiliaryInputData + + ' Return Me + 'End Function + + 'Public ReadOnly Property IDeclarationInputDataProvider_RetarderInputData As IRetarderInputData _ + ' Implements IVehicleDeclarationInputData.RetarderInputData + ' Get + ' If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.RetarderInputData + ' End Get + 'End Property + + 'Public ReadOnly Property RetarderInputData As IRetarderInputData _ + ' Implements IVehicleEngineeringInputData.RetarderInputData + ' Get + ' If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.RetarderInputData + ' End Get + 'End Property - Public ReadOnly Property IDeclarationInputDataProvider_DriverInputData As IDriverDeclarationInputData _ - Implements IDeclarationInputDataProvider.DriverInputData - Get - Return Me - End Get - End Property Public ReadOnly Property DriverInputData As IDriverEngineeringInputData _ Implements IEngineeringInputDataProvider.DriverInputData @@ -578,21 +567,21 @@ Public Class VectoJob End Get End Property - Public ReadOnly Property IDeclarationInputDataProvider_PTOTransmissionInputData As IPTOTransmissionInputData _ - Implements IDeclarationInputDataProvider.PTOTransmissionInputData - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).PTOTransmissionInputData - End Get - End Property + 'Public ReadOnly Property IDeclarationInputDataProvider_PTOTransmissionInputData As IPTOTransmissionInputData _ + ' Implements IVehicleDeclarationInputData.PTOTransmissionInputData + ' Get + ' If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.PTOTransmissionInputData + ' End Get + 'End Property - Public ReadOnly Property PTOTransmissionInputData As IPTOTransmissionInputData _ - Implements IEngineeringInputDataProvider.PTOTransmissionInputData - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).PTOTransmissionInputData - End Get - End Property + 'Public ReadOnly Property PTOTransmissionInputData As IPTOTransmissionInputData _ + ' Implements IVehicleEngineeringInputData.PTOTransmissionInputData + ' Get + ' If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + ' Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle.PTOTransmissionInputData + ' End Get + 'End Property Public ReadOnly Property XMLHash As XElement Implements IDeclarationInputDataProvider.XMLHash Get @@ -612,14 +601,14 @@ Public Class VectoJob Implements IEngineeringJobInputData.Vehicle Get If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData + Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle End Get End Property Public ReadOnly Property Vehicle As IVehicleDeclarationInputData Implements IDeclarationJobInputData.Vehicle Get If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing - Return New JSONComponentInputData(_vehicleFile.FullPath).VehicleInputData + Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle End Get End Property @@ -657,6 +646,13 @@ Public Class VectoJob End Get End Property + Public ReadOnly Property IEngineeringJobInputData_EngineOnly As IEngineEngineeringInputData Implements IEngineeringJobInputData.EngineOnly + Get + If Not File.Exists(_engineFile.FullPath) Then Return Nothing + Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData + End Get + End Property + Public ReadOnly Property JobName As String Implements IDeclarationJobInputData.JobName Get Return Path.GetFileNameWithoutExtension(FilePath) diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index eeff657adc771ad91d24ac728d0a1b8f89e8798b..0c5eaa62e4274c9b1a84127a7f2e5908b3eed200 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -18,6 +18,7 @@ Imports TUGraz.VECTO.Input_Files Imports TUGraz.VectoCommon.InputData Imports TUGraz.VectoCommon.Models Imports TUGraz.VectoCommon.Utils +Imports TUGraz.VectoCore.InputData.FileIO.JSON Imports TUGraz.VectoCore.InputData.Impl Imports TUGraz.VectoCore.InputData.Reader.DataObjectAdapter Imports TUGraz.VectoCore.Models.Declaration @@ -495,4 +496,153 @@ Public Class Vehicle Return VectoCSVFile.Read(PtoLossMap.FullPath) End Get End Property -End Class \ No newline at end of file + + + Public ReadOnly Property IDeclarationInputDataProvider_AirdragInputData As IAirdragDeclarationInputData _ + Implements IVehicleDeclarationInputData.AirdragInputData + Get + Return AirdragInputData + End Get + End Property + + Public ReadOnly Property AirdragInputData As IAirdragEngineeringInputData _ + Implements IVehicleEngineeringInputData.AirdragInputData + Get + Return Me + End Get + End Property + + Public ReadOnly Property IDeclarationInputDataProvider_GearboxInputData As IGearboxDeclarationInputData _ + Implements IVehicleDeclarationInputData.GearboxInputData + Get + Return Nothing + 'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + 'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.GearboxInputData + End Get + End Property + + Public ReadOnly Property GearboxInputData As IGearboxEngineeringInputData _ + Implements IVehicleEngineeringInputData.GearboxInputData + Get + Return Nothing + 'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + 'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.GearboxInputData + End Get + End Property + + Public ReadOnly Property IDeclarationInputDataProvider_TorqueConverterInputData As ITorqueConverterDeclarationInputData _ + Implements IVehicleDeclarationInputData.TorqueConverterInputData + Get + Return Nothing + 'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + 'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.TorqueConverterInputData + End Get + End Property + + Public ReadOnly Property TorqueConverterInputData As ITorqueConverterEngineeringInputData _ + Implements IVehicleEngineeringInputData.TorqueConverterInputData + Get + Return Nothing + 'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + 'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.TorqueConverterInputData + End Get + End Property + + Public ReadOnly Property IDeclarationInputDataProvider_AxleGearInputData As IAxleGearInputData _ + Implements IVehicleDeclarationInputData.AxleGearInputData + Get + Return Nothing + 'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + 'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.AxleGearInputData + End Get + End Property + + Public ReadOnly Property AxleGearInputData As IAxleGearInputData _ + Implements IVehicleEngineeringInputData.AxleGearInputData + Get + Return Nothing + 'If Not File.Exists(_gearboxFile.FullPath) Then Return Nothing + 'Return New JSONComponentInputData(_gearboxFile.FullPath).JobInputData.Vehicle.AxleGearInputData + End Get + End Property + + Public ReadOnly Property DeclarationInputDataProviderAngledriveInputData As IAngledriveInputData _ + Implements IVehicleDeclarationInputData.AngledriveInputData + Get + Return Me + End Get + End Property + + Public ReadOnly Property AngledriveInputData As IAngledriveInputData _ + Implements IVehicleEngineeringInputData.AngledriveInputData + Get + Return Me + End Get + End Property + + Public ReadOnly Property IDeclarationInputDataProvider_EngineInputData As IEngineDeclarationInputData _ + Implements IVehicleDeclarationInputData.EngineInputData + Get + Return Nothing + 'If Not File.Exists(_engineFile.FullPath) Then Return Nothing + 'Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData + End Get + End Property + + Public ReadOnly Property EngineInputData As IEngineEngineeringInputData _ + Implements IVehicleEngineeringInputData.EngineInputData + Get + Return Nothing + 'If Not File.Exists(_engineFile.FullPath) Then Return Nothing + 'Return New JSONComponentInputData(_engineFile.FullPath).JobInputData.Vehicle.EngineInputData + End Get + End Property + + Public Function AuxiliaryInputData() As IAuxiliariesEngineeringInputData _ + Implements IVehicleEngineeringInputData.AuxiliaryInputData + + Return Nothing + End Function + + Public Function IDeclarationInputDataProvider_AuxiliaryInputData() As IAuxiliariesDeclarationInputData _ + Implements IVehicleDeclarationInputData.AuxiliaryInputData + + Return Nothing + End Function + + Public ReadOnly Property IDeclarationInputDataProvider_RetarderInputData As IRetarderInputData _ + Implements IVehicleDeclarationInputData.RetarderInputData + Get + Return Me + End Get + End Property + + Public ReadOnly Property RetarderInputData As IRetarderInputData _ + Implements IVehicleEngineeringInputData.RetarderInputData + Get + Return Me + End Get + End Property + + + 'Public ReadOnly Property DriverInputData As IDriverEngineeringInputData _ + ' Implements IEngineeringInputDataProvider.DriverInputData + ' Get + ' Return Nothing + ' End Get + 'End Property + + Public ReadOnly Property IDeclarationInputDataProvider_PTOTransmissionInputData As IPTOTransmissionInputData _ + Implements IVehicleDeclarationInputData.PTOTransmissionInputData + Get + Return Me + End Get + End Property + + Public ReadOnly Property PTOTransmissionInputData As IPTOTransmissionInputData _ + Implements IVehicleEngineeringInputData.PTOTransmissionInputData + Get + Return Me + End Get + End Property +End Class diff --git a/VECTO/OutputData/JSONFileWriter.vb b/VECTO/OutputData/JSONFileWriter.vb index f81964733b181d63c76f793bd3287b8d170c5974..0ff39920c209f0fc8fdc1d16542661cd901f511e 100644 --- a/VECTO/OutputData/JSONFileWriter.vb +++ b/VECTO/OutputData/JSONFileWriter.vb @@ -253,7 +253,7 @@ Public Class JSONFileWriter 'SavedInDeclMode = Cfg.DeclMode Dim job As IEngineeringJobInputData = input.JobInputData() - Dim aux As IAuxiliariesEngineeringInputData = input.AuxiliaryInputData() + Dim aux As IAuxiliariesEngineeringInputData = input.JobInputData.Vehicle.AuxiliaryInputData() Dim driver As IDriverEngineeringInputData = input.DriverInputData body.Add("SavedInDeclMode", job.SavedInDeclarationMode) @@ -261,7 +261,7 @@ Public Class JSONFileWriter body.Add("EngineOnlyMode", job.EngineOnlyMode) If job.EngineOnlyMode Then - body.Add("EngineFile", GetRelativePath(input.EngineInputData.Source, basePath)) + body.Add("EngineFile", GetRelativePath(input.JobInputData.Vehicle.EngineInputData.Source, basePath)) body.Add("Cycles", job.Cycles.Select(Function(x) GetRelativePath(x.CycleData.Source, Path.GetDirectoryName(filename))).ToArray()) WriteFile(header, body, filename) @@ -270,8 +270,8 @@ Public Class JSONFileWriter 'Main Files body.Add("VehicleFile", GetRelativePath(job.Vehicle.Source, basePath)) - body.Add("EngineFile", GetRelativePath(input.EngineInputData.Source, basePath)) - body.Add("GearboxFile", GetRelativePath(input.GearboxInputData.Source, basePath)) + body.Add("EngineFile", GetRelativePath(input.JobInputData.Vehicle.EngineInputData.Source, basePath)) + body.Add("GearboxFile", GetRelativePath(input.JobInputData.Vehicle.GearboxInputData.Source, basePath)) 'AA-TB 'ADVANCED AUXILIARIES @@ -352,15 +352,15 @@ Public Class JSONFileWriter WriteFile(header, body, filename) End Sub - Public Sub Save(job As IEPTPInputDataProvider, filename As String) Implements IOutputFileWriter.SaveJob + Public Sub SaveJob(input As IEPTPInputDataProvider, filename As String) Implements IOutputFileWriter.SaveJob Dim basePath As String = Path.GetDirectoryName(filename) 'Header Dim header As Dictionary(Of String, Object) = GetHeader(VectoJobFormatVersion) 'Body Dim body As Dictionary(Of String, Object) = New Dictionary(Of String, Object) - - body.Add("DeclarationVehicle", job.Vehicle.VehicleInputData.Source) + Dim job As IEPTPJobInputData = input.JobInputData + body.Add("DeclarationVehicle", job.Vehicle.Source) body.Add("FanPowerCoefficients", job.FanPowerCoefficents) body.Add("Cycles", job.Cycles) diff --git a/VECTO/VECTO.vbproj b/VECTO/VECTO.vbproj index cb11c8ed38ff6492f5dd985fb6203e68852fbb70..c549ca0e9ceac7e2e1062a004d48e411d44818c8 100644 --- a/VECTO/VECTO.vbproj +++ b/VECTO/VECTO.vbproj @@ -278,6 +278,7 @@ <Compile Include="File Browser\FileBrowserFavoritesDialog.vb"> <SubType>Form</SubType> </Compile> + <Compile Include="Input Files\VectoEPTPJob.vb" /> <Compile Include="Input Files\VectoJob.vb" /> <Compile Include="Input Files\Vehicle.vb" /> <Compile Include="GUI\GearboxGearDialog.Designer.vb"> diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 75060d28e6ee1a754cd0940625c1e97951e67dd2..c4c74728e14ab729476796a3fe79ed7b361decf8 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -113,6 +113,24 @@ namespace TUGraz.VectoCommon.InputData string ManufacturerAddress { get; } PerSecond EngineIdleSpeed { get; } + + IAirdragDeclarationInputData AirdragInputData { get; } + + IGearboxDeclarationInputData GearboxInputData { get; } + + ITorqueConverterDeclarationInputData TorqueConverterInputData { get; } + + IAxleGearInputData AxleGearInputData { get; } + + IAngledriveInputData AngledriveInputData { get; } + + IEngineDeclarationInputData EngineInputData { get; } + + IAuxiliariesDeclarationInputData AuxiliaryInputData(); + + IRetarderInputData RetarderInputData { get; } + + IPTOTransmissionInputData PTOTransmissionInputData { get; } } public interface IAirdragDeclarationInputData : IComponentInputData @@ -392,7 +410,7 @@ namespace TUGraz.VectoCommon.InputData { bool SavedInDeclarationMode { get; } - IOverSpeedEcoRollDeclarationInputData OverSpeedEcoRoll { get; } + //IOverSpeedEcoRollDeclarationInputData OverSpeedEcoRoll { get; } } public interface IOverSpeedEcoRollDeclarationInputData @@ -425,4 +443,4 @@ namespace TUGraz.VectoCommon.InputData NewtonMeter MaxTorque { get; } } -} \ No newline at end of file +} diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs index 376f432fccd70852f32bbb5c988c9ac8d4000e19..40e0a9ebdac137b0bd276419a3e423c3e7f6f2a5 100644 --- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs +++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs @@ -50,6 +50,8 @@ namespace TUGraz.VectoCommon.InputData /// cf. VECTO Input Parameters.xlsx /// </summary> bool EngineOnlyMode { get; } + + IEngineEngineeringInputData EngineOnly { get; } } public interface IVehicleEngineeringInputData : IVehicleDeclarationInputData @@ -80,6 +82,25 @@ namespace TUGraz.VectoCommon.InputData Meter DynamicTyreRadius { get; } Meter Height { get; } + + + new IAirdragEngineeringInputData AirdragInputData { get; } + + new IGearboxEngineeringInputData GearboxInputData { get; } + + new ITorqueConverterEngineeringInputData TorqueConverterInputData { get; } + + new IAxleGearInputData AxleGearInputData { get; } + + new IAngledriveInputData AngledriveInputData { get; } + + new IEngineEngineeringInputData EngineInputData { get; } + + new IAuxiliariesEngineeringInputData AuxiliaryInputData(); + + new IRetarderInputData RetarderInputData { get; } + + new IPTOTransmissionInputData PTOTransmissionInputData { get; } } public interface IAirdragEngineeringInputData : IAirdragDeclarationInputData @@ -367,4 +388,4 @@ namespace TUGraz.VectoCommon.InputData /// </summary> Watt ConstantPowerDemand { get; } } -} \ No newline at end of file +} diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs index efe192178226b09d3f2322f1905eb04992ac5a19..53f5309230828aa131ecbb2a889ed43ae7e464ee 100644 --- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs +++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs @@ -38,63 +38,68 @@ namespace TUGraz.VectoCommon.InputData public interface IDeclarationInputDataProvider : IInputDataProvider { - IDeclarationJobInputData JobInputData(); + IDeclarationJobInputData JobInputData { get; } - IVehicleDeclarationInputData VehicleInputData { get; } + //IVehicleDeclarationInputData VehicleInputData { get; } - IAirdragDeclarationInputData AirdragInputData { get; } + //IAirdragDeclarationInputData AirdragInputData { get; } - IGearboxDeclarationInputData GearboxInputData { get; } + //IGearboxDeclarationInputData GearboxInputData { get; } - ITorqueConverterDeclarationInputData TorqueConverterInputData { get; } + //ITorqueConverterDeclarationInputData TorqueConverterInputData { get; } - IAxleGearInputData AxleGearInputData { get; } + //IAxleGearInputData AxleGearInputData { get; } - IAngledriveInputData AngledriveInputData { get; } + //IAngledriveInputData AngledriveInputData { get; } - IEngineDeclarationInputData EngineInputData { get; } + //IEngineDeclarationInputData EngineInputData { get; } - IAuxiliariesDeclarationInputData AuxiliaryInputData(); + //IAuxiliariesDeclarationInputData AuxiliaryInputData(); - IRetarderInputData RetarderInputData { get; } + //IRetarderInputData RetarderInputData { get; } - IDriverDeclarationInputData DriverInputData { get; } + //IDriverDeclarationInputData DriverInputData { get; } - IPTOTransmissionInputData PTOTransmissionInputData { get; } + //IPTOTransmissionInputData PTOTransmissionInputData { get; } XElement XMLHash { get; } } public interface IEngineeringInputDataProvider : IInputDataProvider { - IEngineeringJobInputData JobInputData(); + IEngineeringJobInputData JobInputData { get; } - IVehicleEngineeringInputData VehicleInputData { get; } + //IVehicleEngineeringInputData VehicleInputData { get; } - IAirdragEngineeringInputData AirdragInputData { get; } + //IAirdragEngineeringInputData AirdragInputData { get; } - IGearboxEngineeringInputData GearboxInputData { get; } + //IGearboxEngineeringInputData GearboxInputData { get; } - ITorqueConverterEngineeringInputData TorqueConverterInputData { get; } + //ITorqueConverterEngineeringInputData TorqueConverterInputData { get; } - IAxleGearInputData AxleGearInputData { get; } + //IAxleGearInputData AxleGearInputData { get; } - IAngledriveInputData AngledriveInputData { get; } + //IAngledriveInputData AngledriveInputData { get; } - IEngineEngineeringInputData EngineInputData { get; } + //IEngineEngineeringInputData EngineInputData { get; } - IAuxiliariesEngineeringInputData AuxiliaryInputData(); + //IAuxiliariesEngineeringInputData AuxiliaryInputData(); - IRetarderInputData RetarderInputData { get; } + //IRetarderInputData RetarderInputData { get; } IDriverEngineeringInputData DriverInputData { get; } - IPTOTransmissionInputData PTOTransmissionInputData { get; } + //IPTOTransmissionInputData PTOTransmissionInputData { get; } } public interface IEPTPInputDataProvider : IInputDataProvider { - IDeclarationInputDataProvider Vehicle { get; } + IEPTPJobInputData JobInputData { get; } + } + + public interface IEPTPJobInputData + { + IVehicleDeclarationInputData Vehicle { get; } IList<ICycleData> Cycles { get; } diff --git a/VectoCommon/VectoCommon/Models/ExecutionMode.cs b/VectoCommon/VectoCommon/Models/ExecutionMode.cs index 641b41989f62ace66101556079732fe5371d9334..d627105885646857191649977e7296b5d3d91aed 100644 --- a/VectoCommon/VectoCommon/Models/ExecutionMode.cs +++ b/VectoCommon/VectoCommon/Models/ExecutionMode.cs @@ -35,5 +35,6 @@ namespace TUGraz.VectoCommon.Models { Engineering, Declaration, +// ExPostTest, } -} \ 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 53f64fc8c4ea957001a627be8194ec63a575b602..068c2112b9a9bc2b14c94436f245f5a3dc2d5de9 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -33,6 +33,7 @@ using System; using System.IO; using System.Xml.Linq; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Utils; @@ -57,7 +58,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON object tmp = null; switch (extension) { case Constants.FileExtensions.VehicleDataFile: - tmp = JSONInputDataFactory.ReadJsonVehicle(filename, tolerateMissing); + tmp = JSONInputDataFactory.ReadJsonVehicle(filename, null, tolerateMissing); break; case Constants.FileExtensions.EngineDataFile: tmp = JSONInputDataFactory.ReadEngine(filename, tolerateMissing); @@ -79,110 +80,111 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } - public IEngineeringJobInputData JobInputData() + public IEngineeringJobInputData JobInputData { - throw new NotImplementedException(); - } - - - IVehicleDeclarationInputData IDeclarationInputDataProvider.VehicleInputData - { - get { return VehicleData; } - } - - IAirdragDeclarationInputData IDeclarationInputDataProvider.AirdragInputData - { - get { return AirdragInputData; } - } - - public IAirdragEngineeringInputData AirdragInputData - { - get { return AirdragData; } - } - - IGearboxDeclarationInputData IDeclarationInputDataProvider.GearboxInputData - { - get { return GearboxInputData; } - } - - ITorqueConverterDeclarationInputData IDeclarationInputDataProvider.TorqueConverterInputData - { - get { return TorqueConverterInputData; } - } - - IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData() - { - throw new NotImplementedException(); - } - - public IVehicleEngineeringInputData VehicleInputData - { - get { return VehicleData; } - } - - public IGearboxEngineeringInputData GearboxInputData - { - get { return Gearbox; } + get { throw new NotImplementedException(); } } - public ITorqueConverterEngineeringInputData TorqueConverterInputData - { - get { return TorqueConverter; } - } + public XElement XMLHash { get { return new XElement(XMLNames.DI_Signature); } } - public IAxleGearInputData AxleGearInputData - { - get { return AxleGear; } - } - public IAngledriveInputData AngledriveInputData - { - get { return Angledrive; } - } + //IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle + //{ + // get { return VehicleData; } + //} - IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData - { - get { return EngineInputData; } - } + //IAirdragDeclarationInputData IDeclarationInputDataProvider.AirdragInputData + //{ + // get { return AirdragInputData; } + //} - public IEngineEngineeringInputData EngineInputData - { - get { return Engine; } - } + //public IAirdragEngineeringInputData AirdragInputData + //{ + // get { return AirdragData; } + //} - public IAuxiliariesEngineeringInputData AuxiliaryInputData() - { - throw new NotImplementedException(); - } + //IGearboxDeclarationInputData IDeclarationInputDataProvider.GearboxInputData + //{ + // get { return GearboxInputData; } + //} - IAuxiliariesDeclarationInputData IDeclarationInputDataProvider.AuxiliaryInputData() - { - throw new NotImplementedException(); - } + //ITorqueConverterDeclarationInputData IDeclarationInputDataProvider.TorqueConverterInputData + //{ + // get { return TorqueConverterInputData; } + //} - public IRetarderInputData RetarderInputData + IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData { - get { return Retarder; } + get { + throw new NotImplementedException(); + } } - IDriverDeclarationInputData IDeclarationInputDataProvider.DriverInputData - { - get { throw new NotImplementedException(); } - } + //public IVehicleEngineeringInputData VehicleInputData + //{ + // get { return VehicleData; } + //} + + //public IGearboxEngineeringInputData GearboxInputData + //{ + // get { return Gearbox; } + //} + + //public ITorqueConverterEngineeringInputData TorqueConverterInputData + //{ + // get { return TorqueConverter; } + //} + + //public IAxleGearInputData AxleGearInputData + //{ + // get { return AxleGear; } + //} + + //public IAngledriveInputData AngledriveInputData + //{ + // get { return Angledrive; } + //} + + //IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData + //{ + // get { return EngineInputData; } + //} + + //public IEngineEngineeringInputData EngineInputData + //{ + // get { return Engine; } + //} + + //public IAuxiliariesEngineeringInputData AuxiliaryInputData() + //{ + // throw new NotImplementedException(); + //} + + //IAuxiliariesDeclarationInputData IDeclarationInputDataProvider.AuxiliaryInputData() + //{ + // throw new NotImplementedException(); + //} + + //public IRetarderInputData RetarderInputData + //{ + // get { return Retarder; } + //} + + //IDriverDeclarationInputData IDeclarationInputDataProvider.DriverInputData + //{ + // get { throw new NotImplementedException(); } + //} public IDriverEngineeringInputData DriverInputData { get { throw new NotImplementedException(); } } - public IPTOTransmissionInputData PTOTransmissionInputData - { - get { return PTOTransmission; } - } + //public IPTOTransmissionInputData PTOTransmissionInputData + //{ + // get { return PTOTransmission; } + //} - public XElement XMLHash - { - get { return null; } - } + } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index 19d015b541a80c3718189125ec065210c939c25f..225d2ef299cbb35761b83c9a62fcfc93138340a1 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs @@ -38,6 +38,7 @@ using System.Xml.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Impl; @@ -125,17 +126,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON IEngineeringJobInputData, IDriverEngineeringInputData, IAuxiliariesEngineeringInputData, IAuxiliariesDeclarationInputData { - protected readonly IGearboxEngineeringInputData Gearbox; - protected readonly IAxleGearInputData AxleGear; - protected readonly ITorqueConverterEngineeringInputData TorqueConverter; - protected readonly IAngledriveInputData Angledrive; - protected readonly IEngineEngineeringInputData Engine; + public IGearboxEngineeringInputData Gearbox { get; internal set; } + public IAxleGearInputData AxleGear { get; internal set; } + public ITorqueConverterEngineeringInputData TorqueConverter { get; internal set; } + //public IAngledriveInputData Angledrive { get; internal set; } + public IEngineEngineeringInputData Engine { get; internal set; } + //public IRetarderInputData Retarder { get; internal set; } + //public IPTOTransmissionInputData PTOTransmission { get; internal set; } + //public IAirdragEngineeringInputData AirdragData { get; internal set; } + protected readonly IVehicleEngineeringInputData VehicleData; - protected readonly IRetarderInputData Retarder; - protected readonly IPTOTransmissionInputData PTOTransmission; private readonly string _jobname; - protected internal IAirdragEngineeringInputData AirdragData; + public JSONInputDataV2(JObject data, string filename, bool tolerateMissing = false) : base(data, filename, tolerateMissing) @@ -153,10 +156,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON TorqueConverter = Gearbox as ITorqueConverterEngineeringInputData; VehicleData = ReadVehicle(); - Angledrive = VehicleData as IAngledriveInputData; - Retarder = VehicleData as IRetarderInputData; - PTOTransmission = VehicleData as IPTOTransmissionInputData; - AirdragData = VehicleData as IAirdragEngineeringInputData; + //Angledrive = VehicleData as IAngledriveInputData; + //Retarder = VehicleData as IRetarderInputData; + //PTOTransmission = VehicleData as IPTOTransmissionInputData; + //AirdragData = VehicleData as IAirdragEngineeringInputData; } private IVehicleEngineeringInputData ReadVehicle() @@ -164,14 +167,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON try { var vehicleFile = Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>(); return JSONInputDataFactory.ReadJsonVehicle( - Path.Combine(BasePath, vehicleFile)); + Path.Combine(BasePath, vehicleFile), this); } catch (Exception e) { if (!TolerateMissing) { throw new VectoException("JobFile: Failed to read Vehicle file '{0}': {1}", e, Body[JsonKeys.Vehicle_VehicleFile], e.Message); } return new JSONVehicleDataV7(GetDummyJSONStructure(), - Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>()) + MissingFileSuffix); + Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>()) + MissingFileSuffix, this); } } @@ -210,58 +213,62 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON #region IInputDataProvider - public virtual IEngineeringJobInputData JobInputData() - { - return this; - } - - IVehicleDeclarationInputData IDeclarationInputDataProvider.VehicleInputData + IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle { get { return VehicleInputData; } } - IAirdragDeclarationInputData IDeclarationInputDataProvider.AirdragInputData - { - get { return AirdragInputData; } - } + //IAirdragDeclarationInputData IDeclarationInputDataProvider.AirdragInputData + //{ + // get { return AirdragInputData; } + //} - public IAirdragEngineeringInputData AirdragInputData - { - get { return AirdragData; } - } + //public IAirdragEngineeringInputData AirdragInputData + //{ + // get { return AirdragData; } + //} - IGearboxDeclarationInputData IDeclarationInputDataProvider.GearboxInputData - { - get { return GearboxInputData; } - } + //IGearboxDeclarationInputData IDeclarationInputDataProvider.GearboxInputData + //{ + // get { return GearboxInputData; } + //} + + //ITorqueConverterDeclarationInputData IDeclarationInputDataProvider.TorqueConverterInputData + //{ + // get { return TorqueConverterInputData; } + //} - ITorqueConverterDeclarationInputData IDeclarationInputDataProvider.TorqueConverterInputData + //public ITorqueConverterEngineeringInputData TorqueConverterInputData + //{ + // get + // { + // if (TorqueConverter == null) { + // throw new InvalidFileFormatException("TorqueConverterData not found"); + // } + // return TorqueConverter; + // } + //} + + public virtual IEngineeringJobInputData JobInputData { - get { return TorqueConverterInputData; } + get { return this; } } - public ITorqueConverterEngineeringInputData TorqueConverterInputData + public XElement XMLHash { - get - { - if (TorqueConverter == null) { - throw new InvalidFileFormatException("TorqueConverterData not found"); - } - return TorqueConverter; - } + get { return new XElement(XMLNames.DI_Signature); } } - IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData() + IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData { - return JobInputData(); + get { return this; } } public virtual IVehicleEngineeringInputData VehicleInputData { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { + get { if (VehicleData == null) { throw new InvalidFileFormatException("VehicleData not found "); } @@ -269,48 +276,47 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } } - public virtual IGearboxEngineeringInputData GearboxInputData + //public virtual IGearboxEngineeringInputData GearboxInputData + //{ + // [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", + // "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] + // get + // { + // if (Gearbox == null) { + // throw new InvalidFileFormatException("GearboxData not found"); + // } + // return Gearbox; + // } + //} + + //public virtual IAxleGearInputData AxleGearInputData + //{ + // [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", + // "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] + // get + // { + // if (AxleGear == null) { + // throw new InvalidFileFormatException("AxleGearData not found"); + // } + // return AxleGear; + // } + //} + + //public IAngledriveInputData AngledriveInputData + //{ + // get { return Angledrive; } + //} + + //IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData + //{ + // get { return EngineInputData; } + //} + + public virtual IEngineEngineeringInputData EngineOnly { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { - if (Gearbox == null) { - throw new InvalidFileFormatException("GearboxData not found"); - } - return Gearbox; - } - } - - public virtual IAxleGearInputData AxleGearInputData - { - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", - "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { - if (AxleGear == null) { - throw new InvalidFileFormatException("AxleGearData not found"); - } - return AxleGear; - } - } - - public IAngledriveInputData AngledriveInputData - { - get { return Angledrive; } - } - - IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData - { - get { return EngineInputData; } - } - - public virtual IEngineEngineeringInputData EngineInputData - { - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", - "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { + get { if (Engine == null) { throw new InvalidFileFormatException("EngineData not found"); } @@ -318,48 +324,48 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } } - public virtual IAuxiliariesEngineeringInputData AuxiliaryInputData() - { - return this; - } + //public virtual IAuxiliariesEngineeringInputData AuxiliaryInputData() + //{ + // return this; + //} IDriverEngineeringInputData IEngineeringInputDataProvider.DriverInputData { get { return this; } } - public IPTOTransmissionInputData PTOTransmissionInputData - { - get { return PTOTransmission; } - } - - public XElement XMLHash - { - get { return null; } - } - - IAuxiliariesDeclarationInputData IDeclarationInputDataProvider.AuxiliaryInputData() - { - return this; - } - - public virtual IRetarderInputData RetarderInputData - { - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", - "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { - if (Retarder == null) { - throw new InvalidFileFormatException("RetarderData not found"); - } - return Retarder; - } - } - - public virtual IDriverDeclarationInputData DriverInputData - { - get { return this; } - } + //public IPTOTransmissionInputData PTOTransmissionInputData + //{ + // get { return PTOTransmission; } + //} + + //public XElement XMLHash + //{ + // get { return null; } + //} + + //IAuxiliariesDeclarationInputData IDeclarationInputDataProvider.AuxiliaryInputData() + //{ + // return this; + //} + + //public virtual IRetarderInputData RetarderInputData + //{ + // [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", + // "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] + // get + // { + // if (Retarder == null) { + // throw new InvalidFileFormatException("RetarderData not found"); + // } + // return Retarder; + // } + //} + + //public virtual IDriverDeclarationInputData DriverInputData + //{ + // get { return this; } + //} #endregion @@ -374,8 +380,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { + get { var retVal = new List<ICycleData>(); if (Body[JsonKeys.Job_Cycles] == null) { return retVal; @@ -413,10 +418,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return Body.GetEx(JsonKeys.Job_EngineOnlyMode).Value<bool>(); } } - IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle - { - get { return Vehicle; } - } + //IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle + //{ + // get { return Vehicle; } + //} public virtual string JobName { @@ -427,21 +432,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON #region DriverInputData - IOverSpeedEcoRollDeclarationInputData IDriverDeclarationInputData.OverSpeedEcoRoll - { - get - { - var overspeed = Body.GetEx(JsonKeys.DriverData_OverspeedEcoRoll); - return new OverSpeedEcoRollInputData() { - Mode = DriverData.ParseDriverMode(overspeed.GetEx<string>(JsonKeys.DriverData_OverspeedEcoRoll_Mode)) - }; - } - } + //IOverSpeedEcoRollDeclarationInputData IDriverDeclarationInputData.OverSpeedEcoRoll + //{ + // get + // { + // var overspeed = Body.GetEx(JsonKeys.DriverData_OverspeedEcoRoll); + // return new OverSpeedEcoRollInputData() { + // Mode = DriverData.ParseDriverMode(overspeed.GetEx<string>(JsonKeys.DriverData_OverspeedEcoRoll_Mode)) + // }; + // } + //} public virtual ILookaheadCoastingInputData Lookahead { - get - { + get { if (Body[JsonKeys.DriverData_LookaheadCoasting] == null) { return null; } @@ -512,8 +516,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public virtual IOverSpeedEcoRollEngineeringInputData OverSpeedEcoRoll { - get - { + get { var overspeed = Body.GetEx(JsonKeys.DriverData_OverspeedEcoRoll); return new OverSpeedEcoRollInputData() { Mode = DriverData.ParseDriverMode(overspeed.GetEx<string>(JsonKeys.DriverData_OverspeedEcoRoll_Mode)), @@ -529,8 +532,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { + get { var acceleration = Body[JsonKeys.DriverData_AccelerationCurve]; if (acceleration == null || EmptyOrInvalidFileName(acceleration.Value<string>())) { return null; @@ -637,8 +639,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public AuxiliaryModel AuxiliaryAssembly { - get - { + get { return AuxiliaryModelHelper.Parse(Body["AuxiliaryAssembly"] == null ? "" : Body["AuxiliaryAssembly"].ToString()); } } @@ -650,8 +651,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public string AdvancedAuxiliaryFilePath { - get - { + get { return Body["AdvancedAuxiliaryFilePath"] != null ? Path.Combine(Path.GetFullPath(BasePath), Body["AdvancedAuxiliaryFilePath"].Value<string>()) : ""; @@ -704,4 +704,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON return retVal; } } -} \ No newline at end of file + + + public class JSONInputDataV4 : JSONInputDataV3 + { + public JSONInputDataV4(JObject data, string filename, bool tolerateMissing = false) + : base(data, filename, tolerateMissing) {} + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs index 84520f0a606ea9de508fb2a5a096b860c97d0320..43f42130cdc55c2faae84ada2b63520a188b71a7 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs @@ -70,18 +70,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON return new JSONInputDataV2(json, filename, tolerateMissing); case 3: return new JSONInputDataV3(json, filename, tolerateMissing); + case 4: + return new JSONInputDataV4(json, filename, tolerateMissing); default: throw new VectoException("Job-File: Unsupported FileVersion. Got: {0} ", version); } } - public static IVehicleEngineeringInputData ReadJsonVehicle(string filename, bool tolerateMissing = false) + public static IVehicleEngineeringInputData ReadJsonVehicle(string filename, JSONInputDataV2 job, bool tolerateMissing = false) { var json = ReadFile(filename); var version = ReadVersion(json); switch (version) { case 7: - return new JSONVehicleDataV7(json, filename, tolerateMissing); + return new JSONVehicleDataV7(json, filename, job,tolerateMissing); default: throw new VectoException("Vehicle-File: Unsupported FileVersion. Got {0}", version); } @@ -121,4 +123,4 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON return (int)double.Parse(value.Trim('"')); } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index a17fb0be088810eaa60c53ecc91d881bc38abe50..30b734744f688b112378bd19c6bd41d011c6fab3 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -34,6 +34,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using Newtonsoft.Json.Linq; +using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -44,8 +45,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public class JSONVehicleDataV7 : JSONFile, IVehicleEngineeringInputData, IRetarderInputData, IAngledriveInputData, IPTOTransmissionInputData, IAirdragEngineeringInputData { - public JSONVehicleDataV7(JObject data, string fileName, bool tolerateMissing = false) - : base(data, fileName, tolerateMissing) {} + public JSONVehicleDataV7(JObject data, string fileName, JSONInputDataV2 job, bool tolerateMissing = false) + : base(data, fileName, tolerateMissing) + { + Job = job; + } + + private JSONInputDataV2 Job; #region IVehicleInputData @@ -167,6 +173,103 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON }); } + #endregion + + #region "VehicleComponents" + + IAirdragDeclarationInputData IVehicleDeclarationInputData.AirdragInputData + { + get { return this; } + } + + IAirdragEngineeringInputData IVehicleEngineeringInputData.AirdragInputData + { + get { return this; } + } + + IGearboxDeclarationInputData IVehicleDeclarationInputData.GearboxInputData + { + get { return Job.Gearbox; } + } + + IGearboxEngineeringInputData IVehicleEngineeringInputData.GearboxInputData + { + get { return Job.Gearbox; } + } + + ITorqueConverterDeclarationInputData IVehicleDeclarationInputData.TorqueConverterInputData + { + get { return Job.TorqueConverter; } + } + + ITorqueConverterEngineeringInputData IVehicleEngineeringInputData.TorqueConverterInputData + { + get { return Job.TorqueConverter; } + } + + IAxleGearInputData IVehicleEngineeringInputData.AxleGearInputData + { + get { return Job.AxleGear; } + } + + IAngledriveInputData IVehicleEngineeringInputData.AngledriveInputData + { + get { return this; } + } + + public IEngineEngineeringInputData EngineInputData + { + get { return Job.Engine; } + } + + IAxleGearInputData IVehicleDeclarationInputData.AxleGearInputData + { + get { return Job.AxleGear; } + } + + IAngledriveInputData IVehicleDeclarationInputData.AngledriveInputData + { + get { return this; } + } + + IEngineDeclarationInputData IVehicleDeclarationInputData.EngineInputData + { + get { return Job.Engine; } + } + + IAuxiliariesDeclarationInputData IVehicleDeclarationInputData.AuxiliaryInputData() + { + return Job; + } + + IRetarderInputData IVehicleEngineeringInputData.RetarderInputData + { + get { return this; } + } + + IPTOTransmissionInputData IVehicleEngineeringInputData.PTOTransmissionInputData + { + get { return this; } + } + + IAuxiliariesEngineeringInputData IVehicleEngineeringInputData.AuxiliaryInputData() + { + return Job; + } + + IRetarderInputData IVehicleDeclarationInputData.RetarderInputData + { + get { return this; } + } + + + IPTOTransmissionInputData IVehicleDeclarationInputData.PTOTransmissionInputData + { + get { return this; } + } + + + #endregion #region Airdrag @@ -387,4 +490,4 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return ""; } } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs index 09de364e5a1efd6eea072b88275fb26a3cf7d541..c50041ecf62e1eaafb4f655b30f58568d8f6d90c 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationAngledriveDataProvider.cs @@ -29,48 +29,48 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration -{ - public class XMLDeclarationAngledriveDataProvider : AbstractDeclarationXMLComponentDataProvider, IAngledriveInputData - { - public XMLDeclarationAngledriveDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider) - { - XBasePath = Helper.Query(VehiclePath, - XMLNames.Vehicle_Components, - XMLNames.Component_Angledrive, - XMLNames.ComponentDataWrapper); - } - - public AngledriveType Type - { - get { return InputData._vehicleInputData.AngulargearType; } - } - - public double Ratio - { - get { return GetDoubleElementValue(XMLNames.AngleDrive_Ratio); } - } - - public TableData LossMap - { - get - { - return ReadTableData(AttributeMappings.TransmissionLossmapMapping, - Helper.Query( - XMLNames.AngleDrive_TorqueLossMap, - XMLNames.Angledrive_LossMap_Entry)); - } - } - - public double Efficiency - { - get { throw new VectoException("Efficiency not supported in Declaration Mode!"); } - } - } -} \ No newline at end of file +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration +{ + public class XMLDeclarationAngledriveDataProvider : AbstractDeclarationXMLComponentDataProvider, IAngledriveInputData + { + public XMLDeclarationAngledriveDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider) + { + XBasePath = Helper.Query(VehiclePath, + XMLNames.Vehicle_Components, + XMLNames.Component_Angledrive, + XMLNames.ComponentDataWrapper); + } + + public AngledriveType Type + { + get { return InputData.XMLJob.XMLVehicle.AngulargearType; } + } + + public double Ratio + { + get { return GetDoubleElementValue(XMLNames.AngleDrive_Ratio); } + } + + public TableData LossMap + { + get + { + return ReadTableData(AttributeMappings.TransmissionLossmapMapping, + Helper.Query( + XMLNames.AngleDrive_TorqueLossMap, + XMLNames.Angledrive_LossMap_Entry)); + } + } + + public double Efficiency + { + get { throw new VectoException("Efficiency not supported in Declaration Mode!"); } + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationDriverDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationDriverDataProvider.cs deleted file mode 100644 index 76b683eb75cee947b6b3d85ecdc7e8d60d205339..0000000000000000000000000000000000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationDriverDataProvider.cs +++ /dev/null @@ -1,61 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2017 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCore.InputData.Impl; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration -{ - public class XMLDeclarationDriverDataProvider : AbstractDeclarationXMLComponentDataProvider, - IDriverDeclarationInputData - { - public XMLDeclarationDriverDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) - : base(xmlInputDataProvider) - { - XBasePath = VehiclePath; - } - - public IOverSpeedEcoRollDeclarationInputData OverSpeedEcoRoll - { - get { - //var node = - // Navigator.SelectSingleNode(Helper.Query(VehiclePath, - // XMLNames.Vehicle_AdvancedDriverAssist, - // XMLNames.DriverModel_Overspeed, - // XMLNames.DriverModel_Overspeed_Mode), Manager); - return new OverSpeedEcoRollInputData() { - Mode = DriverMode.Overspeed - }; - } - } - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs index 87fdd1356c60bb0f627039844a89bf6bd40757b7..27af6be5ac3abb891dbb62264ec6f006cd366523 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs @@ -45,10 +45,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration { internal readonly XPathDocument Document; - private readonly IAuxiliariesDeclarationInputData XMLAuxiliaryData; - private readonly IDriverDeclarationInputData XMLDriverData; - private readonly IDeclarationJobInputData XMLJobData; - protected internal readonly XMLDeclarationVehicleDataProvider _vehicleInputData; + //private readonly IAuxiliariesDeclarationInputData XMLAuxiliaryData; + //private readonly IDriverDeclarationInputData XMLDriverData; + private readonly XMLDeclarationJobInputDataProvider _xmlJobData; + //protected internal readonly XMLDeclarationVehicleDataProvider _vehicleInputData; public XMLDeclarationInputDataProvider(XmlReader inputData, bool verifyXml) { @@ -75,18 +75,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration //CheckInputDocument(); - XMLJobData = new XMLDeclarationJobInputDataProvider(this); - _vehicleInputData = new XMLDeclarationVehicleDataProvider(this); - AirdragInputData = new XMLDeclarationAirdragDataProvider(this); - AxleGearInputData = new XMLDeclarationAxlegearDataProvider(this); - AngledriveInputData = new XMLDeclarationAngledriveDataProvider(this); - EngineInputData = new XMLDeclarationEngineDataProvider(this); - GearboxInputData = new XMLDeclarationGearboxDataProvider(this); - TorqueConverterInputData = new XMLDeclarationTorqueConverterDataProvider(this); - RetarderInputData = new XMLDeclarationRetarderDataProvider(this); - XMLDriverData = new XMLDeclarationDriverDataProvider(this); - XMLAuxiliaryData = new XMLDeclarationAuxiliaryDataProvider(this); - PTOTransmissionInputData = _vehicleInputData.GetPTOData(); + _xmlJobData = new XMLDeclarationJobInputDataProvider(this); + //_vehicleInputData = new XMLDeclarationVehicleDataProvider(this); + //AirdragInputData = new XMLDeclarationAirdragDataProvider(this); + //AxleGearInputData = new XMLDeclarationAxlegearDataProvider(this); + //AngledriveInputData = new XMLDeclarationAngledriveDataProvider(this); + //EngineInputData = new XMLDeclarationEngineDataProvider(this); + //GearboxInputData = new XMLDeclarationGearboxDataProvider(this); + //TorqueConverterInputData = new XMLDeclarationTorqueConverterDataProvider(this); + //RetarderInputData = new XMLDeclarationRetarderDataProvider(this); + //XMLDriverData = new XMLDeclarationDriverDataProvider(this); + //XMLAuxiliaryData = new XMLDeclarationAuxiliaryDataProvider(this); + //PTOTransmissionInputData = _vehicleInputData.GetPTOData(); } private static void ValidationCallBack(object sender, ValidationEventArgs args) @@ -107,41 +107,46 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration return xset; } - public IDeclarationJobInputData JobInputData() + public IDeclarationJobInputData JobInputData { - return XMLJobData; + get { return _xmlJobData; } } - public IVehicleDeclarationInputData VehicleInputData + public XMLDeclarationJobInputDataProvider XMLJob { - get { return _vehicleInputData; } + get { return _xmlJobData; } } - public IAirdragDeclarationInputData AirdragInputData { get; private set; } + //public IVehicleDeclarationInputData VehicleInputData + //{ + // get { return _vehicleInputData; } + //} - public IGearboxDeclarationInputData GearboxInputData { get; private set; } + //public IAirdragDeclarationInputData AirdragInputData { get; private set; } - public ITorqueConverterDeclarationInputData TorqueConverterInputData { get; private set; } + //public IGearboxDeclarationInputData GearboxInputData { get; private set; } - public IAxleGearInputData AxleGearInputData { get; private set; } + //public ITorqueConverterDeclarationInputData TorqueConverterInputData { get; private set; } - public IAngledriveInputData AngledriveInputData { get; private set; } + //public IAxleGearInputData AxleGearInputData { get; private set; } - public IEngineDeclarationInputData EngineInputData { get; private set; } + //public IAngledriveInputData AngledriveInputData { get; private set; } - public IAuxiliariesDeclarationInputData AuxiliaryInputData() - { - return XMLAuxiliaryData; - } + //public IEngineDeclarationInputData EngineInputData { get; private set; } - public IRetarderInputData RetarderInputData { get; private set; } + //public IAuxiliariesDeclarationInputData AuxiliaryInputData() + //{ + // return XMLAuxiliaryData; + //} - public IDriverDeclarationInputData DriverInputData - { - get { return XMLDriverData; } - } + //public IRetarderInputData RetarderInputData { get; private set; } + + //public IDriverDeclarationInputData DriverInputData + //{ + // get { return XMLDriverData; } + //} - public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; } + //public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; } public XElement XMLHash { get; private set; } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs index 5f0447ef1b0e03cc73383d22aa07667083eb5170..300a9294e0646b4052d84792caa08a4d0e6ae1bf 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs @@ -37,15 +37,24 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration // ReSharper disable once InconsistentNaming public class XMLDeclarationJobInputDataProvider : AbstractDeclarationXMLComponentDataProvider, IDeclarationJobInputData { - public XMLDeclarationJobInputDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider) + private readonly XMLDeclarationVehicleDataProvider _vehicle; + + public XMLDeclarationJobInputDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) + : base(xmlInputDataProvider) { XBasePath = VehiclePath; + _vehicle = new XMLDeclarationVehicleDataProvider(xmlInputDataProvider); } public IVehicleDeclarationInputData Vehicle { - get { return InputData.VehicleInputData; } + get { return _vehicle; } + } + + public XMLDeclarationVehicleDataProvider XMLVehicle + { + get { return _vehicle; } } public string JobName diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs index f13861ad1680ea92c38ab84abd5e92e0290097ea..4e03a20b1c6b79586569b7d29f278eb7149e53eb 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationRetarderDataProvider.cs @@ -29,46 +29,46 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration -{ - public class XMLDeclarationRetarderDataProvider : AbstractDeclarationXMLComponentDataProvider, IRetarderInputData - { - public XMLDeclarationRetarderDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider) - { - XBasePath = Helper.Query(VehiclePath, - XMLNames.Vehicle_Components, - XMLNames.Component_Retarder, - XMLNames.ComponentDataWrapper); - } - - - public override bool SavedInDeclarationMode - { - get { return true; } - } - - public RetarderType Type - { - get { return InputData._vehicleInputData.RetarderType; } - } - - public double Ratio - { - get { return InputData._vehicleInputData.RetarderRatio; } - } - - public TableData LossMap - { - get - { - return ReadTableData(AttributeMappings.RetarderLossmapMapping, - Helper.Query(XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry)); - } - } - } -} \ No newline at end of file +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration +{ + public class XMLDeclarationRetarderDataProvider : AbstractDeclarationXMLComponentDataProvider, IRetarderInputData + { + public XMLDeclarationRetarderDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider) + { + XBasePath = Helper.Query(VehiclePath, + XMLNames.Vehicle_Components, + XMLNames.Component_Retarder, + XMLNames.ComponentDataWrapper); + } + + + public override bool SavedInDeclarationMode + { + get { return true; } + } + + public RetarderType Type + { + get { return InputData.XMLJob.XMLVehicle.RetarderType; } + } + + public double Ratio + { + get { return InputData.XMLJob.XMLVehicle.RetarderRatio; } + } + + public TableData LossMap + { + get + { + return ReadTableData(AttributeMappings.RetarderLossmapMapping, + Helper.Query(XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry)); + } + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs index af787557a5dcd8bd7a6a284e15f8d83bb8915d7c..b2c8e7c15e92f90ba1ee8550081b1b2ca38e40f1 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs @@ -46,10 +46,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration public class XMLDeclarationVehicleDataProvider : AbstractDeclarationXMLComponentDataProvider, IVehicleDeclarationInputData, IPTOTransmissionInputData { + private readonly IAuxiliariesDeclarationInputData XMLAuxiliaryData; + public XMLDeclarationVehicleDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider) { XBasePath = VehiclePath; + AirdragInputData = new XMLDeclarationAirdragDataProvider(xmlInputDataProvider); + AxleGearInputData = new XMLDeclarationAxlegearDataProvider(xmlInputDataProvider); + AngledriveInputData = new XMLDeclarationAngledriveDataProvider(xmlInputDataProvider); + EngineInputData = new XMLDeclarationEngineDataProvider(xmlInputDataProvider); + GearboxInputData = new XMLDeclarationGearboxDataProvider(xmlInputDataProvider); + TorqueConverterInputData = new XMLDeclarationTorqueConverterDataProvider(xmlInputDataProvider); + RetarderInputData = new XMLDeclarationRetarderDataProvider(xmlInputDataProvider); + XMLAuxiliaryData = new XMLDeclarationAuxiliaryDataProvider(xmlInputDataProvider); } public string VIN @@ -181,11 +191,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration get { return GetElementValue(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); } } - public IPTOTransmissionInputData GetPTOData() - { - return this; - } - public string PTOTransmissionType { get { @@ -214,5 +219,29 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration { get { return null; } } + + public IAirdragDeclarationInputData AirdragInputData { get; private set; } + + public IGearboxDeclarationInputData GearboxInputData { get; private set; } + + public ITorqueConverterDeclarationInputData TorqueConverterInputData { get; private set; } + + public IAxleGearInputData AxleGearInputData { get; private set; } + + public IAngledriveInputData AngledriveInputData { get; private set; } + + public IEngineDeclarationInputData EngineInputData { get; private set; } + + public IAuxiliariesDeclarationInputData AuxiliaryInputData() + { + return XMLAuxiliaryData; + } + + public IRetarderInputData RetarderInputData { get; private set; } + + public IPTOTransmissionInputData PTOTransmissionInputData + { + get { return this; } + } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs index 5d40e4ce5c52129d48f98d3cac1c0e40cf8139d9..daaa388879a0e3fde41ac122d0243566f370ac16 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs @@ -29,217 +29,221 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.IO; -using System.Xml; -using System.Xml.Schema; -using System.Xml.XPath; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.Utils; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringInputDataProvider : IEngineeringInputDataProvider - { - public readonly string FileName; - - internal XPathDocument Document; - - protected internal XMLEngineeringAuxiliaryDataProvider XMLEngineeringAuxiliaryData; - protected internal XMLEngineeringDriverDataProvider XMLEngineeringDriverData; - protected internal XMLEngineeringJobInputDataProvider XMLEngineeringJobData; - protected internal XMLEngineeringVehicleDataProvider VehicleData; - protected internal XMLEngineeringAxlegearDataProvider AxlegearData; - - public XMLEngineeringInputDataProvider(string filename, bool verifyXml) - { - FileName = filename; - ReadXMLDocument(File.OpenRead(filename), verifyXml); - - InitializeComponentDataProvider(verifyXml); - } - - - public XMLEngineeringInputDataProvider(Stream inputData, bool verifyXml) - { - FileName = "."; - ReadXMLDocument(inputData, verifyXml); - - var nav = Document.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - var refNodes = - nav.Select( - "//" + helper.Query(helper.QueryConstraint(XMLNames.ExternalResource, XMLNames.ExtResource_File_Attr, null)), - manager); - if (refNodes.Count > 0) { - throw new VectoException("XML input data with file references can not be read via stream!"); - } - - InitializeComponentDataProvider(verifyXml); - } - - - private void ReadXMLDocument(Stream inputData, bool verifyXml) - { - XmlReaderSettings settings = null; - if (verifyXml) { - settings = new XmlReaderSettings { - ValidationType = ValidationType.Schema, - ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema | - //XmlSchemaValidationFlags.ProcessSchemaLocation | - XmlSchemaValidationFlags.ReportValidationWarnings - }; - settings.ValidationEventHandler += ValidationCallBack; - settings.Schemas.Add(GetXMLSchema("")); - } - try { - Document = new XPathDocument(XmlReader.Create(inputData, settings)); - } catch (XmlSchemaValidationException validationException) { - throw new VectoException("Validation of input data failed", validationException); - } - } - - private void InitializeComponentDataProvider(bool verifyXml) - { - XmlReaderSettings settings = null; - if (verifyXml) { - settings = new XmlReaderSettings { - ValidationType = ValidationType.Schema, - ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema | - //XmlSchemaValidationFlags.ProcessSchemaLocation | - XmlSchemaValidationFlags.ReportValidationWarnings - }; - settings.Schemas.Add(GetXMLSchema("")); - } - - var helper = new XPathHelper(ExecutionMode.Engineering); - XMLEngineeringJobData = new XMLEngineeringJobInputDataProvider(this, Document, - helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix)), - Path.GetDirectoryName(Path.GetFullPath(FileName))); - if (XMLEngineeringJobData.EngineOnlyMode) { - EngineInputData = new XMLEngineeringEngineDataProvider(this, Document, - helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Engine, - XMLNames.ComponentDataWrapper), Path.GetDirectoryName(Path.GetFullPath(FileName))); - return; - } - ReadVehicle(settings); - - XMLEngineeringDriverData = XMLEngineeringJobData.GetDriverData(); - AxlegearData = VehicleData.GetAxleGearInputData(settings); - AngledriveInputData = VehicleData.GetAngularGearInputData(); - EngineInputData = VehicleData.GetEngineInputData(settings); - RetarderInputData = VehicleData.GetRetarderInputData(settings); - XMLEngineeringAuxiliaryData = VehicleData.GetAuxiliaryData(settings); - GearboxInputData = VehicleData.GetGearboxData(settings); - TorqueConverterInputData = GearboxInputData.TorqueConverter; - PTOTransmissionInputData = VehicleData.GetPTOData(); - AirdragInputData = VehicleData.GetAirdragInputData(settings); - } - - private static void ValidationCallBack(object sender, ValidationEventArgs args) - { - if (args.Severity == XmlSeverityType.Error) { - throw new VectoException("Validation error: {0}", args.Message); - } - } - - private void ReadVehicle(XmlReaderSettings settings) - { - var helper = new XPathHelper(ExecutionMode.Engineering); - - - var nav = Document.CreateNavigator(); - var vehiclePath = helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle); - var manager = new XmlNamespaceManager(nav.NameTable); - helper.AddNamespaces(manager); - var vehicle = nav.SelectSingleNode(vehiclePath, manager); - if (vehicle != null) { - VehicleData = new XMLEngineeringVehicleDataProvider(this, Document, vehiclePath, - Path.GetDirectoryName(Path.GetFullPath(FileName))); - return; - } - - var extVehilePath = helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - helper.QueryConstraint(XMLNames.ExternalResource, "@component='Vehicle' and @type='xml'", null, "")); - var extVehicle = nav.SelectSingleNode(extVehilePath, manager); - if (extVehicle != null) { - try { - var vehicleFile = extVehicle.GetAttribute(XMLNames.ExtResource_File_Attr, ""); - var vehicleDocument = new XPathDocument( - XmlReader.Create(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile), - settings)); - var vehicleCompPath = - helper.QueryAbs( - helper.NSPrefix("VectoComponentEngineering", Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle); - VehicleData = new XMLEngineeringVehicleDataProvider(this, vehicleDocument, vehicleCompPath, - Path.GetDirectoryName(Path.GetFullPath(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile)))); - return; - } catch (XmlSchemaValidationException validationException) { - throw new VectoException("Validation of XML-file for Vehicle failed", validationException); - } - } - throw new VectoException("No Vehicle found"); - } - - private static XmlSchemaSet GetXMLSchema(string version) - { - var resource = RessourceHelper.LoadResourceAsStream(RessourceHelper.ResourceType.XMLSchema, - "VectoEngineeringInput.xsd"); - var xset = new XmlSchemaSet() { XmlResolver = new XmlResourceResolver() }; - var reader = XmlReader.Create(resource, new XmlReaderSettings(), XmlResourceResolver.BaseUri); - xset.Add(XmlSchema.Read(reader, null)); - xset.Compile(); - return xset; - } - - public IEngineeringJobInputData JobInputData() - { - return XMLEngineeringJobData; - } - - public IVehicleEngineeringInputData VehicleInputData - { - get { return VehicleData; } - } - - public IAirdragEngineeringInputData AirdragInputData { get; private set; } - - - public IGearboxEngineeringInputData GearboxInputData { get; private set; } - - public ITorqueConverterEngineeringInputData TorqueConverterInputData { get; private set; } - - public IAxleGearInputData AxleGearInputData - { - get { return AxlegearData; } - } - - public IAngledriveInputData AngledriveInputData { get; private set; } - - public IEngineEngineeringInputData EngineInputData { get; private set; } - - public IAuxiliariesEngineeringInputData AuxiliaryInputData() - { - return XMLEngineeringAuxiliaryData; - } - - public IRetarderInputData RetarderInputData { get; private set; } - - public IDriverEngineeringInputData DriverInputData - { - get { return XMLEngineeringDriverData; } - } - - public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; } - } -} \ No newline at end of file +using System.IO; +using System.Xml; +using System.Xml.Schema; +using System.Xml.XPath; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering +{ + public class XMLEngineeringInputDataProvider : IEngineeringInputDataProvider + { + public readonly string FileName; + + internal XPathDocument Document; + + protected internal XMLEngineeringJobInputDataProvider XMLEngineeringJobData; + + protected internal XMLEngineeringVehicleDataProvider VehicleData; + protected internal XMLEngineeringDriverDataProvider XMLEngineeringDriverData; + + public XmlReaderSettings Settings { get; private set; } + + //protected internal XMLEngineeringAuxiliaryDataProvider XMLEngineeringAuxiliaryData; + //protected internal XMLEngineeringAxlegearDataProvider AxlegearData; + + public XMLEngineeringInputDataProvider(string filename, bool verifyXml) + { + FileName = filename; + ReadXMLDocument(File.OpenRead(filename), verifyXml); + + InitializeComponentDataProvider(verifyXml); + } + + + public XMLEngineeringInputDataProvider(Stream inputData, bool verifyXml) + { + FileName = "."; + ReadXMLDocument(inputData, verifyXml); + + var nav = Document.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + var refNodes = + nav.Select( + "//" + helper.Query(helper.QueryConstraint(XMLNames.ExternalResource, XMLNames.ExtResource_File_Attr, null)), + manager); + if (refNodes.Count > 0) { + throw new VectoException("XML input data with file references can not be read via stream!"); + } + + InitializeComponentDataProvider(verifyXml); + } + + + private void ReadXMLDocument(Stream inputData, bool verifyXml) + { + XmlReaderSettings settings = null; + if (verifyXml) { + settings = new XmlReaderSettings { + ValidationType = ValidationType.Schema, + ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema | + //XmlSchemaValidationFlags.ProcessSchemaLocation | + XmlSchemaValidationFlags.ReportValidationWarnings + }; + settings.ValidationEventHandler += ValidationCallBack; + settings.Schemas.Add(GetXMLSchema("")); + } + try { + Document = new XPathDocument(XmlReader.Create(inputData, settings)); + } catch (XmlSchemaValidationException validationException) { + throw new VectoException("Validation of input data failed", validationException); + } + } + + private void InitializeComponentDataProvider(bool verifyXml) + { + Settings = null; + if (verifyXml) { + Settings = new XmlReaderSettings { + ValidationType = ValidationType.Schema, + ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema | + //XmlSchemaValidationFlags.ProcessSchemaLocation | + XmlSchemaValidationFlags.ReportValidationWarnings + }; + Settings.Schemas.Add(GetXMLSchema("")); + } + + var helper = new XPathHelper(ExecutionMode.Engineering); + XMLEngineeringJobData = new XMLEngineeringJobInputDataProvider(this, Document, + helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix)), + Path.GetDirectoryName(Path.GetFullPath(FileName))); + if (XMLEngineeringJobData.EngineOnlyMode) { + EngineOnlyInputData = new XMLEngineeringEngineDataProvider(this, Document, + helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Engine, + XMLNames.ComponentDataWrapper), Path.GetDirectoryName(Path.GetFullPath(FileName))); + return; + } + ReadVehicle(Settings); + + XMLEngineeringDriverData = XMLEngineeringJobData.GetDriverData(); + //AxlegearData = VehicleData.GetAxleGearInputData(settings); + //AngledriveInputData = VehicleData.GetAngularGearInputData(); + //EngineInputData = VehicleData.GetEngineInputData(settings); + //RetarderInputData = VehicleData.GetRetarderInputData(settings); + //XMLEngineeringAuxiliaryData = VehicleData.GetAuxiliaryData(settings); + //GearboxInputData = VehicleData.GetGearboxData(settings); + //TorqueConverterInputData = GearboxInputData.TorqueConverter; + //PTOTransmissionInputData = VehicleData.GetPTOData(); + //AirdragInputData = VehicleData.GetAirdragInputData(settings); + } + + private static void ValidationCallBack(object sender, ValidationEventArgs args) + { + if (args.Severity == XmlSeverityType.Error) { + throw new VectoException("Validation error: {0}", args.Message); + } + } + + private void ReadVehicle(XmlReaderSettings settings) + { + var helper = new XPathHelper(ExecutionMode.Engineering); + + + var nav = Document.CreateNavigator(); + var vehiclePath = helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle); + var manager = new XmlNamespaceManager(nav.NameTable); + helper.AddNamespaces(manager); + var vehicle = nav.SelectSingleNode(vehiclePath, manager); + if (vehicle != null) { + VehicleData = new XMLEngineeringVehicleDataProvider(this, Document, vehiclePath, + Path.GetDirectoryName(Path.GetFullPath(FileName))); + return; + } + + var extVehilePath = helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + helper.QueryConstraint(XMLNames.ExternalResource, "@component='Vehicle' and @type='xml'", null, "")); + var extVehicle = nav.SelectSingleNode(extVehilePath, manager); + if (extVehicle != null) { + try { + var vehicleFile = extVehicle.GetAttribute(XMLNames.ExtResource_File_Attr, ""); + var vehicleDocument = new XPathDocument( + XmlReader.Create(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile), + settings)); + var vehicleCompPath = + helper.QueryAbs( + helper.NSPrefix("VectoComponentEngineering", Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle); + VehicleData = new XMLEngineeringVehicleDataProvider(this, vehicleDocument, vehicleCompPath, + Path.GetDirectoryName(Path.GetFullPath(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile)))); + return; + } catch (XmlSchemaValidationException validationException) { + throw new VectoException("Validation of XML-file for Vehicle failed", validationException); + } + } + throw new VectoException("No Vehicle found"); + } + + private static XmlSchemaSet GetXMLSchema(string version) + { + var resource = RessourceHelper.LoadResourceAsStream(RessourceHelper.ResourceType.XMLSchema, + "VectoEngineeringInput.xsd"); + var xset = new XmlSchemaSet() { XmlResolver = new XmlResourceResolver() }; + var reader = XmlReader.Create(resource, new XmlReaderSettings(), XmlResourceResolver.BaseUri); + xset.Add(XmlSchema.Read(reader, null)); + xset.Compile(); + return xset; + } + + public IEngineeringJobInputData JobInputData + { + get { return XMLEngineeringJobData; } + } + + public IVehicleEngineeringInputData VehicleInputData + { + get { return VehicleData; } + } + + //public IAirdragEngineeringInputData AirdragInputData { get; private set; } + + + //public IGearboxEngineeringInputData GearboxInputData { get; private set; } + + //public ITorqueConverterEngineeringInputData TorqueConverterInputData { get; private set; } + + //public IAxleGearInputData AxleGearInputData + //{ + // get { return AxlegearData; } + //} + + //public IAngledriveInputData AngledriveInputData { get; private set; } + + public IEngineEngineeringInputData EngineOnlyInputData { get; private set; } + + //public IAuxiliariesEngineeringInputData AuxiliaryInputData() + //{ + // return XMLEngineeringAuxiliaryData; + //} + + //public IRetarderInputData RetarderInputData { get; private set; } + + public IDriverEngineeringInputData DriverInputData + { + get { return XMLEngineeringDriverData; } + } + + //public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs index 50d44c5e76a300a9df74e5c2b42d21ad16baf2c9..324054616a2a41207b09eaf43bb792a195a8c119 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs @@ -29,232 +29,237 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.Collections.Generic; -using System.IO; -using System.Xml; -using System.Xml.XPath; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.InputData.Impl; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Utils; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - // ReSharper disable once InconsistentNaming - public class XMLEngineeringJobInputDataProvider : AbstractEngineeringXMLComponentDataProvider, IEngineeringJobInputData - { - public XMLEngineeringJobInputDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XPathDocument jobDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, jobDocument, xmlBasePath, fsBasePath) {} - - - public IVehicleDeclarationInputData Vehicle - { - get { return InputData.VehicleInputData; } - } - - IVehicleEngineeringInputData IEngineeringJobInputData.Vehicle - { - get { return InputData.VehicleInputData; } - } - - //IEngineEngineeringInputData EngineInputData - //{ - // get { return new XMLEngineeringEngineDataProvider(InputData, XMLDocument, Helper.Query(XBasePath, XMLNames.Component_Engine, XMLNames.ComponentDataWrapper) ,FSBasePath); } - //} - - public IList<ICycleData> Cycles - { - get { - var retVal = new List<ICycleData>(); - var cycles = Navigator.Select(Helper.Query(XBasePath, XMLNames.VectoJob_MissionCycles, - Helper.QueryConstraint(XMLNames.Missions_Cycle, XMLNames.ExtResource_Type_Attr, - XMLNames.ExtResource_Type_Value_CSV)), Manager); - while (cycles.MoveNext()) { - var file = cycles.Current.GetAttribute(XMLNames.ExtResource_File_Attr, ""); - var fileFull = Path.Combine(FSBasePath ?? "", file); - if (File.Exists(fileFull)) { - retVal.Add(new CycleInputData() { - Name = Path.GetFileNameWithoutExtension(fileFull), - CycleData = VectoCSVFile.Read(fileFull) - }); - } else { - try { - var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + file + - Constants.FileExtensions.CycleFile; - retVal.Add(new CycleInputData() { - Name = Path.GetFileNameWithoutExtension(file), - CycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName), - }); - } catch { - //Log.Debug("Driving Cycle could not be read: " + cycleFile); - throw new VectoException("Driving Cycle could not be read: " + file); - } - } - } - return retVal; - } - } - - public bool EngineOnlyMode - { - get { - return ElementExists(XMLNames.VectoJob_EngineOnlyMode) && - XmlConvert.ToBoolean(GetElementValue(XMLNames.VectoJob_EngineOnlyMode)); - } - } - - protected internal Second DownshiftAfterUpshiftDelay - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "DownshiftAfterUpshiftDelay")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "DownshiftAfterUpshiftDelay")).SI<Second>() - : DeclarationData.Gearbox.DownshiftAfterUpshiftDelay; - } - } - - protected internal Second UpshiftAfterDownshiftDelay - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "UpshiftAfterDownshiftDelay")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "UpshiftAfterDownshiftDelay")).SI<Second>() - : DeclarationData.Gearbox.UpshiftAfterDownshiftDelay; - } - } - - protected internal MeterPerSquareSecond UpshiftMinAcceleration - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "UpshiftMinAcceleration")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "UpshiftMinAcceleration")) - .SI<MeterPerSquareSecond>() - : DeclarationData.Gearbox.UpshiftMinAcceleration; - } - } - - - public string JobName - { - get { - return InputData.JobInputData().EngineOnlyMode - ? InputData.EngineInputData.Model - : InputData.VehicleData.GetVehicleID; - } - } - - public double TorqueReserve - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve)) - : DeclarationData.Gearbox.TorqueReserve; - } - } - - public Second MinTimeBetweenGearshift - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift)).SI<Second>() - : DeclarationData.Gearbox.MinTimeBetweenGearshifts; - } - } - - public MeterPerSecond StartSpeed - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed)).SI<MeterPerSecond>() - : DeclarationData.Gearbox.StartSpeed; - } - } - - public MeterPerSquareSecond StartAcceleration - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration)).SI<MeterPerSquareSecond>() - : DeclarationData.Gearbox.StartAcceleration; - } - } - - public double StartTorqueReserve - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve)) - : DeclarationData.Gearbox.TorqueReserveStart; - } - } - - - public Second PowershiftShiftTime - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "PowershiftShiftTime")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "PowershiftShiftTime")).SI<Second>() - : 0.8.SI<Second>(); - } - } - - public MeterPerSquareSecond CCUpshiftMinAcceleration - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "CCUpshiftMinAcceleration")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "CCUpshiftMinAcceleration")).SI<MeterPerSquareSecond>() - : DeclarationData.Gearbox.UpshiftMinAcceleration; - } - } - - public MeterPerSquareSecond CLUpshiftMinAcceleration - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "CLUpshiftMinAcceleration")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "CLUpshiftMinAcceleration")).SI<MeterPerSquareSecond>() - : DeclarationData.Gearbox.UpshiftMinAcceleration; - } - } - - public XMLEngineeringDriverDataProvider GetDriverData() - { - return new XMLEngineeringDriverDataProvider(InputData, XMLDocument, XBasePath, FSBasePath); - } - } -} \ No newline at end of file +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Xml.XPath; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.Impl; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering +{ + // ReSharper disable once InconsistentNaming + public class XMLEngineeringJobInputDataProvider : AbstractEngineeringXMLComponentDataProvider, IEngineeringJobInputData + { + public XMLEngineeringJobInputDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, + XPathDocument jobDocument, string xmlBasePath, string fsBasePath) + : base(xmlEngineeringJobInputDataProvider, jobDocument, xmlBasePath, fsBasePath) {} + + + public IVehicleDeclarationInputData Vehicle + { + get { return InputData.VehicleInputData; } + } + + IVehicleEngineeringInputData IEngineeringJobInputData.Vehicle + { + get { return InputData.VehicleInputData; } + } + + //IEngineEngineeringInputData EngineInputData + //{ + // get { return new XMLEngineeringEngineDataProvider(InputData, XMLDocument, Helper.Query(XBasePath, XMLNames.Component_Engine, XMLNames.ComponentDataWrapper) ,FSBasePath); } + //} + + public IList<ICycleData> Cycles + { + get { + var retVal = new List<ICycleData>(); + var cycles = Navigator.Select(Helper.Query(XBasePath, XMLNames.VectoJob_MissionCycles, + Helper.QueryConstraint(XMLNames.Missions_Cycle, XMLNames.ExtResource_Type_Attr, + XMLNames.ExtResource_Type_Value_CSV)), Manager); + while (cycles.MoveNext()) { + var file = cycles.Current.GetAttribute(XMLNames.ExtResource_File_Attr, ""); + var fileFull = Path.Combine(FSBasePath ?? "", file); + if (File.Exists(fileFull)) { + retVal.Add(new CycleInputData() { + Name = Path.GetFileNameWithoutExtension(fileFull), + CycleData = VectoCSVFile.Read(fileFull) + }); + } else { + try { + var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + file + + Constants.FileExtensions.CycleFile; + retVal.Add(new CycleInputData() { + Name = Path.GetFileNameWithoutExtension(file), + CycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName), + }); + } catch { + //Log.Debug("Driving Cycle could not be read: " + cycleFile); + throw new VectoException("Driving Cycle could not be read: " + file); + } + } + } + return retVal; + } + } + + public bool EngineOnlyMode + { + get { + return ElementExists(XMLNames.VectoJob_EngineOnlyMode) && + XmlConvert.ToBoolean(GetElementValue(XMLNames.VectoJob_EngineOnlyMode)); + } + } + + public IEngineEngineeringInputData EngineOnly + { + get { return InputData.EngineOnlyInputData; } + } + + protected internal Second DownshiftAfterUpshiftDelay + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "DownshiftAfterUpshiftDelay")) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "DownshiftAfterUpshiftDelay")).SI<Second>() + : DeclarationData.Gearbox.DownshiftAfterUpshiftDelay; + } + } + + protected internal Second UpshiftAfterDownshiftDelay + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "UpshiftAfterDownshiftDelay")) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "UpshiftAfterDownshiftDelay")).SI<Second>() + : DeclarationData.Gearbox.UpshiftAfterDownshiftDelay; + } + } + + protected internal MeterPerSquareSecond UpshiftMinAcceleration + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "UpshiftMinAcceleration")) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "UpshiftMinAcceleration")) + .SI<MeterPerSquareSecond>() + : DeclarationData.Gearbox.UpshiftMinAcceleration; + } + } + + + public string JobName + { + get { + return InputData.JobInputData.EngineOnlyMode + ? InputData.JobInputData.EngineOnly.Model + : InputData.VehicleData.GetVehicleID; + } + } + + public double TorqueReserve + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve)) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve)) + : DeclarationData.Gearbox.TorqueReserve; + } + } + + public Second MinTimeBetweenGearshift + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift)) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift)).SI<Second>() + : DeclarationData.Gearbox.MinTimeBetweenGearshifts; + } + } + + public MeterPerSecond StartSpeed + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed)) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed)).SI<MeterPerSecond>() + : DeclarationData.Gearbox.StartSpeed; + } + } + + public MeterPerSquareSecond StartAcceleration + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration)) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration)).SI<MeterPerSquareSecond>() + : DeclarationData.Gearbox.StartAcceleration; + } + } + + public double StartTorqueReserve + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve)) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve)) + : DeclarationData.Gearbox.TorqueReserveStart; + } + } + + + public Second PowershiftShiftTime + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "PowershiftShiftTime")) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "PowershiftShiftTime")).SI<Second>() + : 0.8.SI<Second>(); + } + } + + public MeterPerSquareSecond CCUpshiftMinAcceleration + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "CCUpshiftMinAcceleration")) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "CCUpshiftMinAcceleration")).SI<MeterPerSquareSecond>() + : DeclarationData.Gearbox.UpshiftMinAcceleration; + } + } + + public MeterPerSquareSecond CLUpshiftMinAcceleration + { + get { + return + ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "CLUpshiftMinAcceleration")) + ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, + "CLUpshiftMinAcceleration")).SI<MeterPerSquareSecond>() + : DeclarationData.Gearbox.UpshiftMinAcceleration; + } + } + + public XMLEngineeringDriverDataProvider GetDriverData() + { + return new XMLEngineeringDriverDataProvider(InputData, XMLDocument, XBasePath, FSBasePath); + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs index bc02bb6a76f1af3664189268ef24d7ce7a6cdc48..a0bc6cb48c0b61e2edb3d7768048515148972d08 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs @@ -51,9 +51,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering IVehicleEngineeringInputData, IPTOTransmissionInputData { - public XMLEngineeringVehicleDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, + protected internal XMLEngineeringAuxiliaryDataProvider XMLEngineeringAuxiliaryData; + protected internal XMLEngineeringAxlegearDataProvider AxlegearData; + + public XMLEngineeringVehicleDataProvider(XMLEngineeringInputDataProvider jobProvider, XPathDocument vehicleDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, vehicleDocument, xmlBasePath, fsBasePath) {} + : base(jobProvider, vehicleDocument, xmlBasePath, fsBasePath) + { + AxlegearData = GetAxleGearInputData(jobProvider.Settings); + AngledriveInputData = GetAngularGearInputData(); + EngineInputData = GetEngineInputData(jobProvider.Settings); + RetarderInputData = GetRetarderInputData(jobProvider.Settings); + XMLEngineeringAuxiliaryData = GetAuxiliaryData(jobProvider.Settings); + GearboxInputData = GetGearboxData(jobProvider.Settings); + TorqueConverterInputData = GearboxInputData.TorqueConverter; + PTOTransmissionInputData = GetPTOData(); + AirdragInputData = GetAirdragInputData(jobProvider.Settings); + } public string GetVehicleID { @@ -224,25 +238,76 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering get { return GetElementValue(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); } } - public IAirdragEngineeringInputData GetAirdragInputData(XmlReaderSettings settings) + public IAirdragEngineeringInputData AirdragInputData { get; private set; } + + IAirdragDeclarationInputData IVehicleDeclarationInputData.AirdragInputData + { + get { return AirdragInputData; } + } + + IGearboxDeclarationInputData IVehicleDeclarationInputData.GearboxInputData + { + get { return GearboxInputData; } + } + + ITorqueConverterDeclarationInputData IVehicleDeclarationInputData.TorqueConverterInputData + { + get { return TorqueConverterInputData; } + } + + public IGearboxEngineeringInputData GearboxInputData { get; private set; } + + public ITorqueConverterEngineeringInputData TorqueConverterInputData { get; private set; } + + public IAxleGearInputData AxleGearInputData + { + get { return AxlegearData; } + } + + public IAngledriveInputData AngledriveInputData { get; private set; } + + IEngineDeclarationInputData IVehicleDeclarationInputData.EngineInputData + { + get { return EngineInputData; } + } + + public IEngineEngineeringInputData EngineInputData { get; private set; } + + public IAuxiliariesEngineeringInputData AuxiliaryInputData() + { + return XMLEngineeringAuxiliaryData; + } + + IAuxiliariesDeclarationInputData IVehicleDeclarationInputData.AuxiliaryInputData() + { + throw new NotImplementedException(); + } + + public IRetarderInputData RetarderInputData { get; private set; } + + public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; } + + #region "FactoryMethods" + + private IAirdragEngineeringInputData GetAirdragInputData(XmlReaderSettings settings) { return CreateComponentInput(XMLNames.Component_AirDrag, settings, (a, b, c, d) => new XMLEngineeringAirdragDataProvider(a, b, c, d)); } - public XMLEngineeringAxlegearDataProvider GetAxleGearInputData(XmlReaderSettings settings) + private XMLEngineeringAxlegearDataProvider GetAxleGearInputData(XmlReaderSettings settings) { return CreateComponentInput(XMLNames.Component_Axlegear, settings, (a, b, c, d) => new XMLEngineeringAxlegearDataProvider(a, b, c, d)); } - public XMLEngineeringEngineDataProvider GetEngineInputData(XmlReaderSettings settings) + private XMLEngineeringEngineDataProvider GetEngineInputData(XmlReaderSettings settings) { return CreateComponentInput(XMLNames.Component_Engine, settings, (a, b, c, d) => new XMLEngineeringEngineDataProvider(a, b, c, d)); } - public XMLEngineeringRetarderDataProvider GetRetarderInputData(XmlReaderSettings settings) + private XMLEngineeringRetarderDataProvider GetRetarderInputData(XmlReaderSettings settings) { if (!RetarderType.IsDedicatedComponent()) { return new XMLEngineeringRetarderDataProvider(InputData, XMLDocument, @@ -254,20 +319,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering (a, b, c, d) => new XMLEngineeringRetarderDataProvider(a, b, c, d)); } - public XMLEngineeringGearboxDataProvider GetGearboxData(XmlReaderSettings settings) + private XMLEngineeringGearboxDataProvider GetGearboxData(XmlReaderSettings settings) { return CreateComponentInput(XMLNames.Component_Gearbox, settings, (a, b, c, d) => new XMLEngineeringGearboxDataProvider(a, b, c, d)); } - public XMLEngineeringAuxiliaryDataProvider GetAuxiliaryData(XmlReaderSettings settings) + private XMLEngineeringAuxiliaryDataProvider GetAuxiliaryData(XmlReaderSettings settings) { return CreateComponentInput(XMLNames.Component_Auxiliaries, settings, (a, b, c, d) => new XMLEngineeringAuxiliaryDataProvider(a, b, c, d)); } - protected T CreateComponentInput<T>(string componentName, XmlReaderSettings settings, + private T CreateComponentInput<T>(string componentName, XmlReaderSettings settings, Func<XMLEngineeringInputDataProvider, XPathDocument, string, string, T> creator) { if (ElementExists(Helper.Query(XMLNames.Vehicle_Components, componentName))) { @@ -297,6 +362,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering throw new VectoException("Component {0} not found!", componentName); } + #endregion + public XMLEngineeringAngledriveDataProvider GetAngularGearInputData() { return new XMLEngineeringAngledriveDataProvider(InputData, XMLDocument, @@ -346,4 +413,4 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering #endregion } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index c3696d9f0b8b3647e7a5ee848732e9513792f562..08d226acfd4aba8319adbdfa0b5443d112628d0a 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -50,11 +50,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter { public class DeclarationDataAdapter : AbstractSimulationDataAdapter { - public DriverData CreateDriverData(IDriverDeclarationInputData data) + public DriverData CreateDriverData() { - if (!data.SavedInDeclarationMode) { - WarnDeclarationMode("DriverData"); - } var lookAheadData = new DriverData.LACData { Enabled = DeclarationData.Driver.LookAhead.Enabled, //Deceleration = DeclarationData.Driver.LookAhead.Deceleration, @@ -63,7 +60,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter LookAheadDistanceFactor = DeclarationData.Driver.LookAhead.LookAheadDistanceFactor, }; var overspeedData = new DriverData.OverSpeedEcoRollData { - Mode = data.OverSpeedEcoRoll.Mode, + Mode = DriverMode.Overspeed, MinSpeed = DeclarationData.Driver.OverSpeedEcoRoll.MinSpeed, OverSpeed = DeclarationData.Driver.OverSpeedEcoRoll.OverSpeed, UnderSpeed = DeclarationData.Driver.OverSpeedEcoRoll.UnderSpeed diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs index 232ac66901c97c98f95e948b3583dba45e074bb9..2fa122c79b7512692acf3b9967a8282363778d94 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs @@ -88,30 +88,33 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl private void Initialize() { _dao = new DeclarationDataAdapter(); - _segment = GetVehicleClassification(InputDataProvider.VehicleInputData.VehicleCategory, - InputDataProvider.VehicleInputData.AxleConfiguration, - InputDataProvider.VehicleInputData.GrossVehicleMassRating, InputDataProvider.VehicleInputData.CurbMassChassis); + _segment = GetVehicleClassification(InputDataProvider.JobInputData.Vehicle.VehicleCategory, + InputDataProvider.JobInputData.Vehicle.AxleConfiguration, + InputDataProvider.JobInputData.Vehicle.GrossVehicleMassRating, + InputDataProvider.JobInputData.Vehicle.CurbMassChassis); if (!_segment.Found) { throw new VectoException( "no segment found for vehicle configruation: vehicle category: {0}, axle configuration: {1}, GVMR: {2}", - InputDataProvider.VehicleInputData.VehicleCategory, InputDataProvider.VehicleInputData.AxleConfiguration, - InputDataProvider.VehicleInputData.GrossVehicleMassRating); + InputDataProvider.JobInputData.Vehicle.VehicleCategory, InputDataProvider.JobInputData.Vehicle.AxleConfiguration, + InputDataProvider.JobInputData.Vehicle.GrossVehicleMassRating); } - _driverdata = _dao.CreateDriverData(InputDataProvider.DriverInputData); + _driverdata = _dao.CreateDriverData(); _driverdata.AccelerationCurve = AccelerationCurveReader.ReadFromStream(_segment.AccelerationFile); - var tempVehicle = _dao.CreateVehicleData(InputDataProvider.VehicleInputData, _segment.Missions.First(), + var tempVehicle = _dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, _segment.Missions.First(), _segment.Missions.First().Loadings.First().Value, _segment.MunicipalBodyWeight); - _airdragData = _dao.CreateAirdragData(InputDataProvider.AirdragInputData, _segment.Missions.First(), _segment); - _engineData = _dao.CreateEngineData(InputDataProvider.EngineInputData, - InputDataProvider.VehicleInputData.EngineIdleSpeed, - InputDataProvider.GearboxInputData, InputDataProvider.VehicleInputData.TorqueLimits); - _axlegearData = _dao.CreateAxleGearData(InputDataProvider.AxleGearInputData, false); - _angledriveData = _dao.CreateAngledriveData(InputDataProvider.AngledriveInputData, false); - _gearboxData = _dao.CreateGearboxData(InputDataProvider.GearboxInputData, _engineData, _axlegearData.AxleGear.Ratio, + _airdragData = _dao.CreateAirdragData(InputDataProvider.JobInputData.Vehicle.AirdragInputData, + _segment.Missions.First(), _segment); + _engineData = _dao.CreateEngineData(InputDataProvider.JobInputData.Vehicle.EngineInputData, + InputDataProvider.JobInputData.Vehicle.EngineIdleSpeed, + InputDataProvider.JobInputData.Vehicle.GearboxInputData, InputDataProvider.JobInputData.Vehicle.TorqueLimits); + _axlegearData = _dao.CreateAxleGearData(InputDataProvider.JobInputData.Vehicle.AxleGearInputData, false); + _angledriveData = _dao.CreateAngledriveData(InputDataProvider.JobInputData.Vehicle.AngledriveInputData, false); + _gearboxData = _dao.CreateGearboxData(InputDataProvider.JobInputData.Vehicle.GearboxInputData, _engineData, + _axlegearData.AxleGear.Ratio, tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory, false); - _retarderData = _dao.CreateRetarderData(InputDataProvider.RetarderInputData); + _retarderData = _dao.CreateRetarderData(InputDataProvider.JobInputData.Vehicle.RetarderInputData); - _ptoTransmissionData = _dao.CreatePTOTransmissionData(InputDataProvider.PTOTransmissionInputData); + _ptoTransmissionData = _dao.CreatePTOTransmissionData(InputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData); _municipalPtoTransmissionData = CreateDefaultPTOData(); } @@ -120,15 +123,17 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { var powertrainConfig = new VectoRunData() { VehicleData = - _dao.CreateVehicleData(InputDataProvider.VehicleInputData, _segment.Missions.First(), + _dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, _segment.Missions.First(), _segment.Missions.First().Loadings.First().Value, _segment.MunicipalBodyWeight), AirdragData = _airdragData, EngineData = _engineData, GearboxData = _gearboxData, AxleGearData = _axlegearData, Retarder = _retarderData, - Aux = _dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData(), _segment.Missions.First().MissionType, - _segment.VehicleClass), + Aux = + _dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), + _segment.Missions.First().MissionType, + _segment.VehicleClass), InputDataHash = InputDataProvider.XMLHash }; powertrainConfig.VehicleData.VehicleClass = _segment.VehicleClass; @@ -159,19 +164,20 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl var simulationRunData = new VectoRunData { Loading = loading.Key, VehicleData = - _dao.CreateVehicleData(InputDataProvider.VehicleInputData, mission, loading.Value, _segment.MunicipalBodyWeight), - AirdragData = _dao.CreateAirdragData(InputDataProvider.AirdragInputData, mission, _segment), + _dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, mission, loading.Value, + _segment.MunicipalBodyWeight), + AirdragData = _dao.CreateAirdragData(InputDataProvider.JobInputData.Vehicle.AirdragInputData, mission, _segment), EngineData = _engineData.Copy(), GearboxData = _gearboxData, AxleGearData = _axlegearData, AngledriveData = _angledriveData, - Aux = _dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData(), mission.MissionType, + Aux = _dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), mission.MissionType, _segment.VehicleClass), Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), Retarder = _retarderData, DriverData = _driverdata, ExecutionMode = ExecutionMode.Declaration, - JobName = InputDataProvider.JobInputData().JobName, + JobName = InputDataProvider.JobInputData.JobName, ModFileSuffix = loading.Key.ToString(), Report = Report, Mission = mission, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs index 6b0e0fe5f8909d62f7466d997f2195af0914d95b..40c0e2808647b65d9774a126345fa1806c4b9f6f 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs @@ -29,36 +29,36 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.Collections.Generic; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.Models.SimulationComponent.Data; - -namespace TUGraz.VectoCore.InputData.Reader.Impl -{ - public class EngineOnlyVectoRunDataFactory : EngineeringModeVectoRunDataFactory - { - internal EngineOnlyVectoRunDataFactory(IEngineeringInputDataProvider dataProvider) : base(dataProvider) {} - - public override IEnumerable<VectoRunData> NextRun() - { - if (InputDataProvider == null) { - Log.Warn("No valid data provider given"); - yield break; - } - var dao = new EngineeringDataAdapter(); - foreach (var cycle in InputDataProvider.JobInputData().Cycles) { - var simulationRunData = new VectoRunData { - JobName = InputDataProvider.JobInputData().JobName, - EngineData = dao.CreateEngineData(InputDataProvider.EngineInputData, null, new List<ITorqueLimitInputData>()), - Cycle = new DrivingCycleProxy( - DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, CycleType.EngineOnly, cycle.Name, false), cycle.Name), - ExecutionMode = ExecutionMode.Engineering - }; - yield return simulationRunData; - } - } - } -} \ No newline at end of file +using System.Collections.Generic; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.InputData.Reader.Impl +{ + public class EngineOnlyVectoRunDataFactory : EngineeringModeVectoRunDataFactory + { + internal EngineOnlyVectoRunDataFactory(IEngineeringInputDataProvider dataProvider) : base(dataProvider) {} + + public override IEnumerable<VectoRunData> NextRun() + { + if (InputDataProvider == null) { + Log.Warn("No valid data provider given"); + yield break; + } + var dao = new EngineeringDataAdapter(); + foreach (var cycle in InputDataProvider.JobInputData.Cycles) { + var simulationRunData = new VectoRunData { + JobName = InputDataProvider.JobInputData.JobName, + EngineData = dao.CreateEngineData(InputDataProvider.JobInputData.EngineOnly, null, new List<ITorqueLimitInputData>()), + Cycle = new DrivingCycleProxy( + DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, CycleType.EngineOnly, cycle.Name, false), cycle.Name), + ExecutionMode = ExecutionMode.Engineering + }; + yield return simulationRunData; + } + } + } +} diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs index dfcd0c3c747e29c04e293b8c6fff25400f979587..e4c0de271c4114b1b655a7694679ca9ade4e0fb4 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs @@ -61,35 +61,35 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { var dao = new EngineeringDataAdapter(); var driver = dao.CreateDriverData(InputDataProvider.DriverInputData); - var engineData = dao.CreateEngineData(InputDataProvider.EngineInputData, InputDataProvider.GearboxInputData, - InputDataProvider.VehicleInputData.TorqueLimits); + var engineData = dao.CreateEngineData(InputDataProvider.JobInputData.Vehicle.EngineInputData, InputDataProvider.JobInputData.Vehicle.GearboxInputData, + InputDataProvider.JobInputData.Vehicle.TorqueLimits); - var tempVehicle = dao.CreateVehicleData(InputDataProvider.VehicleInputData); + var tempVehicle = dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle); - var axlegearData = dao.CreateAxleGearData(InputDataProvider.AxleGearInputData, useEfficiencyFallback: true); - var gearboxData = dao.CreateGearboxData(InputDataProvider.GearboxInputData, engineData, axlegearData.AxleGear.Ratio, + var axlegearData = dao.CreateAxleGearData(InputDataProvider.JobInputData.Vehicle.AxleGearInputData, useEfficiencyFallback: true); + var gearboxData = dao.CreateGearboxData(InputDataProvider.JobInputData.Vehicle.GearboxInputData, engineData, axlegearData.AxleGear.Ratio, tempVehicle.DynamicTyreRadius,tempVehicle.VehicleCategory, useEfficiencyFallback: true); - var crossWindRequired = InputDataProvider.AirdragInputData.CrossWindCorrectionMode == + var crossWindRequired = InputDataProvider.JobInputData.Vehicle.AirdragInputData.CrossWindCorrectionMode == CrossWindCorrectionMode.VAirBetaLookupTable; - var angledriveData = dao.CreateAngledriveData(InputDataProvider.AngledriveInputData, useEfficiencyFallback: true); - var ptoTransmissionData = dao.CreatePTOTransmissionData(InputDataProvider.PTOTransmissionInputData); + var angledriveData = dao.CreateAngledriveData(InputDataProvider.JobInputData.Vehicle.AngledriveInputData, useEfficiencyFallback: true); + var ptoTransmissionData = dao.CreatePTOTransmissionData(InputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData); - return InputDataProvider.JobInputData().Cycles.Select(cycle => { + return InputDataProvider.JobInputData.Cycles.Select(cycle => { var drivingCycle = CyclesCache.ContainsKey(cycle.CycleData.Source) ? CyclesCache[cycle.CycleData.Source] : DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, cycle.Name, crossWindRequired); return new VectoRunData { - JobName = InputDataProvider.JobInputData().JobName, + JobName = InputDataProvider.JobInputData.JobName, EngineData = engineData, GearboxData = gearboxData, AxleGearData = axlegearData, AngledriveData = angledriveData, - VehicleData = dao.CreateVehicleData(InputDataProvider.VehicleInputData), - AirdragData = dao.CreateAirdragData(InputDataProvider.AirdragInputData, InputDataProvider.VehicleInputData), + VehicleData = dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle), + AirdragData = dao.CreateAirdragData(InputDataProvider.JobInputData.Vehicle.AirdragInputData, InputDataProvider.JobInputData.Vehicle), DriverData = driver, - Aux = dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData()), - AdvancedAux = dao.CreateAdvancedAuxData(InputDataProvider.AuxiliaryInputData()), - Retarder = dao.CreateRetarderData(InputDataProvider.RetarderInputData), + Aux = dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData()), + AdvancedAux = dao.CreateAdvancedAuxData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData()), + Retarder = dao.CreateRetarderData(InputDataProvider.JobInputData.Vehicle.RetarderInputData), PTO = ptoTransmissionData, Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name), ExecutionMode = ExecutionMode.Engineering @@ -97,4 +97,4 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl }); } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs index 11c557e304aaee0106ab38126b6930bbddd7635e..fe23cb39d833e3399990360f303f022c2e43330f 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs @@ -90,7 +90,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl private void CreateEngineeringDataReader(IInputDataProvider dataProvider) { var engDataProvider = ToEngineeringInputDataProvider(dataProvider); - if (engDataProvider.JobInputData().EngineOnlyMode) { + if (engDataProvider.JobInputData.EngineOnlyMode) { DataReader = new EngineOnlyVectoRunDataFactory(engDataProvider); _engineOnlyMode = true; } else { @@ -228,4 +228,4 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl return addReportResult; } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs index 917ed39bcfb3848f5de3c247a1fffc0a87c0c8bb..2e04f525689a82178783f3351d2053fd4125560c 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs @@ -116,10 +116,11 @@ namespace TUGraz.VectoCore.OutputData.XML protected XElement CreateVehicle(IDeclarationInputDataProvider data) { - var retarder = data.RetarderInputData; - var gearbox = data.GearboxInputData; - var vehicle = data.VehicleInputData; - var angledrive = data.AngledriveInputData; + var retarder = data.JobInputData.Vehicle.RetarderInputData; + var gearbox = data.JobInputData.Vehicle.GearboxInputData; + var vehicle = data.JobInputData.Vehicle; + var engine = data.JobInputData.Vehicle.EngineInputData; + var angledrive = data.JobInputData.Vehicle.AngledriveInputData; var id = CreateIdString("VEH-" + vehicle.Model); @@ -135,7 +136,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Vehicle_IdlingSpeed, vehicle.EngineIdleSpeed != null ? vehicle.EngineIdleSpeed.AsRPM.ToXMLFormat(0) - : data.EngineInputData.IdleSpeed.AsRPM.ToXMLFormat(0)), + : engine.IdleSpeed.AsRPM.ToXMLFormat(0)), new XElement(tns + XMLNames.Vehicle_RetarderType, retarder.Type.ToXMLFormat()), retarder.Type.IsDedicatedComponent() ? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio.ToXMLFormat(3)) @@ -146,14 +147,14 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Vehicle_PTO_OtherElements, "none")), CreateTorqueLimits(vehicle), new XElement(tns + XMLNames.Vehicle_Components, - CreateEngine(data.EngineInputData), - CreateGearbox(gearbox, gearbox.Type.AutomaticTransmission() ? data.TorqueConverterInputData : null), + CreateEngine(engine), + CreateGearbox(gearbox, gearbox.Type.AutomaticTransmission() ? vehicle.TorqueConverterInputData : null), angledrive.Type == AngledriveType.SeparateAngledrive ? CreateAngleDrive(angledrive) : null, retarder.Type.IsDedicatedComponent() ? CreateRetarder(retarder) : null, - CreateAxlegear(data.AxleGearInputData), - CreateAxleWheels(data.VehicleInputData), - CreateAuxiliaries(data.AuxiliaryInputData()), - CreateAirdrag(data.AirdragInputData) + CreateAxlegear(vehicle.AxleGearInputData), + CreateAxleWheels(vehicle), + CreateAuxiliaries(vehicle.AuxiliaryInputData()), + CreateAirdrag(vehicle.AirdragInputData) ) ); } diff --git a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs index 18771c538e1345b74bba4a68d7fa91250ef15441..acc2e46aea864f98a09417555c8ae41ecda5a42b 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs @@ -77,7 +77,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XAttribute(XNamespace.Xmlns + "vdecdef", _declarationNamespace), new XAttribute(xsi + "schemaLocation", string.Format("{0} {1}VectoEngineeringInput.xsd", rootNamespace, SchemaLocationBaseUrl)), - data.JobInputData().EngineOnlyMode + data.JobInputData.EngineOnlyMode ? CreateEngineOnly(data) : CreateEngineeringJob(data)) ); @@ -117,8 +117,8 @@ namespace TUGraz.VectoCore.OutputData.XML { return new[] { new XElement(tns + XMLNames.VectoJob_EngineOnlyMode, true), - CreateEngine(data.EngineInputData, false), - CreateMissions(data.JobInputData().Cycles) + CreateEngine(data.JobInputData.EngineOnly, false), + CreateMissions(data.JobInputData.Cycles) }; } @@ -128,7 +128,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.VectoJob_EngineOnlyMode, false), CreateVehicle(data), CreateDriverModel(data), - CreateMissions(data.JobInputData().Cycles) + CreateMissions(data.JobInputData.Cycles) }; } @@ -153,7 +153,7 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement CreateDriverModel(IEngineeringInputDataProvider engineering) { var driver = engineering.DriverInputData; - var gbx = engineering.GearboxInputData; + var gbx = engineering.JobInputData.Vehicle.GearboxInputData; var lookahead = driver.Lookahead; var overspeed = driver.OverSpeedEcoRoll; @@ -213,11 +213,11 @@ namespace TUGraz.VectoCore.OutputData.XML protected XElement CreateVehicle(IEngineeringInputDataProvider data) { - var retarder = data.RetarderInputData; - var gearbox = data.GearboxInputData; - var vehicle = data.VehicleInputData; - var angledrive = data.AngledriveInputData; - var pto = data.PTOTransmissionInputData; + var retarder = data.JobInputData.Vehicle.RetarderInputData; + var gearbox = data.JobInputData.Vehicle.GearboxInputData; + var vehicle = data.JobInputData.Vehicle; + var angledrive = data.JobInputData.Vehicle.AngledriveInputData; + var pto = data.JobInputData.Vehicle.PTOTransmissionInputData; return new XElement(tns + XMLNames.Component_Vehicle, new XAttribute(XMLNames.Component_ID_Attr, "VEH-" + vehicle.Model), @@ -238,14 +238,14 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Vehicle_CurbMassExtra, vehicle.CurbMassExtra.Value()), new XElement(tns + XMLNames.Vehicle_Loading, vehicle.Loading.Value()), new XElement(tns + XMLNames.Vehicle_Components, - CreateEngine(data.EngineInputData), + CreateEngine(vehicle.EngineInputData), CreateGearbox(gearbox, gearbox.TorqueConverter), angledrive.Type == AngledriveType.SeparateAngledrive ? CreateAngleDrive(angledrive) : null, retarder.Type.IsDedicatedComponent() ? CreateRetarder(retarder) : null, - CreateAxlegear(data.AxleGearInputData), - CreateAxleWheels(data.VehicleInputData), - CreateAuxiliaries(data.AuxiliaryInputData(), RemoveInvalidFileCharacters(data.VehicleInputData.Model)), - CreateAirdrag(data.AirdragInputData) + CreateAxlegear(vehicle.AxleGearInputData), + CreateAxleWheels(vehicle), + CreateAuxiliaries(vehicle.AuxiliaryInputData(), RemoveInvalidFileCharacters(vehicle.Model)), + CreateAirdrag(vehicle.AirdragInputData) ), new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist, new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop, @@ -599,4 +599,4 @@ namespace TUGraz.VectoCore.OutputData.XML }; } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 734ddce0d1fc171013b28277750c6da4fcbdc9dc..5287618a7740a1d87572b08bd2672d8b40aca299 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -116,7 +116,6 @@ <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAngledriveDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAuxiliaryDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAxlegearDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationDriverDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationEngineDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationGearboxDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationJobInputDataProvider.cs" /> @@ -338,6 +337,11 @@ </Compile> <Compile Include="Utils\XmlResourceResolver.cs" /> <Compile Include="Utils\XPathHelper.cs" /> + <Compile Include="VersionNumber1.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>VersionNumber.t4</DependentUpon> + </Compile> </ItemGroup> <ItemGroup> <None Include="app.config" /> @@ -463,7 +467,6 @@ </ProjectReference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. <Target Name="BeforeBuild"> @@ -471,6 +474,5 @@ <Target Name="AfterBuild"> </Target> --> - <Import Project="$(SolutionDir)Build\TextPreProcessing.targets" /> </Project> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/FileIO/JsonTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonTest.cs index 2947d9f5f6b0950dc04b65e206a0e4064930c287..1d5cc14530be0a4ee2921ee26023d2c846bebc0c 100644 --- a/VectoCore/VectoCoreTest/FileIO/JsonTest.cs +++ b/VectoCore/VectoCoreTest/FileIO/JsonTest.cs @@ -43,20 +43,19 @@ using TUGraz.VectoCore.Tests.Utils; namespace TUGraz.VectoCore.Tests.FileIO { - - [TestFixture] + [TestFixture] public class JsonTest { private const string TestJobFile = @"Testdata\Jobs\40t_Long_Haul_Truck.vecto"; private const string TestVehicleFile = @"Testdata\Components\24t Coach.vveh"; - [OneTimeSetUp] - public void RunBeforeAnyTests() - { - Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); - } + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } - [TestCase] + [TestCase] public void ReadJobTest() { var job = JSONInputDataFactory.ReadJsonJob(TestJobFile); @@ -112,7 +111,7 @@ namespace TUGraz.VectoCore.Tests.FileIO ((JObject)json["Body"]).Property("Aux").Remove(); // MK,2016-01-20: Changed for PWheel: aux entry may be missing, and that is ok. - var tmp = new JSONInputDataV2(json, TestJobFile).AuxiliaryInputData().Auxiliaries; + var tmp = new JSONInputDataV2(json, TestJobFile).JobInputData.Vehicle.AuxiliaryInputData().Auxiliaries; Assert.IsTrue(tmp.Count == 0); } @@ -156,7 +155,9 @@ namespace TUGraz.VectoCore.Tests.FileIO ((JObject)json["Body"]).Property("OverSpeedEcoRoll").Remove(); AssertHelper.Exception<VectoException>( - () => { var tmp = new JSONInputDataV2(json, TestJobFile).DriverInputData.OverSpeedEcoRoll; }, + () => { + var tmp = ((IEngineeringInputDataProvider)new JSONInputDataV2(json, TestJobFile)).DriverInputData.OverSpeedEcoRoll; + }, "Key OverSpeedEcoRoll not found"); } @@ -508,4 +509,4 @@ namespace TUGraz.VectoCore.Tests.FileIO // Assert.AreEqual(json, jsonCompare); // } // } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs b/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs index 827d160f8d687a38a50364faf842446532a6a86c..705fc50a30f85621202b8f2ecc9e1fd7fe33e5eb 100644 --- a/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs +++ b/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs @@ -29,70 +29,76 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.IO; -using System.Xml; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.OutputData; -using TUGraz.VectoCore.OutputData.FileIO; -using TUGraz.VectoCore.Utils; +using System.IO; +using System.Xml; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Utils; using NUnit.Framework; -namespace TUGraz.VectoCore.Tests.Integration -{ - [TestFixture] - public class TestVehicleIdlingSpeed - { - const string SampleVehicleDecl = "TestData/XML/XMLReaderDeclaration/vecto_vehicle-sample.xml"; - - [TestCase, Category("LongRunning")] - public void VehicleIdlingSpeedTest() - { - var VehicleEngineIdleSpeed = 900.RPMtoRad(); - - var reader = XmlReader.Create(SampleVehicleDecl); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Declaration); - helper.AddNamespaces(manager); - - var idlingSpeed = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, - XMLNames.Vehicle_IdlingSpeed), manager); - idlingSpeed.SetValue(VehicleEngineIdleSpeed.AsRPM.ToXMLFormat(0)); - - var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - - var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); - - var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, new FileOutputWriter("Idle900")); - //factory.WriteModalResults = true; - - var jobContainer = new JobContainer(null); - jobContainer.AddRuns(factory); - - var runIdx = 0; - var run = jobContainer.Runs[runIdx]; - var modContainer = (ModalDataContainer)run.Run.GetContainer().ModalData; - var modData = modContainer.Data; - - run.Run.Run(); - - modContainer.Data = modData; - Assert.IsTrue(modContainer.Min<PerSecond>(ModalResultField.n_eng_avg).IsGreaterOrEqual(VehicleEngineIdleSpeed)); - - - //jobContainer.Execute(); - //jobContainer.WaitFinished(); - } - } -} \ No newline at end of file +namespace TUGraz.VectoCore.Tests.Integration +{ + [TestFixture] + public class TestVehicleIdlingSpeed + { + const string SampleVehicleDecl = "TestData/XML/XMLReaderDeclaration/vecto_vehicle-sample.xml"; + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + + [TestCase, Category("LongRunning")] + public void VehicleIdlingSpeedTest() + { + var VehicleEngineIdleSpeed = 900.RPMtoRad(); + + var reader = XmlReader.Create(SampleVehicleDecl); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Declaration); + helper.AddNamespaces(manager); + + var idlingSpeed = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputDeclaration, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, + XMLNames.Vehicle_IdlingSpeed), manager); + idlingSpeed.SetValue(VehicleEngineIdleSpeed.AsRPM.ToXMLFormat(0)); + + var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + + var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); + + var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, new FileOutputWriter("Idle900")); + //factory.WriteModalResults = true; + + var jobContainer = new JobContainer(null); + jobContainer.AddRuns(factory); + + var runIdx = 0; + var run = jobContainer.Runs[runIdx]; + var modContainer = (ModalDataContainer)run.Run.GetContainer().ModalData; + var modData = modContainer.Data; + + run.Run.Run(); + + modContainer.Data = modData; + Assert.IsTrue(modContainer.Min<PerSecond>(ModalResultField.n_eng_avg).IsGreaterOrEqual(VehicleEngineIdleSpeed)); + + + //jobContainer.Execute(); + //jobContainer.WaitFinished(); + } + } +} diff --git a/VectoCore/VectoCoreTest/Models/Declaration/AirdragDefaultValuesTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/AirdragDefaultValuesTest.cs index 9348277b6ac2d98382b7e1ec32c7b50c6f763838..8d4007feac44137f7af3ce8a9911ded511d5d491 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/AirdragDefaultValuesTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/AirdragDefaultValuesTest.cs @@ -29,61 +29,64 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.Linq; -using TUGraz.VectoCore.InputData.FileIO.JSON; -using TUGraz.VectoCore.InputData.Reader.Impl; -using TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter; +using System.IO; +using System.Linq; +using TUGraz.VectoCore.InputData.FileIO.JSON; +using TUGraz.VectoCore.InputData.Reader.Impl; +using TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter; using NUnit.Framework; -namespace TUGraz.VectoCore.Tests.Models.Declaration -{ - [TestFixture] - public class AirdragDefaultValuesTest - { - [TestCase] - public void TestClass2() - { - var file = @"TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_DECL.vecto"; - var inputData = (JSONInputDataV3)JSONInputDataFactory.ReadJsonJob(file); - inputData.AirdragData = null; // force use of standard values - - var dataReader = new DeclarationModeVectoRunDataFactory(inputData, null); - var runData = dataReader.NextRun().ToArray(); - var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file); - - Assert.AreEqual(4.83, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value()); - - Assert.AreEqual(7.2, runData[0].AirdragData.DeclaredAirdragArea.Value()); - } - - [TestCase] - public void TestClass5() - { - var file = @"TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_DECL.vecto"; - var inputData = (JSONInputDataV3)JSONInputDataFactory.ReadJsonJob(file); - inputData.AirdragData = null; // force use of standard values - - var dataReader = new DeclarationModeVectoRunDataFactory(inputData, null); - var runData = dataReader.NextRun().ToArray(); - var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file); - - Assert.AreEqual(5.3, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value()); - Assert.AreEqual(8.7, runData[0].AirdragData.DeclaredAirdragArea.Value()); - } - - [TestCase] - public void TestClass9() - { - var file = @"TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_DECL.vecto"; - var inputData = (JSONInputDataV3)JSONInputDataFactory.ReadJsonJob(file); - inputData.AirdragData = null; // force use of standard values - - var dataReader = new DeclarationModeVectoRunDataFactory(inputData, null); - var runData = dataReader.NextRun().ToArray(); - var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file); - - Assert.AreEqual(5.2, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value()); - Assert.AreEqual(8.5, runData[0].AirdragData.DeclaredAirdragArea.Value()); - } - } -} \ No newline at end of file +namespace TUGraz.VectoCore.Tests.Models.Declaration +{ + [TestFixture] + public class AirdragDefaultValuesTest + { + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + + [TestCase] + public void TestClass2() + { + var file = @"TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_DECL.vecto"; + var fileNoAirdrag = + @"TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_NoAirdrag_DECL.vecto"; + + var runData = DeclarationAdapterTestHelper.CreateVectoRunData(fileNoAirdrag); + var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file); + + Assert.AreEqual(4.83, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value()); + + Assert.AreEqual(7.2, runData[0].AirdragData.DeclaredAirdragArea.Value()); + } + + [TestCase] + public void TestClass5() + { + var file = @"TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_DECL.vecto"; + var fileNoAirdrag = @"TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_NoAirdrag_DECL.vecto"; + + var runData = DeclarationAdapterTestHelper.CreateVectoRunData(fileNoAirdrag); + var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file); + + Assert.AreEqual(5.3, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value()); + Assert.AreEqual(8.7, runData[0].AirdragData.DeclaredAirdragArea.Value()); + } + + [TestCase] + public void TestClass9() + { + var file = @"TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_DECL.vecto"; + var fileNoAirdrag = + @"TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_NoAirdrag_DECL.vecto"; + + var runData = DeclarationAdapterTestHelper.CreateVectoRunData(fileNoAirdrag); + var runDataOrig = DeclarationAdapterTestHelper.CreateVectoRunData(file); + + Assert.AreEqual(5.2, runDataOrig[0].AirdragData.DeclaredAirdragArea.Value()); + Assert.AreEqual(8.5, runData[0].AirdragData.DeclaredAirdragArea.Value()); + } + } +} diff --git a/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs index 1c116da6e77979afe44c807131a38d893908c91d..5b92db6249a63ce9d641319f0029349b540a9613 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs @@ -47,6 +47,12 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation { const string SampleVehicleDecl = "TestData/XML/XMLReaderDeclaration/vecto_vehicle-sample.xml"; + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + [TestCase("None", RetarderType.None), TestCase("Losses included in Gearbox", RetarderType.LossesIncludedInTransmission), TestCase("Engine Retarder", RetarderType.EngineRetarder), diff --git a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs index f1e7981b69801f1f5d6b0f34278838b70cee9041..5b9852f05ce667107ffa6fd1cbecb57cd7f839e7 100644 --- a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs +++ b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs @@ -132,7 +132,7 @@ namespace TUGraz.VectoCore.Tests.Reports foreach (var modalResults in modData) { AssertModDataIntegrity(modalResults.Item1, auxKeys, modalResults.Item2, - FuelConsumptionMapReader.Create(((IEngineeringInputDataProvider)inputData).EngineInputData.FuelConsumptionMap)); + FuelConsumptionMapReader.Create(((IEngineeringInputDataProvider)inputData).JobInputData.Vehicle.EngineInputData.FuelConsumptionMap)); } AssertSumDataIntegrity(sumData, mode); @@ -392,7 +392,7 @@ namespace TUGraz.VectoCore.Tests.Reports foreach (var modalResults in modData) { AssertModDataIntegrityAT(modalResults.Item1, auxKeys, modalResults.Item2, - FuelConsumptionMapReader.Create(((IEngineeringInputDataProvider)inputData).EngineInputData.FuelConsumptionMap)); + FuelConsumptionMapReader.Create(((IEngineeringInputDataProvider)inputData).JobInputData.Vehicle.EngineInputData.FuelConsumptionMap)); } AssertSumDataIntegrity(sumData, ExecutionMode.Engineering); diff --git a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs index ab32be6c4e0e912c76aefd97dc27082781f3a83e..14d157dac0436a822b86c3a7f0c3a4f06957910f 100644 --- a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs +++ b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs @@ -49,6 +49,12 @@ namespace TUGraz.VectoCore.Tests.Reports [TestFixture] public class SumWriterTest { + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + [TestCase] public void TestSumCalcFixedTime() { @@ -181,28 +187,37 @@ namespace TUGraz.VectoCore.Tests.Reports jobContainer.WaitFinished(); var sumRow = sumData.Table.Rows[1]; - Assert.AreEqual(dataProvider.VehicleInputData.Manufacturer, sumRow[SummaryDataContainer.VEHICLE_MANUFACTURER]); - Assert.AreEqual(dataProvider.VehicleInputData.Model, sumRow[SummaryDataContainer.VEHICLE_MODEL]); - Assert.AreEqual(dataProvider.VehicleInputData.VIN, sumRow[SummaryDataContainer.VIN_NUMBER]); - Assert.AreEqual(dataProvider.EngineInputData.Manufacturer, sumRow[SummaryDataContainer.ENGINE_MANUFACTURER]); - Assert.AreEqual(dataProvider.EngineInputData.Model, sumRow[SummaryDataContainer.ENGINE_MODEL]); - Assert.AreEqual(dataProvider.EngineInputData.FuelType.GetLabel(), sumRow[SummaryDataContainer.ENGINE_FUEL_TYPE]); - Assert.AreEqual((dataProvider.EngineInputData.RatedPowerDeclared.ConvertTo().Kilo.Watt.Value()), + Assert.AreEqual(dataProvider.JobInputData.Vehicle.Manufacturer, sumRow[SummaryDataContainer.VEHICLE_MANUFACTURER]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.Model, sumRow[SummaryDataContainer.VEHICLE_MODEL]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.VIN, sumRow[SummaryDataContainer.VIN_NUMBER]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.Manufacturer, + sumRow[SummaryDataContainer.ENGINE_MANUFACTURER]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.Model, sumRow[SummaryDataContainer.ENGINE_MODEL]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.FuelType.GetLabel(), + sumRow[SummaryDataContainer.ENGINE_FUEL_TYPE]); + Assert.AreEqual((dataProvider.JobInputData.Vehicle.EngineInputData.RatedPowerDeclared.ConvertTo().Kilo.Watt.Value()), ((SI)sumRow[SummaryDataContainer.ENGINE_RATED_POWER]).Value()); - Assert.AreEqual(dataProvider.EngineInputData.RatedSpeedDeclared.AsRPM, + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.RatedSpeedDeclared.AsRPM, ((SI)sumRow[SummaryDataContainer.ENGINE_RATED_SPEED]).Value()); - Assert.AreEqual(dataProvider.EngineInputData.Displacement.ConvertTo().Cubic.Centi.Meter.Value(), + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.Displacement.ConvertTo().Cubic.Centi.Meter.Value(), ((SI)sumRow[SummaryDataContainer.ENGINE_DISPLACEMENT]).Value()); - Assert.AreEqual(dataProvider.GearboxInputData.Manufacturer, sumRow[SummaryDataContainer.GEARBOX_MANUFACTURER]); - Assert.AreEqual(dataProvider.GearboxInputData.Model, sumRow[SummaryDataContainer.GEARBOX_MODEL]); - Assert.AreEqual(dataProvider.AxleGearInputData.Manufacturer, sumRow[SummaryDataContainer.AXLE_MANUFACTURER]); - Assert.AreEqual(dataProvider.AxleGearInputData.Model, sumRow[SummaryDataContainer.AXLE_MODEL]); - - Assert.AreEqual(dataProvider.EngineInputData.ColdHotBalancingFactor, sumRow[SummaryDataContainer.ENGINE_BF_COLD_HOT]); - Assert.AreEqual(dataProvider.EngineInputData.CorrectionFactorRegPer, sumRow[SummaryDataContainer.ENGINE_CF_REG_PER]); - Assert.AreEqual(dataProvider.EngineInputData.WHTCRural, sumRow[SummaryDataContainer.ENGINE_WHTC_RURAL]); - Assert.AreEqual(dataProvider.EngineInputData.WHTCUrban, sumRow[SummaryDataContainer.ENGINE_WHTC_URBAN]); - Assert.AreEqual(dataProvider.EngineInputData.WHTCMotorway, sumRow[SummaryDataContainer.ENGINE_WHTC_MOTORWAY]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.GearboxInputData.Manufacturer, + sumRow[SummaryDataContainer.GEARBOX_MANUFACTURER]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.GearboxInputData.Model, sumRow[SummaryDataContainer.GEARBOX_MODEL]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.AxleGearInputData.Manufacturer, + sumRow[SummaryDataContainer.AXLE_MANUFACTURER]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.AxleGearInputData.Model, sumRow[SummaryDataContainer.AXLE_MODEL]); + + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.ColdHotBalancingFactor, + sumRow[SummaryDataContainer.ENGINE_BF_COLD_HOT]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.CorrectionFactorRegPer, + sumRow[SummaryDataContainer.ENGINE_CF_REG_PER]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.WHTCRural, + sumRow[SummaryDataContainer.ENGINE_WHTC_RURAL]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.WHTCUrban, + sumRow[SummaryDataContainer.ENGINE_WHTC_URBAN]); + Assert.AreEqual(dataProvider.JobInputData.Vehicle.EngineInputData.WHTCMotorway, + sumRow[SummaryDataContainer.ENGINE_WHTC_MOTORWAY]); } } } diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag.vveh b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag.vveh new file mode 100644 index 0000000000000000000000000000000000000000..e4417aadc5129ad5a6f0258acd4a08b748c7b7c6 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag.vveh @@ -0,0 +1,55 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T10:06:43.0936564Z", + "AppVersion": "3", + "FileVersion": 7 + }, + "Body": { + "SavedInDeclMode": true, + "VehCat": "RigidTruck", + "CurbWeight": 4670.0, + "CurbWeightExtra": 0.0, + "Loading": 0.0, + "MassMax": 11.99, + "rdyn": 0.0, + "CdCorrMode": "CdofVdecl", + "CdCorrFile": "", + "Retarder": { + "Type": "None", + "Ratio": 0.0, + "File": "" + }, + "Angledrive": { + "Type": "None", + "Ratio": 0.0, + "LossMap": "" + }, + "PTO": { + "Type": "None", + "LossMap": "", + "Cycle": "" + }, + "AxleConfig": { + "Type": "4x2", + "Axles": [ + { + "Inertia": 6.5, + "Wheels": "265/70 R19.5", + "AxleWeightShare": 0.0, + "TwinTyres": false, + "RRCISO": 0.0065, + "FzISO": 20850.0 + }, + { + "Inertia": 6.5, + "Wheels": "265/70 R19.5", + "AxleWeightShare": 0.0, + "TwinTyres": true, + "RRCISO": 0.0075, + "FzISO": 20850.0 + } + ] + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag_DECL.vecto b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag_DECL.vecto new file mode 100644 index 0000000000000000000000000000000000000000..d4dcaa469fb0330e304f2f269f778718c8cabb35 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2/Class2_RigidTruck_NoAirdrag_DECL.vecto @@ -0,0 +1,67 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T15:21:02.8206564Z", + "AppVersion": "3", + "FileVersion": 3 + }, + "Body": { + "SavedInDeclMode": true, + "EngineOnlyMode": false, + "VehicleFile": "Class2_RigidTruck_NoAirdrag.vveh", + "EngineFile": "Engine_175kW_6.8l.veng", + "GearboxFile": "MT_6.vgbx", + "AuxiliaryAssembly": "Classic", + "AuxiliaryVersion": "CLASSIC", + "AdvancedAuxiliaryFilePath": "", + "Aux": [ + { + "ID": "FAN", + "Type": "Fan", + "Technology": [ + "Belt driven or driven via transm. - Electronically controlled visco clutch" + ] + }, + { + "ID": "STP", + "Type": "Steering pump", + "Technology": [ + "Fixed displacement with elec. control" + ] + }, + { + "ID": "AC", + "Type": "HVAC", + "Technology": [ + "Default" + ] + }, + { + "ID": "ES", + "Type": "Electric System", + "Technology": [ + "Standard technology" + ] + }, + { + "ID": "PS", + "Type": "Pneumatic System", + "Technology": [ + "Medium Supply 1-stage + ESS + AMS" + ] + } + ], + "StartStop": { + "Enabled": false, + "MaxSpeed": 5.0, + "MinTime": 5.0, + "Delay": 5.0 + }, + "OverSpeedEcoRoll": { + "Mode": "Overspeed", + "MinSpeed": 50.0, + "OverSpeed": 5.0, + "UnderSpeed": 5.0 + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag.vveh b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag.vveh new file mode 100644 index 0000000000000000000000000000000000000000..64fccc70e26f7c7a54628d7e3ac8a98d9c557767 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag.vveh @@ -0,0 +1,55 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T10:08:01.8366564Z", + "AppVersion": "3", + "FileVersion": 7 + }, + "Body": { + "SavedInDeclMode": true, + "VehCat": "Tractor", + "CurbWeight": 8229.0, + "CurbWeightExtra": 0.0, + "Loading": 0.0, + "MassMax": 18.0, + "rdyn": 0.0, + "CdCorrMode": "CdofVdecl", + "CdCorrFile": "", + "Retarder": { + "Type": "secondary", + "Ratio": 1.0, + "File": "Default.vrlm" + }, + "Angledrive": { + "Type": "None", + "Ratio": 0.0, + "LossMap": "" + }, + "PTO": { + "Type": "None", + "LossMap": "", + "Cycle": "" + }, + "AxleConfig": { + "Type": "4x2", + "Axles": [ + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.0, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 33350.0 + }, + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.0, + "TwinTyres": true, + "RRCISO": 0.0065, + "FzISO": 33350.0 + } + ] + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag_DECL.vecto b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag_DECL.vecto new file mode 100644 index 0000000000000000000000000000000000000000..93db21f9470d29926de1951b0c7ba633485153d9 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_NoAirdrag_DECL.vecto @@ -0,0 +1,67 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T10:08:21.7776564Z", + "AppVersion": "3", + "FileVersion": 3 + }, + "Body": { + "SavedInDeclMode": true, + "EngineOnlyMode": false, + "VehicleFile": "Class5_Tractor_NoAirdrag.vveh", + "EngineFile": "Engine_325kW_12.7l.veng", + "GearboxFile": "AMT_12.vgbx", + "AuxiliaryAssembly": "Classic", + "AuxiliaryVersion": "CLASSIC", + "AdvancedAuxiliaryFilePath": "", + "Aux": [ + { + "ID": "FAN", + "Type": "Fan", + "Technology": [ + "Belt driven or driven via transm. - Electronically controlled visco clutch" + ] + }, + { + "ID": "STP", + "Type": "Steering pump", + "Technology": [ + "Fixed displacement with elec. control" + ] + }, + { + "ID": "AC", + "Type": "HVAC", + "Technology": [ + "Default" + ] + }, + { + "ID": "ES", + "Type": "Electric System", + "Technology": [ + "Standard technology" + ] + }, + { + "ID": "PS", + "Type": "Pneumatic System", + "Technology": [ + "Medium Supply 2-stage + ESS + AMS" + ] + } + ], + "StartStop": { + "Enabled": false, + "MaxSpeed": 5.0, + "MinTime": 5.0, + "Delay": 5.0 + }, + "OverSpeedEcoRoll": { + "Mode": "Overspeed", + "MinSpeed": 50.0, + "OverSpeed": 5.0, + "UnderSpeed": 5.0 + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag.vveh b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag.vveh new file mode 100644 index 0000000000000000000000000000000000000000..846a9f48eb234064715f573abd782297d2cc518f --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag.vveh @@ -0,0 +1,64 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2017-05-19T08:36:54.5380903Z", + "AppVersion": "3", + "FileVersion": 7 + }, + "Body": { + "SavedInDeclMode": true, + "VehCat": "RigidTruck", + "CurbWeight": 9300.0, + "CurbWeightExtra": 0.0, + "Loading": 0.0, + "MassMax": 26.0, + "rdyn": 0.0, + "CdCorrMode": "CdofVdecl", + "CdCorrFile": "", + "Retarder": { + "Type": "secondary", + "Ratio": 1.0, + "File": "Retarder.vrlm" + }, + "Angledrive": { + "Type": "None", + "Ratio": "NaN", + "LossMap": "" + }, + "PTO": { + "Type": "drive shaft and/or more than 2 gear wheels - multi-disc clutch, oil pump", + "LossMap": "", + "Cycle": "" + }, + "TorqueLimits": {}, + "AxleConfig": { + "Type": "6x2", + "Axles": [ + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.0, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 33350.0 + }, + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.0, + "TwinTyres": true, + "RRCISO": 0.0055, + "FzISO": 33350.0 + }, + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.0, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 33350.0 + } + ] + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag_DECL.vecto b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag_DECL.vecto new file mode 100644 index 0000000000000000000000000000000000000000..f0721f236761c993cc383176902663513dc1a83c --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class9_RigidTruck_6x2/Class9_RigidTruck_NoAirdrag_DECL.vecto @@ -0,0 +1,61 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2017-05-19T08:36:57.2458195Z", + "AppVersion": "3", + "FileVersion": 3 + }, + "Body": { + "SavedInDeclMode": true, + "EngineOnlyMode": false, + "VehicleFile": "Class9_RigidTruck_NoAirdrag.vveh", + "EngineFile": "Engine_324kW_12.7l.veng", + "GearboxFile": "AMT_12.vgbx", + "AuxiliaryAssembly": "Classic", + "AuxiliaryVersion": "CLASSIC", + "AdvancedAuxiliaryFilePath": "", + "Aux": [ + { + "ID": "FAN", + "Type": "Fan", + "Technology": [ + "Crankshaft mounted - On/off clutch" + ] + }, + { + "ID": "STP", + "Type": "Steering pump", + "Technology": [ + "Fixed displacement with elec. control" + ] + }, + { + "ID": "AC", + "Type": "HVAC", + "Technology": [ + "Default" + ] + }, + { + "ID": "ES", + "Type": "Electric System", + "Technology": [ + "Standard technology" + ] + }, + { + "ID": "PS", + "Type": "Pneumatic System", + "Technology": [ + "Medium Supply 2-stage + ESS + AMS" + ] + } + ], + "OverSpeedEcoRoll": { + "Mode": "Overspeed", + "MinSpeed": 50.0, + "OverSpeed": 5.0, + "UnderSpeed": 5.0 + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs index 675a82b958dfce5b28dde0ecebee4a215dafdce5..4d4e0df9feefcf8381834804fbead9e8a6ea778d 100644 --- a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs +++ b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs @@ -89,7 +89,7 @@ namespace TUGraz.VectoCore.Tests.Utils public static VehicleData CreateVehicleDataFromFile(string vehicleDataFile) { var dao = new EngineeringDataAdapter(); - var vehicleInput = JSONInputDataFactory.ReadJsonVehicle(vehicleDataFile); + var vehicleInput = JSONInputDataFactory.ReadJsonVehicle(vehicleDataFile, null); var airdragData = vehicleInput as IAirdragEngineeringInputData; return dao.CreateVehicleData(vehicleInput); } @@ -97,7 +97,7 @@ namespace TUGraz.VectoCore.Tests.Utils public static AirdragData CreateAirdragDataFromFile(string vehicleDataFile) { var dao = new EngineeringDataAdapter(); - var vehicleInput = JSONInputDataFactory.ReadJsonVehicle(vehicleDataFile); + var vehicleInput = JSONInputDataFactory.ReadJsonVehicle(vehicleDataFile, null); var airdragData = vehicleInput as IAirdragEngineeringInputData; return dao.CreateAirdragData(airdragData, vehicleInput); } @@ -113,4 +113,4 @@ namespace TUGraz.VectoCore.Tests.Utils return dao.CreateDriverData(engineeringJob.DriverInputData); } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 7f997ee209a67ede57dd26814c5093c4327cd6ed..d68ab9739649ee6eb56cf624620aee35d75fa11e 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -681,6 +681,12 @@ <None Include="TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Axle_4x2_orig.vtlm"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_NoAirdrag_DECL.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck_NoAirdrag.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2\Class2_RigidTruck.vveh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> @@ -903,9 +909,15 @@ <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Axle_4x2_Tractor.vtlm"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_NoAirdrag.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor.vveh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_NoAirdrag_DECL.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_DECL.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> @@ -1023,9 +1035,15 @@ <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Axle_4x2.vtlm"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_NoAirdrag.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck.vveh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_NoAirdrag_DECL.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_DECL.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs index 4f7adbf62a85cb6a2c469584121c091bc4fe92e1..9f3ff414511bfd3337bac009bd6907638c9c55d2 100644 --- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs @@ -61,6 +61,12 @@ namespace TUGraz.VectoCore.Tests.XML const string SampleVehicleFullDeclCertificationOptions = "TestData/XML/XMLReaderDeclaration/vecto_vehicle-sample_certificationOptions.xml"; + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + [TestCase] public void TestXMLInputEng() { @@ -68,7 +74,7 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var engineDataProvider = inputDataProvider.EngineInputData; + var engineDataProvider = inputDataProvider.JobInputData.Vehicle.EngineInputData; Assert.IsTrue(engineDataProvider.SavedInDeclarationMode); @@ -102,7 +108,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var gearboxDataProvider = inputDataProvider.GearboxInputData; + var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData; Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model); Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type); @@ -127,7 +133,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var axlegearDataProvider = inputDataProvider.AxleGearInputData; + var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.AxleGearInputData; Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model); @@ -149,7 +155,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var retarderDataProvider = inputDataProvider.RetarderInputData; + var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.RetarderInputData; Assert.AreEqual("Generic Retarder", retarderDataProvider.Model); @@ -170,7 +176,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; var axles = vehicleDataProvider.Axles; @@ -211,7 +217,7 @@ namespace TUGraz.VectoCore.Tests.XML var modified = XmlReader.Create(new StringReader(nav.OuterXml)); var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Axles; }); } @@ -275,7 +281,7 @@ namespace TUGraz.VectoCore.Tests.XML var modified = XmlReader.Create(new StringReader(nav.OuterXml)); var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Axles; }); } @@ -286,7 +292,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var auxDataProvider = inputDataProvider.AuxiliaryInputData(); + var auxDataProvider = inputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(); var aux = auxDataProvider.Auxiliaries; var aux1 = aux[0]; @@ -299,18 +305,7 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual("Standard technology - LED headlights, all", aux3.Technology.First()); } - [TestCase] - public void TestXMLInputADAS() - { - var reader = XmlReader.Create(SampleVehicleDecl); - - var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - - var adas = inputDataProvider.DriverInputData; - - Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode); - } - + [TestCase] public void TestVehicleInput() { @@ -318,16 +313,16 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory); Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration); Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value()); Assert.AreEqual(40000.0, vehicleDataProvider.GrossVehicleMassRating.Value()); - Assert.AreEqual(6.34, inputDataProvider.AirdragInputData.AirDragArea.Value()); + Assert.AreEqual(6.34, inputDataProvider.JobInputData.Vehicle.AirdragInputData.AirDragArea.Value()); - Assert.AreEqual(1.0, inputDataProvider.RetarderInputData.Ratio); + Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio); } [TestCase] @@ -356,7 +351,7 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var tcDataProvider = inputDataProvider.TorqueConverterInputData; + var tcDataProvider = inputDataProvider.JobInputData.Vehicle.TorqueConverterInputData; Assert.AreEqual(3, tcDataProvider.TCData.Rows.Count); @@ -372,7 +367,7 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var angledriveDataProvider = inputDataProvider.AngledriveInputData; + var angledriveDataProvider = inputDataProvider.JobInputData.Vehicle.AngledriveInputData; Assert.AreEqual(2.345, angledriveDataProvider.Ratio); Assert.AreEqual(6, angledriveDataProvider.LossMap.Rows.Count); @@ -387,16 +382,16 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleFullDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var vehicleDataProvider = inputDataProvider.JobInputData().Vehicle; + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory); Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration); Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value()); Assert.AreEqual(40000.0, vehicleDataProvider.GrossVehicleMassRating.Value()); - Assert.AreEqual(6.34, inputDataProvider.AirdragInputData.AirDragArea.Value()); + Assert.AreEqual(6.34, inputDataProvider.JobInputData.Vehicle.AirdragInputData.AirDragArea.Value()); - Assert.AreEqual(1.0, inputDataProvider.RetarderInputData.Ratio); + Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio); } [TestCase] @@ -405,7 +400,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleFullDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var vehicleDataProvider = inputDataProvider.JobInputData().Vehicle; + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; var torqueLimits = vehicleDataProvider.TorqueLimits.OrderBy(x => x.Gear).ToList(); Assert.AreEqual(3, torqueLimits.Count); @@ -420,7 +415,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleFullDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var gearboxDataProvider = inputDataProvider.GearboxInputData; + var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData; var gears = gearboxDataProvider.Gears; Assert.AreEqual(12, gears.Count); @@ -435,7 +430,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleFullDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var gearboxDataProvider = inputDataProvider.GearboxInputData; + var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData; var gears = gearboxDataProvider.Gears; Assert.AreEqual(12, gears.Count); @@ -466,7 +461,7 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); - AssertHelper.Exception<VectoException>(() => { var tmp = inputDataProvider.RetarderInputData.Ratio; }); + AssertHelper.Exception<VectoException>(() => { var tmp = inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio; }); } [TestCase] @@ -535,7 +530,7 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); - Assert.AreEqual(retarderType.Value, inputDataProvider.RetarderInputData.Type); + Assert.AreEqual(retarderType.Value, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Type); } } @@ -573,7 +568,7 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); - Assert.AreEqual(axleConfiguration.Value, inputDataProvider.VehicleInputData.AxleConfiguration); + Assert.AreEqual(axleConfiguration.Value, inputDataProvider.JobInputData.Vehicle.AxleConfiguration); } } @@ -607,7 +602,7 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); - Assert.AreEqual(vehicleCategory.Value, inputDataProvider.VehicleInputData.VehicleCategory); + Assert.AreEqual(vehicleCategory.Value, inputDataProvider.JobInputData.Vehicle.VehicleCategory); } } @@ -640,7 +635,7 @@ namespace TUGraz.VectoCore.Tests.XML true); Assert.AreEqual(retarderType.Value, - inputDataProvider.RetarderInputData.Type); + inputDataProvider.JobInputData.Vehicle.RetarderInputData.Type); } } @@ -694,15 +689,15 @@ namespace TUGraz.VectoCore.Tests.XML if (ptoType[0] == "none") { Assert.AreEqual("None", - inputDataProvider.PTOTransmissionInputData.PTOTransmissionType); + inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData.PTOTransmissionType); } else if (ptoType[0] == "only one engaged gearwheel above oil level") { Assert.AreEqual(ptoType[0], - inputDataProvider.PTOTransmissionInputData.PTOTransmissionType); + inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData.PTOTransmissionType); } else { Assert.AreEqual(string.Format("{0} - {1}", ptoType[0], ptoType[1]), - inputDataProvider.PTOTransmissionInputData.PTOTransmissionType); + inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData.PTOTransmissionType); } - DeclarationData.PTOTransmission.Lookup(inputDataProvider.PTOTransmissionInputData.PTOTransmissionType); + DeclarationData.PTOTransmission.Lookup(inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData.PTOTransmissionType); } } @@ -737,7 +732,7 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); - Assert.AreEqual(angleDrive.Value, inputDataProvider.AngledriveInputData.Type); + Assert.AreEqual(angleDrive.Value, inputDataProvider.JobInputData.Vehicle.AngledriveInputData.Type); } } @@ -776,7 +771,7 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(modified, true); - Assert.AreEqual(gearboxType.Value, inputDataProvider.GearboxInputData.Type); + Assert.AreEqual(gearboxType.Value, inputDataProvider.JobInputData.Vehicle.GearboxInputData.Type); } } @@ -786,7 +781,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var ptoDataProvider = inputDataProvider.PTOTransmissionInputData; + var ptoDataProvider = inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData; Assert.AreEqual("None", ptoDataProvider.PTOTransmissionType); } @@ -797,7 +792,7 @@ namespace TUGraz.VectoCore.Tests.XML var reader = XmlReader.Create(SampleVehicleFullDecl); var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - var ptoDataProvider = inputDataProvider.PTOTransmissionInputData; + var ptoDataProvider = inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData; var lookup = DeclarationData.PTOTransmission.Lookup(ptoDataProvider.PTOTransmissionType); Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoDataProvider.PTOTransmissionType); @@ -811,10 +806,10 @@ namespace TUGraz.VectoCore.Tests.XML var inputDataProvider = new XMLDeclarationInputDataProvider(reader, true); - Assert.AreEqual(CertificationMethod.Option2, inputDataProvider.GearboxInputData.CertificationMethod); - Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.AxleGearInputData.CertificationMethod); - Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.RetarderInputData.CertificationMethod); - Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.AirdragInputData.CertificationMethod); + Assert.AreEqual(CertificationMethod.Option2, inputDataProvider.JobInputData.Vehicle.GearboxInputData.CertificationMethod); + Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.JobInputData.Vehicle.AxleGearInputData.CertificationMethod); + Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.JobInputData.Vehicle.RetarderInputData.CertificationMethod); + Assert.AreEqual(CertificationMethod.Measured, inputDataProvider.JobInputData.Vehicle.AirdragInputData.CertificationMethod); } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs index 4ff66a106ce86498c9d2b8386adaf473af761b31..aa6c04732577102185b57610b13a6aa6fa7a8b7e 100644 --- a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs @@ -29,295 +29,301 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.IO; -using System.Linq; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.InputData.FileIO.XML.Engineering; -using TUGraz.VectoCore.InputData.Reader; -using TUGraz.VectoCore.InputData.Reader.ComponentData; -using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; -using TUGraz.VectoCore.OutputData; -using TUGraz.VectoCore.OutputData.FileIO; -using TUGraz.VectoCore.Tests.Utils; -using TUGraz.VectoCore.Utils; +using System.IO; +using System.Linq; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering; +using TUGraz.VectoCore.InputData.Reader; +using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Tests.Utils; +using TUGraz.VectoCore.Utils; using NUnit.Framework; -namespace TUGraz.VectoCore.Tests.XML -{ - [TestFixture] - public class XMLEngineeringInputRefTest - { - public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample_ref.xml"; - - [TestCase] - public void TestXMLInputEngineeringReferencedFileAsStream() - { - AssertHelper.Exception<VectoException>(() => { - var reader = File.OpenRead(EngineeringSampleFile); - var foo = new XMLEngineeringInputDataProvider(reader, true); - }); - } - - [TestCase] - public void TestXMLInputEngReferencedFile() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - - var engineDataProvider = inputDataProvider.EngineInputData; - - Assert.IsFalse(engineDataProvider.SavedInDeclarationMode); - - Assert.AreEqual("Generic 40t Long Haul Truck Engine", engineDataProvider.Model); - Assert.AreEqual(0.012730, engineDataProvider.Displacement.Value()); - Assert.AreEqual(0.77, engineDataProvider.Inertia.Value()); - - AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCMotorway; }); - AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCRural; }); - AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCUrban; }); - - var fcMapTable = engineDataProvider.FuelConsumptionMap; - Assert.AreEqual(112, fcMapTable.Rows.Count); - Assert.AreEqual("engine speed", fcMapTable.Columns[0].Caption); - Assert.AreEqual("torque", fcMapTable.Columns[1].Caption); - Assert.AreEqual("fuel consumption", fcMapTable.Columns[2].Caption); - - Assert.AreEqual("560", fcMapTable.Rows[0][0]); - var fcMap = FuelConsumptionMapReader.Create(fcMapTable); - Assert.AreEqual(1256.SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Value(), - fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value()); - - var fldTable = engineDataProvider.FullLoadCurve; - Assert.AreEqual(10, fldTable.Rows.Count); - Assert.AreEqual("engine speed", fldTable.Columns[0].Caption); - Assert.AreEqual("full load torque", fldTable.Columns[1].Caption); - Assert.AreEqual("motoring torque", fldTable.Columns[2].Caption); - var fldMap = FullLoadCurveReader.Create(fldTable, true); - } - - [TestCase] - public void TestXMLInputGbxReferencedFile() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - var gearboxDataProvider = inputDataProvider.GearboxInputData; - - Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model); - Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type); - var gears = gearboxDataProvider.Gears; - Assert.AreEqual(12, gears.Count); - - Assert.AreEqual(1, gears.First().Gear); - Assert.AreEqual(14.93, gears.First().Ratio); - Assert.AreEqual("0", gears.First().LossMap.Rows[0][0]); - Assert.AreEqual("-350", gears.First().LossMap.Rows[0][1]); - Assert.AreEqual("12.06", gears.First().LossMap.Rows[0][2]); - - var lossMap = TransmissionLossMapReader.Create(gears.First().LossMap, gears.First().Ratio, - gears.First().Gear.ToString()); - - Assert.AreEqual("-100", gears.First().ShiftPolygon.Rows[0][0]); - Assert.AreEqual("700", gears.First().ShiftPolygon.Rows[0][1]); - Assert.AreEqual("1800", gears.First().ShiftPolygon.Rows[0][2]); - - //Assert.AreEqual("560", gears.First().FullLoadCurve.Rows[0][0]); - //Assert.AreEqual("2500", gears.First().FullLoadCurve.Rows[0][1]); - - //var fldMap = FullLoadCurveReader.Create(gears.First().FullLoadCurve, true); - } - - [TestCase] - public void TestXMLInputGbxTCReferencedFile() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - var tcInputDataProvider = inputDataProvider.GearboxInputData.TorqueConverter; - - - Assert.AreEqual("GBX_ShiftPolygons.vgbs", Path.GetFileName(tcInputDataProvider.ShiftPolygon.Source)); - Assert.AreEqual("-100", tcInputDataProvider.ShiftPolygon.Rows[0][0]); - Assert.AreEqual("700", tcInputDataProvider.ShiftPolygon.Rows[0][1]); - Assert.AreEqual("1800", tcInputDataProvider.ShiftPolygon.Rows[0][2]); - - Assert.AreEqual("tc_data.vtcc", Path.GetFileName(tcInputDataProvider.TCData.Source)); - Assert.AreEqual(3, tcInputDataProvider.TCData.Rows.Count); - Assert.AreEqual("300", tcInputDataProvider.TCData.Rows[0][1]); - Assert.AreEqual("0.9", tcInputDataProvider.TCData.Rows[2][2]); - } - - [TestCase] - public void TestXMLInputAngledriveReferencedFile() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - var angledriveInputData = inputDataProvider.AngledriveInputData; - - Assert.AreEqual("Generic Angledrive", angledriveInputData.Model); - - var lossMapData = angledriveInputData.LossMap; - Assert.AreEqual(1.2, angledriveInputData.Ratio); - Assert.AreEqual("0", lossMapData.Rows[0][0]); - Assert.AreEqual("-10000", lossMapData.Rows[0][1]); - Assert.AreEqual("100", lossMapData.Rows[0][2]); - - var lossMap = TransmissionLossMapReader.Create(lossMapData, angledriveInputData.Ratio, "Angledrive"); - } - - [TestCase] - public void TestXMLInputAxlGReferencedFile() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - var axlegearDataProvider = inputDataProvider.AxleGearInputData; - - Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model); - - var lossMapData = axlegearDataProvider.LossMap; - Assert.AreEqual(2.59, axlegearDataProvider.Ratio); - Assert.AreEqual("0", lossMapData.Rows[0][0]); - Assert.AreEqual("-5000", lossMapData.Rows[0][1]); - Assert.AreEqual("115", lossMapData.Rows[0][2]); - - var lossMap = TransmissionLossMapReader.Create(lossMapData, axlegearDataProvider.Ratio, "AxleGear"); - } - - [TestCase] - public void TestXMLInputRetarderReferencedFile() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - var retarderDataProvider = inputDataProvider.RetarderInputData; - - Assert.AreEqual("Generic Retarder", retarderDataProvider.Model); - - var lossMapData = retarderDataProvider.LossMap; - - Assert.AreEqual(RetarderType.TransmissionOutputRetarder, retarderDataProvider.Type); - - Assert.AreEqual("0", lossMapData.Rows[0][0]); - Assert.AreEqual("10", lossMapData.Rows[0][1]); - - var lossMap = RetarderLossMapReader.Create(lossMapData); - } - - [TestCase] - public void TestXMLInputAxleWheelsReferencedFile() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; - - var axles = vehicleDataProvider.Axles; - - Assert.AreEqual("315/70 R22.5", axles[0].Wheels); - Assert.AreEqual(0.0055, axles[0].RollResistanceCoefficient); - Assert.AreEqual(31300, axles[0].TyreTestLoad.Value()); - - Assert.AreEqual("315/70 R22.5", axles[1].Wheels); - Assert.AreEqual(0.0063, axles[1].RollResistanceCoefficient); - Assert.AreEqual(31300, axles[1].TyreTestLoad.Value()); - - //AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; }); - Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value()); - } - - [TestCase] - public void TestXMLInputAuxiliariesReferencedFile() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - var auxDataProvider = inputDataProvider.AuxiliaryInputData(); - - var aux = auxDataProvider.Auxiliaries; - var aux1 = aux[0]; - - Assert.AreEqual("ES", aux1.ID); - - Assert.AreEqual(70, aux1.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower)); - Assert.AreEqual(640, aux1.DemandMap.Rows[2].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower)); - - var aux2 = aux[1]; - - Assert.AreEqual("FAN", aux2.ID); - Assert.AreEqual(70, aux2.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower)); - Assert.AreEqual(3190, aux2.DemandMap.Rows[113].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower)); - } - - [TestCase] - public void TestXMLInputADASReferencedFile() - { - //var reader = XmlReader.Create(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - - var adas = inputDataProvider.DriverInputData; - - Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode); - } - - [TestCase] - public void TestVehicleInputReferencedFile() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - - var vehicleDataProvider = inputDataProvider.VehicleInputData; - - Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory); - Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration); - - Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value()); - Assert.AreEqual(18000.0, vehicleDataProvider.GrossVehicleMassRating.Value()); - Assert.AreEqual(6.29, inputDataProvider.AirdragInputData.AirDragArea.Value()); - - Assert.AreEqual(1500, vehicleDataProvider.Loading.Value()); - Assert.AreEqual(500, vehicleDataProvider.CurbMassExtra.Value()); - - Assert.AreEqual(1.0, inputDataProvider.RetarderInputData.Ratio); - } - - [TestCase] - public void TestXMLPowertrainGenerationReferencedFile() - { - var fileWriter = new FileOutputWriter("foo"); - var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml"); - var sumData = new SummaryDataContainer(sumWriter); - var jobContainer = new JobContainer(sumData); - var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - - var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter); - runsFactory.WriteModalResults = true; - - jobContainer.AddRuns(runsFactory); - - //Assert.AreEqual(6, jobContainer.Runs.Count); - } - - - [TestCase] - public void TestXMEngineering_DriverModelLACExt() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - - var driverDataProvider = inputDataProvider.DriverInputData; - - var lac = driverDataProvider.Lookahead; - Assert.IsTrue(lac.Enabled); - - Assert.AreEqual("lac_speedDependent.csv", Path.GetFileName(lac.CoastingDecisionFactorTargetSpeedLookup.Source)); - Assert.AreEqual("lac_velocityDrop.csv", Path.GetFileName(lac.CoastingDecisionFactorVelocityDropLookup.Source)); - } - - [TestCase] - public void TestXMEngineering_PTO() - { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - - var ptoData = inputDataProvider.PTOTransmissionInputData; - - //Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoData.PTOTransmissionType); - Assert.AreEqual(2, ptoData.PTOLossMap.Rows.Count); - Assert.AreEqual("2800", ptoData.PTOLossMap.Rows[1][0]); - Assert.AreEqual("100", ptoData.PTOLossMap.Rows[1][1]); - - Assert.AreEqual(4, ptoData.PTOCycle.Rows.Count); - Assert.AreEqual("3", ptoData.PTOCycle.Rows[3][0]); - Assert.AreEqual("1200", ptoData.PTOCycle.Rows[3][1]); - Assert.AreEqual("100", ptoData.PTOCycle.Rows[3][2]); - } - } -} \ No newline at end of file +namespace TUGraz.VectoCore.Tests.XML +{ + [TestFixture] + public class XMLEngineeringInputRefTest + { + public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample_ref.xml"; + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + + [TestCase] + public void TestXMLInputEngineeringReferencedFileAsStream() + { + AssertHelper.Exception<VectoException>(() => { + var reader = File.OpenRead(EngineeringSampleFile); + var foo = new XMLEngineeringInputDataProvider(reader, true); + }); + } + + [TestCase] + public void TestXMLInputEngReferencedFile() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + + var engineDataProvider = inputDataProvider.JobInputData.Vehicle.EngineInputData; + + Assert.IsFalse(engineDataProvider.SavedInDeclarationMode); + + Assert.AreEqual("Generic 40t Long Haul Truck Engine", engineDataProvider.Model); + Assert.AreEqual(0.012730, engineDataProvider.Displacement.Value()); + Assert.AreEqual(0.77, engineDataProvider.Inertia.Value()); + + AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCMotorway; }); + AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCRural; }); + AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCUrban; }); + + var fcMapTable = engineDataProvider.FuelConsumptionMap; + Assert.AreEqual(112, fcMapTable.Rows.Count); + Assert.AreEqual("engine speed", fcMapTable.Columns[0].Caption); + Assert.AreEqual("torque", fcMapTable.Columns[1].Caption); + Assert.AreEqual("fuel consumption", fcMapTable.Columns[2].Caption); + + Assert.AreEqual("560", fcMapTable.Rows[0][0]); + var fcMap = FuelConsumptionMapReader.Create(fcMapTable); + Assert.AreEqual(1256.SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Value(), + fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value()); + + var fldTable = engineDataProvider.FullLoadCurve; + Assert.AreEqual(10, fldTable.Rows.Count); + Assert.AreEqual("engine speed", fldTable.Columns[0].Caption); + Assert.AreEqual("full load torque", fldTable.Columns[1].Caption); + Assert.AreEqual("motoring torque", fldTable.Columns[2].Caption); + var fldMap = FullLoadCurveReader.Create(fldTable, true); + } + + [TestCase] + public void TestXMLInputGbxReferencedFile() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData; + + Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model); + Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type); + var gears = gearboxDataProvider.Gears; + Assert.AreEqual(12, gears.Count); + + Assert.AreEqual(1, gears.First().Gear); + Assert.AreEqual(14.93, gears.First().Ratio); + Assert.AreEqual("0", gears.First().LossMap.Rows[0][0]); + Assert.AreEqual("-350", gears.First().LossMap.Rows[0][1]); + Assert.AreEqual("12.06", gears.First().LossMap.Rows[0][2]); + + var lossMap = TransmissionLossMapReader.Create(gears.First().LossMap, gears.First().Ratio, + gears.First().Gear.ToString()); + + Assert.AreEqual("-100", gears.First().ShiftPolygon.Rows[0][0]); + Assert.AreEqual("700", gears.First().ShiftPolygon.Rows[0][1]); + Assert.AreEqual("1800", gears.First().ShiftPolygon.Rows[0][2]); + + //Assert.AreEqual("560", gears.First().FullLoadCurve.Rows[0][0]); + //Assert.AreEqual("2500", gears.First().FullLoadCurve.Rows[0][1]); + + //var fldMap = FullLoadCurveReader.Create(gears.First().FullLoadCurve, true); + } + + [TestCase] + public void TestXMLInputGbxTCReferencedFile() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var tcInputDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData.TorqueConverter; + + + Assert.AreEqual("GBX_ShiftPolygons.vgbs", Path.GetFileName(tcInputDataProvider.ShiftPolygon.Source)); + Assert.AreEqual("-100", tcInputDataProvider.ShiftPolygon.Rows[0][0]); + Assert.AreEqual("700", tcInputDataProvider.ShiftPolygon.Rows[0][1]); + Assert.AreEqual("1800", tcInputDataProvider.ShiftPolygon.Rows[0][2]); + + Assert.AreEqual("tc_data.vtcc", Path.GetFileName(tcInputDataProvider.TCData.Source)); + Assert.AreEqual(3, tcInputDataProvider.TCData.Rows.Count); + Assert.AreEqual("300", tcInputDataProvider.TCData.Rows[0][1]); + Assert.AreEqual("0.9", tcInputDataProvider.TCData.Rows[2][2]); + } + + [TestCase] + public void TestXMLInputAngledriveReferencedFile() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var angledriveInputData = inputDataProvider.JobInputData.Vehicle.AngledriveInputData; + + Assert.AreEqual("Generic Angledrive", angledriveInputData.Model); + + var lossMapData = angledriveInputData.LossMap; + Assert.AreEqual(1.2, angledriveInputData.Ratio); + Assert.AreEqual("0", lossMapData.Rows[0][0]); + Assert.AreEqual("-10000", lossMapData.Rows[0][1]); + Assert.AreEqual("100", lossMapData.Rows[0][2]); + + var lossMap = TransmissionLossMapReader.Create(lossMapData, angledriveInputData.Ratio, "Angledrive"); + } + + [TestCase] + public void TestXMLInputAxlGReferencedFile() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.AxleGearInputData; + + Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model); + + var lossMapData = axlegearDataProvider.LossMap; + Assert.AreEqual(2.59, axlegearDataProvider.Ratio); + Assert.AreEqual("0", lossMapData.Rows[0][0]); + Assert.AreEqual("-5000", lossMapData.Rows[0][1]); + Assert.AreEqual("115", lossMapData.Rows[0][2]); + + var lossMap = TransmissionLossMapReader.Create(lossMapData, axlegearDataProvider.Ratio, "AxleGear"); + } + + [TestCase] + public void TestXMLInputRetarderReferencedFile() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.RetarderInputData; + + Assert.AreEqual("Generic Retarder", retarderDataProvider.Model); + + var lossMapData = retarderDataProvider.LossMap; + + Assert.AreEqual(RetarderType.TransmissionOutputRetarder, retarderDataProvider.Type); + + Assert.AreEqual("0", lossMapData.Rows[0][0]); + Assert.AreEqual("10", lossMapData.Rows[0][1]); + + var lossMap = RetarderLossMapReader.Create(lossMapData); + } + + [TestCase] + public void TestXMLInputAxleWheelsReferencedFile() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var vehicleDataProvider = inputDataProvider.VehicleInputData; + + var axles = vehicleDataProvider.Axles; + + Assert.AreEqual("315/70 R22.5", axles[0].Wheels); + Assert.AreEqual(0.0055, axles[0].RollResistanceCoefficient); + Assert.AreEqual(31300, axles[0].TyreTestLoad.Value()); + + Assert.AreEqual("315/70 R22.5", axles[1].Wheels); + Assert.AreEqual(0.0063, axles[1].RollResistanceCoefficient); + Assert.AreEqual(31300, axles[1].TyreTestLoad.Value()); + + //AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; }); + Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value()); + } + + [TestCase] + public void TestXMLInputAuxiliariesReferencedFile() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var auxDataProvider = inputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(); + + var aux = auxDataProvider.Auxiliaries; + var aux1 = aux[0]; + + Assert.AreEqual("ES", aux1.ID); + + Assert.AreEqual(70, aux1.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower)); + Assert.AreEqual(640, aux1.DemandMap.Rows[2].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower)); + + var aux2 = aux[1]; + + Assert.AreEqual("FAN", aux2.ID); + Assert.AreEqual(70, aux2.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower)); + Assert.AreEqual(3190, aux2.DemandMap.Rows[113].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower)); + } + + [TestCase] + public void TestXMLInputADASReferencedFile() + { + //var reader = XmlReader.Create(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + + var adas = inputDataProvider.DriverInputData; + + Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode); + } + + [TestCase] + public void TestVehicleInputReferencedFile() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + + var vehicleDataProvider = inputDataProvider.VehicleInputData; + + Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory); + Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration); + + Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value()); + Assert.AreEqual(18000.0, vehicleDataProvider.GrossVehicleMassRating.Value()); + Assert.AreEqual(6.29, inputDataProvider.JobInputData.Vehicle.AirdragInputData.AirDragArea.Value()); + + Assert.AreEqual(1500, vehicleDataProvider.Loading.Value()); + Assert.AreEqual(500, vehicleDataProvider.CurbMassExtra.Value()); + + Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio); + } + + [TestCase] + public void TestXMLPowertrainGenerationReferencedFile() + { + var fileWriter = new FileOutputWriter("foo"); + var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml"); + var sumData = new SummaryDataContainer(sumWriter); + var jobContainer = new JobContainer(sumData); + var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + + var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter); + runsFactory.WriteModalResults = true; + + jobContainer.AddRuns(runsFactory); + + //Assert.AreEqual(6, jobContainer.Runs.Count); + } + + + [TestCase] + public void TestXMEngineering_DriverModelLACExt() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + + var driverDataProvider = inputDataProvider.DriverInputData; + + var lac = driverDataProvider.Lookahead; + Assert.IsTrue(lac.Enabled); + + Assert.AreEqual("lac_speedDependent.csv", Path.GetFileName(lac.CoastingDecisionFactorTargetSpeedLookup.Source)); + Assert.AreEqual("lac_velocityDrop.csv", Path.GetFileName(lac.CoastingDecisionFactorVelocityDropLookup.Source)); + } + + [TestCase] + public void TestXMEngineering_PTO() + { + var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + + var ptoData = inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData; + + //Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoData.PTOTransmissionType); + Assert.AreEqual(2, ptoData.PTOLossMap.Rows.Count); + Assert.AreEqual("2800", ptoData.PTOLossMap.Rows[1][0]); + Assert.AreEqual("100", ptoData.PTOLossMap.Rows[1][1]); + + Assert.AreEqual(4, ptoData.PTOCycle.Rows.Count); + Assert.AreEqual("3", ptoData.PTOCycle.Rows[3][0]); + Assert.AreEqual("1200", ptoData.PTOCycle.Rows[3][1]); + Assert.AreEqual("100", ptoData.PTOCycle.Rows[3][2]); + } + } +} diff --git a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs index 1802bdc2b3bd6a8779701a3fa4c7756a63421494..9f68f52d2899e85e0e4322379ebf1ce70ab92480 100644 --- a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs @@ -29,890 +29,890 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.Linq; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.InputData.FileIO.XML.Engineering; -using TUGraz.VectoCore.InputData.Reader; -using TUGraz.VectoCore.InputData.Reader.ComponentData; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; -using TUGraz.VectoCore.OutputData; -using TUGraz.VectoCore.OutputData.FileIO; -using TUGraz.VectoCore.Tests.Utils; -using TUGraz.VectoCore.Utils; +using System.IO; +using System.Linq; +using System.Xml; +using System.Xml.Linq; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering; +using TUGraz.VectoCore.InputData.Reader; +using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Tests.Utils; +using TUGraz.VectoCore.Utils; using NUnit.Framework; -namespace TUGraz.VectoCore.Tests.XML -{ - [TestFixture] - public class XMLEngineeringInputSingleTest - { - public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample.xml"; - - public const string EngineeringSampleFileFull = "TestData/XML/XMLReaderEngineering/engineering_job-sample_FULL.xml"; - - - [TestCase] - public void TestXMLInputEngSingleFile() - { - var reader = File.OpenRead(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var engineDataProvider = inputDataProvider.EngineInputData; - - Assert.IsFalse(engineDataProvider.SavedInDeclarationMode); - - Assert.AreEqual("Generic 40t Long Haul Truck Engine", engineDataProvider.Model); - Assert.AreEqual(0.012730, engineDataProvider.Displacement.Value()); - Assert.AreEqual(0.77, engineDataProvider.Inertia.Value()); - - AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCMotorway; }); - AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCRural; }); - AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCUrban; }); - - var fcMapTable = engineDataProvider.FuelConsumptionMap; - Assert.AreEqual(112, fcMapTable.Rows.Count); - Assert.AreEqual("engine speed", fcMapTable.Columns[0].Caption); - Assert.AreEqual("torque", fcMapTable.Columns[1].Caption); - Assert.AreEqual("fuel consumption", fcMapTable.Columns[2].Caption); - - Assert.AreEqual("560.00", fcMapTable.Rows[0][0]); - var fcMap = FuelConsumptionMapReader.Create(fcMapTable); - Assert.AreEqual(1256.SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Value(), - fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value()); - - var fldTable = engineDataProvider.FullLoadCurve; - Assert.AreEqual(10, fldTable.Rows.Count); - Assert.AreEqual("engine speed", fldTable.Columns[0].Caption); - Assert.AreEqual("full load torque", fldTable.Columns[1].Caption); - Assert.AreEqual("motoring torque", fldTable.Columns[2].Caption); - var fldMap = FullLoadCurveReader.Create(fldTable, true); - } - - [TestCase] - public void TestXMLInputGbxSingleFile() - { - var reader = File.OpenRead(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - var gearboxDataProvider = inputDataProvider.GearboxInputData; - - Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model); - Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type); - var gears = gearboxDataProvider.Gears; - Assert.AreEqual(12, gears.Count); - - Assert.AreEqual(1, gears.First().Gear); - Assert.AreEqual(14.93, gears.First().Ratio); - Assert.AreEqual("0.00", gears.First().LossMap.Rows[0][0]); - Assert.AreEqual("-350.00", gears.First().LossMap.Rows[0][1]); - Assert.AreEqual("12.06", gears.First().LossMap.Rows[0][2]); - - var lossMap = TransmissionLossMapReader.Create(gears.First().LossMap, gears.First().Ratio, - gears.First().Gear.ToString()); - - //Assert.AreEqual("560", gears.First().FullLoadCurve.Rows[0][0]); - //Assert.AreEqual("2500", gears.First().FullLoadCurve.Rows[0][1]); - - //var fldMap = FullLoadCurveReader.Create(gears.First().FullLoadCurve, true); - } - - - [TestCase] - public void TestXMLInputAxlGSingleFile() - { - var reader = File.OpenRead(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - var axlegearDataProvider = inputDataProvider.AxleGearInputData; - - Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model); - - var lossMapData = axlegearDataProvider.LossMap; - Assert.AreEqual(2.59, axlegearDataProvider.Ratio); - Assert.AreEqual("0.00", lossMapData.Rows[0][0]); - Assert.AreEqual("-5000.00", lossMapData.Rows[0][1]); - Assert.AreEqual("115.00", lossMapData.Rows[0][2]); - - var lossMap = TransmissionLossMapReader.Create(lossMapData, axlegearDataProvider.Ratio, "AxleGear"); - } - - [TestCase] - public void TestXMLInputAxlGSingleFileEfficiency() - { - var reader = XmlReader.Create(EngineeringSampleFile); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var axleglosses = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear, - XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager); - //accData.DeleteSelf(); - axleglosses.ReplaceSelf( - new XElement(XMLNames.Axlegear_TorqueLossMap, new XElement(XMLNames.Axlegear_Efficiency, "0.9123")).ToString()); - - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - - var axleGear = inputDataProvider.AxleGearInputData; - Assert.AreEqual(0.9123, axleGear.Efficiency); - } - - [TestCase] - public void TestXMLInputRetarderSingleFile() - { - var reader = File.OpenRead(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - var retarderDataProvider = inputDataProvider.RetarderInputData; - - Assert.AreEqual("Generic Retarder", retarderDataProvider.Model); - - var lossMapData = retarderDataProvider.LossMap; - - Assert.AreEqual(RetarderType.TransmissionOutputRetarder, retarderDataProvider.Type); - - Assert.AreEqual("0.00", lossMapData.Rows[0][0]); - Assert.AreEqual("10.00", lossMapData.Rows[0][1]); - - var lossMap = RetarderLossMapReader.Create(lossMapData); - } - - [TestCase] - public void TestXMLInputAxleWheelsSingleFile() - { - var reader = File.OpenRead(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; - - var axles = vehicleDataProvider.Axles; - - Assert.AreEqual("315/70 R22.5", axles[0].Wheels); - Assert.AreEqual(0.0055, axles[0].RollResistanceCoefficient); - Assert.AreEqual(31300, axles[0].TyreTestLoad.Value()); - - Assert.AreEqual("315/70 R22.5", axles[1].Wheels); - Assert.AreEqual(0.0063, axles[1].RollResistanceCoefficient); - Assert.AreEqual(31300, axles[1].TyreTestLoad.Value()); - - //AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; }); - Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value()); - } - - [TestCase] - public void TestXMLInputAxleWheelsDuplicates() - { - var reader = XmlReader.Create(EngineeringSampleFile); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - var firstAxle = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, - XMLNames.Vehicle_Components, - XMLNames.Component_AxleWheels, - XMLNames.ComponentDataWrapper, - XMLNames.AxleWheels_Axles, - helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty) - ), manager); - firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty); - firstAxle.SetTypedValue(2); - - - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - - var vehicleDataProvider = inputDataProvider.VehicleInputData; - - AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Axles; }); - } - - [TestCase] - public void TestXMLInputAxleWheelsAxleNumTooLow() - { - var reader = XmlReader.Create(EngineeringSampleFile); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - var firstAxle = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, - XMLNames.Vehicle_Components, - XMLNames.Component_AxleWheels, - XMLNames.ComponentDataWrapper, - XMLNames.AxleWheels_Axles, - helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty) - ), manager); - firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty); - firstAxle.SetTypedValue(0); - - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - AssertHelper.Exception<VectoException>( - () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - var axles = inputDataProvider.VehicleInputData.Axles; - }); - } - - [TestCase] - public void TestXMLInputAxleWheelsAxleNumTooHigh() - { - var reader = XmlReader.Create(EngineeringSampleFile); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - var firstAxle = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, - XMLNames.Vehicle_Components, - XMLNames.Component_AxleWheels, - XMLNames.ComponentDataWrapper, - XMLNames.AxleWheels_Axles, - helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty) - ), manager); - firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty); - firstAxle.SetTypedValue(3); - - - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - AssertHelper.Exception<VectoException>( - () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - var axles = inputDataProvider.VehicleInputData.Axles; - }); - } - - [TestCase] - public void TestXMLInputAuxiliariesSingleFile() - { - var reader = File.OpenRead(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - var auxDataProvider = inputDataProvider.AuxiliaryInputData(); - - var aux = auxDataProvider.Auxiliaries; - var aux1 = aux[0]; - - Assert.AreEqual("ES", aux1.ID); - - Assert.AreEqual(70, aux1.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower)); - Assert.AreEqual(640, aux1.DemandMap.Rows[2].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower)); - - var aux2 = aux[1]; - - Assert.AreEqual("FAN", aux2.ID); - } - - [TestCase] - public void TestXMLInputADASSingleFile() - { - var reader = File.OpenRead(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var adas = inputDataProvider.DriverInputData; - - Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode); - } - - [TestCase] - public void TestVehicleInputSingleFile() - { - var reader = File.OpenRead(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var vehicleDataProvider = inputDataProvider.VehicleInputData; - - Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory); - Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration); - - Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value()); - Assert.AreEqual(40000.0, vehicleDataProvider.GrossVehicleMassRating.Value()); - Assert.AreEqual(6.29, inputDataProvider.AirdragInputData.AirDragArea.Value()); - - Assert.AreEqual(1500, vehicleDataProvider.Loading.Value()); - Assert.AreEqual(500, vehicleDataProvider.CurbMassExtra.Value()); - - Assert.AreEqual(1.0, inputDataProvider.RetarderInputData.Ratio); - } - - [TestCase] - public void TestXMEngineering_DriverModel() - { - var reader = File.OpenRead(EngineeringSampleFile); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var driverDataProvider = inputDataProvider.DriverInputData; - - var lac = driverDataProvider.Lookahead; - Assert.IsTrue(lac.Enabled); - Assert.AreEqual(DeclarationData.Driver.LookAhead.MinimumSpeed.AsKmph, lac.MinSpeed.AsKmph, 1e-6); - - var overspeed = driverDataProvider.OverSpeedEcoRoll; - Assert.AreEqual(DriverMode.Overspeed, overspeed.Mode); - Assert.AreEqual(50, overspeed.MinSpeed.AsKmph, 1e-6); - Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6); - Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6); - - var driverAcc = driverDataProvider.AccelerationCurve; - Assert.AreEqual(2, driverAcc.Rows.Count); - Assert.AreEqual("100", driverAcc.Rows[1][0]); - Assert.AreEqual("1", driverAcc.Rows[1][1]); - Assert.AreEqual("-1", driverAcc.Rows[1][2]); - - var declarationDriverDataProvider = (IDriverDeclarationInputData)inputDataProvider.DriverInputData; - - Assert.AreEqual(DriverMode.Overspeed, declarationDriverDataProvider.OverSpeedEcoRoll.Mode); - - var shiftStrategy = inputDataProvider.GearboxInputData; - - Assert.AreEqual(DeclarationData.Gearbox.UpshiftMinAcceleration.Value(), shiftStrategy.UpshiftMinAcceleration.Value(), - 1e-6); - Assert.AreEqual(DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.Value(), - shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6); - Assert.AreEqual(DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.Value(), - shiftStrategy.UpshiftAfterDownshiftDelay.Value(), 1e-6); - - Assert.AreEqual(DeclarationData.Gearbox.TorqueReserve, shiftStrategy.TorqueReserve, 1e-6); - Assert.AreEqual(DeclarationData.Gearbox.MinTimeBetweenGearshifts.Value(), - shiftStrategy.MinTimeBetweenGearshift.Value(), 1e-6); - Assert.AreEqual(DeclarationData.Gearbox.StartSpeed.Value(), shiftStrategy.StartSpeed.Value(), 1e-6); - Assert.AreEqual(DeclarationData.Gearbox.StartAcceleration.Value(), shiftStrategy.StartAcceleration.Value(), 1e-6); - Assert.AreEqual(DeclarationData.Gearbox.TorqueReserveStart, shiftStrategy.StartTorqueReserve, 1e-6); - - AssertHelper.AreRelativeEqual(Constants.DefaultPowerShiftTime, shiftStrategy.PowershiftShiftTime); - - var tcShiftStrategy = inputDataProvider.GearboxInputData.TorqueConverter; - - AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CCUpshiftMinAcceleration, - tcShiftStrategy.CCUpshiftMinAcceleration); - AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CLUpshiftMinAcceleration, - tcShiftStrategy.CLUpshiftMinAcceleration); - } - - [TestCase] - public void TestXMEngineering_DriverModelNoAcc() - { - var reader = XmlReader.Create(EngineeringSampleFile); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var accData = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_DriverModel, - XMLNames.DriverModel_DriverAccelerationCurve), manager); - accData.DeleteSelf(); - - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - - var driverDataProvider = inputDataProvider.DriverInputData; - - var driverAcc = driverDataProvider.AccelerationCurve; - Assert.AreEqual("TUGraz.VectoCore.Resources.Declaration.VACC.Truck.vacc", driverAcc.Source); - Assert.AreEqual(5, driverAcc.Rows.Count); - } - - - [TestCase] - public void TestXMLPowertrainGenerationSingleFile() - { - var fileWriter = new FileOutputWriter("foo"); - var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml"); - var sumData = new SummaryDataContainer(sumWriter); - var jobContainer = new JobContainer(sumData); - var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - - var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter); - runsFactory.WriteModalResults = true; - - jobContainer.AddRuns(runsFactory); - - //Assert.AreEqual(6, jobContainer.Runs.Count); - } - - [TestCase] - public void TestFullFeaturedXMEngineering_TorqueConverter() - { - var reader = File.OpenRead(EngineeringSampleFileFull); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var tcDataProvider = inputDataProvider.TorqueConverterInputData; - - Assert.AreEqual(1000, tcDataProvider.ReferenceRPM.AsRPM, 1e-6); - Assert.AreEqual(1.1, tcDataProvider.Inertia.Value()); - - Assert.AreEqual(3, tcDataProvider.TCData.Rows.Count); - Assert.AreEqual("300.00", tcDataProvider.TCData.Rows[0][2]); - Assert.AreEqual("0.90", tcDataProvider.TCData.Rows[2][1]); - - Assert.IsNotNull(tcDataProvider.ShiftPolygon); - Assert.AreEqual("700", tcDataProvider.ShiftPolygon.Rows[0][1]); - Assert.AreEqual("800", tcDataProvider.ShiftPolygon.Rows[1][2]); - - Assert.AreEqual(1700, tcDataProvider.MaxInputSpeed.AsRPM, 1e-6); - } - - [TestCase] - public void TestFullFeaturedXMEngineering_AngleDrive() - { - var reader = File.OpenRead(EngineeringSampleFileFull); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var angledriveDataProvider = inputDataProvider.AngledriveInputData; - - Assert.AreEqual(1.2, angledriveDataProvider.Ratio); - Assert.AreEqual(6, angledriveDataProvider.LossMap.Rows.Count); - Assert.AreEqual("-10000.00", angledriveDataProvider.LossMap.Rows[0][1]); - Assert.AreEqual("100.00", angledriveDataProvider.LossMap.Rows[4][2]); - } - - [TestCase] - public void TestFullFeaturedXMEngineering_DriverModel() - { - var reader = File.OpenRead(EngineeringSampleFileFull); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var driverDataProvider = inputDataProvider.DriverInputData; - - var lac = driverDataProvider.Lookahead; - Assert.IsTrue(lac.Enabled); - Assert.AreEqual(60, lac.MinSpeed.AsKmph, 1e-6); - Assert.AreEqual(2, lac.CoastingDecisionFactorTargetSpeedLookup.Rows.Count); - Assert.AreEqual("100", lac.CoastingDecisionFactorTargetSpeedLookup.Rows[1][0]); - Assert.AreEqual("2", lac.CoastingDecisionFactorTargetSpeedLookup.Rows[1][1]); - - Assert.AreEqual(2, lac.CoastingDecisionFactorVelocityDropLookup.Rows.Count); - Assert.AreEqual("100", lac.CoastingDecisionFactorVelocityDropLookup.Rows[1][0]); - Assert.AreEqual("1", lac.CoastingDecisionFactorVelocityDropLookup.Rows[1][1]); - - var overspeed = driverDataProvider.OverSpeedEcoRoll; - Assert.AreEqual(DriverMode.Overspeed, overspeed.Mode); - Assert.AreEqual(50, overspeed.MinSpeed.AsKmph, 1e-6); - Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6); - Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6); - - var driverAcc = driverDataProvider.AccelerationCurve; - Assert.AreEqual(2, driverAcc.Rows.Count); - Assert.AreEqual("100", driverAcc.Rows[1][0]); - Assert.AreEqual("1", driverAcc.Rows[1][1]); - Assert.AreEqual("-1", driverAcc.Rows[1][2]); - - var declarationDriverDataProvider = (IDriverDeclarationInputData)inputDataProvider.DriverInputData; - - Assert.AreEqual(DriverMode.Overspeed, declarationDriverDataProvider.OverSpeedEcoRoll.Mode); - - var shiftStrategy = inputDataProvider.GearboxInputData; - - Assert.AreEqual(0.133, shiftStrategy.UpshiftMinAcceleration.Value(), 1e-6); - Assert.AreEqual(12, shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6); - Assert.AreEqual(13, shiftStrategy.UpshiftAfterDownshiftDelay.Value(), 1e-6); - - Assert.AreEqual(0.213, shiftStrategy.TorqueReserve, 1e-6); - Assert.AreEqual(2.33, shiftStrategy.MinTimeBetweenGearshift.Value(), 1e-6); - Assert.AreEqual(2.11, shiftStrategy.StartSpeed.Value(), 1e-6); - Assert.AreEqual(0.211, shiftStrategy.StartAcceleration.Value(), 1e-6); - Assert.AreEqual(0.212, shiftStrategy.StartTorqueReserve, 1e-6); - - Assert.AreEqual(0.811, shiftStrategy.PowershiftShiftTime.Value(), 1e-6); - - var tcShiftStrategy = inputDataProvider.GearboxInputData.TorqueConverter; - - Assert.AreEqual(0.134, tcShiftStrategy.CCUpshiftMinAcceleration.Value(), 1e-6); - Assert.AreEqual(0.133, tcShiftStrategy.CLUpshiftMinAcceleration.Value(), 1e-6); - } - - [TestCase] - public void TestFullFeaturedXMEngineering_CrosswindCorrection() - { - var reader = File.OpenRead(EngineeringSampleFileFull); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var airdragData = inputDataProvider.AirdragInputData; - Assert.AreEqual(CrossWindCorrectionMode.SpeedDependentCorrectionFactor, airdragData.CrossWindCorrectionMode); - Assert.AreEqual(2, airdragData.CrosswindCorrectionMap.Rows.Count); - Assert.AreEqual("100", airdragData.CrosswindCorrectionMap.Rows[1][0]); - Assert.AreEqual("1.8", airdragData.CrosswindCorrectionMap.Rows[1][1]); - } - - [TestCase] - public void TestFullFeaturedXMEngineering_PTO() - { - var reader = File.OpenRead(EngineeringSampleFileFull); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var ptoData = inputDataProvider.PTOTransmissionInputData; - - Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoData.PTOTransmissionType); - Assert.AreEqual(2, ptoData.PTOLossMap.Rows.Count); - Assert.AreEqual("2800.00", ptoData.PTOLossMap.Rows[1][0]); - Assert.AreEqual("100.00", ptoData.PTOLossMap.Rows[1][1]); - - Assert.AreEqual(4, ptoData.PTOCycle.Rows.Count); - Assert.AreEqual("3", ptoData.PTOCycle.Rows[3][0]); - Assert.AreEqual("1200.00", ptoData.PTOCycle.Rows[3][1]); - Assert.AreEqual("100.00", ptoData.PTOCycle.Rows[3][2]); - } - - - [TestCase] - public void TestXMLInputAngledriveGSingleFile() - { - var reader = File.OpenRead(EngineeringSampleFileFull); - - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - var angledriveInputData = inputDataProvider.AngledriveInputData; - - Assert.AreEqual("Generic Angledrive", angledriveInputData.Model); - - var lossMapData = angledriveInputData.LossMap; - Assert.AreEqual(1.2, angledriveInputData.Ratio); - Assert.AreEqual("0.00", lossMapData.Rows[0][0]); - Assert.AreEqual("-10000.00", lossMapData.Rows[0][1]); - Assert.AreEqual("100.00", lossMapData.Rows[0][2]); - - var lossMap = TransmissionLossMapReader.Create(lossMapData, angledriveInputData.Ratio, "Angledrive"); - } - - [TestCase] - public void TestXMLInputAngledriveSingleFileEfficiency() - { - var reader = XmlReader.Create(EngineeringSampleFileFull); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var angledrivelosses = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Angledrive, - XMLNames.ComponentDataWrapper, XMLNames.AngleDrive_TorqueLossMap), manager); - //accData.DeleteSelf(); - angledrivelosses.ReplaceSelf( - new XElement(XMLNames.AngleDrive_TorqueLossMap, new XElement(XMLNames.AngleDrive_Efficiency, "0.9124")).ToString()); - - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - - var angledrive = inputDataProvider.AngledriveInputData; - Assert.AreEqual(0.9124, angledrive.Efficiency); - } - - [TestCase] - public void TestXMLInputConstantAuxSingleFile() - { - var reader = XmlReader.Create(EngineeringSampleFileFull); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var aux = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries, - XMLNames.ComponentDataWrapper), manager); - //accData.DeleteSelf(); - //angledrivelosses.ReplaceSelf(new XElement(XMLNames.AngleDrive_Efficiency, "0.9124").ToString()); - aux.InnerXml = - new XElement(XMLNames.Auxiliaries_Auxiliary, new XAttribute(XMLNames.Auxiliaries_Auxiliary_ID_Attr, "const"), - new XElement(XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad, "5000")).ToString(); - - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - - var auxInput = inputDataProvider.AuxiliaryInputData().Auxiliaries; - - Assert.AreEqual(1, auxInput.Count); - Assert.AreEqual(AuxiliaryDemandType.Constant, auxInput[0].AuxiliaryType); - Assert.AreEqual(5000, auxInput[0].ConstantPowerDemand.Value(), 1e-6); - } - - [TestCase] - public void TestRetarderTypeNone() - { - var reader = XmlReader.Create(EngineeringSampleFile); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - var retarderType = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, - XMLNames.Vehicle_RetarderType), manager); - retarderType.SetValue("None"); - - var retarder = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, - XMLNames.Vehicle_Components, - XMLNames.Component_Retarder), manager); - retarder.DeleteSelf(); - - //modify cycle & remove AUX to make simulation valid - var cycle = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.VectoJob_MissionCycles), manager); - cycle.InnerXml = - new XElement(XMLNames.Missions_Cycle, - new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), - new XAttribute(XMLNames.ExtResource_File_Attr, "LongHaul")).ToString(); - var aux = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries, - XMLNames.ComponentDataWrapper), manager); - aux.InnerXml = ""; - - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - - var factory = new SimulatorFactory(ExecutionMode.Engineering, inputDataProvider, new FileOutputWriter("dummy")); - var jobContainer = new JobContainer(null); - jobContainer.AddRuns(factory); - jobContainer.Execute(); - } - - [TestCase] - public void TestXMLInputInvalidXML() - { - var reader = XmlReader.Create(EngineeringSampleFileFull); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var engine = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Engine), manager); - //accData.DeleteSelf(); - engine.DeleteSelf(); - - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - AssertHelper.Exception<VectoException>( - () => { var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); }); - } - - - [TestCase] - public void TestXMLInputInvalidCycle() - { - var reader = XmlReader.Create(EngineeringSampleFileFull); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var cycles = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.VectoJob_MissionCycles), manager); - //accData.DeleteSelf(); - cycles.InnerXml = - new XElement(XMLNames.Missions_Cycle, - new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), - new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_cycle.vdri")).ToString(); - - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - AssertHelper.Exception<VectoException>( - () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - var cyclesList = inputDataProvider.JobInputData().Cycles; - }); - } - - [TestCase] - public void TestXMLInputInvalidDriverAcceleration() - { - var reader = XmlReader.Create(EngineeringSampleFileFull); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var driverAcceleration = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve), manager); - //accData.DeleteSelf(); - driverAcceleration.InnerXml = - new XElement(XMLNames.ExternalResource, - new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), - new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString(); - - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - AssertHelper.Exception<VectoException>( - () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - var cyclesList = inputDataProvider.DriverInputData.AccelerationCurve; - }); - } - - [TestCase] - public void TestXMLInputExtResourceMissingTag() - { - var reader = XmlReader.Create(EngineeringSampleFileFull); - - var doc = new XmlDocument(); - doc.Load(reader); - var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var axlegearLossMap = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear, - XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager); - //accData.DeleteSelf(); - axlegearLossMap.InnerXml = ""; - //InnerXml = - //new XElement(XMLNames.ExternalResource, - // new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), - // new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString(); - - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(nav.OuterXml); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - - AssertHelper.Exception<VectoException>( - () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, false); - var lossmap = inputDataProvider.AxleGearInputData.LossMap; - }, "Failed to read TorqueLossMap resource"); - } - } -} \ No newline at end of file +namespace TUGraz.VectoCore.Tests.XML +{ + [TestFixture] + public class XMLEngineeringInputSingleTest + { + public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample.xml"; + + public const string EngineeringSampleFileFull = "TestData/XML/XMLReaderEngineering/engineering_job-sample_FULL.xml"; + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + + [TestCase] + public void TestXMLInputEngSingleFile() + { + var reader = File.OpenRead(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + + var engineDataProvider = inputDataProvider.JobInputData.Vehicle.EngineInputData; + + Assert.IsFalse(engineDataProvider.SavedInDeclarationMode); + + Assert.AreEqual("Generic 40t Long Haul Truck Engine", engineDataProvider.Model); + Assert.AreEqual(0.012730, engineDataProvider.Displacement.Value()); + Assert.AreEqual(0.77, engineDataProvider.Inertia.Value()); + + AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCMotorway; }); + AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCRural; }); + AssertHelper.Exception<VectoException>(() => { var tmp = engineDataProvider.WHTCUrban; }); + + var fcMapTable = engineDataProvider.FuelConsumptionMap; + Assert.AreEqual(112, fcMapTable.Rows.Count); + Assert.AreEqual("engine speed", fcMapTable.Columns[0].Caption); + Assert.AreEqual("torque", fcMapTable.Columns[1].Caption); + Assert.AreEqual("fuel consumption", fcMapTable.Columns[2].Caption); + + Assert.AreEqual("560.00", fcMapTable.Rows[0][0]); + var fcMap = FuelConsumptionMapReader.Create(fcMapTable); + Assert.AreEqual(1256.SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Value(), + fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value()); + + var fldTable = engineDataProvider.FullLoadCurve; + Assert.AreEqual(10, fldTable.Rows.Count); + Assert.AreEqual("engine speed", fldTable.Columns[0].Caption); + Assert.AreEqual("full load torque", fldTable.Columns[1].Caption); + Assert.AreEqual("motoring torque", fldTable.Columns[2].Caption); + var fldMap = FullLoadCurveReader.Create(fldTable, true); + } + + [TestCase] + public void TestXMLInputGbxSingleFile() + { + var reader = File.OpenRead(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.GearboxInputData; + + Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model); + Assert.AreEqual(GearboxType.AMT, gearboxDataProvider.Type); + var gears = gearboxDataProvider.Gears; + Assert.AreEqual(12, gears.Count); + + Assert.AreEqual(1, gears.First().Gear); + Assert.AreEqual(14.93, gears.First().Ratio); + Assert.AreEqual("0.00", gears.First().LossMap.Rows[0][0]); + Assert.AreEqual("-350.00", gears.First().LossMap.Rows[0][1]); + Assert.AreEqual("12.06", gears.First().LossMap.Rows[0][2]); + + var lossMap = TransmissionLossMapReader.Create(gears.First().LossMap, gears.First().Ratio, + gears.First().Gear.ToString()); + + //Assert.AreEqual("560", gears.First().FullLoadCurve.Rows[0][0]); + //Assert.AreEqual("2500", gears.First().FullLoadCurve.Rows[0][1]); + + //var fldMap = FullLoadCurveReader.Create(gears.First().FullLoadCurve, true); + } + + + [TestCase] + public void TestXMLInputAxlGSingleFile() + { + var reader = File.OpenRead(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.AxleGearInputData; + + Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model); + + var lossMapData = axlegearDataProvider.LossMap; + Assert.AreEqual(2.59, axlegearDataProvider.Ratio); + Assert.AreEqual("0.00", lossMapData.Rows[0][0]); + Assert.AreEqual("-5000.00", lossMapData.Rows[0][1]); + Assert.AreEqual("115.00", lossMapData.Rows[0][2]); + + var lossMap = TransmissionLossMapReader.Create(lossMapData, axlegearDataProvider.Ratio, "AxleGear"); + } + + [TestCase] + public void TestXMLInputAxlGSingleFileEfficiency() + { + var reader = XmlReader.Create(EngineeringSampleFile); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + + var axleglosses = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear, + XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager); + //accData.DeleteSelf(); + axleglosses.ReplaceSelf( + new XElement(XMLNames.Axlegear_TorqueLossMap, new XElement(XMLNames.Axlegear_Efficiency, "0.9123")).ToString()); + + //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + + var axleGear = inputDataProvider.JobInputData.Vehicle.AxleGearInputData; + Assert.AreEqual(0.9123, axleGear.Efficiency); + } + + [TestCase] + public void TestXMLInputRetarderSingleFile() + { + var reader = File.OpenRead(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.RetarderInputData; + + Assert.AreEqual("Generic Retarder", retarderDataProvider.Model); + + var lossMapData = retarderDataProvider.LossMap; + + Assert.AreEqual(RetarderType.TransmissionOutputRetarder, retarderDataProvider.Type); + + Assert.AreEqual("0.00", lossMapData.Rows[0][0]); + Assert.AreEqual("10.00", lossMapData.Rows[0][1]); + + var lossMap = RetarderLossMapReader.Create(lossMapData); + } + + [TestCase] + public void TestXMLInputAxleWheelsSingleFile() + { + var reader = File.OpenRead(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var vehicleDataProvider = inputDataProvider.VehicleInputData; + + var axles = vehicleDataProvider.Axles; + + Assert.AreEqual("315/70 R22.5", axles[0].Wheels); + Assert.AreEqual(0.0055, axles[0].RollResistanceCoefficient); + Assert.AreEqual(31300, axles[0].TyreTestLoad.Value()); + + Assert.AreEqual("315/70 R22.5", axles[1].Wheels); + Assert.AreEqual(0.0063, axles[1].RollResistanceCoefficient); + Assert.AreEqual(31300, axles[1].TyreTestLoad.Value()); + + //AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; }); + Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value()); + } + + [TestCase] + public void TestXMLInputAxleWheelsDuplicates() + { + var reader = XmlReader.Create(EngineeringSampleFile); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + var firstAxle = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, + XMLNames.Vehicle_Components, + XMLNames.Component_AxleWheels, + XMLNames.ComponentDataWrapper, + XMLNames.AxleWheels_Axles, + helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty) + ), manager); + firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty); + firstAxle.SetTypedValue(2); + + + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + + var vehicleDataProvider = inputDataProvider.VehicleInputData; + + AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Axles; }); + } + + [TestCase] + public void TestXMLInputAxleWheelsAxleNumTooLow() + { + var reader = XmlReader.Create(EngineeringSampleFile); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + var firstAxle = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, + XMLNames.Vehicle_Components, + XMLNames.Component_AxleWheels, + XMLNames.ComponentDataWrapper, + XMLNames.AxleWheels_Axles, + helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty) + ), manager); + firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty); + firstAxle.SetTypedValue(0); + + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + AssertHelper.Exception<VectoException>( + () => { + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var axles = inputDataProvider.VehicleInputData.Axles; + }); + } + + [TestCase] + public void TestXMLInputAxleWheelsAxleNumTooHigh() + { + var reader = XmlReader.Create(EngineeringSampleFile); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + var firstAxle = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, + XMLNames.Vehicle_Components, + XMLNames.Component_AxleWheels, + XMLNames.ComponentDataWrapper, + XMLNames.AxleWheels_Axles, + helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty) + ), manager); + firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty); + firstAxle.SetTypedValue(3); + + + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + AssertHelper.Exception<VectoException>( + () => { + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var axles = inputDataProvider.VehicleInputData.Axles; + }); + } + + [TestCase] + public void TestXMLInputAuxiliariesSingleFile() + { + var reader = File.OpenRead(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var auxDataProvider = inputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(); + + var aux = auxDataProvider.Auxiliaries; + var aux1 = aux[0]; + + Assert.AreEqual("ES", aux1.ID); + + Assert.AreEqual(70, aux1.DemandMap.Rows[0].ParseDouble(AuxiliaryDataReader.Fields.MechPower)); + Assert.AreEqual(640, aux1.DemandMap.Rows[2].ParseDouble(AuxiliaryDataReader.Fields.SupplyPower)); + + var aux2 = aux[1]; + + Assert.AreEqual("FAN", aux2.ID); + } + + [TestCase] + public void TestXMLInputADASSingleFile() + { + var reader = File.OpenRead(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + + var adas = inputDataProvider.DriverInputData; + + Assert.AreEqual(DriverMode.Overspeed, adas.OverSpeedEcoRoll.Mode); + } + + [TestCase] + public void TestVehicleInputSingleFile() + { + var reader = File.OpenRead(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + + var vehicleDataProvider = inputDataProvider.VehicleInputData; + + Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory); + Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration); + + Assert.AreEqual(7100.0, vehicleDataProvider.CurbMassChassis.Value()); + Assert.AreEqual(40000.0, vehicleDataProvider.GrossVehicleMassRating.Value()); + Assert.AreEqual(6.29, inputDataProvider.JobInputData.Vehicle.AirdragInputData.AirDragArea.Value()); + + Assert.AreEqual(1500, vehicleDataProvider.Loading.Value()); + Assert.AreEqual(500, vehicleDataProvider.CurbMassExtra.Value()); + + Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.RetarderInputData.Ratio); + } + + [TestCase] + public void TestXMEngineering_DriverModel() + { + var reader = File.OpenRead(EngineeringSampleFile); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + + var driverDataProvider = inputDataProvider.DriverInputData; + + var lac = driverDataProvider.Lookahead; + Assert.IsTrue(lac.Enabled); + Assert.AreEqual(DeclarationData.Driver.LookAhead.MinimumSpeed.AsKmph, lac.MinSpeed.AsKmph, 1e-6); + + var overspeed = driverDataProvider.OverSpeedEcoRoll; + Assert.AreEqual(DriverMode.Overspeed, overspeed.Mode); + Assert.AreEqual(50, overspeed.MinSpeed.AsKmph, 1e-6); + Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6); + Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6); + + var driverAcc = driverDataProvider.AccelerationCurve; + Assert.AreEqual(2, driverAcc.Rows.Count); + Assert.AreEqual("100", driverAcc.Rows[1][0]); + Assert.AreEqual("1", driverAcc.Rows[1][1]); + Assert.AreEqual("-1", driverAcc.Rows[1][2]); + + var declarationDriverDataProvider = (IDriverDeclarationInputData)inputDataProvider.DriverInputData; + + + var shiftStrategy = inputDataProvider.JobInputData.Vehicle.GearboxInputData; + + Assert.AreEqual(DeclarationData.Gearbox.UpshiftMinAcceleration.Value(), shiftStrategy.UpshiftMinAcceleration.Value(), + 1e-6); + Assert.AreEqual(DeclarationData.Gearbox.DownshiftAfterUpshiftDelay.Value(), + shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6); + Assert.AreEqual(DeclarationData.Gearbox.UpshiftAfterDownshiftDelay.Value(), + shiftStrategy.UpshiftAfterDownshiftDelay.Value(), 1e-6); + + Assert.AreEqual(DeclarationData.Gearbox.TorqueReserve, shiftStrategy.TorqueReserve, 1e-6); + Assert.AreEqual(DeclarationData.Gearbox.MinTimeBetweenGearshifts.Value(), + shiftStrategy.MinTimeBetweenGearshift.Value(), 1e-6); + Assert.AreEqual(DeclarationData.Gearbox.StartSpeed.Value(), shiftStrategy.StartSpeed.Value(), 1e-6); + Assert.AreEqual(DeclarationData.Gearbox.StartAcceleration.Value(), shiftStrategy.StartAcceleration.Value(), 1e-6); + Assert.AreEqual(DeclarationData.Gearbox.TorqueReserveStart, shiftStrategy.StartTorqueReserve, 1e-6); + + AssertHelper.AreRelativeEqual(Constants.DefaultPowerShiftTime, shiftStrategy.PowershiftShiftTime); + + var tcShiftStrategy = inputDataProvider.JobInputData.Vehicle.GearboxInputData.TorqueConverter; + + AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CCUpshiftMinAcceleration, + tcShiftStrategy.CCUpshiftMinAcceleration); + AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CLUpshiftMinAcceleration, + tcShiftStrategy.CLUpshiftMinAcceleration); + } + + [TestCase] + public void TestXMEngineering_DriverModelNoAcc() + { + var reader = XmlReader.Create(EngineeringSampleFile); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + + var accData = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_DriverModel, + XMLNames.DriverModel_DriverAccelerationCurve), manager); + accData.DeleteSelf(); + + //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + + var driverDataProvider = inputDataProvider.DriverInputData; + + var driverAcc = driverDataProvider.AccelerationCurve; + Assert.AreEqual("TUGraz.VectoCore.Resources.Declaration.VACC.Truck.vacc", driverAcc.Source); + Assert.AreEqual(5, driverAcc.Rows.Count); + } + + + [TestCase] + public void TestXMLPowertrainGenerationSingleFile() + { + var fileWriter = new FileOutputWriter("foo"); + var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml"); + var sumData = new SummaryDataContainer(sumWriter); + var jobContainer = new JobContainer(sumData); + var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + + var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter); + runsFactory.WriteModalResults = true; + + jobContainer.AddRuns(runsFactory); + + //Assert.AreEqual(6, jobContainer.Runs.Count); + } + + [TestCase] + public void TestFullFeaturedXMEngineering_TorqueConverter() + { + var reader = File.OpenRead(EngineeringSampleFileFull); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + + var tcDataProvider = inputDataProvider.JobInputData.Vehicle.TorqueConverterInputData; + + Assert.AreEqual(1000, tcDataProvider.ReferenceRPM.AsRPM, 1e-6); + Assert.AreEqual(1.1, tcDataProvider.Inertia.Value()); + + Assert.AreEqual(3, tcDataProvider.TCData.Rows.Count); + Assert.AreEqual("300.00", tcDataProvider.TCData.Rows[0][2]); + Assert.AreEqual("0.90", tcDataProvider.TCData.Rows[2][1]); + + Assert.IsNotNull(tcDataProvider.ShiftPolygon); + Assert.AreEqual("700", tcDataProvider.ShiftPolygon.Rows[0][1]); + Assert.AreEqual("800", tcDataProvider.ShiftPolygon.Rows[1][2]); + + Assert.AreEqual(1700, tcDataProvider.MaxInputSpeed.AsRPM, 1e-6); + } + + [TestCase] + public void TestFullFeaturedXMEngineering_AngleDrive() + { + var reader = File.OpenRead(EngineeringSampleFileFull); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + + var angledriveDataProvider = inputDataProvider.JobInputData.Vehicle.AngledriveInputData; + + Assert.AreEqual(1.2, angledriveDataProvider.Ratio); + Assert.AreEqual(6, angledriveDataProvider.LossMap.Rows.Count); + Assert.AreEqual("-10000.00", angledriveDataProvider.LossMap.Rows[0][1]); + Assert.AreEqual("100.00", angledriveDataProvider.LossMap.Rows[4][2]); + } + + [TestCase] + public void TestFullFeaturedXMEngineering_DriverModel() + { + var reader = File.OpenRead(EngineeringSampleFileFull); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + + var driverDataProvider = inputDataProvider.DriverInputData; + + var lac = driverDataProvider.Lookahead; + Assert.IsTrue(lac.Enabled); + Assert.AreEqual(60, lac.MinSpeed.AsKmph, 1e-6); + Assert.AreEqual(2, lac.CoastingDecisionFactorTargetSpeedLookup.Rows.Count); + Assert.AreEqual("100", lac.CoastingDecisionFactorTargetSpeedLookup.Rows[1][0]); + Assert.AreEqual("2", lac.CoastingDecisionFactorTargetSpeedLookup.Rows[1][1]); + + Assert.AreEqual(2, lac.CoastingDecisionFactorVelocityDropLookup.Rows.Count); + Assert.AreEqual("100", lac.CoastingDecisionFactorVelocityDropLookup.Rows[1][0]); + Assert.AreEqual("1", lac.CoastingDecisionFactorVelocityDropLookup.Rows[1][1]); + + var overspeed = driverDataProvider.OverSpeedEcoRoll; + Assert.AreEqual(DriverMode.Overspeed, overspeed.Mode); + Assert.AreEqual(50, overspeed.MinSpeed.AsKmph, 1e-6); + Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6); + Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6); + + var driverAcc = driverDataProvider.AccelerationCurve; + Assert.AreEqual(2, driverAcc.Rows.Count); + Assert.AreEqual("100", driverAcc.Rows[1][0]); + Assert.AreEqual("1", driverAcc.Rows[1][1]); + Assert.AreEqual("-1", driverAcc.Rows[1][2]); + + var shiftStrategy = inputDataProvider.JobInputData.Vehicle.GearboxInputData; + + Assert.AreEqual(0.133, shiftStrategy.UpshiftMinAcceleration.Value(), 1e-6); + Assert.AreEqual(12, shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6); + Assert.AreEqual(13, shiftStrategy.UpshiftAfterDownshiftDelay.Value(), 1e-6); + + Assert.AreEqual(0.213, shiftStrategy.TorqueReserve, 1e-6); + Assert.AreEqual(2.33, shiftStrategy.MinTimeBetweenGearshift.Value(), 1e-6); + Assert.AreEqual(2.11, shiftStrategy.StartSpeed.Value(), 1e-6); + Assert.AreEqual(0.211, shiftStrategy.StartAcceleration.Value(), 1e-6); + Assert.AreEqual(0.212, shiftStrategy.StartTorqueReserve, 1e-6); + + Assert.AreEqual(0.811, shiftStrategy.PowershiftShiftTime.Value(), 1e-6); + + var tcShiftStrategy = inputDataProvider.JobInputData.Vehicle.GearboxInputData.TorqueConverter; + + Assert.AreEqual(0.134, tcShiftStrategy.CCUpshiftMinAcceleration.Value(), 1e-6); + Assert.AreEqual(0.133, tcShiftStrategy.CLUpshiftMinAcceleration.Value(), 1e-6); + } + + [TestCase] + public void TestFullFeaturedXMEngineering_CrosswindCorrection() + { + var reader = File.OpenRead(EngineeringSampleFileFull); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + + var airdragData = inputDataProvider.JobInputData.Vehicle.AirdragInputData; + Assert.AreEqual(CrossWindCorrectionMode.SpeedDependentCorrectionFactor, airdragData.CrossWindCorrectionMode); + Assert.AreEqual(2, airdragData.CrosswindCorrectionMap.Rows.Count); + Assert.AreEqual("100", airdragData.CrosswindCorrectionMap.Rows[1][0]); + Assert.AreEqual("1.8", airdragData.CrosswindCorrectionMap.Rows[1][1]); + } + + [TestCase] + public void TestFullFeaturedXMEngineering_PTO() + { + var reader = File.OpenRead(EngineeringSampleFileFull); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + + var ptoData = inputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData; + + Assert.AreEqual("only the drive shaft of the PTO - multi-disc clutch", ptoData.PTOTransmissionType); + Assert.AreEqual(2, ptoData.PTOLossMap.Rows.Count); + Assert.AreEqual("2800.00", ptoData.PTOLossMap.Rows[1][0]); + Assert.AreEqual("100.00", ptoData.PTOLossMap.Rows[1][1]); + + Assert.AreEqual(4, ptoData.PTOCycle.Rows.Count); + Assert.AreEqual("3", ptoData.PTOCycle.Rows[3][0]); + Assert.AreEqual("1200.00", ptoData.PTOCycle.Rows[3][1]); + Assert.AreEqual("100.00", ptoData.PTOCycle.Rows[3][2]); + } + + + [TestCase] + public void TestXMLInputAngledriveGSingleFile() + { + var reader = File.OpenRead(EngineeringSampleFileFull); + + var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var angledriveInputData = inputDataProvider.JobInputData.Vehicle.AngledriveInputData; + + Assert.AreEqual("Generic Angledrive", angledriveInputData.Model); + + var lossMapData = angledriveInputData.LossMap; + Assert.AreEqual(1.2, angledriveInputData.Ratio); + Assert.AreEqual("0.00", lossMapData.Rows[0][0]); + Assert.AreEqual("-10000.00", lossMapData.Rows[0][1]); + Assert.AreEqual("100.00", lossMapData.Rows[0][2]); + + var lossMap = TransmissionLossMapReader.Create(lossMapData, angledriveInputData.Ratio, "Angledrive"); + } + + [TestCase] + public void TestXMLInputAngledriveSingleFileEfficiency() + { + var reader = XmlReader.Create(EngineeringSampleFileFull); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + + var angledrivelosses = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Angledrive, + XMLNames.ComponentDataWrapper, XMLNames.AngleDrive_TorqueLossMap), manager); + //accData.DeleteSelf(); + angledrivelosses.ReplaceSelf( + new XElement(XMLNames.AngleDrive_TorqueLossMap, new XElement(XMLNames.AngleDrive_Efficiency, "0.9124")).ToString()); + + //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + + var angledrive = inputDataProvider.JobInputData.Vehicle.AngledriveInputData; + Assert.AreEqual(0.9124, angledrive.Efficiency); + } + + [TestCase] + public void TestXMLInputConstantAuxSingleFile() + { + var reader = XmlReader.Create(EngineeringSampleFileFull); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + + var aux = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries, + XMLNames.ComponentDataWrapper), manager); + //accData.DeleteSelf(); + //angledrivelosses.ReplaceSelf(new XElement(XMLNames.AngleDrive_Efficiency, "0.9124").ToString()); + aux.InnerXml = + new XElement(XMLNames.Auxiliaries_Auxiliary, new XAttribute(XMLNames.Auxiliaries_Auxiliary_ID_Attr, "const"), + new XElement(XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad, "5000")).ToString(); + + //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + + var auxInput = inputDataProvider.JobInputData.Vehicle.AuxiliaryInputData().Auxiliaries; + + Assert.AreEqual(1, auxInput.Count); + Assert.AreEqual(AuxiliaryDemandType.Constant, auxInput[0].AuxiliaryType); + Assert.AreEqual(5000, auxInput[0].ConstantPowerDemand.Value(), 1e-6); + } + + [TestCase] + public void TestRetarderTypeNone() + { + var reader = XmlReader.Create(EngineeringSampleFile); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + var retarderType = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, + XMLNames.Vehicle_RetarderType), manager); + retarderType.SetValue("None"); + + var retarder = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, + XMLNames.Vehicle_Components, + XMLNames.Component_Retarder), manager); + retarder.DeleteSelf(); + + //modify cycle & remove AUX to make simulation valid + var cycle = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.VectoJob_MissionCycles), manager); + cycle.InnerXml = + new XElement(XMLNames.Missions_Cycle, + new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), + new XAttribute(XMLNames.ExtResource_File_Attr, "LongHaul")).ToString(); + var aux = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries, + XMLNames.ComponentDataWrapper), manager); + aux.InnerXml = ""; + + //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + + var factory = new SimulatorFactory(ExecutionMode.Engineering, inputDataProvider, new FileOutputWriter("dummy")); + var jobContainer = new JobContainer(null); + jobContainer.AddRuns(factory); + jobContainer.Execute(); + } + + [TestCase] + public void TestXMLInputInvalidXML() + { + var reader = XmlReader.Create(EngineeringSampleFileFull); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + + var engine = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Engine), manager); + //accData.DeleteSelf(); + engine.DeleteSelf(); + + //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + AssertHelper.Exception<VectoException>( + () => { var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); }); + } + + + [TestCase] + public void TestXMLInputInvalidCycle() + { + var reader = XmlReader.Create(EngineeringSampleFileFull); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + + var cycles = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.VectoJob_MissionCycles), manager); + //accData.DeleteSelf(); + cycles.InnerXml = + new XElement(XMLNames.Missions_Cycle, + new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), + new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_cycle.vdri")).ToString(); + + //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + AssertHelper.Exception<VectoException>( + () => { + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var cyclesList = inputDataProvider.JobInputData.Cycles; + }); + } + + [TestCase] + public void TestXMLInputInvalidDriverAcceleration() + { + var reader = XmlReader.Create(EngineeringSampleFileFull); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + + var driverAcceleration = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve), manager); + //accData.DeleteSelf(); + driverAcceleration.InnerXml = + new XElement(XMLNames.ExternalResource, + new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), + new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString(); + + //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + AssertHelper.Exception<VectoException>( + () => { + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var cyclesList = inputDataProvider.DriverInputData.AccelerationCurve; + }); + } + + [TestCase] + public void TestXMLInputExtResourceMissingTag() + { + var reader = XmlReader.Create(EngineeringSampleFileFull); + + var doc = new XmlDocument(); + doc.Load(reader); + var nav = doc.CreateNavigator(); + var manager = new XmlNamespaceManager(nav.NameTable); + var helper = new XPathHelper(ExecutionMode.Engineering); + helper.AddNamespaces(manager); + + + var axlegearLossMap = nav.SelectSingleNode(helper.QueryAbs( + helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear, + XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager); + //accData.DeleteSelf(); + axlegearLossMap.InnerXml = ""; + //InnerXml = + //new XElement(XMLNames.ExternalResource, + // new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), + // new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString(); + + //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(nav.OuterXml); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + + AssertHelper.Exception<VectoException>( + () => { + var inputDataProvider = new XMLEngineeringInputDataProvider(stream, false); + var lossmap = inputDataProvider.JobInputData.Vehicle.AxleGearInputData.LossMap; + }, "Failed to read TorqueLossMap resource"); + } + } +} diff --git a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs index 402bebd9a09aa76ef10abd7cc18385d99a150113..cc55997cb1b769b5eeff7a3fc4f7d4333193df30 100644 --- a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs @@ -55,6 +55,12 @@ namespace TUGraz.VectoCore.Tests.XML @"TestData\XML\XMLWriter\DeclarationJob\Class5_Tractor_4x2\Class5_Tractor_DECL-FULL.vecto"; + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + [TestCase] public void TestWriteEngineOnlySingleFile() { @@ -73,7 +79,7 @@ namespace TUGraz.VectoCore.Tests.XML var xml = new XMLEngineeringInputDataProvider(outFile, true); Assert.IsNotNull(xml); - Assert.AreEqual("175kW 6.8l Engine", xml.JobInputData().JobName); + Assert.AreEqual("175kW 6.8l Engine", xml.JobInputData.JobName); } [TestCase] @@ -89,7 +95,7 @@ namespace TUGraz.VectoCore.Tests.XML var xml = new XMLEngineeringInputDataProvider(outFile, true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName); + Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName); } [TestCase] @@ -105,7 +111,7 @@ namespace TUGraz.VectoCore.Tests.XML var xml = new XMLEngineeringInputDataProvider(outFile, true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName); + Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName); } [TestCase] @@ -123,7 +129,7 @@ namespace TUGraz.VectoCore.Tests.XML var xml = new XMLEngineeringInputDataProvider(Path.Combine(outDir, outFile), true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName); + Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName); } [TestCase] @@ -161,7 +167,7 @@ namespace TUGraz.VectoCore.Tests.XML var xml = new XMLDeclarationInputDataProvider(reader, true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName); + Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName); } [TestCase] @@ -183,7 +189,7 @@ namespace TUGraz.VectoCore.Tests.XML var xml = new XMLDeclarationInputDataProvider(reader, true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName); + Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName); } } -} \ No newline at end of file +}