예제 #1
0
        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();
        }
예제 #2
0
        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();
                });
            }
        }