/*
         * 0.2 bar = 197,5 Nm
         * 0.4 bar = 247,5 Nm
         * 0.6 bar = 287,5 Nm
         * 0.8 bar = 340 Nm
         * 1.0 bar = 377,5 Nm
         * 1.2 bar = 430 Nm
         * 1.4 bar = 472,5 Nm
         * 1.6 bar = 533,3333333 Nm
         * 1.8 bar = 600 Nm
         * */



        public double CalculateTorqueFromPressure(double pressure, TurboType turbo)
        {
            double tq = 0;

            double[] matrix = new double[30] {
                197.5, 247.5, 287.5, 340, 365, 410, 460, 533.3, 600, 640,
                197.5, 247.5, 287.5, 340, 365, 410, 460, 533.3, 600, 640,
                197.5, 247.5, 287.5, 340, 365, 410, 460, 533.3, 600, 640
            };
            double[] x_axis = new double[10] {
                0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0
            };
            double[] y_axis = new double[3] {
                0, 1, 2
            };

            if (turbo == TurboType.Stock)
            {
                matrix = new double[30] {
                    160, 210, 240, 270, 300, 360, 410, 440, 450, 460,
                    160, 210, 240, 270, 300, 360, 410, 440, 450, 460,
                    160, 210, 240, 270, 300, 360, 410, 440, 450, 460
                };
            }
            else if (turbo == TurboType.TD0415T)
            {
                matrix = new double[30] {
                    170, 220, 260, 310, 340, 400, 450, 490, 540, 560,
                    170, 220, 260, 310, 340, 400, 450, 490, 540, 560,
                    170, 220, 260, 310, 340, 400, 450, 490, 540, 560
                };
            }
            else if (turbo == TurboType.TD0419T || turbo == TurboType.GT28BB || turbo == TurboType.GT28RS)
            {
                matrix = new double[30] {
                    210, 260, 300, 360, 400, 450, 490, 540, 590, 620,
                    210, 260, 300, 360, 400, 450, 490, 540, 590, 620,
                    210, 260, 300, 360, 400, 450, 490, 540, 590, 620
                };
            }
            else if (turbo == TurboType.GT3071R || turbo == TurboType.HX35w)
            {
                matrix = new double[30] {
                    250, 300, 340, 390, 440, 480, 520, 570, 610, 650,
                    250, 300, 340, 390, 440, 480, 520, 570, 610, 650,
                    250, 300, 340, 390, 440, 480, 520, 570, 610, 650
                };
            }
            else if (turbo == TurboType.HX40w || turbo == TurboType.S400SX371)
            {
                matrix = new double[30] {
                    270, 320, 360, 410, 460, 500, 540, 580, 620, 670,
                    270, 320, 360, 410, 460, 500, 540, 580, 620, 670,
                    270, 320, 360, 410, 460, 500, 540, 580, 620, 670
                };
            }

            tq = Handle_tables(1, pressure, 3, 10, matrix, y_axis, x_axis);
            return(tq);
        }
Example #2
0
 public double CalculatePressureFromTorque(double torque, TurboType turbo)
 {
     double pressure = 0;
     double[] matrix = new double[30] { 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0,
                                        0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0,
                                        0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0};
     double[] x_axis = new double[10] { 197.5, 247.5, 287.5, 340, 365, 410, 460, 533.3, 600, 640 };
     if (turbo == TurboType.Stock)
     {
         x_axis = new double[10] { 160, 210, 250, 300, 330, 390, 430, 440, 450, 460 };
     }
     else if (turbo == TurboType.TD0415T)
     {
         x_axis = new double[10] { 170, 220, 260, 310, 340, 400, 450, 490, 540, 560 };
     }
     else if (turbo == TurboType.TD0419T || turbo == TurboType.GT28BB || turbo == TurboType.GT28RS)
     {
         x_axis = new double[10] { 210, 260, 300, 360, 400, 450, 490, 540, 590, 620 };
     }
     else if (turbo == TurboType.GT3071R || turbo == TurboType.HX35w)
     {
         x_axis = new double[10] { 250, 300, 340, 390, 440, 480, 520, 570, 610, 650 };
     }
     else if (turbo == TurboType.HX40w)
     {
         x_axis = new double[10] { 270, 320, 360, 410, 460, 500, 540, 580, 620, 670 };
     }
     double[] y_axis = new double[3] { 0, 1, 2 };
     pressure = Handle_tables(1, torque, 3, 10, matrix, y_axis, x_axis);
     return pressure;
 }
        public void FillGraph(double[] values, double[] injvalues, TurboType turbo)
        {
            DataTable chartdt = new DataTable();

            chartdt.Columns.Add("X", Type.GetType("System.Double"));
            chartdt.Columns.Add("Y", Type.GetType("System.Double"));
            chartdt.Columns.Add("INJDC", Type.GetType("System.Double"));
            for (int i = 0; i < values.Length; i++)
            {
                chartdt.Rows.Add(Convert.ToDouble(x_axisvalues.GetValue(i)), values.GetValue(i), injvalues.GetValue(i));
            }
            NChart chart = nChartControl1.Charts[0];
            //NSeries series = (NSeries)chart.Series[0];
            NSmoothLineSeries line  = null;
            NSmoothLineSeries line2 = null;
            NSmoothLineSeries line3 = null;

            if (chart.Series.Count == 0)
            {
                line = (NSmoothLineSeries)chart.Series.Add(SeriesType.SmoothLine);
            }
            else
            {
                line = (NSmoothLineSeries)chart.Series[0];
            }
            if (chart.Series.Count == 1)
            {
                line2 = (NSmoothLineSeries)chart.Series.Add(SeriesType.SmoothLine);
            }
            else
            {
                line2 = (NSmoothLineSeries)chart.Series[1];
            }
            if (chart.Series.Count == 2)
            {
                line3 = (NSmoothLineSeries)chart.Series.Add(SeriesType.SmoothLine);
            }
            else
            {
                line3 = (NSmoothLineSeries)chart.Series[2];
            }
            line.ClearDataPoints();
            line2.ClearDataPoints();
            line3.ClearDataPoints();
            PressureToTorque ptt = new PressureToTorque();

            foreach (DataRow dr in chartdt.Rows)
            {
                double power  = 0;
                double torque = 0;
                torque = ptt.CalculateTorqueFromPressure(Convert.ToDouble(dr["Y"]), turbo);
                power  = TorqueToPower(torque, Convert.ToDouble(dr["X"]));
                //power =
                line.AddDataPoint(new NDataPoint(Convert.ToDouble(dr["X"]), torque));
                line2.AddDataPoint(new NDataPoint(Convert.ToDouble(dr["X"]), power));
                line3.AddDataPoint(new NDataPoint(Convert.ToDouble(dr["X"]), Convert.ToDouble(dr["INJDC"])));
            }
            nChartControl1.Refresh();
        }
 public void SetTurboType(TurboType turbo)
 {
     comboBoxEdit3.SelectedIndex = (int)turbo;
 }
Example #5
0
 public void FillGraph(double[] values, double[] injvalues, TurboType turbo)
 {
     DataTable chartdt = new DataTable();
     chartdt.Columns.Add("X", Type.GetType("System.Double"));
     chartdt.Columns.Add("Y", Type.GetType("System.Double"));
     chartdt.Columns.Add("INJDC", Type.GetType("System.Double"));
     for (int i = 0; i < values.Length; i++)
     {
         chartdt.Rows.Add(Convert.ToDouble(x_axisvalues.GetValue(i)), values.GetValue(i), injvalues.GetValue(i));
     }
     NChart chart = nChartControl1.Charts[0];
     //NSeries series = (NSeries)chart.Series[0];
     NSmoothLineSeries line = null;
     NSmoothLineSeries line2 = null;
     NSmoothLineSeries line3 = null;
     if (chart.Series.Count == 0)
     {
         line = (NSmoothLineSeries)chart.Series.Add(SeriesType.SmoothLine);
     }
     else
     {
         line = (NSmoothLineSeries)chart.Series[0];
     }
     if (chart.Series.Count == 1)
     {
         line2 = (NSmoothLineSeries)chart.Series.Add(SeriesType.SmoothLine);
     }
     else
     {
         line2 = (NSmoothLineSeries)chart.Series[1];
     }
     if (chart.Series.Count == 2)
     {
         line3 = (NSmoothLineSeries)chart.Series.Add(SeriesType.SmoothLine);
     }
     else
     {
         line3 = (NSmoothLineSeries)chart.Series[2];
     }
     line.ClearDataPoints();
     line2.ClearDataPoints();
     line3.ClearDataPoints();
     PressureToTorque ptt = new PressureToTorque();
     foreach (DataRow dr in chartdt.Rows)
     {
         double power = 0;
         double torque = 0;
         torque = ptt.CalculateTorqueFromPressure(Convert.ToDouble(dr["Y"]), turbo);
         power = TorqueToPower(torque, Convert.ToDouble(dr["X"]));
         //power =
         line.AddDataPoint(new NDataPoint(Convert.ToDouble(dr["X"]), torque));
         line2.AddDataPoint(new NDataPoint(Convert.ToDouble(dr["X"]), power));
         line3.AddDataPoint(new NDataPoint(Convert.ToDouble(dr["X"]), Convert.ToDouble(dr["INJDC"])));
     }
     nChartControl1.Refresh();
 }
        private void UpdateMaxima(TurboType turbo, InjectorType injectors, MapSensorType mapSensor)
        {
            switch (mapSensor)
            {
            case MapSensorType.MapSensor25:
                // max achievable 400Nm / 1.45 bar
                if (injectors == InjectorType.Stock)
                {
                    spinEdit1.Properties.MaxValue = 400;
                    spinEdit2.Properties.MaxValue = (decimal)1.30;
                }
                else
                {
                    spinEdit1.Properties.MaxValue = 450;
                    spinEdit2.Properties.MaxValue = (decimal)1.45;
                }
                break;

            case MapSensorType.MapSensor30:
                switch (injectors)
                {
                case InjectorType.Stock:
                    spinEdit1.Properties.MaxValue = 400;
                    spinEdit2.Properties.MaxValue = (decimal)1.30;
                    break;

                case InjectorType.GreenGiants:
                    switch (turbo)
                    {
                    case TurboType.Stock:
                    case TurboType.TD0415T:
                        spinEdit1.Properties.MaxValue = 450;
                        spinEdit2.Properties.MaxValue = (decimal)1.45;
                        break;

                    case TurboType.GT28BB:
                    case TurboType.GT28RS:
                    case TurboType.TD0419T:
                        spinEdit1.Properties.MaxValue = 550;
                        spinEdit2.Properties.MaxValue = (decimal)1.70;
                        break;

                    case TurboType.GT3071R:
                    case TurboType.HX35w:
                        spinEdit1.Properties.MaxValue = 550;
                        spinEdit2.Properties.MaxValue = (decimal)1.50;
                        break;

                    case TurboType.HX40w:
                    case TurboType.S400SX371:
                        spinEdit1.Properties.MaxValue = 550;
                        spinEdit2.Properties.MaxValue = (decimal)1.40;
                        break;
                    }
                    break;

                case InjectorType.Siemens630Dekas:
                    // 3.0 bar sensor, 630cc injectors -> max 600Nm
                    switch (turbo)
                    {
                    case TurboType.Stock:
                    case TurboType.TD0415T:
                        spinEdit1.Properties.MaxValue = 450;
                        spinEdit2.Properties.MaxValue = (decimal)1.45;
                        break;

                    case TurboType.GT28BB:
                    case TurboType.GT28RS:
                    case TurboType.TD0419T:
                        spinEdit1.Properties.MaxValue = 580;
                        spinEdit2.Properties.MaxValue = (decimal)1.75;
                        break;

                    case TurboType.GT3071R:
                    case TurboType.HX35w:
                        spinEdit1.Properties.MaxValue = 600;
                        spinEdit2.Properties.MaxValue = (decimal)1.80;
                        break;

                    case TurboType.HX40w:
                    case TurboType.S400SX371:
                        spinEdit1.Properties.MaxValue = 600;
                        spinEdit2.Properties.MaxValue = (decimal)1.70;
                        break;
                    }
                    break;

                case InjectorType.Siemens875Dekas:
                case InjectorType.Siemens1000cc:
                    // 3.0 bar sensor, 630cc injectors -> limit to turbo only
                    switch (turbo)
                    {
                    case TurboType.Stock:
                    case TurboType.TD0415T:
                        spinEdit1.Properties.MaxValue = 450;
                        spinEdit2.Properties.MaxValue = (decimal)1.45;
                        break;

                    case TurboType.GT28BB:
                    case TurboType.GT28RS:
                    case TurboType.TD0419T:
                        spinEdit1.Properties.MaxValue = 580;
                        spinEdit2.Properties.MaxValue = (decimal)1.75;
                        break;

                    case TurboType.GT3071R:
                    case TurboType.HX35w:
                        spinEdit1.Properties.MaxValue = 620;
                        spinEdit2.Properties.MaxValue = (decimal)1.9;
                        break;

                    case TurboType.HX40w:
                    case TurboType.S400SX371:
                        spinEdit1.Properties.MaxValue = 670;
                        spinEdit2.Properties.MaxValue = (decimal)2.0;
                        break;
                    }
                    break;
                }
                break;

            case MapSensorType.MapSensor35:
            case MapSensorType.MapSensor40:
            case MapSensorType.MapSensor50:
                switch (injectors)
                {
                case InjectorType.Stock:
                    spinEdit1.Properties.MaxValue = 400;
                    spinEdit2.Properties.MaxValue = (decimal)1.30;
                    break;

                case InjectorType.GreenGiants:
                    switch (turbo)
                    {
                    case TurboType.Stock:
                    case TurboType.TD0415T:
                        spinEdit1.Properties.MaxValue = 450;
                        spinEdit2.Properties.MaxValue = (decimal)1.45;
                        break;

                    case TurboType.GT28BB:
                    case TurboType.GT28RS:
                    case TurboType.TD0419T:
                        spinEdit1.Properties.MaxValue = 550;
                        spinEdit2.Properties.MaxValue = (decimal)1.70;
                        break;

                    case TurboType.GT3071R:
                    case TurboType.HX35w:
                        spinEdit1.Properties.MaxValue = 550;
                        spinEdit2.Properties.MaxValue = (decimal)1.50;
                        break;

                    case TurboType.HX40w:
                    case TurboType.S400SX371:
                        spinEdit1.Properties.MaxValue = 550;
                        spinEdit2.Properties.MaxValue = (decimal)1.40;
                        break;
                    }
                    break;

                case InjectorType.Siemens630Dekas:
                    // 3.0 bar sensor, 630cc injectors -> max 600Nm
                    switch (turbo)
                    {
                    case TurboType.Stock:
                    case TurboType.TD0415T:
                        spinEdit1.Properties.MaxValue = 450;
                        spinEdit2.Properties.MaxValue = (decimal)1.45;
                        break;

                    case TurboType.GT28BB:
                    case TurboType.GT28RS:
                    case TurboType.TD0419T:
                        spinEdit1.Properties.MaxValue = 580;
                        spinEdit2.Properties.MaxValue = (decimal)1.75;
                        break;

                    case TurboType.GT3071R:
                    case TurboType.HX35w:
                        spinEdit1.Properties.MaxValue = 600;
                        spinEdit2.Properties.MaxValue = (decimal)1.80;
                        break;

                    case TurboType.HX40w:
                    case TurboType.S400SX371:
                        spinEdit1.Properties.MaxValue = 600;
                        spinEdit2.Properties.MaxValue = (decimal)1.70;
                        break;
                    }
                    break;

                case InjectorType.Siemens875Dekas:
                case InjectorType.Siemens1000cc:
                    // 3.0 bar sensor, 630cc injectors -> limit to turbo only
                    switch (turbo)
                    {
                    case TurboType.Stock:
                    case TurboType.TD0415T:
                        spinEdit1.Properties.MaxValue = 450;
                        spinEdit2.Properties.MaxValue = (decimal)1.45;
                        break;

                    case TurboType.GT28BB:
                    case TurboType.GT28RS:
                    case TurboType.TD0419T:
                        spinEdit1.Properties.MaxValue = 580;
                        spinEdit2.Properties.MaxValue = (decimal)1.75;
                        break;

                    case TurboType.GT3071R:
                    case TurboType.HX35w:
                        spinEdit1.Properties.MaxValue = 620;
                        spinEdit2.Properties.MaxValue = (decimal)1.9;
                        break;

                    case TurboType.HX40w:
                    case TurboType.S400SX371:
                        spinEdit1.Properties.MaxValue = 670;
                        spinEdit2.Properties.MaxValue = (decimal)2.2;
                        break;
                    }
                    break;
                }
                break;
            }
            UpdateStage();
        }
Example #7
0
        private void TuneToStage(string m_currentfile, int stage, double maxBoostValue, double maxBoostFirstGear, double maxBoostSecondGear, double maxBoostFirstGearAUT, double fuelCutLevel, double AutoGearBoxPercentage, bool isLpt, TurboType turboType, InjectorType injectorType, MapSensorType mapSensorType)
        {
            m_resume = new Trionic5Resume();
            m_resume.AddToResumeTable("Tuning your binary to stage: " + stage.ToString());
            // get the software ID from the bainery
            string enginetp = readenginetype(m_currentfile);
            string partnumber = readpartnumber(m_currentfile);
            // look up parameters for this sw id
            PartNumberConverter pnc = new PartNumberConverter();
            ECUInformation ecuinfo = pnc.GetECUInfo(partnumber, enginetp);
            File.Copy(m_currentfile, Path.GetDirectoryName(m_currentfile) + "\\" + Path.GetFileNameWithoutExtension(m_currentfile) + DateTime.Now.ToString("yyyyMMddHHmmss") + "beforetuningtostage" + stage.ToString() + ".bin", true);
            m_resume.AddToResumeTable("Backup file created (" + Path.GetFileNameWithoutExtension(m_currentfile) + DateTime.Now.ToString("yyyyMMddHHmmss") + "beforetuningtostage" + stage.ToString() + ".bin" + ")");

            switch (stage)
            {
                case 1:
                    SetRegKonMatFirstGearManual(m_currentfile, 30);
                    SetRegKonMatSecondGearManual(m_currentfile, 45);
                    SetRegKonMatFirstGearAutomatic(m_currentfile, 30);
                    break;
                case 2:
                    SetRegKonMatFirstGearManual(m_currentfile, 45);
                    SetRegKonMatSecondGearManual(m_currentfile, 45);
                    SetRegKonMatFirstGearAutomatic(m_currentfile, 45);
                    break;
                case 3:
                default:
                    SetRegKonMatFirstGearManual(m_currentfile, 45);
                    SetRegKonMatSecondGearManual(m_currentfile, 45);
                    SetRegKonMatFirstGearAutomatic(m_currentfile, 45);
                    break;
            }

            if (CheckBoostRegulationMapEmpty(m_currentfile))
            {
                // empty reg_kon_mat
                switch (stage)
                {
                    case 1:
                        FillRegulationMapValue(m_currentfile, 45);
                        break;
                    case 2:
                        FillRegulationMapValue(m_currentfile, 45);
                        break;
                    case 3:
                    default:
                        FillRegulationMapValue(m_currentfile, 45);
                        break;
                }
            }
            if (CheckBoostRegulationAUTMapEmpty(m_currentfile))
            {
                switch (stage)
                {
                    case 1:
                        FillRegulationAUTMapValue(m_currentfile, 45);
                        break;
                    case 2:
                        FillRegulationAUTMapValue(m_currentfile, 45);
                        break;
                    case 3:
                    default:
                        FillRegulationAUTMapValue(m_currentfile, 45);
                        break;
                }
            }

            if (CheckPIDControlEmpty(m_currentfile))
            {
                FillDefaultPIDControls(m_currentfile);
            }
            if (CheckPIDControlAUTEmpty(m_currentfile))
            {
                FillDefaultPIDAUTControls(m_currentfile);
            }

            //depending on turbotype!!!

            SetBoostRequestMaps(turboType, injectorType, mapSensorType, m_currentfile, maxBoostValue, AutoGearBoxPercentage, isLpt);

            if (/*!isLpt*/true) // don't if T5.2&& m_currentfile_size > 0x20000
            {
                // should be percentages
               /* SetInjectionMap(m_currentfile,15, 15, 255);
                SetInjectionMap(m_currentfile,14, 15, 253);
                SetInjectionMap(m_currentfile,13, 15, 253);
                SetInjectionMap(m_currentfile,12, 15, 249);
                SetInjectionMap(m_currentfile,11, 15, 248);
                SetInjectionMap(m_currentfile,10, 15, 245);
                SetInjectionMap(m_currentfile,9, 15, 236);

                SetInjectionMap(m_currentfile,15, 14, 255);
                SetInjectionMap(m_currentfile,14, 14, 253);
                SetInjectionMap(m_currentfile,13, 14, 253);
                SetInjectionMap(m_currentfile,12, 14, 235);
                SetInjectionMap(m_currentfile,11, 14, 234);
                SetInjectionMap(m_currentfile,10, 14, 226);
                SetInjectionMap(m_currentfile,9, 14, 225);

                SetInjectionMap(m_currentfile,15, 13, 248);
                SetInjectionMap(m_currentfile,14, 13, 245);
                SetInjectionMap(m_currentfile,13, 13, 245);
                SetInjectionMap(m_currentfile,12, 13, 224);
                SetInjectionMap(m_currentfile,11, 13, 217);
                SetInjectionMap(m_currentfile,10, 13, 205);
                SetInjectionMap(m_currentfile,9, 13, 189);

                SetInjectionMap(m_currentfile,15, 12, 219);
                SetInjectionMap(m_currentfile,14, 12, 215);
                SetInjectionMap(m_currentfile,13, 12, 213);
                SetInjectionMap(m_currentfile,12, 12, 206);
                SetInjectionMap(m_currentfile,11, 12, 205);
                SetInjectionMap(m_currentfile,10, 12, 198);
                SetInjectionMap(m_currentfile,9, 12, 176);

                SetInjectionMap(m_currentfile,15, 11, 198);
                SetInjectionMap(m_currentfile,14, 11, 192);
                SetInjectionMap(m_currentfile,13, 11, 191);
                SetInjectionMap(m_currentfile,12, 11, 190);
                SetInjectionMap(m_currentfile,11, 11, 190);
                SetInjectionMap(m_currentfile,10, 11, 183);
                SetInjectionMap(m_currentfile,9, 11, 163);*/
            }

            IncreaseInjectionKnockMap(m_currentfile, 0, 4);
            IncreaseInjectionKnockMap(m_currentfile, 1, 4);
            IncreaseInjectionKnockMap(m_currentfile, 2, 4);

            //SetIgnitionMap(m_currentfile, 15, 17, 1.5);
            //SetIgnitionMap(m_currentfile, 14, 17, 1.0);
            //SetIgnitionMap(m_currentfile, 13, 17, 0.5);
            //byte fuelcut = (byte)((fuelCutLevel + 1) * 100);
            SetBoostLimitMap(m_currentfile, 254 /* fuelcut */);

            //m_resume.m_resume.AddToResumeTable("Updated fuelcut map to: " + fuelCutLevel.ToString() + " bar");
            byte fglimit = (byte)((maxBoostFirstGear + 1) * 100);
            SetFirstGearLimiter(m_currentfile, fglimit);
            m_resume.AddToResumeTable("Updated first gear limiter (MAN) to: " + maxBoostFirstGear.ToString() + " bar");
            byte fgalimit = (byte)((maxBoostFirstGearAUT + 1) * 100);
            SetFirstGearLimiterAutoTrans(m_currentfile, fgalimit);
            m_resume.AddToResumeTable("Updated first gear limiter (AUT) to: " + maxBoostFirstGearAUT.ToString() + " bar");
            byte sglimit = (byte)((maxBoostSecondGear + 1) * 100);
            SetSecondGearLimiter(m_currentfile, sglimit);
            m_resume.AddToResumeTable("Updated second gear limiter (MAN) to: " + maxBoostSecondGear.ToString() + " bar");
            // <Guido> add Max_regl_temp1 Max_regl_temp2
            SetMaxReglTempValues(m_currentfile, 250);

            try
            {
                Trionic5Anomalies anomalies = new Trionic5Anomalies();
                anomalies.CheckBinForAnomalies(m_currentfile, m_resume, false, true, m_fileInformation );
            }
            catch (Exception E)
            {
                Console.WriteLine("CheckBinForAnomalies: " + E.Message);
            }

            // mark this particular file as tuned to stage X, to prevent running the wizard on this file again!
            //enginetp = enginetp.Substring(0, enginetp.Length - 4);
            //enginetp += "T5S" + stage.ToString();
            //writeenginetype(enginetp);
            WriteTunedToStageMarker(m_currentfile, stage);
            m_resume.AddToResumeTable("Updated binary description with tuned stage");
            Trionic5File file = new Trionic5File();
            file.LibraryPath = Application.StartupPath + "\\Binaries";
            file.SetAutoUpdateChecksum(m_autoUpdateChecksum);
            file.UpdateChecksum(m_currentfile);
        }
Example #8
0
        public TuningResult FreeTuneBinary(IECUFile m_File, double peakTorque, double peakBoost, bool tuneBasedOnTorque, MapSensorType mapType, TurboType turboType, InjectorType injectorType, BPCType valve, int rpmlimiter, int knockTime)
        {
            Trionic5Resume _localResume = new Trionic5Resume();
            m_fileInformation = m_File.GetFileInfo();
            string filename = m_fileInformation.Filename;
            // first set things right by running the tunetostagex wizard
            // generate a nice x_scale for ignition map (18 long)
            PressureToTorque ptt = new PressureToTorque();
            double peak_boost = ptt.CalculatePressureFromTorque(peakTorque, turboType);
            if (!tuneBasedOnTorque) peak_boost = peakBoost;
            double peak_boost_request = peak_boost;
            double correction = 1.0;
            if (mapType == MapSensorType.MapSensor30) correction = 1.2;
            if (mapType == MapSensorType.MapSensor35) correction = 1.4;
            if (mapType == MapSensorType.MapSensor40) correction = 1.6;
            if (mapType == MapSensorType.MapSensor50) correction = 2.0;
            peak_boost_request *= 100;
            peak_boost_request += 100;
            peak_boost_request /= correction;
            peak_boost_request -= 100;
            peak_boost_request /= 100;

            double min_pressure = -1;
            double max_pressure = peak_boost;

            #region preparation

            /********* start of prepare phase *********/
            string enginetp = readenginetype(filename);
            string partnumber = readpartnumber(filename);
            PartNumberConverter pnc = new PartNumberConverter();
            ECUInformation ecuinfo = pnc.GetECUInfo(partnumber, enginetp);
            bool isLpt = true;
            if (ReadTunedToStageMarker(filename) > 0)
            {
                return TuningResult.TuningFailedAlreadyTuned;
            }
            else if (ReadThreeBarConversionMarker(filename) > 0)
            {
                return TuningResult.TuningFailedThreebarSensor;
            }
            Trionic5Properties t5p = m_File.GetTrionicProperties();
            if (ecuinfo.Valid)
            {
                if (ecuinfo.Isaero || ecuinfo.Isfpt)
                {
                    isLpt = false;
                }
            }

            if (t5p.MapSensorType != mapType)
            {
                ConvertFileToThreeBarMapSensor(m_fileInformation, t5p.MapSensorType, mapType);
            }
            // check injector type
            if (t5p.InjectorType != injectorType)
            {
                int inj_konst_diff = DetermineDifferenceInInjectorConstant(t5p.InjectorType, injectorType);
                AddToInjectorConstant(filename, inj_konst_diff);
                SetInjectorBatteryCorrectionMap(m_File, injectorType); //TODO: check this function for correctness!
            }
            /*if (injectorType == InjectorType.Stock) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 19);
            else if (injectorType == InjectorType.GreenGiants) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 18);
            else if (injectorType == InjectorType.Siemens630Dekas) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 15);
            else if (injectorType == InjectorType.Siemens875Dekas) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 13);
            else if (injectorType == InjectorType.Siemens875Dekas) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 13);*/
            t5p.TurboType = turboType;
            t5p.InjectorType = injectorType;
            t5p.MapSensorType = mapType;
            // determine stage??
            int stage = 0;
            if (peak_boost < 1.2) stage = 1;
            else if (peak_boost < 1.3) stage = 2;
            else if (peak_boost < 1.4) stage = 3;
            else if (peak_boost < 1.5) stage = 4;
            else if (peak_boost < 1.6) stage = 5;
            else if (peak_boost < 1.7) stage = 6;
            else if (peak_boost < 1.8) stage = 7;
            else if (peak_boost < 1.9) stage = 8;
            else stage = 9;

            m_File.SetTrionicOptions(t5p);
            TuneToStage(filename, stage, peak_boost_request, 0.52, 1.0, 0.52, 1.54, 90, isLpt, turboType, injectorType, mapType);
            _localResume.ResumeTuning = m_resume.ResumeTuning.Copy();
            /*********** end of prepare phase **************/

            // set limiter, bpc valve type and knock time
            SetBPCValveType(filename, valve);
            _localResume.AddToResumeTable("Set BPC driving frequencies");
            SetRPMLimiter(filename, rpmlimiter);
            _localResume.AddToResumeTable("Set RPM limiter");
            SetKnockTime(filename, knockTime);
            _localResume.AddToResumeTable("Set knock time value");

            #endregion

            // if mapsensor != stock and injectors are 630 cc or bigger
            if (mapType != MapSensorType.MapSensor25 && (injectorType == InjectorType.Siemens630Dekas || injectorType == InjectorType.Siemens875Dekas || injectorType == InjectorType.Siemens1000cc))
            {
                // now scale it
                double step = (max_pressure - min_pressure) / 17;
                double[] axisforIgnitionMap = new double[18];
                for (int i = 0; i < 18; i++)
                {
                    axisforIgnitionMap.SetValue(min_pressure + (i * step), i);
                }
                byte[] actualAxis = new byte[36];
                int j = 0;
                for (int i = 0; i < 18; i++)
                {
                    double currValue = Convert.ToDouble(axisforIgnitionMap.GetValue(i));
                    currValue *= 100;
                    currValue += 100;
                    if (mapType == MapSensorType.MapSensor30) currValue /= 1.2;
                    else if (mapType == MapSensorType.MapSensor35) currValue /= 1.4;
                    else if (mapType == MapSensorType.MapSensor40) currValue /= 1.6;
                    else if (mapType == MapSensorType.MapSensor50) currValue /= 2.0;
                    int ival = Convert.ToInt32(currValue);
                    byte v1 = (byte)(ival / 256);
                    byte v2 = (byte)(ival - (int)v1 * 256);

                    actualAxis.SetValue(v1, j++);
                    actualAxis.SetValue(v2, j++);
                }
                m_File.WriteData(actualAxis, (uint)m_File.GetFileInfo().GetSymbolAddressFlash("Ign_map_0_x_axis!"));
                _localResume.AddToResumeTable("Generated and saved new ignition map x axis");
                //Generate the ignition map based on the axis values
                GenerateAndSaveNewIgnitionMap(m_File, false);
                _localResume.AddToResumeTable("Generated and saved new ignition map");
                min_pressure = -0.8;
                step = (max_pressure - min_pressure) / 15;
                // now setup x axis for fuel map
                double[] axisforFuelMap = new double[16];
                for (int i = 0; i < 16; i++)
                {
                    axisforFuelMap.SetValue(min_pressure + (i * step), i);
                }
                byte[] actualFuelAxis = new byte[16];
                for (int i = 0; i < 16; i++)
                {
                    double currValue = Convert.ToDouble(axisforFuelMap.GetValue(i));
                    currValue *= 100;
                    currValue += 100;
                    if (mapType == MapSensorType.MapSensor30) currValue /= 1.2;
                    else if (mapType == MapSensorType.MapSensor35) currValue /= 1.4;
                    else if (mapType == MapSensorType.MapSensor40) currValue /= 1.6;
                    else if (mapType == MapSensorType.MapSensor50) currValue /= 2.0;
                    int ival = Convert.ToInt32(currValue);
                    if (ival > 255) ival = 255;
                    actualFuelAxis.SetValue((byte)ival, i);
                }
                m_File.WriteData(actualFuelAxis, (uint)m_File.GetFileInfo().GetSymbolAddressFlash("Fuel_map_xaxis!"));
                _localResume.AddToResumeTable("Generated and saved new fuel map x axis");

                //Generate the ignition map based on the axis values
                GenerateAndSaveNewFuelMap(m_File);
                _localResume.AddToResumeTable("Generated and saved new fuel map");

                min_pressure = -0.3;
                step = (max_pressure - min_pressure) / 11;
                // now setup x axis for fuel map
                double[] axisforFuelKnockMap = new double[12];
                for (int i = 0; i < 12; i++)
                {
                    axisforFuelKnockMap.SetValue(min_pressure + (i * step), i);
                }
                byte[] actualFuelKnockAxis = new byte[12];
                for (int i = 0; i < 12; i++)
                {
                    double currValue = Convert.ToDouble(axisforFuelKnockMap.GetValue(i));
                    currValue *= 100;
                    currValue += 100;
                    if (mapType == MapSensorType.MapSensor30) currValue /= 1.2;
                    else if (mapType == MapSensorType.MapSensor35) currValue /= 1.4;
                    else if (mapType == MapSensorType.MapSensor40) currValue /= 1.6;
                    else if (mapType == MapSensorType.MapSensor50) currValue /= 2.0;
                    int ival = Convert.ToInt32(currValue);
                    if (ival > 255) ival = 255;
                    actualFuelKnockAxis.SetValue((byte)ival, i);
                }
                m_File.WriteData(actualFuelKnockAxis, (uint)m_File.GetFileInfo().GetSymbolAddressFlash("Fuel_knock_xaxis!"));
                _localResume.AddToResumeTable("Generated and saved new fuel knock map x axis");

                //Generate the ignition map based on the axis values
                GenerateAndSaveNewFuelKnockMap(m_File);
                _localResume.AddToResumeTable("Generated and saved new fuel knock map");

                // mesh up a boost request map for this.. already possible
                // adjust peak boost to be scaled for the mapsensor type

                SetBoostRequestMaps(turboType, injectorType, mapType, m_File.GetFileInfo().Filename, peak_boost_request, 100, isLpt);
                _localResume.AddToResumeTable("Generated boost request maps");

            }
            m_resume.ResumeTuning = _localResume.ResumeTuning.Copy();
            return TuningResult.TuningSuccess;
        }
Example #9
0
 internal void LiftBoostRequestForTurboType(TurboType turboType)
 {
     // read boost request but hold peak boost for longer, depeding on turbo type
 }
Example #10
0
        private void SetBoostRequestMaps(TurboType turboType, InjectorType injectorType, MapSensorType mapSensorType, string m_currentfile, double maxBoostValue, double AutoGearBoxPercentage, bool isLpt)
        {
            switch (turboType)
            {
                case TurboType.Stock:
                    SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.85, AutoGearBoxPercentage); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.87, AutoGearBoxPercentage); // low rpm
                    SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.89, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.90, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue * 0.9, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue * 0.8, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue * 0.7, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.65, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.6, AutoGearBoxPercentage); // high rpm

                    SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.85, AutoGearBoxPercentage); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.89, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.9, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue * 0.9, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue * 0.8, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue * 0.7, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.65, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.6, AutoGearBoxPercentage);

                    break;
                case TurboType.TD0415T: // hold longer than stock
                    SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.85, AutoGearBoxPercentage); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.87, AutoGearBoxPercentage); // low rpm
                    SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.89, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.90, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue * 0.9, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.80, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.65, AutoGearBoxPercentage); // high rpm

                    SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.85, AutoGearBoxPercentage); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.89, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.9, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue , AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue * 0.90, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.80, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.65, AutoGearBoxPercentage);

                    break;
                case TurboType.TD0419T: // hold longer than stock but spool later
                case TurboType.GT28BB: // hold longer than stock but spool later
                case TurboType.GT28RS: // hold longer than stock but spool later
                    SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.60, AutoGearBoxPercentage); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.60, AutoGearBoxPercentage); // low rpm
                    SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.60, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.65, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.80, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue * 0.9, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.85, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.70, AutoGearBoxPercentage); // high rpm

                    SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.60, AutoGearBoxPercentage); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.60, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.60, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.65, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue * 0.80, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue * 0.90, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.85, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.70, AutoGearBoxPercentage);
                    break;
                case TurboType.GT3071R: // hold longer than stock
                case TurboType.HX35w: // hold longer than stock
                    SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // low rpm
                    SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue * 0.65, AutoGearBoxPercentage, 0.8);
                    SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue * 0.75, AutoGearBoxPercentage, 1.0);
                    SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue * 0.95, AutoGearBoxPercentage, 1.2);
                    SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue * 0.98, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.80, AutoGearBoxPercentage); // high rpm

                    SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // low rpm
                    SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue * 0.65, AutoGearBoxPercentage, 0.8);
                    SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue * 0.75, AutoGearBoxPercentage, 1.0);
                    SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue * 0.95, AutoGearBoxPercentage, 1.2);
                    SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue * 0.98, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.95, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.80, AutoGearBoxPercentage);
                    break;
                case TurboType.HX40w: // hold longer than stock
                case TurboType.S400SX371:
                    SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // low rpm
                    SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue * 0.65, AutoGearBoxPercentage, 0.8);
                    SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue * 0.75, AutoGearBoxPercentage, 1.0);
                    SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue * 0.95, AutoGearBoxPercentage, 1.2);
                    SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue * 0.98, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.98, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.93, AutoGearBoxPercentage); // high rpm

                    SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // % of max boost
                    SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // low rpm
                    SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7);
                    SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue * 0.65, AutoGearBoxPercentage, 0.8);
                    SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue * 0.75, AutoGearBoxPercentage, 1.0);
                    SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue * 0.95, AutoGearBoxPercentage, 1.2);
                    SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue * 0.98, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.98, AutoGearBoxPercentage);
                    SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.93, AutoGearBoxPercentage);
                    break;
            }
            if (isLpt)
            {
                // more columns need adjusting
                SetBoostRequestMap(m_currentfile, 0, 5, maxBoostValue * 0.55, AutoGearBoxPercentage); // % of max boost
                SetBoostRequestMap(m_currentfile, 1, 5, maxBoostValue * 0.55, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 2, 5, maxBoostValue * 0.55, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 3, 5, maxBoostValue * 0.57, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 4, 5, maxBoostValue * 0.58, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 5, 5, maxBoostValue * 0.58, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 6, 5, maxBoostValue * 0.58, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 7, 5, maxBoostValue * 0.57, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 8, 5, maxBoostValue * 0.57, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 9, 5, maxBoostValue * 0.56, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 10, 5, maxBoostValue * 0.53, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 11, 5, maxBoostValue * 0.50, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 12, 5, maxBoostValue * 0.45, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 13, 5, maxBoostValue * 0.40, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 14, 5, maxBoostValue * 0.40, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 15, 5, maxBoostValue * 0.35, AutoGearBoxPercentage);

                SetBoostRequestMap(m_currentfile, 0, 4, maxBoostValue * 0.35, AutoGearBoxPercentage); // 75% of max boost
                SetBoostRequestMap(m_currentfile, 1, 4, maxBoostValue * 0.35, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 2, 4, maxBoostValue * 0.35, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 3, 4, maxBoostValue * 0.30, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 4, 4, maxBoostValue * 0.30, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 5, 4, maxBoostValue * 0.30, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 6, 4, maxBoostValue * 0.30, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 7, 4, maxBoostValue * 0.30, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 8, 4, maxBoostValue * 0.30, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 9, 4, maxBoostValue * 0.30, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 10, 4, maxBoostValue * 0.25, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 11, 4, maxBoostValue * 0.2, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 12, 4, maxBoostValue * 0.18, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 13, 4, maxBoostValue * 0.15, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 14, 4, maxBoostValue * 0.15, AutoGearBoxPercentage);
                SetBoostRequestMap(m_currentfile, 15, 4, maxBoostValue * 0.1, AutoGearBoxPercentage);
            }
        }
Example #11
0
 abstract public void WriteTurboTypeMarker(TurboType turboType);
Example #12
0
 public override void WriteTurboTypeMarker(TurboType turboType)
 {
     int address = m_fileInfo.Filelength - 0x1FD;
     if (address > 0)
     {
         writebyteinfile(m_currentFile, address, Convert.ToByte((int)turboType));
     }
 }
 private void UpdateMaxima(TurboType turbo, InjectorType injectors, MapSensorType mapSensor)
 {
     switch (mapSensor)
     {
         case MapSensorType.MapSensor25:
             // max achievable 400Nm / 1.45 bar
             if (injectors == InjectorType.Stock)
             {
                 spinEdit1.Properties.MaxValue = 400;
                 spinEdit2.Properties.MaxValue = (decimal)1.30;
             }
             else
             {
                 spinEdit1.Properties.MaxValue = 450;
                 spinEdit2.Properties.MaxValue = (decimal)1.45;
             }
             break;
         case MapSensorType.MapSensor30:
             switch (injectors)
             {
                 case InjectorType.Stock:
                     spinEdit1.Properties.MaxValue = 400;
                     spinEdit2.Properties.MaxValue = (decimal)1.30;
                     break;
                 case InjectorType.GreenGiants:
                     switch (turbo)
                     {
                         case TurboType.Stock:
                         case TurboType.TD0415T:
                             spinEdit1.Properties.MaxValue = 450;
                             spinEdit2.Properties.MaxValue = (decimal)1.45;
                             break;
                         case TurboType.GT28BB:
                         case TurboType.GT28RS:
                         case TurboType.TD0419T:
                             spinEdit1.Properties.MaxValue = 550;
                             spinEdit2.Properties.MaxValue = (decimal)1.70;
                             break;
                         case TurboType.GT3071R:
                         case TurboType.HX35w:
                             spinEdit1.Properties.MaxValue = 550;
                             spinEdit2.Properties.MaxValue = (decimal)1.50;
                             break;
                         case TurboType.HX40w:
                         case TurboType.S400SX371:
                             spinEdit1.Properties.MaxValue = 550;
                             spinEdit2.Properties.MaxValue = (decimal)1.40;
                             break;
                     }
                     break;
                 case InjectorType.Siemens630Dekas:
                     // 3.0 bar sensor, 630cc injectors -> max 600Nm
                     switch (turbo)
                     {
                         case TurboType.Stock:
                         case TurboType.TD0415T:
                             spinEdit1.Properties.MaxValue = 450;
                             spinEdit2.Properties.MaxValue = (decimal)1.45;
                             break;
                         case TurboType.GT28BB:
                         case TurboType.GT28RS:
                         case TurboType.TD0419T:
                             spinEdit1.Properties.MaxValue = 580;
                             spinEdit2.Properties.MaxValue = (decimal)1.75;
                             break;
                         case TurboType.GT3071R:
                         case TurboType.HX35w:
                             spinEdit1.Properties.MaxValue = 600;
                             spinEdit2.Properties.MaxValue = (decimal)1.80;
                             break;
                         case TurboType.HX40w:
                         case TurboType.S400SX371:
                             spinEdit1.Properties.MaxValue = 600;
                             spinEdit2.Properties.MaxValue = (decimal)1.70;
                             break;
                     }
                     break;
                 case InjectorType.Siemens875Dekas:
                 case InjectorType.Siemens1000cc:
                     // 3.0 bar sensor, 630cc injectors -> limit to turbo only
                     switch (turbo)
                     {
                         case TurboType.Stock:
                         case TurboType.TD0415T:
                             spinEdit1.Properties.MaxValue = 450;
                             spinEdit2.Properties.MaxValue = (decimal)1.45;
                             break;
                         case TurboType.GT28BB:
                         case TurboType.GT28RS:
                         case TurboType.TD0419T:
                             spinEdit1.Properties.MaxValue = 580;
                             spinEdit2.Properties.MaxValue = (decimal)1.75;
                             break;
                         case TurboType.GT3071R:
                         case TurboType.HX35w:
                             spinEdit1.Properties.MaxValue = 620;
                             spinEdit2.Properties.MaxValue = (decimal)1.9;
                             break;
                         case TurboType.HX40w:
                         case TurboType.S400SX371:
                             spinEdit1.Properties.MaxValue = 670;
                             spinEdit2.Properties.MaxValue = (decimal)2.0;
                             break;
                     }
                     break;
             }
             break;
         case MapSensorType.MapSensor35:
         case MapSensorType.MapSensor40:
         case MapSensorType.MapSensor50:
             switch (injectors)
             {
                 case InjectorType.Stock:
                     spinEdit1.Properties.MaxValue = 400;
                     spinEdit2.Properties.MaxValue = (decimal)1.30;
                     break;
                 case InjectorType.GreenGiants:
                     switch (turbo)
                     {
                         case TurboType.Stock:
                         case TurboType.TD0415T:
                             spinEdit1.Properties.MaxValue = 450;
                             spinEdit2.Properties.MaxValue = (decimal)1.45;
                             break;
                         case TurboType.GT28BB:
                         case TurboType.GT28RS:
                         case TurboType.TD0419T:
                             spinEdit1.Properties.MaxValue = 550;
                             spinEdit2.Properties.MaxValue = (decimal)1.70;
                             break;
                         case TurboType.GT3071R:
                         case TurboType.HX35w:
                             spinEdit1.Properties.MaxValue = 550;
                             spinEdit2.Properties.MaxValue = (decimal)1.50;
                             break;
                         case TurboType.HX40w:
                         case TurboType.S400SX371:
                             spinEdit1.Properties.MaxValue = 550;
                             spinEdit2.Properties.MaxValue = (decimal)1.40;
                             break;
                     }
                     break;
                 case InjectorType.Siemens630Dekas:
                     // 3.0 bar sensor, 630cc injectors -> max 600Nm
                     switch (turbo)
                     {
                         case TurboType.Stock:
                         case TurboType.TD0415T:
                             spinEdit1.Properties.MaxValue = 450;
                             spinEdit2.Properties.MaxValue = (decimal)1.45;
                             break;
                         case TurboType.GT28BB:
                         case TurboType.GT28RS:
                         case TurboType.TD0419T:
                             spinEdit1.Properties.MaxValue = 580;
                             spinEdit2.Properties.MaxValue = (decimal)1.75;
                             break;
                         case TurboType.GT3071R:
                         case TurboType.HX35w:
                             spinEdit1.Properties.MaxValue = 600;
                             spinEdit2.Properties.MaxValue = (decimal)1.80;
                             break;
                         case TurboType.HX40w:
                         case TurboType.S400SX371:
                             spinEdit1.Properties.MaxValue = 600;
                             spinEdit2.Properties.MaxValue = (decimal)1.70;
                             break;
                     }
                     break;
                 case InjectorType.Siemens875Dekas:
                 case InjectorType.Siemens1000cc:
                     // 3.0 bar sensor, 630cc injectors -> limit to turbo only
                     switch (turbo)
                     {
                         case TurboType.Stock:
                         case TurboType.TD0415T:
                             spinEdit1.Properties.MaxValue = 450;
                             spinEdit2.Properties.MaxValue = (decimal)1.45;
                             break;
                         case TurboType.GT28BB:
                         case TurboType.GT28RS:
                         case TurboType.TD0419T:
                             spinEdit1.Properties.MaxValue = 580;
                             spinEdit2.Properties.MaxValue = (decimal)1.75;
                             break;
                         case TurboType.GT3071R:
                         case TurboType.HX35w:
                             spinEdit1.Properties.MaxValue = 620;
                             spinEdit2.Properties.MaxValue = (decimal)1.9;
                             break;
                         case TurboType.HX40w:
                         case TurboType.S400SX371:
                             spinEdit1.Properties.MaxValue = 670;
                             spinEdit2.Properties.MaxValue = (decimal)2.2;
                             break;
                     }
                     break;
             }
             break;
     }
     UpdateStage();
 }
 public void SetTurboType(TurboType turbo)
 {
     comboBoxEdit3.SelectedIndex = (int)turbo;
 }
Example #15
0
 public abstract void WriteTurboTypeMarker(TurboType turboType);