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 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 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 _allBindingList = null;//所有绑定列表 private List _curveAnalyzePoints = null; public event Action UpdatePacketEvent; /// /// 初始化 /// public void Initial(long monitorDataSourcesId, long curveAnalyzeId, Model.CurveAnalyze curveAnalyze) { _monitorDataSourcesId = monitorDataSourcesId; _curveAnalyzeId = curveAnalyzeId; _curveAnalyze = curveAnalyze; _curveAnalyzePoints = _curveAnalyze.CheckPoints; } /// /// 初始化数据 /// public override void InitialDataSource() { var curveAnalyze = new BLL.CurveAnalyze().GetByID(_monitorDataSourcesId, _curveAnalyzeId); if (curveAnalyze == null) return; SetBindingData(curveAnalyze.EquipmentID); } /// /// 绑定数据 /// public void SetBindingData(long equipmentId) { _allBindingList = new BindingList(); 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 ColorArray = new List() { Color.Red, Color.Blue, Color.Green, Color.DodgerBlue, Color.Fuchsia, Color.MidnightBlue, Color.Maroon, Color.Aquamarine, Color.Bisque, Color.BurlyWood }; /// /// 获取随机颜色 /// /// 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 { 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(); 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 } }