private void btnOpen_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog { Title = "打开 OBD-II 诊断报告", Filter = "报告文件 (*.obd)|*.obd", FilterIndex = 0, RestoreDirectory = true }; openFileDialog.ShowDialog(); if (openFileDialog.FileName.Length <= 0) { return; } FileStream fileStream = File.OpenRead(openFileDialog.FileName); BinaryReader binaryReader = new BinaryReader(fileStream); m_bReportForm = new ReportForm(); m_bReportForm.ReportPage1.ShopName = binaryReader.ReadString(); m_bReportForm.ReportPage1.ShopAddress1 = binaryReader.ReadString(); m_bReportForm.ReportPage1.ShopAddress2 = binaryReader.ReadString(); m_bReportForm.ReportPage1.ShopTelephone = binaryReader.ReadString(); m_bReportForm.ReportPage1.ClientName = binaryReader.ReadString(); m_bReportForm.ReportPage1.ClientAddress1 = binaryReader.ReadString(); m_bReportForm.ReportPage1.ClientAddress2 = binaryReader.ReadString(); m_bReportForm.ReportPage1.ClientTelephone = binaryReader.ReadString(); m_bReportForm.ReportPage1.Vehicle = binaryReader.ReadString(); m_bReportForm.ReportPage1.GenerationDate = binaryReader.ReadString(); m_bReportForm.ReportPage1.MilStatus = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.TotalCodes = binaryReader.ReadInt32(); m_bReportForm.ReportPage1.FreezeFrameDTC = binaryReader.ReadString(); List <string> stringList1 = new List <string>(); for (uint i = 25U; i > 0U; i--) { string str = binaryReader.ReadString(); if (str.Length > 0) { stringList1.Add(str); } } m_bReportForm.ReportPage1.DTCList = stringList1; List <string> stringList2 = new List <string>(); for (uint i = 25U; i > 0U; i--) { string str = binaryReader.ReadString(); if (str.Length > 0) { stringList2.Add(str); } } m_bReportForm.ReportPage1.DTCDefinitionList = stringList2; List <string> stringList3 = new List <string>(); for (uint i = 25U; i > 0U; i--) { string str = binaryReader.ReadString(); if (str.Length > 0) { stringList3.Add(str); } } m_bReportForm.ReportPage1.PendingList = stringList3; List <string> stringList4 = new List <string>(); for (uint i = 25U; i > 0U; i--) { string str = binaryReader.ReadString(); if (str.Length > 0) { stringList4.Add(str); } } m_bReportForm.ReportPage1.PendingDefinitionList = stringList4; m_bReportForm.ReportPage1.FuelSystem1Status = binaryReader.ReadString(); m_bReportForm.ReportPage1.FuelSystem2Status = binaryReader.ReadString(); m_bReportForm.ReportPage1.CalculatedLoad = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.EngineCoolantTemp = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.STFT1 = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.STFT2 = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.STFT3 = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.STFT4 = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.LTFT1 = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.LTFT2 = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.LTFT3 = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.LTFT4 = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.IntakePressure = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.EngineRPM = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.VehicleSpeed = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.SparkAdvance = binaryReader.ReadDouble(); m_bReportForm.ReportPage1.ShowFuelSystemStatus = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowCalculatedLoad = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowEngineCoolantTemp = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowSTFT13 = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowSTFT24 = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowLTFT13 = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowLTFT24 = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowIntakePressure = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowEngineRPM = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowVehicleSpeed = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ShowSparkAdvance = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.MisfireMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.MisfireMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.FuelSystemMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.FuelSystemMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ComprehensiveMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.ComprehensiveMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.CatalystMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.CatalystMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.HeatedCatalystMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.HeatedCatalystMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.EvapSystemMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.EvapSystemMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.SecondaryAirMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.SecondaryAirMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.RefrigerantMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.RefrigerantMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.OxygenSensorMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.OxygenSensorMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.OxygenSensorHeaterMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.OxygenSensorHeaterMonitorCompleted = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.EGRSystemMonitorSupported = binaryReader.ReadBoolean(); m_bReportForm.ReportPage1.EGRSystemMonitorCompleted = binaryReader.ReadBoolean(); binaryReader.Close(); fileStream.Close(); m_bReportForm.ShowDialog(); openFileDialog.Dispose(); }
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(); }); } }