Exemplo n.º 1
0
 public DynoGlideCheckForm(DynoCmd dynoCmd, MainSetting mainCfg, Logger log, bool bDiesel)
 {
     InitializeComponent();
     _lastHeight      = Height;
     _dynoCmd         = dynoCmd;
     _mainCfg         = mainCfg;
     _log             = log;
     _bDiesel         = bDiesel;
     _dtRTData        = new DataTable("RTData");
     _dtResult        = new DataTable("Result");
     _timer           = new System.Timers.Timer(_mainCfg.RealtimeInterval);
     _timer.Elapsed  += OnTimer;
     _timer.AutoReset = true;
     _dieselIHP       = DieselIHP.IHP30kW;
 }
Exemplo n.º 2
0
        private void OnTimer(object source, System.Timers.ElapsedEventArgs e)
        {
            if (_bDiesel)
            {
                double IHP = 0;
                switch (_dieselIHP)
                {
                case DieselIHP.IHP30kW:
                    IHP = 30;
                    break;

                case DieselIHP.IHP20kW:
                    IHP = 20;
                    break;

                case DieselIHP.IHP10kW:
                    IHP = 10;
                    break;
                }
                GetCYDynoLoadGlideCheckRealTimeDataAckParams ackParams = new GetCYDynoLoadGlideCheckRealTimeDataAckParams();
                if (_dynoCmd.GetCYDynoLoadGlideCheckRealTimeDataCmd(IHP, ref ackParams, out string errMsg) && ackParams != null)
                {
                    if (_timer != null && _timer.Enabled)
                    {
                        try {
                            DataRow  dr       = _dtRTData.NewRow();
                            TimeSpan interval = DateTime.Now - _startTime;
                            if (interval.TotalSeconds < 0.001)
                            {
                                interval = TimeSpan.Zero;
                            }
                            dr["TimeSN"]  = interval.TotalSeconds.ToString("F1");
                            dr["Power"]   = ackParams.power;
                            dr["Speed"]   = ackParams.speed;
                            dr["TorqueF"] = ackParams.torquef;
                            _dtRTData.Rows.Add(dr);

                            FillDieselResult(ackParams);
                            if (ackParams.step == 7)
                            {
                                _dieselIHP = DieselIHP.IHP20kW;
                            }
                            else if (ackParams.step == 15)
                            {
                                _dieselIHP = DieselIHP.IHP10kW;
                            }
                            Invoke((EventHandler) delegate {
                                lblPower.Text   = ackParams.power.ToString("F");
                                lblSpeed.Text   = ackParams.speed.ToString("F");
                                lblTorqueF.Text = ackParams.torquef.ToString("F");
                                chart1.DataBind();
                                switch (_dieselIHP)
                                {
                                case DieselIHP.IHP30kW:
                                    txtBoxIHP.Text = "30";
                                    break;

                                case DieselIHP.IHP20kW:
                                    txtBoxIHP.Text = "20";
                                    break;

                                case DieselIHP.IHP10kW:
                                    txtBoxIHP.Text = "10";
                                    break;
                                }
                                // 柴油无法仅用step来判断滑行检查是否已结束
                                if (ackParams.step >= 23 && ackParams.result != null && ackParams.result.Length > 0)
                                {
                                    lblResult.Text = ackParams.result;
                                    if (ackParams.result.Contains("不"))
                                    {
                                        lblResult.BackColor = Color.Red;
                                    }
                                    _timer.Enabled = false;
                                }
                            });
                        } catch (ObjectDisposedException) {
                            // 关闭窗口后仍有一定几率会进入主UI线程,此时访问界面元素会引发此异常,直接忽略即可
                        }
                    }
                }
            }
            else
            {
                GetQYDynoLoadGlideCheckRealTimeDataAckParams ackParams = new GetQYDynoLoadGlideCheckRealTimeDataAckParams();
                if (_dynoCmd.GetQYDynoLoadGlideCheckRealTimeDataCmd(ref ackParams, out string errMsg) && ackParams != null)
                {
                    if (_timer != null && _timer.Enabled)
                    {
                        try {
                            DataRow  dr       = _dtRTData.NewRow();
                            TimeSpan interval = DateTime.Now - _startTime;
                            if (interval.TotalSeconds < 0.001)
                            {
                                interval = TimeSpan.Zero;
                            }
                            dr["TimeSN"]  = interval.TotalSeconds.ToString("F1");
                            dr["Power"]   = ackParams.power;
                            dr["Speed"]   = ackParams.speed;
                            dr["TorqueF"] = ackParams.torquef;
                            _dtRTData.Rows.Add(dr);

                            _dtResult.Rows[0]["ACDT"]    = ackParams.ACDT25_11kw;
                            _dtResult.Rows[0]["滑行误差(%)"] = ackParams.Error25_11kw;
                            _dtResult.Rows[1]["ACDT"]    = ackParams.ACDT40_11kw;
                            _dtResult.Rows[1]["滑行误差(%)"] = ackParams.Error40_11kw;
                            Invoke((EventHandler) delegate {
                                lblPower.Text   = ackParams.power.ToString("F");
                                lblSpeed.Text   = ackParams.speed.ToString("F");
                                lblTorqueF.Text = ackParams.torquef.ToString("F");
                                chart1.DataBind();
                                if (ackParams.result != null && ackParams.result.Length > 0)
                                {
                                    lblResult.Text = ackParams.result;
                                    if (ackParams.result.Contains("不"))
                                    {
                                        lblResult.BackColor = Color.Red;
                                    }
                                }
                            });
                            // 汽油可以用step来判断滑行检查是否已结束
                            if (ackParams.step < 0)
                            {
                                _timer.Enabled = false;
                            }
                        } catch (ObjectDisposedException) {
                            // 关闭窗口后仍有一定几率会进入主UI线程,此时访问界面元素会引发此异常,直接忽略即可
                        }
                    }
                }
            }
        }