Ejemplo n.º 1
0
 protected OltDiagV1DataRequest(string request)
     : base(request)
 {
     TestCRC  = false;
     isOnline = true;
     diagData = new DiagData();
 }
Ejemplo n.º 2
0
        private void CalcCurrentRT(DiagData diagData)
        {
            oldRpmThrRtIndex = RpmThrRtIndex;

            var j7esDiag = diagData as J7esDiagData;

            if (j7esDiag != null && j7esDiag.RPM_RT != 0)
            {
                ThrRtIndex      = j7esDiag.THR_RT_16;
                GbcRtIndex      = j7esDiag.GBC_RT_16;
                RpmRtIndex      = j7esDiag.RPM_RT_16;
                RpmRt32Index    = DataHelper.rl(DataHelper.Swap((byte)(j7esDiag.RPM_RT + 4))) & 0x1F;
                TwatRtIndex     = j7esDiag.TWAT_RT;
                RpmThrRtIndex   = j7esDiag.RPM_THR_RT;
                RpmPressRtIndex = (((byte)(j7esDiag.PRESS_RT + 8)) & 0xF0) + RpmRtIndex;
            }
            else
            {
                ThrRtIndex        = DataHelper.Swap((byte)(thrSampling[Math.Min(diagData.TRT, thrSampling.Length - 1)] + 8)) & 0xF;
                GbcRtIndex        = DataHelper.NearCell(gbcRt, (int)Math.Round(diagData.GBC, MidpointRounding.AwayFromZero));
                RpmRtIndex        = DataHelper.NearCell(rpmRt16, diagData.RPM);
                RpmRt32Index      = DataHelper.NearCell(rpmRt32, diagData.RPM);
                TwatRtIndex       = DataHelper.NearCell(twatRt, diagData.TWAT);
                RpmThrRtIndex     = 16 * ThrRtIndex + RpmRtIndex;
                Rpm32PressRtIndex = (((byte)(j7esDiag.PRESS_RT + 8)) & 0xF0) + RpmRt32Index;
            }

            Rpm32ThrRtIndex = 32 * ThrRtIndex + RpmRt32Index;

            RpmGbcRtIndex = onlineManager.OltProtocol.Version == OltProtocolVersion.OltDiagV1
                                ? diagData.RPM_GBC_RT
                                : 16 * GbcRtIndex + RpmRtIndex;
        }
Ejemplo n.º 3
0
 public void UpdateValues(DiagData diagData)
 {
     foreach (DiagValueControl control in valuesPanel.Controls)
     {
         control.SetValue(diagData);
     }
 }
Ejemplo n.º 4
0
 public OltDiagV3DataRequest()
     : base("8210F1210FB3")
 {
     TestCRC  = false;
     isOnline = true;
     diagData = new DiagData();
 }
Ejemplo n.º 5
0
        public void Add(DiagData diagData)
        {
            if (!IsOpened)
            {
                return;
            }
            CalcCurrentRT(diagData);

            if (!onlineManager.EnabledOnlineCorrection)
            {
                return;
            }

            PrepareFuelCutoff();
            if (!TestStability(diagData))
            {
                return;
            }

            var cellIndex = J7esFlags.IsKgbc32_16 ? Rpm32ThrRtIndex : RpmThrRtIndex;
            var cell      = (isVE ? kgbc_press : kgbc).Cell(cellIndex);

            if (!cell.StopStudy)
            {
                FuelCorrection(cellIndex, diagData);
            }

            if (onlineManager.settings.EnabledGBCCorrection && (!onlineManager.settings.TestAfrBeforeGBCCorrection || cell.StopStudy))
            {
                AirCorrection(diagData);
            }
        }
Ejemplo n.º 6
0
        private void GBCCorrection(DiagData diagData)
        {
            var cell     = this.gbc.Cell(RpmThrRtIndex);
            var real_gbc = diagData.GBC;
            var gbc      = this.gbc.GetValue(RpmThrRtIndex);
            var e        = real_gbc - gbc;

            cell.Error = (short)e;
            var e_1 = cell.E_1;
            var e_2 = cell.E_2;

            var Kp = onlineManager.settings.DisableFuelCorrectionProportional
                         ? 0f
                         : onlineManager.settings.FuelCorrectionProportional / 100f;
            var Kd = onlineManager.settings.FuelCorrectionDifferential / 100f;
            var Ki = onlineManager.settings.FuelCorrectionIntegral / 100f;

            var pV = Kp * (e - e_1);
            var iV = Ki * e;
            var dV = Kd * (e - 2 * e_1 + e_2);

            var new_gbc = gbc + pV + iV + dV;

            this.gbc.SetValue(RpmThrRtIndex, (short)new_gbc);
            WriteGBCValue(RpmThrRtIndex);
            onlineManager.OltProtocol.OperationLog.AppendLine(String.Format("gbc: {0} {1} {2} {3}|{4}|{5} {6} {7}|{8}|{9}",
                                                                            RpmThrRtIndex, real_gbc.ToString("0.##"),
                                                                            gbc.ToString("0.##"), e.ToString("0.##"), e_1.ToString("0.##"), e_2.ToString("0.##"),
                                                                            new_gbc.ToString("0.##"), pV.ToString("0.##"),
                                                                            iV.ToString("0.##"), dV.ToString("0.##")));
        }
Ejemplo n.º 7
0
        private bool TestFuelCorrectionAvailable(DiagData diagData)
        {
            //var errorFound = diagData.IsErrorFound;
            var thrThreshold    = diagData.TRT >= onlineManager.settings.THRThresholdLineFuelCorrection;
            var lambdaAvailable = onlineManager.LambdaAdapter.Connected && onlineManager.LambdaAdapter.Available && onlineManager.LambdaAdapter.State == LambdaState.LambdaValue;

            return /*errorFound &&*/ (thrThreshold && lambdaAvailable);
        }
Ejemplo n.º 8
0
        public IActionResult Index()
        {
            var model = new DiagData
            {
                Culture = CultureInfo.CurrentCulture
            };

            return(View(model));
        }
Ejemplo n.º 9
0
 private void AirCorrection(DiagData diagData)
 {
     if (!TestAirCorrectionAvailable(diagData))
     {
         return;
     }
     GBCCorrection(diagData);
     stabylityCount = -2;
 }
Ejemplo n.º 10
0
 private void FuelCorrection(int cellIndex, DiagData diagData)
 {
     if (!TestFuelCorrectionAvailable(diagData))
     {
         return;
     }
     KGBCCorrection(cellIndex, diagData);
     stabylityCount = -2;
 }
Ejemplo n.º 11
0
        private void UpdateWarnStatus(DiagData diagData)
        {
            var j7esdd = diagData as J7esDiagData;

            warnTwatStatus.Visible  = diagData.TWAT > onlineManager.settings.WarnTwat;
            warnTairStatus.Visible  = diagData.TAIR > onlineManager.settings.WarnTair;
            warnFuseStatus.Visible  = diagData.FUSE > onlineManager.settings.WarnFuse;
            warnUbatStatus.Visible  = diagData.ADCUBAT > onlineManager.settings.WarnUBatMax || diagData.ADCUBAT < onlineManager.settings.WarnUBatMin;
            warnPressStatus.Visible = (j7esdd != null) &&
                                      (j7esdd.Press > onlineManager.settings.WarnPressMax ||
                                       j7esdd.Press < onlineManager.settings.WarnPressMin);
        }
Ejemplo n.º 12
0
        private void KGBCCorrection(int cellIndex, DiagData diagData)
        {
            var cell = (isVE ? kgbc_press: kgbc).Cell(cellIndex);
            //var k1 = kgbc.GetValue(cellIndex);
            var k1   = cell.StudyValue;
            var alf1 = diagData.ALF;
            var alf2 = diagData.LC1_ALF;
            var k2   = alf2 * k1 / alf1;

            var e = k2 - k1;

            cell.Error = e;
            cell.Tag   = Math.Abs(e) < 0.02 ? Math.Max(5, cell.Tag + 1) : Math.Min(0, cell.Tag - 1);

            cell.StopStudy = cell.Tag > 4;
            if (cell.StopStudy)
            {
                return;
            }

            var e_1 = cell.E_1;
            var e_2 = cell.E_2;

            var Kp = onlineManager.settings.DisableFuelCorrectionProportional
                         ? 0f
                         : onlineManager.settings.FuelCorrectionProportional / 100f;
            var Kd = onlineManager.settings.FuelCorrectionDifferential / 100f;
            var Ki = onlineManager.settings.FuelCorrectionIntegral / 100f;

            var pV = Kp * (e - e_1);
            var iV = Ki * e;
            var dV = Kd * (e - 2 * e_1 + e_2);

            var k_new = k1 + pV + iV + dV;

            cell.StudyValue = k_new;

            var k_new_lim = Math.Max(kmin, Math.Min(kmax, k_new));

            (isVE? kgbc_press: kgbc).SetValue(cellIndex, k_new_lim);
            WriteKGBCValue(cellIndex);

            onlineManager.OltProtocol.OperationLog.AppendLine(String.Format("kgbc: {0} {1} {2} {3} {4} {5}|{6}|{7}",
                                                                            cellIndex, k1.ToString("0.##"),
                                                                            k2.ToString("0.##"), e.ToString("0.##"),
                                                                            k_new.ToString("0.##"), pV.ToString("0.##"),
                                                                            iV.ToString("0.##"), dV.ToString("0.##")));
        }
Ejemplo n.º 13
0
        public void LoadFromFile(string fileName)
        {
            if (!File.Exists(fileName))
            {
                return;
            }
            diagDataList.RaiseListChangedEvents = false;

            try
            {
                Clear();

                using (var logReader = new StreamReader(fileName))
                {
                    var header         = logReader.ReadLine();
                    var protocolHeader = DiagProtocolHelper.GetLogHeader();

                    if (String.IsNullOrWhiteSpace(header) || header != protocolHeader)
                    {
                        MessageBox.Show("Неизвестный формат лог файла");
                        return;
                    }

                    while (!logReader.EndOfStream)
                    {
                        var line = logReader.ReadLine();
                        if (String.IsNullOrWhiteSpace(line))
                        {
                            continue;
                        }

                        try
                        {
                            var dataItem = new DiagData();
                            dataItem.Load(line);

                            diagDataList.Add(dataItem);
                        }
                        catch {}
                    }
                }
            }
            finally
            {
                diagDataList.RaiseListChangedEvents = true;
                diagDataList.ResetBindings();
            }
        }
Ejemplo n.º 14
0
        private bool TestStability(DiagData diagData)
        {
            var stability = oldRpmThrRtIndex == RpmThrRtIndex && Math.Abs(diagData.DGTC_LEAN) < Single.Epsilon && Math.Abs(diagData.DGTC_RICH) < Single.Epsilon;

            if (!stability)
            {
                if (stabylityCount > 0)
                {
                    stabylityCount = 0;
                }
                return(false);
            }

            stabylityCount++;
            return(stabylityCount >= onlineManager.settings.FuelRtStability);
        }
Ejemplo n.º 15
0
        public void WriteData(DiagData diagData)
        {
            if (!Enabled)
            {
                return;
            }

            if (file == null)
            {
                InitLogFile();
                writer.WriteLine(diagData.GetLogHeader());
            }

            writer.WriteLine(diagData.GetDataRow());
            count++;
            if (count < 100)
            {
                return;
            }
            Flush();
        }
Ejemplo n.º 16
0
        public void DiagDataUpdate(DiagData diagData)
        {
            if (!onlineManager.FirmwareManager.IsOpened || !onlineManager.OltProtocol.Connected)
            {
                return;
            }

            var currentRow = veValue.Checked ? onlineManager.FirmwareManager.RpmPressRtIndex : onlineManager.FirmwareManager.ThrRtIndex;
            var currentCol = onlineManager.FirmwareManager.RpmRtIndex;

            rpmThrRtIndex.Text = String.Format("[{0}]", veValue.Checked ? onlineManager.FirmwareManager.RpmPressRtIndex.ToString("X2") : onlineManager.FirmwareManager.RpmThrRtIndex.ToString("X2"));

            int persent;

            if (gbcValue.Checked)
            {
                persent = onlineManager.FirmwareManager.Gbc.CalcFillPersent();
            }
            else if (veValue.Checked)
            {
                persent = onlineManager.FirmwareManager.Kgbc.CalcFillPersent();
            }
            else
            {
                persent = onlineManager.FirmwareManager.Kgbc_press.CalcFillPersent();
            }

            rtGridFillProgressBar.Value = persent;
            thrRtPersent.Text           = String.Format("{0}%", persent);

            if (!followRT)
            {
                return;
            }
            //select work dot
            //@TODO: make separate selection and indicate
            rtGrid.InvalidateCell(currentCol, currentRow);
            rtGrid.CurrentCell = rtGrid.Rows[currentRow].Cells[currentCol];
        }
Ejemplo n.º 17
0
        private DiagData GetInjDiagData(string item)
        {
            var items    = item.Split(',');
            var diagData = new DiagData();

            try
            {
                diagData.Time     = TimeSpan.FromSeconds(float.Parse(items[36]));
                diagData.TRT      = (byte)float.Parse(items[2]);
                diagData.RPM      = diagData.RPM40 = ushort.Parse(items[3]);
                diagData.RPM_XX   = ushort.Parse(items[4]);
                diagData.UFRXX    = byte.Parse(items[5]);
                diagData.SSM      = byte.Parse(items[6]);
                diagData.TWAT     = (sbyte)float.Parse(items[0]);
                diagData.AFR      = float.Parse(items[1]);
                diagData.ALF      = diagData.AFR / 14.7f;
                diagData.COEFF    = float.Parse(items[7]);
                diagData.UOZ      = (sbyte)float.Parse(items[8]);
                diagData.SPD      = byte.Parse(items[9]);
                diagData.INJ      = float.Parse(items[12]);
                diagData.AIR      = float.Parse(items[13]);
                diagData.GBC      = float.Parse(items[14]);
                diagData.fSTOP    = items[19] == "1";
                diagData.fXX      = items[20] == "1";
                diagData.fPOW     = items[21] == "1";
                diagData.fFUELOFF = items[22] == "1";
                diagData.fLAMREG  = items[23] == "1";
                diagData.fDETZONE = items[24] == "1";
                diagData.fADS     = items[25] == "1";
                diagData.fLEARN   = items[26] == "1";
                diagData.fLAMRDY  = items[27] == "1";
                diagData.fLAMHEAT = items[28] == "1";
                diagData.fDET     = items[33] == "1";
                diagData.fLAM     = items[35] == "1";
            }
            catch { }

            return(diagData);
        }
Ejemplo n.º 18
0
 private bool TestAirCorrectionAvailable(DiagData diagData)
 {
     return(diagData.COEFF > 0.98f && diagData.COEFF < 1.02f);
 }
Ejemplo n.º 19
0
 public Euro2DiagDataRequest()
     : base("8210F12101A5")
 {
     TestCRC  = false;
     diagData = new DiagData();
 }
Ejemplo n.º 20
0
 public void SetValue(DiagData data)
 {
     valueLabel.Text = data.GetValue(valueInfo.Name);
 }
Ejemplo n.º 21
0
        public static byte[] ToAnswerBuffer(DiagData diagData)
        {
            var byteList = new List <byte>();

            byteList.AddRange(new byte[] { 0x80, 0xF1, 0x10, 0x26, 0x61, 0x01 });

            byteList.Add(0x00); // 0
            byteList.Add(0x00); // 1

            byte status1 = 0;

            DataHelper.BitSet(ref status1, 0, diagData.fSTOP);
            DataHelper.BitSet(ref status1, 1, diagData.fXX);
            DataHelper.BitSet(ref status1, 2, diagData.fPOW);
            DataHelper.BitSet(ref status1, 3, diagData.fFUELOFF);
            DataHelper.BitSet(ref status1, 4, diagData.fLAMREG);
            DataHelper.BitSet(ref status1, 5, diagData.fDETZONE);
            DataHelper.BitSet(ref status1, 6, diagData.fADS);
            DataHelper.BitSet(ref status1, 7, diagData.fLEARN);
            byteList.Add(status1); //2

            byte status2 = 0;

            DataHelper.BitSet(ref status2, 5, diagData.fDET);
            DataHelper.BitSet(ref status2, 7, diagData.fLAM);
            byteList.Add(status2); //3

            byteList.Add(0x00);    //4
            byteList.Add(0x00);    //5
            byteList.Add(0x00);    //6
            byteList.Add(0x00);    //7

            byteList.Add((byte)(diagData.TWAT + 40));
            byteList.Add((byte)(diagData.ALF * 256 - 128));
            byteList.Add(diagData.TRT);
            byteList.Add((byte)(diagData.RPM40 / 40));  // 11
            byteList.Add((byte)(diagData.RPM_XX / 10)); //12
            byteList.Add(diagData.UFRXX);
            byteList.Add(diagData.SSM);
            byteList.Add((byte)(diagData.COEFF * 256 - 128));
            byteList.Add((byte)(diagData.UOZ * 2));   // 16
            byteList.Add(diagData.SPD);

            byteList.Add(0x00);  //18
            byteList.Add(0x00);  //19
            byteList.Add(0x00);  //20

            byte dkStatus = 0;

            DataHelper.BitSet(ref dkStatus, 0, diagData.fLAMRDY);
            DataHelper.BitSet(ref dkStatus, 1, diagData.fLAMHEAT);
            byteList.Add(status2);

            var inj = (int)(diagData.INJ * 125);

            byteList.Add((byte)(inj & 0xFF));
            byteList.Add((byte)((inj & 0xFF00) >> 8));

            var air = (int)(diagData.AIR * 10);

            byteList.Add((byte)(air & 0xFF));
            byteList.Add((byte)((air & 0xFF00) >> 8));

            var gbc = (int)(diagData.GBC * 6);

            byteList.Add((byte)(gbc & 0xFF));
            byteList.Add((byte)((gbc & 0xFF00) >> 8));

            byteList.Add(0x00);
            byteList.Add(0x00);
            byteList.Add(0x00);
            byteList.Add(0x00);
            byteList.Add(0x00);
            byteList.Add(0x00);
            byteList.Add(0x00);
            byteList.Add(0x00);
            byteList.Add(0x00);
            var answer = byteList.ToArray();

            DataHelper.CalcCRC(answer);

            return(answer);
        }