private void ComboSensorOrUnits_Update(List <DatedValue> arraySensorValues, DGChartControl chart, ComboBox comboSensor, ComboBox comboUnits) { arraySensorValues.Clear(); chart.XData1 = null; chart.YData1 = null; if (comboSensor.Items.Count == 0) { return; } int selectedIndex = comboSensor.SelectedIndex; if (selectedIndex < 0) { return; } OBDParameter obdParameter = (OBDParameter)comboSensor.Items[selectedIndex]; if (comboUnits.SelectedIndex == 0) { chart.Text = obdParameter.Name + " (" + obdParameter.EnglishUnitLabel + ")"; chart.YRangeStart = Math.Floor(obdParameter.EnglishMinValue); chart.YRangeEnd = obdParameter.EnglishMinValue + 1.0; } else { chart.Text = obdParameter.Name + " (" + obdParameter.MetricUnitLabel + ")"; chart.YRangeStart = Math.Floor(obdParameter.MetricMinValue); chart.YRangeEnd = obdParameter.MetricMinValue + 1.0; } }
protected int GetDataStartIndex(int headLen, OBDParameter param, bool bIsMultiline) { int iRet; switch (param.Service) { case 1: iRet = headLen + 4; break; case 2: iRet = headLen + 6; break; case 3: case 4: case 7: case 0x0A: iRet = headLen + 2; break; case 5: iRet = headLen + 6; break; case 9: return(param.Parameter % 2 == 0 ? headLen + 6 : headLen + 4); default: iRet = headLen + 4; break; } return(bIsMultiline ? iRet + 2 : iRet); }
public OBDParameter GetFreezeFrameCopy(int iFrame) { OBDParameter copy = GetCopy(); copy.Service = 2; copy.OBDRequest = "02" + copy.OBDRequest.Substring(2, 2) + iFrame.ToString("D2"); return(copy); }
public OBDResponseList GetResponseList(OBDParameter param) { OBDResponseList responses = m_obdDevice.Query(param); string strItem = "Responses: "; for (int i = 0; i < responses.ResponseCount; i++) { strItem += string.Format("[{0}] ", responses.GetOBDResponse(i).Data); } m_log.TraceInfo(strItem); return(responses); }
private void UpdateThread() { while (IsRunThread) { if (m_obdInterface.ConnectedStatus && IsLogging) { foreach (SensorDisplayControl control in panelDisplay.Controls) { OBDParameter param = (OBDParameter)control.Tag; OBDParameterValue value = m_obdInterface.GetValue(param, radioDisplayEnglish.Checked); if (!value.ErrorDetected) { string text = param.EnglishUnitLabel; if (!radioDisplayEnglish.Checked) { text = param.MetricUnitLabel; } SensorLogItem sensorLogItem = new SensorLogItem( param.Name, value.DoubleValue.ToString(), text, value.DoubleValue.ToString(), text); m_ListLog.Add(sensorLogItem); this.Invoke((EventHandler) delegate { scrollTime.Maximum = m_ListLog.Count - 1; scrollTime.Value = scrollTime.Maximum; }); DateTime dateTime = new DateTime(0L); this.Invoke((EventHandler) delegate { lblTimeElapsed.Text = dateTime.Add(sensorLogItem.Time.Subtract(m_dtStartTime)).ToString("mm:ss.fff", DateTimeFormatInfo.InvariantInfo); }); text = value.DoubleValue.ToString(); if (radioDisplayEnglish.Checked) { control.EnglishDisplay = text + " " + param.EnglishUnitLabel; } else { control.MetricDisplay = text + " " + param.MetricUnitLabel; } } } } else { Thread.Sleep(300); } } }
public List <OBDParameterValue> GetValueList(OBDParameter param, bool bEnglishUnits = false) { List <OBDParameterValue> ValueList = new List <OBDParameterValue>(); if (param.PID.Length > 0) { m_log.TraceInfo("Requesting: " + param.PID); } else { m_log.TraceInfo("Requesting: " + param.OBDRequest); } OBDResponseList responses = m_obdDevice.Query(param); string strItem = "Responses: "; if (responses.ErrorDetected) { strItem += "Error Detected!"; OBDParameterValue value = new OBDParameterValue { ErrorDetected = true, StringValue = "Error Detected in OBDResponseList!", ShortStringValue = "ERROR_RESP" }; ValueList.Add(value); m_log.TraceInfo(strItem); return(ValueList); } else { for (int i = 0; i < responses.ResponseCount; i++) { strItem += string.Format("[{0}] ", responses.GetOBDResponse(i).Data); } strItem = strItem.TrimEnd(); m_log.TraceInfo(strItem); } for (int i = 0; i < responses.ResponseCount; i++) { OBDParameterValue obdValue = m_obdInterpreter.GetValue(param, responses.GetOBDResponse(i), bEnglishUnits); if (obdValue.ErrorDetected) { m_log.TraceError("Error Detected in OBDParameterValue!"); } else { m_log.TraceInfo(GetLogString(param, obdValue)); } ValueList.Add(obdValue); } return(ValueList); }
public OBDParameterValue GetValue(string strPID, bool bEnglishUnits = false) { OBDParameter obdParameter = LookupParameter(strPID); if (obdParameter != null) { return(GetValue(obdParameter, bEnglishUnits)); } OBDParameterValue value = new OBDParameterValue { ErrorDetected = true }; return(value); }
public OBDParameterValue GetValue(OBDParameter param, bool bEnglishUnits = false) { if (param.PID.Length > 0) { m_log.TraceInfo("Requesting: " + param.PID); } else { m_log.TraceInfo("Requesting: " + param.OBDRequest); } if (param.Service == 0) { return(SpecialValue(param)); } OBDResponseList responses = m_obdDevice.Query(param); string strItem = "Responses: "; if (responses.ErrorDetected) { strItem += "Error Detected!"; m_log.TraceInfo(strItem); return(new OBDParameterValue { ErrorDetected = true }); } else { for (int i = 0; i < responses.ResponseCount; i++) { strItem += string.Format("[{0}] ", responses.GetOBDResponse(i).Data); } } m_log.TraceInfo(strItem); OBDParameterValue obdValue = m_obdInterpreter.GetValue(param, responses, bEnglishUnits); if (obdValue.ErrorDetected) { m_log.TraceError("Error Detected in OBDParameterValue!"); } else { m_log.TraceInfo(GetLogString(param, obdValue)); } return(obdValue); }
public OBDParameterValue SpecialValue(OBDParameter param) { if (param.Parameter != 0) { return(null); } OBDParameterValue value = new OBDParameterValue(); string respopnse = GetRawResponse("ATRV"); m_log.TraceInfo("Response of \"ATRV\": " + respopnse); if (respopnse != null) { respopnse = respopnse.Replace("V", ""); value.DoubleValue = Utility.Text2Double(respopnse); } return(value); }
private string GetLogString(OBDParameter param, OBDParameterValue obdValue) { string strRet = "Values: "; if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.Double) == (int)OBDParameter.EnumValueTypes.Double) { strRet += string.Format("[Double: {0}] ", obdValue.DoubleValue.ToString()); } if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.Bool) == (int)OBDParameter.EnumValueTypes.Bool) { strRet += string.Format("[Bool: {0}] ", obdValue.BoolValue.ToString()); } if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.String) == (int)OBDParameter.EnumValueTypes.String) { strRet += string.Format("[String: {0}] ", obdValue.StringValue, obdValue.ShortStringValue); } if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.ListString) == (int)OBDParameter.EnumValueTypes.ListString) { strRet += "[ListString: "; foreach (string strx in obdValue.ListStringValue) { strRet = string.Concat(strRet, strx + ", "); } strRet = strRet.Substring(0, strRet.Length - 2); strRet += "]"; } if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.ShortString) == (int)OBDParameter.EnumValueTypes.ShortString) { strRet += string.Format("[ShortString: {0}] ", obdValue.ShortStringValue); } if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.BitFlags) == (int)OBDParameter.EnumValueTypes.BitFlags) { strRet += "[BitFlags: "; for (int idx = 0; idx < 32; idx++) { strRet += (obdValue.GetBitFlag(idx) ? "1" : "0"); } strRet += "]"; } return(strRet); }
public OBDParameter GetCopy() { OBDParameter p = new OBDParameter { Category = Category, ValueTypes = ValueTypes, EnglishMaxValue = EnglishMaxValue, EnglishMinValue = EnglishMinValue, EnglishUnitLabel = EnglishUnitLabel, Manufacturer = Manufacturer, MetricMaxValue = MetricMaxValue, MetricMinValue = MetricMinValue, MetricUnitLabel = MetricUnitLabel, Name = Name, m_OBDRequest = OBDRequest, m_parameter = Parameter, PID = PID, Priority = Priority, Service = Service, SubParameter = SubParameter, Type = Type }; return(p); }
public abstract OBDResponseList Query(OBDParameter param);
public OBDResponseList Parse(OBDParameter param, string response, int headLen) { if (string.IsNullOrEmpty(response)) { response = ""; } OBDResponseList responseList = new OBDResponseList(response); response = Strip(response); if (ErrorCheck(response)) { responseList.ErrorDetected = true; return(responseList); } List <string> lines = SplitByCR(response); lines.Sort(); List <List <string> > groups = new List <List <string> >(); List <string> group = new List <string> { lines[0] }; groups.Add(group); if (lines[0].Length < headLen) { responseList.ErrorDetected = true; return(responseList); } string header = lines[0].Substring(0, headLen); for (int i = 1; i < lines.Count; i++) { if (lines[i].Length >= headLen) { if (lines[i].Substring(0, headLen).CompareTo(header) == 0) { group.Add(lines[i]); } else { group = new List <string> { lines[i] }; groups.Add(group); header = lines[i].Substring(0, headLen); } } else { responseList.ErrorDetected = true; return(responseList); } } for (int i = 0; i < groups.Count; i++) { OBDResponse obd_response = new OBDResponse(); bool bIsMultiline = false; if (groups[i].Count > 1) { bIsMultiline = true; } int dataStartIndex1 = GetDataStartIndex(headLen, param, bIsMultiline, false); int length1 = groups[i][0].Length - dataStartIndex1; obd_response.Header = groups[i][0].Substring(0, headLen); obd_response.Data = length1 > 0 ? groups[i][0].Substring(dataStartIndex1, length1) : ""; int dataStartIndex2 = GetDataStartIndex(headLen, param, bIsMultiline, true); for (int j = 1; j < groups[i].Count; j++) { int length2 = groups[i][j].Length - dataStartIndex2; obd_response.Data += (length2 > 0 ? groups[i][j].Substring(dataStartIndex2, length2) : ""); } responseList.AddOBDResponse(obd_response); } return(responseList); }
public override OBDResponseList Query(OBDParameter param) { return(m_Parser.Parse(param, GetOBDResponse(param.OBDRequest))); }
protected int GetDataStartIndex(int headLen, OBDParameter param, bool bIsMultiline, bool bConsecutiveLine) { int iRet; if (bConsecutiveLine) { // 连续帧 return(headLen + 2); } switch (param.Service) { case 1: iRet = headLen + 6; break; case 2: iRet = headLen + 8; break; case 3: case 7: case 0x0A: iRet = headLen + 6; break; case 4: iRet = headLen + 4; break; case 5: iRet = headLen + 8; break; case 9: iRet = param.Parameter % 2 == 0 && param.Parameter % 0x20 != 0 ? headLen + 8 : headLen + 6; break; case 0x19: // ISO 27145 ReadDTCInformation string reportType = param.OBDRequest.Substring(2, 2); if (reportType == "42") { iRet = headLen + 14; } else if (reportType == "55") { iRet = headLen + 12; } else { iRet = headLen + 6; } break; case 0x22: // ISO 27145 ReadDataByIdentifer iRet = headLen + 8; break; default: iRet = headLen + 6; break; } return(bIsMultiline ? iRet + 2 : iRet); }
public void UpdateTests() { progressBar.Minimum = 0; progressBar.Maximum = 35; OBDParameterValue value; value = m_obdInterface.GetValue("SAE.MISFIRE_SUPPORT"); progressBar.Value = 1; TestStatus status = m_ListConTests[0]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.MISFIRE_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } value = m_obdInterface.GetValue("SAE.FUEL_SUPPORT"); progressBar.Value = 2; status = m_ListConTests[1]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.FUEL_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } value = m_obdInterface.GetValue("SAE.CCM_SUPPORT"); progressBar.Value = 3; status = m_ListConTests[2]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.CCM_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } gridConTests.Refresh(); value = m_obdInterface.GetValue("SAE.CAT_SUPPORT"); progressBar.Value = 4; status = m_ListNonConTests[0]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.CAT_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } value = m_obdInterface.GetValue("SAE.HCAT_SUPPORT"); progressBar.Value = 5; status = m_ListNonConTests[1]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.HCAT_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } value = m_obdInterface.GetValue("SAE.EVAP_SUPPORT"); progressBar.Value = 6; status = m_ListNonConTests[2]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.EVAP_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } value = m_obdInterface.GetValue("SAE.AIR_SUPPORT"); progressBar.Value = 7; status = m_ListNonConTests[3]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.AIR_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } value = m_obdInterface.GetValue("SAE.AC_SUPPORT"); progressBar.Value = 8; status = m_ListNonConTests[4]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.AC_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } value = m_obdInterface.GetValue("SAE.O2_SUPPORT"); progressBar.Value = 9; status = m_ListNonConTests[5]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.O2_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } value = m_obdInterface.GetValue("SAE.O2HTR_SUPPORT"); progressBar.Value = 10; status = m_ListNonConTests[6]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.O2HTR_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } value = m_obdInterface.GetValue("SAE.EGR_SUPPORT"); progressBar.Value = 11; status = m_ListNonConTests[7]; if (!value.ErrorDetected) { if (!value.BoolValue) { status.Status = "不适用"; } else { value = m_obdInterface.GetValue("SAE.EGR_STATUS"); if (!value.ErrorDetected) { status.Status = value.BoolValue ? "完成" : "未完成"; } else { status.Status = "出错"; } } } else { status.Status = "出错"; } gridNonConTests.Refresh(); if (m_obdInterface.IsParameterSupported("SAE.FUEL1_STATUS")) { value = m_obdInterface.GetValue("SAE.FUEL1_STATUS"); progressBar.Value++; lblFuel1.Text = value.ErrorDetected ? "出错" : value.StringValue; } else { lblFuel1.Text = "不适用"; } if (m_obdInterface.IsParameterSupported("SAE.FUEL2_STATUS")) { value = m_obdInterface.GetValue("SAE.FUEL2_STATUS"); progressBar.Value++; lblFuel2.Text = value.ErrorDetected ? "出错" : value.StringValue; } else { lblFuel2.Text = "不适用"; } if (m_obdInterface.IsParameterSupported("SAE.PTO_STATUS")) { value = m_obdInterface.GetValue("SAE.PTO_STATUS"); progressBar.Value++; lblPTO.Text = value.ErrorDetected ? "出错" : value.StringValue; } else { lblPTO.Text = "不适用"; } if (m_obdInterface.IsParameterSupported("SAE.SECAIR_STATUS")) { value = m_obdInterface.GetValue("SAE.SECAIR_STATUS"); progressBar.Value++; lblAir.Text = value.ErrorDetected ? "出错" : value.StringValue; } else { lblAir.Text = "不适用"; } if (m_obdInterface.IsParameterSupported("SAE.OBD_TYPE")) { value = m_obdInterface.GetValue("SAE.OBD_TYPE"); progressBar.Value++; lblOBD.Text = value.ErrorDetected ? "出错" : value.StringValue; } else { lblOBD.Text = "不适用"; } string strContent = ""; OBDParameter param = new OBDParameter { OBDRequest = "0902", Service = 9, Parameter = 2, ValueTypes = (int)OBDParameter.EnumValueTypes.ListString }; OBDParameterValue val = m_obdInterface.GetValue(param); progressBar.Value++; strContent += "VIN:"; foreach (string item in val.ListStringValue) { strContent += "\n" + item; } param.OBDRequest = "0904"; val = m_obdInterface.GetValue(param); progressBar.Value++; strContent += "\n\nCAL ID:"; foreach (string item in val.ListStringValue) { strContent += "\n" + item; } param.OBDRequest = "0906"; val = m_obdInterface.GetValue(param); progressBar.Value++; strContent += "\n\nCVN:"; foreach (string item in val.ListStringValue) { strContent += "\n" + item; } //param.OBDRequest = "0908"; //param.SubParameter = 0; //val = m_obdInterface.GetValue(param); //progressBar.Value++; //strContent += "\n\nIPT:"; //strContent += "\n" + val.DoubleValue; ////foreach (string item in val.ListStringValue) { //// strContent += "," + Utility.Hex2Int(item); ////} param.OBDRequest = "090A"; val = m_obdInterface.GetValue(param); progressBar.Value++; strContent += "\n\nECU名称:"; foreach (string item in val.ListStringValue) { strContent += "\n" + item; } lblVehicleInfo.Text = strContent; progressBar.Value++; /*string strContent = ""; * string strHeader; * int counter; * * if (m_obd2Interface.IsParameterSupported("SAE.O2B1S1A_PRESENT")) { * strHeader = "PID $13 Bank 1: "; * strContent += strHeader; * counter = 0; * value = m_obd2Interface.GetValue("SAE.O2B1S1A_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 1, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B1S2A_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 2, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B1S3A_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 3, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B1S4A_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 4, "; ++counter; * } * if (counter == 0) { * strContent = strContent.Substring(0, strContent.Length - strHeader.Length); * } else { * strContent = strContent.Substring(0, strContent.Length - 2); * } * * strHeader = "\n\r\nPID $13 Bank 2: "; * strContent += strHeader; * counter = 0; * value = m_obd2Interface.GetValue("SAE.O2B2S1A_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 1, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B2S2A_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 2, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B2S3A_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 3, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B2S4A_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 4, "; ++counter; * } * if (counter == 0) { * strContent = strContent.Substring(0, strContent.Length - strHeader.Length); * } else { * strContent = strContent.Substring(0, strContent.Length - 2); * } * } * * if (m_obd2Interface.IsParameterSupported("SAE.O2B1S1B_PRESENT")) { * strHeader = "\n\r\nPID $1D Bank 1: "; * strContent += strHeader; * counter = 0; * value = m_obd2Interface.GetValue("SAE.O2B1S1B_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 1, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B1S2B_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 2, "; ++counter; * } * if (counter == 0) { * strContent = strContent.Substring(0, strContent.Length - strHeader.Length); * } else { * strContent = strContent.Substring(0, strContent.Length - 2); * } * * strHeader = "\n\r\nPID $1D Bank 2: "; * strContent += strHeader; * counter = 0; * value = m_obd2Interface.GetValue("SAE.O2B2S1B_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 1, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B2S2B_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 2, "; ++counter; * } * if (counter == 0) { * strContent = strContent.Substring(0, strContent.Length - strHeader.Length); * } else { * strContent = strContent.Substring(0, strContent.Length - 2); * } * * strHeader = "\n\r\nPID $1D Bank 3: "; * strContent += strHeader; * counter = 0; * value = m_obd2Interface.GetValue("SAE.O2B3S1B_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 1, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B3S2B_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 2, "; ++counter; * } * if (counter == 0) { * strContent = strContent.Substring(0, strContent.Length - strHeader.Length); * } else { * strContent = strContent.Substring(0, strContent.Length - 2); * } * * strHeader = "\n\r\nPID $1D Bank 4: "; * strContent += strHeader; * counter = 0; * value = m_obd2Interface.GetValue("SAE.O2B4S1B_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 1, "; ++counter; * } * * value = m_obd2Interface.GetValue("SAE.O2B4S2B_PRESENT"); * progressBar.Value++; * if (!value.ErrorDetected && value.BoolValue) { * strContent += "传感器 2, "; ++counter; * } * if (counter == 0) { * strContent = strContent.Substring(0, strContent.Length - strHeader.Length); * } else { * strContent = strContent.Substring(0, strContent.Length - 2); * } * }*/ if (m_obdInterface.GetDevice() == HardwareType.ELM327) { value = m_obdInterface.GetValue("ELM.BATTERY_VOLTAGE"); if (!value.ErrorDetected) { lblBattery.Text = value.DoubleValue.ToString() + " V"; } } else { lblBattery.Text = "不适用"; } progressBar.Value = progressBar.Maximum; }
private void ReadFreezeFrameData() { while (true) { this.BeginInvoke(new Action(() => { freezeFrame.Reset(); })); OBDParameter parameter = m_obdInterface.LookupParameter("SAE.FF_DTC"); if (parameter == null) { MessageBox.Show( "加载SAE.FF_DTC参数时发生错误", "出错", MessageBoxButtons.OK, MessageBoxIcon.Hand ); break; } OBDParameterValue value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (value.ErrorDetected) { m_obdInterface.GetLogger().TraceError("Error while requesting SAE.FF_DTC"); MessageBox.Show( "请求SAE.FF_DTC命令时发生错误", "出错", MessageBoxButtons.OK, MessageBoxIcon.Hand ); break; } if (string.Compare(value.StringValue, "P0000") == 0) { MessageBox.Show( string.Format("在 #{0} 帧中,没有发现冻结帧信息", m_FrameNumber), "信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk ); break; } this.BeginInvoke(new Action(() => { progressBar.Value = 0; freezeFrame.DTC = value.StringValue; })); parameter = m_obdInterface.LookupParameter("SAE.FUEL1_STATUS"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.FuelSystem1Status = value.StringValue; })); } parameter = m_obdInterface.LookupParameter("SAE.FUEL2_STATUS"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.FuelSystem2Status = value.StringValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.LOAD_CALC"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.CalculatedLoad = value.DoubleValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.ECT"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.EngineCoolantTemp = value.DoubleValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.STFT1"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.STFT1 = value.DoubleValue; })); } parameter = m_obdInterface.LookupParameter("SAE.STFT3"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.STFT3 = value.DoubleValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.LTFT1"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.LTFT1 = value.DoubleValue; })); } parameter = m_obdInterface.LookupParameter("SAE.LTFT3"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.LTFT3 = value.DoubleValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.STFT2"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.STFT2 = value.DoubleValue; })); } parameter = m_obdInterface.LookupParameter("SAE.STFT4"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.STFT4 = value.DoubleValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.LTFT2"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.LTFT2 = value.DoubleValue; })); } parameter = m_obdInterface.LookupParameter("SAE.LTFT4"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.LTFT4 = value.DoubleValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.MAP"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.IntakePressure = value.DoubleValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.RPM"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.EngineRPM = value.DoubleValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.VSS"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.VehicleSpeed = value.DoubleValue; })); } this.BeginInvoke(new Action(() => { progressBar.Increment(progressBar.Step); })); if (!m_KeepReading) { break; } parameter = m_obdInterface.LookupParameter("SAE.SPARKADV"); if (parameter == null) { break; } value = m_obdInterface.GetValue(parameter.GetFreezeFrameCopy(m_FrameNumber)); if (!value.ErrorDetected) { this.BeginInvoke(new Action(() => { freezeFrame.SparkAdvance = value.DoubleValue; })); } break; } this.BeginInvoke(new Action(() => { progressBar.Value = progressBar.Maximum; btnRefresh.Enabled = true; btnCancel.Enabled = false; })); }
private void CollectFreezeFrameData() { OBDParameter param = m_obdInterface.LookupParameter("SAE.FUEL1_STATUS"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowFuelSystemStatus = false; if (param != null) { param = param.GetFreezeFrameCopy(0); OBDParameterValue value17 = m_obdInterface.GetValue(param); if (!value17.ErrorDetected) { m_bReportForm.ReportPage1.ShowFuelSystemStatus = true; DisplayDetailMessage("燃油系统 1: " + value17.StringValue); m_bReportForm.ReportPage1.FuelSystem1Status = value17.StringValue; } } OBDParameter freezeFrameCopy = m_obdInterface.LookupParameter("SAE.FUEL2_STATUS"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowFuelSystemStatus = false; if (freezeFrameCopy != null) { freezeFrameCopy = freezeFrameCopy.GetFreezeFrameCopy(0); OBDParameterValue value3 = m_obdInterface.GetValue(freezeFrameCopy); if (!value3.ErrorDetected) { m_bReportForm.ReportPage1.ShowFuelSystemStatus = true; DisplayDetailMessage("燃油系统 2: " + value3.StringValue); m_bReportForm.ReportPage1.FuelSystem2Status = value3.StringValue; } } OBDParameter parameter16 = m_obdInterface.LookupParameter("SAE.LOAD_CALC"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowCalculatedLoad = false; if (parameter16 != null) { OBDParameter parameter17 = parameter16.GetFreezeFrameCopy(0); OBDParameterValue value2 = m_obdInterface.GetValue(parameter17); if (!value2.ErrorDetected) { m_bReportForm.ReportPage1.ShowCalculatedLoad = true; DisplayDetailMessage("计算负荷: " + value2.DoubleValue.ToString()); m_bReportForm.ReportPage1.CalculatedLoad = value2.DoubleValue; } } OBDParameter parameter14 = m_obdInterface.LookupParameter("SAE.ECT"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowEngineCoolantTemp = false; if (parameter14 != null) { parameter14 = parameter14.GetFreezeFrameCopy(0); OBDParameterValue value16 = m_obdInterface.GetValue(parameter14); if (!value16.ErrorDetected) { m_bReportForm.ReportPage1.ShowEngineCoolantTemp = true; DisplayDetailMessage("发动机冷却液温度: " + value16.DoubleValue.ToString()); m_bReportForm.ReportPage1.EngineCoolantTemp = value16.DoubleValue; } } OBDParameter parameter13 = m_obdInterface.LookupParameter("SAE.STFT1"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowSTFT13 = false; if (parameter13 != null) { parameter13 = parameter13.GetFreezeFrameCopy(0); OBDParameterValue value15 = m_obdInterface.GetValue(parameter13); if (!value15.ErrorDetected) { m_bReportForm.ReportPage1.ShowSTFT13 = true; DisplayDetailMessage("短时燃油修正 - 组 1: " + value15.DoubleValue.ToString()); m_bReportForm.ReportPage1.STFT1 = value15.DoubleValue; } } OBDParameter parameter12 = m_obdInterface.LookupParameter("SAE.STFT3"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowSTFT13 = false; if (parameter12 != null) { parameter12 = parameter12.GetFreezeFrameCopy(0); OBDParameterValue value14 = m_obdInterface.GetValue(parameter12); if (!value14.ErrorDetected) { m_bReportForm.ReportPage1.ShowSTFT13 = true; DisplayDetailMessage("短时燃油修正 - 组 3: " + value14.DoubleValue.ToString()); m_bReportForm.ReportPage1.STFT3 = value14.DoubleValue; } } OBDParameter parameter11 = m_obdInterface.LookupParameter("SAE.LTFT1"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowLTFT13 = false; if (parameter11 != null) { parameter11 = parameter11.GetFreezeFrameCopy(0); OBDParameterValue value13 = m_obdInterface.GetValue(parameter11); if (!value13.ErrorDetected) { m_bReportForm.ReportPage1.ShowLTFT13 = true; DisplayDetailMessage("长时燃油修正 - 组 1: " + value13.DoubleValue.ToString()); m_bReportForm.ReportPage1.LTFT1 = value13.DoubleValue; } } OBDParameter parameter10 = m_obdInterface.LookupParameter("SAE.LTFT3"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowLTFT13 = false; if (parameter10 != null) { parameter10 = parameter10.GetFreezeFrameCopy(0); OBDParameterValue value12 = m_obdInterface.GetValue(parameter10); if (!value12.ErrorDetected) { m_bReportForm.ReportPage1.ShowLTFT13 = true; DisplayDetailMessage("长时燃油修正 - 组 3: " + value12.DoubleValue.ToString()); m_bReportForm.ReportPage1.LTFT3 = value12.DoubleValue; } } OBDParameter parameter9 = m_obdInterface.LookupParameter("SAE.STFT2"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowSTFT24 = false; if (parameter9 != null) { parameter9 = parameter9.GetFreezeFrameCopy(0); OBDParameterValue value11 = m_obdInterface.GetValue(parameter9); if (!value11.ErrorDetected) { m_bReportForm.ReportPage1.ShowSTFT24 = true; DisplayDetailMessage("短时燃油修正 - 组 2: " + value11.DoubleValue.ToString()); m_bReportForm.ReportPage1.STFT2 = value11.DoubleValue; } } OBDParameter parameter8 = m_obdInterface.LookupParameter("SAE.STFT4"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowSTFT24 = false; if (parameter8 != null) { parameter8 = parameter8.GetFreezeFrameCopy(0); OBDParameterValue value10 = m_obdInterface.GetValue(parameter8); if (!value10.ErrorDetected) { m_bReportForm.ReportPage1.ShowSTFT24 = true; DisplayDetailMessage("短时燃油修正 - 组 4: " + value10.DoubleValue.ToString()); m_bReportForm.ReportPage1.STFT4 = value10.DoubleValue; } } OBDParameter parameter7 = m_obdInterface.LookupParameter("SAE.LTFT2"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowLTFT24 = false; if (parameter7 != null) { parameter7 = parameter7.GetFreezeFrameCopy(0); OBDParameterValue value9 = m_obdInterface.GetValue(parameter7); if (!value9.ErrorDetected) { m_bReportForm.ReportPage1.ShowLTFT24 = true; DisplayDetailMessage("长时燃油修正 - 组 2: " + value9.DoubleValue.ToString()); m_bReportForm.ReportPage1.LTFT2 = value9.DoubleValue; } } OBDParameter parameter6 = m_obdInterface.LookupParameter("SAE.LTFT4"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowLTFT24 = false; if (parameter6 != null) { parameter6 = parameter6.GetFreezeFrameCopy(0); OBDParameterValue value8 = m_obdInterface.GetValue(parameter6); if (!value8.ErrorDetected) { m_bReportForm.ReportPage1.ShowLTFT24 = true; DisplayDetailMessage("长时燃油修正 - 组 4: " + value8.DoubleValue.ToString()); m_bReportForm.ReportPage1.LTFT4 = value8.DoubleValue; } } OBDParameter parameter5 = m_obdInterface.LookupParameter("SAE.MAP"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowIntakePressure = false; if (parameter5 != null) { parameter5 = parameter5.GetFreezeFrameCopy(0); OBDParameterValue value7 = m_obdInterface.GetValue(parameter5); if (!value7.ErrorDetected) { m_bReportForm.ReportPage1.ShowIntakePressure = true; DisplayDetailMessage("进气歧管压力: " + value7.DoubleValue.ToString()); m_bReportForm.ReportPage1.IntakePressure = value7.DoubleValue; } } OBDParameter parameter4 = m_obdInterface.LookupParameter("SAE.RPM"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowEngineRPM = false; if (parameter4 != null) { parameter4 = parameter4.GetFreezeFrameCopy(0); OBDParameterValue value6 = m_obdInterface.GetValue(parameter4); if (!value6.ErrorDetected) { m_bReportForm.ReportPage1.ShowEngineRPM = true; DisplayDetailMessage("发动机转数: " + value6.DoubleValue.ToString()); m_bReportForm.ReportPage1.EngineRPM = value6.DoubleValue; } } OBDParameter parameter3 = m_obdInterface.LookupParameter("SAE.VSS"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowVehicleSpeed = false; if (parameter3 != null) { parameter3 = parameter3.GetFreezeFrameCopy(0); OBDParameterValue value5 = m_obdInterface.GetValue(parameter3); if (!value5.ErrorDetected) { m_bReportForm.ReportPage1.ShowVehicleSpeed = true; DisplayDetailMessage("车辆速度: " + value5.DoubleValue.ToString()); m_bReportForm.ReportPage1.VehicleSpeed = value5.DoubleValue; } } OBDParameter parameter2 = m_obdInterface.LookupParameter("SAE.SPARKADV"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); m_bReportForm.ReportPage1.ShowSparkAdvance = false; if (parameter2 != null) { parameter2 = parameter2.GetFreezeFrameCopy(0); OBDParameterValue value4 = m_obdInterface.GetValue(parameter2); if (!value4.ErrorDetected) { m_bReportForm.ReportPage1.ShowSparkAdvance = true; DisplayDetailMessage("点火提前角: " + value4.DoubleValue.ToString()); m_bReportForm.ReportPage1.SparkAdvance = value4.DoubleValue; } } }
public abstract OBDResponseList Parse(OBDParameter param, string response);
public bool LoadParameters(string fileName) { int lineNo = 0; string line; OBDParameter param; string[] tokens; char[] comma = new char[] { ',' }; try { using (StreamReader streamReader = new StreamReader(fileName)) { while ((line = streamReader.ReadLine()) != null) { ++lineNo; line = line.Trim(); // Ignore empty and comment lines if (line.Length == 0 || line[0] == '#') { continue; } tokens = line.Split(comma); for (int idx = 0; idx < tokens.Length; idx++) { tokens[idx] = (tokens[idx] ?? "").Trim(); } param = new OBDParameter { PID = tokens[0], Name = tokens[1], OBDRequest = tokens[2], Service = int.Parse(tokens[3]), Parameter = int.Parse(tokens[4]), SubParameter = int.Parse(tokens[5]) }; switch (tokens[6]) { case "Airflow": param.Category = 0; break; case "DTC": param.Category = 1; break; case "Emissions": param.Category = 2; break; case "Fuel": param.Category = 3; break; case "General": param.Category = 4; break; case "O2": param.Category = 5; break; case "Powertrain": param.Category = 6; break; case "Speed": param.Category = 7; break; case "Temperature": param.Category = 8; break; } switch (tokens[7]) { case "Generic": param.Type = 0; break; case "Manufacturer": param.Type = 1; break; case "Scripted": param.Type = 2; break; } switch (tokens[8]) { case "SAE": param.Manufacturer = 0; break; case "GM": param.Manufacturer = 1; break; case "Ford": param.Manufacturer = 2; break; case "SH_OBD": param.Manufacturer = 3; break; } param.Priority = int.Parse(tokens[9]); param.EnglishUnitLabel = tokens[10]; param.MetricUnitLabel = tokens[11]; try { param.EnglishMinValue = Utility.Text2Double(tokens[12]); param.EnglishMaxValue = Utility.Text2Double(tokens[13]); param.MetricMinValue = Utility.Text2Double(tokens[14]); param.MetricMaxValue = Utility.Text2Double(tokens[15]); } catch (Exception e) { m_log.TraceError("Utility.Text2Double() occur error: " + e.Message); } int valueType = 0x00; if (int.Parse(tokens[16]) > 0) { valueType = 0x01; } if (int.Parse(tokens[17]) > 0) { valueType |= 0x02; } if (int.Parse(tokens[18]) > 0) { valueType |= 0x04; } if (int.Parse(tokens[19]) > 0) { valueType |= 0x08; } param.ValueTypes = valueType; m_listAllParameters.Add(param); } } m_log.TraceInfo(string.Format("Loaded {0} parameters from {1}", lineNo, fileName)); return(true); } catch (Exception e) { m_log.TraceError(string.Format("Failed to load parameters from: {0}, reason: {1}", fileName, e.Message)); return(false); } }
private void CollectData() { DisplayStatusMessage("请求MIL状态和故障码数量"); DisplayRequest("0101"); OBDParameterValue value5 = m_obdInterface.GetValue("SAE.MIL"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); if (!value5.ErrorDetected) { if (value5.BoolValue) { DisplayDetailMessage("MIL状态: On"); m_bReportForm.ReportPage1.MilStatus = true; } else { DisplayDetailMessage("MIL状态: Off"); m_bReportForm.ReportPage1.MilStatus = false; } } OBDParameterValue value3 = m_obdInterface.GetValue("SAE.DTC_COUNT"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); if (!value3.ErrorDetected) { m_bReportForm.ReportPage1.TotalCodes = (int)value3.DoubleValue; DisplayDetailMessage("存储的故障码数量: " + value3.DoubleValue.ToString()); } DisplayStatusMessage("请求存储的故障码列表"); OBDParameterValue value4 = m_obdInterface.GetValue("SAE.STORED_DTCS"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); if (!value4.ErrorDetected) { m_bReportForm.ReportPage1.DTCList.Clear(); foreach (string strVal in value4.ListStringValue) { m_bReportForm.ReportPage1.DTCList.Add(strVal); DisplayDetailMessage("存储的故障码: " + strVal); DTC dtc2 = m_obdInterface.GetDTC(strVal); if (dtc2 != null) { m_bReportForm.ReportPage1.DTCDefinitionList.Add(dtc2.Description); } } } DisplayStatusMessage("请求未决故障码列表"); OBDParameterValue value2 = m_obdInterface.GetValue("SAE.PENDING_DTCS"); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); if (!value2.ErrorDetected) { m_bReportForm.ReportPage1.PendingList.Clear(); foreach (string strVal in value2.ListStringValue) { m_bReportForm.ReportPage1.PendingList.Add(strVal); DisplayDetailMessage("未决故障码: " + strVal); DTC dtc = m_obdInterface.GetDTC(strVal); if (dtc != null) { m_bReportForm.ReportPage1.PendingDefinitionList.Add(dtc.Description); } } } DisplayStatusMessage("检查冻结帧数据"); OBDParameter parameter = m_obdInterface.LookupParameter("SAE.FF_DTC"); if (parameter != null) { OBDParameter freezeFrameCopy = parameter.GetFreezeFrameCopy(0); value2 = m_obdInterface.GetValue(freezeFrameCopy); this.BeginInvoke((EventHandler) delegate { progressBar.Value += 1; }); if (!value2.ErrorDetected) { m_bReportForm.ReportPage1.FreezeFrameDTC = value2.StringValue; DisplayDetailMessage("找到冻结帧数据 " + value2.StringValue); CollectFreezeFrameData(); } else { m_bReportForm.ReportPage1.FreezeFrameDTC = "P0000"; DisplayDetailMessage("未找到冻结帧数据"); } CollectMonitoringTestData(); this.BeginInvoke((EventHandler) delegate { progressBar.Value = progressBar.Maximum; btnGenerate.Enabled = true; // ReportForm窗体类里需要调用SaveFileDialog.ShowDialog() // 该方法需要调用COM对象(系统中的打开文件通用对话框),故需要调用者线程具有STA模式(单线程单元模式) // 而Task无法显式设置线程模式为STA,故只能在主UI线程里调用ReportForm窗体类 m_bReportForm.ShowDialog(); }); } }
public override OBDResponseList Parse(OBDParameter param, string response) { return(Parse(param, response, HEADER_LENGTH)); }
public bool InitOBD() { bool bRet = true; // 获取ISO15031 Mode01 PID支持情况 OBDParameter param = new OBDParameter(1, 0, 0) { ValueTypes = 32 }; m_listSupportedParameters.Clear(); for (int i = 0; (i * 0x20) < 0x100; i++) { param.Parameter = i * 0x20; OBDParameterValue value = GetValue(param); if (value.ErrorDetected) { bRet = false; break; } foreach (OBDParameter param2 in m_listAllParameters) { if (param2.Parameter > 2 && param2.Parameter > (i * 0x20) && param2.Parameter < ((i + 1) * 0x20) && value.GetBitFlag(param2.Parameter - param.Parameter - 1)) { m_listSupportedParameters.Add(param2); } } if (!value.GetBitFlag(31)) { break; } } if (!bRet) { // 获取ISO27145 PID支持情况 bRet = true; param = new OBDParameter(0x22, 0, 0) { ValueTypes = 32 }; m_listSupportedParameters.Clear(); for (int i = 0; (i * 0x20) < 0x100; i++) { param.Parameter = 0xF400 + i * 0x20; OBDParameterValue value = GetValue(param); if (value.ErrorDetected) { bRet = false; break; } foreach (OBDParameter param2 in m_listAllParameters) { if (param2.Parameter > 2 && param2.Parameter > (i * 0x20) && param2.Parameter < ((i + 1) * 0x20) && value.GetBitFlag(param2.Parameter - param.Parameter - 1)) { m_listSupportedParameters.Add(param2); } } if (!value.GetBitFlag(31)) { break; } } UseISO27145 = bRet; m_log.TraceInfo("Current vehicle support ISO 27145 only!"); } return(bRet); }