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
|
{
|
private string startCode = "[&start&]";
|
private string endCode = "[&end&]";
|
private string paramCode = "[¶m&]";
|
private string getfilterCode = "getfilter";
|
private string savefilterCode = "savefilter";
|
public IBoxFormDataFilter()
|
{
|
InitializeComponent();
|
imageComboBoxEdit1.EditValue = "Flow";
|
InitChart();
|
}
|
|
|
private void SetOrder(string order)
|
{
|
var smsg = order.Split(new string[] { paramCode }, StringSplitOptions.RemoveEmptyEntries);
|
if (smsg.Length < 2)
|
{
|
return;
|
}
|
|
switch (smsg[0].Trim())
|
{
|
case "datadownload":
|
//WaitFrmHelper.HideWaitForm();
|
break;
|
}
|
}
|
|
private void EboxFormDataFilter_Load(object sender, EventArgs e)
|
{
|
SendText(startCode + getfilterCode + paramCode + endCode);
|
}
|
|
public event EventHandler<string> 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<TimeValue> timeValuesOld_csv = new List<TimeValue>();
|
List<TimeValue> timeValuesNew_csv = new List<TimeValue>();
|
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<TimeValue>();
|
timeValuesNew_csv = new List<TimeValue>();
|
//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<TimeValue>();
|
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();
|
//var uv= imageComboBoxEdit1.EditValue.ToString();
|
//if (model.IsFlowFilter)
|
//{
|
// model.FlowFilterConfig = new EboxFilterConfigViewModel()
|
// {
|
// 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 (model.IsPressFilter)
|
//{
|
// model.PressFilterConfig = new EboxFilterConfigViewModel()
|
// {
|
// 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)
|
// };
|
//}
|
|
SendText(startCode + savefilterCode + paramCode + JsonHelper.Object2Json(model) + 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();
|
}
|
}
|
}
|