protected OltDiagV1DataRequest(string request) : base(request) { TestCRC = false; isOnline = true; diagData = new DiagData(); }
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; }
public void UpdateValues(DiagData diagData) { foreach (DiagValueControl control in valuesPanel.Controls) { control.SetValue(diagData); } }
public OltDiagV3DataRequest() : base("8210F1210FB3") { TestCRC = false; isOnline = true; diagData = new DiagData(); }
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); } }
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.##"))); }
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); }
public IActionResult Index() { var model = new DiagData { Culture = CultureInfo.CurrentCulture }; return(View(model)); }
private void AirCorrection(DiagData diagData) { if (!TestAirCorrectionAvailable(diagData)) { return; } GBCCorrection(diagData); stabylityCount = -2; }
private void FuelCorrection(int cellIndex, DiagData diagData) { if (!TestFuelCorrectionAvailable(diagData)) { return; } KGBCCorrection(cellIndex, diagData); stabylityCount = -2; }
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); }
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.##"))); }
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(); } }
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); }
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(); }
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]; }
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); }
private bool TestAirCorrectionAvailable(DiagData diagData) { return(diagData.COEFF > 0.98f && diagData.COEFF < 1.02f); }
public Euro2DiagDataRequest() : base("8210F12101A5") { TestCRC = false; diagData = new DiagData(); }
public void SetValue(DiagData data) { valueLabel.Text = data.GetValue(valueInfo.Name); }
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); }