using DevExpress.XtraCharts; using DevExpress.XtraEditors; using System.IO; using System.Text; using Yw; using Yw.WinFrmUI; namespace IBox.WinFrmUI { public partial class IBoxFormDataFilter : DocumentPage { public IBoxFormDataFilter() { InitializeComponent(); imageComboBoxEdit1.EditValue = "Flow"; InitChart(); } private void EboxFormDataFilter_Load(object sender, EventArgs e) { SendText(IBoxHelper.startCode + IBoxHelper.getfilterCode + IBoxHelper.paramCode + IBoxHelper.endCode); } public event EventHandler SendData; private void SendText(string content) { //BluetoothHelper.GetInstance().SendData(content); SendData?.Invoke(null, content); } /// /// 绑定数据 /// /// /// public void BindData(IBoxFilterViewModel model, bool isBlue) { this.model = model; checkEditIsFlow.Checked = model.IsFlowFilter; checkEditIsPress.Checked = model.IsPressFilter; imageComboBoxEdit1_SelectedIndexChanged(null, null); } private Series _seriesOld, _seriesNew; List timeValuesOld_csv = new List(); List timeValuesNew_csv = new List(); FilterKalman filterKalman = null; private void InitChart() { _seriesOld = this.chartControl1.GetSeriesByName("原始值"); _seriesOld.CrosshairLabelPattern = " {A} 原始值: {V:N1}"; _seriesNew = this.chartControl1.GetSeriesByName("修正后的值"); _seriesNew.CrosshairLabelPattern = " {A} 修正后的值:{V:N1}"; this.chartControl1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.chart1_MouseWheel); ((XYDiagram)this.chartControl1.Diagram).AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Second; } private void chart1_MouseWheel(object sender, MouseEventArgs e) { var ori_chart = sender as ChartControl; XYDiagram diag = (XYDiagram)ori_chart.Diagram; diag.ZoomingOptions.UseMouseWheel = true; diag.ZoomingOptions.ZoomInMouseAction.ModifierKeys = ChartModifierKeys.None; diag.EnableAxisXZooming = true; diag.EnableAxisXScrolling = true; } private void ClearChart() { this.chartControl1.BeginInit(); timeValuesOld_csv = new List(); timeValuesNew_csv = new List(); //this.chartControl1.Visible = false; _seriesNew.Points.Clear(); _seriesOld.Points.Clear(); _seriesNew.Visible = false; _seriesOld.Visible = false; this.chartControl1.EndInit(); } private void simpleButton3_Click(object sender, EventArgs e) { ClearChart(); } private void SetValue() { var uv = imageComboBoxEdit1.EditValue.ToString(); if (uv.Equals("Flow")) { model.FlowFilterConfig = new IBoxFilterConfigViewModel() { IsControlInput = checkEditIsControlInput.Checked, RValue = double.Parse(textEditRValue.Text), QValue = double.Parse(textEditQValue.Text), AValue = double.Parse(textEditAValue.Text), HValue = double.Parse(textEditHValue.Text), ControlInputValue = double.Parse(textEditControlInputValue.Text) }; } if (uv.Equals("Press")) { model.PressFilterConfig = new IBoxFilterConfigViewModel() { IsControlInput = checkEditIsControlInput.Checked, RValue = double.Parse(textEditRValue.Text), QValue = double.Parse(textEditQValue.Text), AValue = double.Parse(textEditAValue.Text), HValue = double.Parse(textEditHValue.Text), ControlInputValue = double.Parse(textEditControlInputValue.Text) }; } } private void simpleButton2_Click_1(object sender, EventArgs e) { var isControlInput = checkEditIsControlInput.Checked; var RValue = double.Parse(textEditRValue.Text); var QValue = double.Parse(textEditQValue.Text); var AValue = double.Parse(textEditAValue.Text); var HValue = double.Parse(textEditHValue.Text); SetValue(); var controlInputValue = double.Parse(textEditControlInputValue.Text); if (isControlInput) { filterKalman = new FilterKalman(RValue, QValue, AValue, 1, HValue); } else filterKalman = new FilterKalman(RValue, QValue); this.chartControl1.BeginInit(); timeValuesNew_csv = new List(); timeValuesOld_csv.ForEach(x => { if (isControlInput) timeValuesNew_csv.Add(new TimeValue() { Time = x.Time, Value = filterKalman.filter(x.Value, controlInputValue) }); else timeValuesNew_csv.Add(new TimeValue() { Time = x.Time, Value = filterKalman.filter(x.Value) }); }); timeValuesNew_csv.ForEach(x => _seriesNew.Points.Add(new SeriesPoint(x.Time, x.Value)) ); //_seriesNew.BindToData(timeValuesNew_csv, "Time", "Value"); this.chartControl1.EndInit(); } IBoxFilterViewModel model = new IBoxFilterViewModel(); private void simpleButton4_Click(object sender, EventArgs e) { model.IsFlowFilter = checkEditIsFlow.Checked; model.IsPressFilter = checkEditIsPress.Checked; SetValue(); SendText(IBoxHelper.startCode + IBoxHelper.savefilterCode + IBoxHelper.paramCode + JsonHelper.Object2Json(model) + IBoxHelper.endCode); MessageBoxHelper.ShowInfo("保存成功"); } private void imageComboBoxEdit1_SelectedIndexChanged(object sender, EventArgs e) { var uv = imageComboBoxEdit1.EditValue.ToString(); if (model != null) { switch (uv) { case "Flow": if (model.FlowFilterConfig != null) { textEditRValue.Text = model.FlowFilterConfig.RValue.ToString(); textEditQValue.Text = model.FlowFilterConfig.QValue.ToString(); textEditAValue.Text = model.FlowFilterConfig.AValue.ToString(); textEditHValue.Text = model.FlowFilterConfig.HValue.ToString(); textEditControlInputValue.Text = model.FlowFilterConfig.ControlInputValue.ToString(); checkEditIsControlInput.Checked = model.FlowFilterConfig.IsControlInput; } break; case "Press": if (model.PressFilterConfig != null) { textEditRValue.Text = model.PressFilterConfig.RValue.ToString(); textEditQValue.Text = model.PressFilterConfig.QValue.ToString(); textEditAValue.Text = model.PressFilterConfig.AValue.ToString(); textEditHValue.Text = model.PressFilterConfig.HValue.ToString(); textEditControlInputValue.Text = model.PressFilterConfig.ControlInputValue.ToString(); checkEditIsControlInput.Checked = model.PressFilterConfig.IsControlInput; } break; } } } private void simpleButton1_Click(object sender, EventArgs e) { #region Load ClearChart(); var dlg = new OpenFileDialog(); dlg.Filter = "Excel文件(*.xls;*.xlsx;*.csv)|*.xls;*.xlsx;*.csv|所有文件|*.*"; dlg.ValidateNames = true; dlg.CheckPathExists = true; dlg.CheckFileExists = true; if (dlg.ShowDialog() != DialogResult.OK) return; WaitFormHelper.ShowWaitForm("正在分析..."); var filePath = dlg.FileName; var extension = Path.GetExtension(filePath); switch (extension) { case ".csv": { using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) using (var sr = new StreamReader(fs, Encoding.UTF8)) { sr.ReadLine(); var strLine = string.Empty; while (!string.IsNullOrEmpty(strLine = sr.ReadLine())) { var strList = strLine.Split(','); if (strList.Length < 2) return; if (!DateTime.TryParse(strList[0], out DateTime time)) continue; if (!double.TryParse(strList[1], out double value)) continue; if (value <= 0) continue; var timeValue = new TimeValue(time, value); timeValuesOld_csv.Add(timeValue); } } } break; default: { WaitFormHelper.HideWaitForm(); XtraMessageBox.Show("暂不支持该格式!"); return; } break; } WaitFormHelper.HideWaitForm(); #endregion if (timeValuesOld_csv.Count < 1) { XtraMessageBox.Show("无数据!"); return; } this.chartControl1.BeginInit(); timeValuesOld_csv.ForEach(x => { _seriesOld.Points.Add(new SeriesPoint(x.Time, x.Value)); }); //_seriesOld.BindToData(timeValuesOld_csv, "Time", "Value"); _seriesNew.Visible = true; _seriesOld.Visible = true; this.chartControl1.EndInit(); } } }