using DevExpress.Utils.Extensions;
|
using DevExpress.XtraEditors;
|
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
|
using IStation.Untity;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Linq;
|
|
namespace IStation.WinFrmUI.Monitor
|
{
|
public partial class CurveCalibrationPage : DocumentPage
|
{
|
public CurveCalibrationPage()
|
{
|
InitializeComponent();
|
this.PageTitle.Caption = "曲线验证";
|
|
this.gridView2.SetNormalEditView();
|
this.gridView2.OptionsView.EnableAppearanceOddRow = false;
|
this.gridView2.OptionsView.EnableAppearanceEvenRow = false;
|
this.gridView2.BestFitColumns();
|
|
this.gridView2.OptionsView.ShowIndicator = false;
|
this.gridView2.OptionsView.GroupDrawMode = DevExpress.XtraGrid.Views.Grid.GroupDrawMode.Office;
|
this.gridView2.OptionsBehavior.AllowFixedGroups = DevExpress.Utils.DefaultBoolean.True;
|
|
this.gridView1.SetNormalView();
|
|
this.mainChart.OnCalcQueryPoint += (id, pt) =>
|
{
|
this.SetQueryInfo(id, pt);
|
};
|
}
|
|
public class CurrentViewModel
|
{
|
public CurrentViewModel() { }
|
|
public CurrentViewModel(Model.Equipment<Model.Pump> product, Model.PumpCurveExMapping pumpCurve)
|
{
|
this.ID = pumpCurve.MappingID;
|
this.CurveName = pumpCurve.OtherName;
|
this.IsBP = product.RatedParas.IsBp;
|
this.ChartCurveName = $"{this.CurveName}";
|
|
this.CurveOriginQH = pumpCurve.CurveInfo?.CurveQH;
|
this.CurveOriginQE = pumpCurve.CurveInfo?.CurveQE;
|
this.CurveOriginQP = pumpCurve.CurveInfo?.CurveQP;
|
}
|
|
public CurrentViewModel(Model.Equipment<Model.Pump> product, Model.CurveAnalyzePacket packet)
|
{
|
this.ID = packet.ID;
|
this.CurveName = $"{packet.Hz}hz";
|
this.IsBP = product.RatedParas.IsBp;
|
this.ChartCurveName = $"{this.CurveName}";
|
|
var curveInfo = new Model.FeatCurveExpressGroup(packet.CurveInfo);
|
this.CurveOriginQH = curveInfo?.CurveQH;
|
this.CurveOriginQE = curveInfo?.CurveQE;
|
this.CurveOriginQP = curveInfo?.CurveQP;
|
}
|
|
|
public long ID { get; set; }
|
public string CurveName { get; set; }
|
public bool IsBP { get; set; }
|
|
public string ChartCurveName { get; set; }
|
public string QueryQ { get; set; }
|
public string QueryH { get; set; }
|
public string QueryE { get; set; }
|
public string QueryP { get; set; }
|
public double Hz { get; set; } = 50;
|
public double ExtendRatio { get; set; } = 100;
|
public bool IsSelected { get; set; }
|
public Color? Color { get; set; }
|
|
public Model.CurveExpress CurveOriginQH { get; set; }
|
public Model.CurveExpress CurveOriginQE { get; set; }
|
public Model.CurveExpress CurveOriginQP { get; set; }
|
|
public Model.CurveExpress CurveRunQH { get; set; }
|
public Model.CurveExpress CurveRunQE { get; set; }
|
public Model.CurveExpress CurveRunQP { get; set; }
|
|
public void CalcRunCurve()
|
{
|
if (Hz > 50)
|
return;
|
if (Hz < 20)
|
return;
|
this.CurveRunQH = IStation.Common.CutSimuCalculer.GetSimuPointQH(CurveOriginQH, 2900, 2900 * Hz / 50);
|
this.CurveRunQE = IStation.Common.CutSimuCalculer.GetSimuPointQE(CurveOriginQE, 2900, 2900 * Hz / 50);
|
this.CurveRunQP = IStation.Common.CutSimuCalculer.GetSimuPointQP(CurveOriginQP, 2900, 2900 * Hz / 50);
|
|
if (this.CurveRunQH != null)
|
this.CurveRunQH.Max = this.CurveRunQH.Max * ExtendRatio / 100;
|
if (this.CurveRunQE != null)
|
this.CurveRunQE.Max = this.CurveRunQE.Max * ExtendRatio / 100;
|
if (this.CurveRunQP != null)
|
this.CurveRunQP.Max = this.CurveRunQP.Max * ExtendRatio / 100;
|
}
|
}
|
|
|
private long _monitorDataSourcesId, _curveAnalyzeId;
|
private Model.CurveAnalyze _curveAnalyze = null;
|
private BindingList<CurrentViewModel> _allBindingList = null;//所有绑定列表
|
|
private List<Model.CurveAnalyzePoint> _curveAnalyzePoints = null;
|
|
public event Action UpdatePacketEvent;
|
|
/// <summary>
|
/// 初始化
|
/// </summary>
|
public void Initial(long monitorDataSourcesId, long curveAnalyzeId, Model.CurveAnalyze curveAnalyze)
|
{
|
_monitorDataSourcesId = monitorDataSourcesId;
|
_curveAnalyzeId = curveAnalyzeId;
|
_curveAnalyze = curveAnalyze;
|
_curveAnalyzePoints = _curveAnalyze.CheckPoints;
|
}
|
|
/// <summary>
|
/// 初始化数据
|
/// </summary>
|
public override void InitialDataSource()
|
{
|
var curveAnalyze = new BLL.CurveAnalyze().GetByID(_monitorDataSourcesId, _curveAnalyzeId);
|
if (curveAnalyze == null)
|
return;
|
SetBindingData(curveAnalyze.EquipmentID);
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData(long equipmentId)
|
{
|
_allBindingList = new BindingList<CurrentViewModel>();
|
var pump = new BLL.Equipment().GetChildPumpByEnginePumpID(equipmentId);
|
if (pump != null)
|
{
|
var pumpCurveMappings = new BLL.PumpCurve().GetExMappingByPumpID(pump.ID);
|
if (pumpCurveMappings != null && pumpCurveMappings.Any())
|
{
|
foreach (var pumpCurveMapping in pumpCurveMappings)
|
{
|
var vm = new CurrentViewModel(pump, pumpCurveMapping);
|
vm.Color = GetRandomColor(_allBindingList.Count);
|
_allBindingList.Add(vm);
|
}
|
}
|
|
var packets = new BLL.CurveAnalyzePacket().GetByCurveAnalyzeID(_monitorDataSourcesId, _curveAnalyzeId);
|
packets = packets?.Where(x => !string.IsNullOrEmpty(x.CurveInfo)).ToList();
|
if (packets != null && packets.Any())
|
{
|
for (int i = 0; i < packets.Count; i++)
|
{
|
var packet = packets[i];
|
var vm = new CurrentViewModel(pump, packet);
|
vm.Color = GetRandomColor(_allBindingList.Count);
|
_allBindingList.Add(vm);
|
}
|
}
|
}
|
|
this.currentViewModelBindingSource.DataSource = _allBindingList;
|
this.currentViewModelBindingSource.ResetBindings(false);
|
|
if (_curveAnalyzePoints != null)
|
{
|
this.gridControl1.DataSource = _curveAnalyzePoints;
|
}
|
}
|
|
//显示分析点
|
private void ShowCurveAnalyzePoints()
|
{
|
if (_allBindingList == null)
|
return;
|
var cek = _allBindingList.Count(x => x.IsSelected);
|
if (cek > 0 && _curveAnalyzePoints != null)
|
{
|
var curvePointsQH = _curveAnalyzePoints.Select(x => new Model.CurvePoint(x.Q, x.H)).ToList();
|
var curvePointsQE = _curveAnalyzePoints.Select(x => new Model.CurvePoint(x.Q, x.E)).ToList();
|
var curvePointsQP = _curveAnalyzePoints.Select(x => new Model.CurvePoint(x.Q, x.P)).ToList();
|
this.mainChart.CreatePointSeries(curvePointsQH, curvePointsQE, curvePointsQP);
|
this.mainChart.SetPointSeries(this.barCekPointShow.Checked, this.barCekPointLabel.Checked);
|
}
|
}
|
|
#region Color
|
|
private List<Color> ColorArray = new List<Color>()
|
{ Color.Red, Color.Blue, Color.Green, Color.DodgerBlue,
|
Color.Fuchsia, Color.MidnightBlue, Color.Maroon,
|
Color.Aquamarine, Color.Bisque, Color.BurlyWood
|
};
|
|
|
/// <summary>
|
/// 获取随机颜色
|
/// </summary>
|
/// <returns></returns>
|
private Color GetRandomColor(int count)
|
{
|
if (count < ColorArray.Count)
|
{
|
return ColorArray[count];
|
}
|
|
return ColorHelper.GetRandomColor();
|
}
|
#endregion
|
|
|
//选择曲线
|
private void repositoryItemCheckSelected_CheckedChanged(object sender, EventArgs e)
|
{
|
if (this.gridView2.GetCurrentViewModel(_allBindingList) is CurrentViewModel vm)
|
{
|
var cek = sender as DevExpress.XtraEditors.CheckEdit;
|
vm.IsSelected = cek.Checked;
|
if (vm.IsSelected)
|
{
|
vm.CalcRunCurve();
|
this.mainChart.AddCurve(vm.ID, vm.ChartCurveName, vm.CurveRunQH, vm.CurveRunQE, vm.CurveRunQP, vm.Color.Value);
|
}
|
else
|
{
|
vm.QueryH = string.Empty;
|
vm.QueryQ = string.Empty;
|
vm.QueryE = string.Empty;
|
vm.QueryP = string.Empty;
|
this.gridView2.RefreshRow(this.gridView2.FocusedRowHandle);
|
this.mainChart.DeleteCurve(vm.ID);
|
}
|
ShowCurveAnalyzePoints();
|
}
|
}
|
|
//颜色变换
|
private void repositoryItemColor_ColorChanged(object sender, EventArgs e)
|
{
|
if (this.gridView2.GetCurrentViewModel(_allBindingList) is CurrentViewModel vm)
|
{
|
var cek = sender as DevExpress.XtraEditors.ColorEdit;
|
vm.Color = cek.Color;
|
if (vm.IsSelected)
|
{
|
this.mainChart.SetCurve(vm.ID, vm.Color.Value);
|
}
|
}
|
}
|
|
//值变换
|
private void gridView2_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
|
{
|
if (e.Column == this.colHz1)
|
{
|
var vm = this.gridView2.GetRow(e.RowHandle) as CurrentViewModel;
|
if (vm.IsSelected)
|
{
|
vm.CalcRunCurve();
|
this.mainChart.SetCurve(vm.ID, vm.CurveRunQH, vm.CurveRunQE, vm.CurveRunQP);
|
}
|
}
|
else if (e.Column == this.colExtendRatio)
|
{
|
var vm = this.gridView2.GetRow(e.RowHandle) as CurrentViewModel;
|
if (vm.IsSelected)
|
{
|
vm.CalcRunCurve();
|
this.mainChart.SetCurve(vm.ID, vm.CurveRunQH, vm.CurveRunQE, vm.CurveRunQP);
|
}
|
}
|
}
|
|
// 设置查询信息
|
private void SetQueryInfo(long id, Model.GroupPoint queryPt)
|
{
|
if (queryPt == null || id < 0)
|
return;
|
var vm = _allBindingList.Where(x => x.ID == id).FirstOrDefault();
|
if (vm == null)
|
return;
|
|
if (queryPt.Q > 0)
|
vm.QueryQ = $"{queryPt.Q.ToString("N1")}";
|
else
|
|
vm.QueryQ = string.Empty;
|
|
if (queryPt.H > 0)
|
vm.QueryH = $"{queryPt.H.ToString("N2")}";
|
else
|
vm.QueryH = string.Empty;
|
|
|
if (queryPt.E > 0)
|
vm.QueryE = $"{queryPt.E.ToString("N1")}%";
|
else
|
vm.QueryE = string.Empty;
|
|
|
if (queryPt.P > 0)
|
vm.QueryP = $"{queryPt.P.ToString("N1")}";
|
else
|
vm.QueryP = string.Empty;
|
|
this.currentViewModelBindingSource.ResetBindings(false);
|
}
|
|
|
#region Menu
|
|
private void barBtnClearCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
if (_allBindingList == null || !_allBindingList.Any())
|
return;
|
this.gridView2.UpdateCurrentRow();
|
this.gridView2.CloseEditor();
|
_allBindingList.ForEach(x =>
|
{
|
x.IsSelected = false;
|
});
|
this.currentViewModelBindingSource.ResetBindings(false);
|
this.mainChart.DeleteCurve();
|
}
|
|
private void barCekPointShow_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
this.mainChart.SetPointSeries(this.barCekPointShow.Checked, this.barCekPointLabel.Checked);
|
}
|
|
private void barCekPointLabel_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
this.mainChart.SetPointSeries(this.barCekPointShow.Checked, this.barCekPointLabel.Checked);
|
}
|
|
private void barBtnExpand_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
this.gridView2.ExpandGroupRow(this.gridView2.FocusedRowHandle, true);
|
}
|
|
private void barBtnCollapse_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
this.gridView2.CollapseGroupRow(this.gridView2.FocusedRowHandle, true);
|
}
|
|
private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
this.gridView2.ExpandAllGroups();
|
}
|
|
private void barBtnCollapseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
this.gridView2.CollapseAllGroups();
|
}
|
|
//设置校验点
|
private void barSetCheckPoints_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
var pump = new BLL.Equipment().GetChildPumpByEnginePumpID(_curveAnalyze.EquipmentID);
|
var pumpParas = pump?.RatedParas;
|
/* var list = new List<Model.CurveAnalyzePoint>
|
{
|
new Model.CurveAnalyzePoint()
|
{
|
N = 641,
|
P2 = 194.20,
|
Q = 14433,
|
P1 = 5.66,
|
P = 1169
|
},
|
new Model.CurveAnalyzePoint()
|
{
|
N = 621,
|
P2 = 189.85,
|
Q = 13646,
|
P1 = 5.7,
|
P = 1108
|
},
|
new Model.CurveAnalyzePoint()
|
{
|
N = 583,
|
P2 = 185.47,
|
Q = 12631,
|
P1 = 5.78,
|
P = 1019
|
},
|
new Model.CurveAnalyzePoint()
|
{
|
N = 558,
|
P2 = 181.8,
|
Q = 11872,
|
P1 = 5.82,
|
P = 915
|
},
|
new Model.CurveAnalyzePoint()
|
{
|
N = 533,
|
P2 = 178.83,
|
Q = 11147,
|
P1 = 5.87,
|
P = 807
|
},
|
new Model.CurveAnalyzePoint()
|
{
|
N = 504,
|
P2 = 175.66,
|
Q = 10220,
|
P1 = 5.9,
|
P = 743
|
},
|
new Model.CurveAnalyzePoint()
|
{
|
N = 736,
|
P2 = 214.51,
|
Q = 16797,
|
P1 = 5.52,
|
P = 1493
|
}
|
};
|
|
list.ForEach(x =>
|
{
|
x.HZ = x.N / pumpParas.Nr * 50;
|
x.P1 = Model.CurveCalcuHelper.M2Mpa(x.P1);
|
x.P2 = Unit.UnitPRHelper.Convert(Unit.eUnitPR.KPa, Unit.eUnitPR.MPa, x.P2);
|
var h = Model.CurveCalcuHelper.Mpa2M(x.P2 - x.P1);
|
x.H = h + Model.CurveCalcuHelper.CalculateOtherPress(x.Q, pumpParas?.Ic, pumpParas?.Oc, pumpParas?.Ie, pumpParas?.Oe);//测量扬程=压差 + 表位差 + 流速
|
x.E = Model.CurveCalcuHelper.CalculateE(x.Q, x.H, x.P);
|
x.Round();
|
});
|
list = list.OrderByDescending(x => x.HZ).ToList();
|
_curveAnalyzePoints = list;*/
|
var dlg = new SetCheckPointsDlg();
|
dlg.Set(_curveAnalyzePoints);
|
dlg.ReloadDataEvent += (points) =>
|
{
|
if (points == null || !points.Any())
|
{
|
_curveAnalyzePoints = null;
|
}
|
else
|
{
|
_curveAnalyzePoints = new List<Model.CurveAnalyzePoint>();
|
foreach (var point in points)
|
{
|
point.Time = DateTime.Now;
|
var h = Model.CurveCalcuHelper.Mpa2M(point.P2 - point.P1);
|
point.H = h + Model.CurveCalcuHelper.CalculateOtherPress(point.Q, pumpParas?.Ic, pumpParas?.Oc, pumpParas?.Ie, pumpParas?.Oe);//测量扬程=压差 + 表位差 + 流速
|
point.E = Model.CurveCalcuHelper.CalculateE(point.Q, point.H, point.P);
|
point.N = point.HZ / 50 * pumpParas.Nr;
|
point.Round();
|
_curveAnalyzePoints.Add(point);
|
}
|
}
|
|
_curveAnalyze.CheckPoints = _curveAnalyzePoints;
|
var bol = new BLL.CurveAnalyze().Update(_monitorDataSourcesId, _curveAnalyze);
|
if (!bol)
|
{
|
return false;
|
}
|
this.gridControl1.DataSource = _curveAnalyzePoints;
|
ShowCurveAnalyzePoints();
|
return true;
|
};
|
dlg.ShowDialog();
|
this.UpdatePacketEvent?.Invoke();
|
}
|
|
private void barCekSearch_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
if (this.barCekSearch.Checked)
|
this.gridView2.ShowFindPanel();
|
else
|
this.gridView2.HideFindPanel();
|
}
|
|
#endregion
|
}
|
}
|