From 4441a0b6792565f4021940bc860df17cc3ce6aff Mon Sep 17 00:00:00 2001 From: lixiaojun <1287241240@qq.com> Date: 星期一, 09 十二月 2024 18:54:52 +0800 Subject: [PATCH] 修复水泵分析 --- WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs | 238 ++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 202 insertions(+), 36 deletions(-) diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs index a79af34..e659f6b 100644 --- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs +++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs @@ -10,6 +10,7 @@ using System.Windows.Forms; using Yw.Geometry; using Yw.Pump; +using Yw.Vmo; using Yw.WinFrmUI.Phart; namespace HStation.WinFrmUI @@ -21,18 +22,24 @@ InitializeComponent(); } + private Yw.Model.HydroModelInfo _hydroInfo = null;//姘村姏淇℃伅 + private Yw.Model.HydroPumpInfo _pumpInfo = null;//姘存车淇℃伅 + private Dictionary<string, HydroCalcuVisualResult> _allCalcuResultVisualDict = null;//璁$畻缁撴灉鍙瀛楀吀 + private List<HydroWorkingVmo> _allWorkingList = null;//鎵�鏈夊伐鍐靛垪琛� + private Dictionary<HydroWorkingVmo, Dictionary<string, HydroCalcuVisualResult>> _allWorkingCalcuResultDict = null;//鎵�鏈夊伐鍐佃绠楃粨鏋滃瓧鍏� + /// <summary> /// 缁戝畾鏁版嵁 /// </summary> public void SetBindingData ( Yw.Model.HydroModelInfo hydroInfo, - HydroCalcuResult calcuResult, - Yw.Model.HydroPumpInfo pumpInfo + Yw.Model.HydroPumpInfo pumpInfo, + HydroCalcuResult calcuResult ) { var allCalcuResultVisualDict = calcuResult?.GetVisualDict(); - SetBindingData(hydroInfo, allCalcuResultVisualDict, pumpInfo); + SetBindingData(hydroInfo, pumpInfo, allCalcuResultVisualDict); } /// <summary> @@ -41,31 +48,76 @@ public void SetBindingData ( Yw.Model.HydroModelInfo hydroInfo, - Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict, - Yw.Model.HydroPumpInfo pumpInfo + Yw.Model.HydroPumpInfo pumpInfo, + Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict ) { - if (hydroInfo == null) - { - return; - } - if (pumpInfo == null) - { - return; - } + _hydroInfo = hydroInfo; + _pumpInfo = pumpInfo; + _allCalcuResultVisualDict = allCalcuResultVisualDict; + var vm = CreateViewModel(); + SetBindingData(vm); + } + /// <summary> + /// 缁戝畾鏁版嵁 + /// </summary> + public void SetBindingData + ( + Yw.Model.HydroModelInfo hydroInfo, + Yw.Model.HydroPumpInfo pumpInfo, + List<HydroWorkingVmo> allWorkingList + ) + { + _hydroInfo = hydroInfo; + _pumpInfo = pumpInfo; + _allWorkingList = allWorkingList; + var vm = CreateWorkingViewModel(); + SetBindingData(vm); + } + + /// <summary> + /// 缁戝畾鏁版嵁 + /// </summary> + public void SetBindingData(PumpRunViewViewModel vm) + { + this.pumpRunViewChart1.SetBindingData(vm); + if (vm != null && vm.Items != null) + { + var item = vm.Items.FirstOrDefault(); + if (item != null) + { + this.barTxtQ.EditValue = $"{Math.Round(item.Q, 1)}m鲁/h"; + this.barTxtH.EditValue = $"{Math.Round(item.H, 2)}m"; + this.barTxtP.EditValue = $"{Math.Round(item.P ?? 0, 1)}kW"; + this.barTxtE.EditValue = $"{Math.Round(item.E ?? 0, 1)}%"; + } + } + } + + //鍒涘缓瑙嗗浘 + private PumpRunViewViewModel CreateViewModel() + { + if (_hydroInfo == null) + { + return default; + } + if (_pumpInfo == null) + { + return default; + } var vm = new PumpRunViewViewModel(); - vm.Id = pumpInfo.Code; - vm.Name = pumpInfo.Name; - vm.CurveName = $"棰濆畾鏇茬嚎({pumpInfo.RatedHz}hz)"; - vm.RatedQ = pumpInfo.RatedQ ?? 0; - vm.RatedH = pumpInfo.RatedH ?? 0; - vm.RatedP = pumpInfo.RatedP; - vm.RatedN = pumpInfo.RatedN ?? 0; - vm.RatedHz = pumpInfo.RatedHz; + vm.Id = _pumpInfo.Code; + vm.Name = _pumpInfo.Name; + vm.CurveName = $"棰濆畾鏇茬嚎({_pumpInfo.RatedHz}hz)"; + vm.RatedQ = _pumpInfo.RatedQ ?? 0; + vm.RatedH = _pumpInfo.RatedH ?? 0; + vm.RatedP = _pumpInfo.RatedP; + vm.RatedN = _pumpInfo.RatedN ?? 0; + vm.RatedHz = _pumpInfo.RatedHz; vm.Color = Color.Black; - var curveqh = hydroInfo.Curves?.Find(x => x.Code == pumpInfo.CurveQH); + var curveqh = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQH); if (curveqh != null) { var qh_pts = curveqh.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); @@ -75,7 +127,7 @@ } } - var curveqp = hydroInfo.Curves?.Find(x => x.Code == pumpInfo.CurveQP); + var curveqp = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQP); if (curveqp != null) { var qp_pts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); @@ -85,7 +137,7 @@ } } - var curveqe = hydroInfo.Curves?.Find(x => x.Code == pumpInfo.CurveQE); + var curveqe = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQE); if (curveqe != null) { var qepts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); @@ -95,20 +147,20 @@ } } - if (pumpInfo.LinkStatus == Yw.Hydro.PumpStatus.Open) + if (_pumpInfo.LinkStatus == Yw.Hydro.PumpStatus.Open) { vm.Items = new List<PumpRunViewItemViewModel>(); var vmItem = new PumpRunViewItemViewModel(); vm.Items.Add(vmItem); vmItem.Id = string.Empty; vmItem.Name = "杩愯"; - vmItem.Hz = Math.Round(pumpInfo.RatedHz * pumpInfo.SpeedRatio, 1); + vmItem.Hz = Math.Round(_pumpInfo.RatedHz * _pumpInfo.SpeedRatio, 1); vmItem.Color = Color.Blue; - if (pumpInfo.RatedN.HasValue) + if (_pumpInfo.RatedN.HasValue) { - vmItem.N = Math.Round(pumpInfo.RatedN.Value * pumpInfo.SpeedRatio, 1); + vmItem.N = Math.Round(_pumpInfo.RatedN.Value * _pumpInfo.SpeedRatio, 1); } - var calcuResult = allCalcuResultVisualDict?.GetValue(pumpInfo.Code) as HydroCalcuPumpResult; + var calcuResult = _allCalcuResultVisualDict?.GetValue(_pumpInfo.Code) as HydroCalcuPumpResult; if (calcuResult != null) { vmItem.Q = calcuResult.CalcuQ ?? 0; @@ -140,16 +192,130 @@ } } - SetBindingData(vm); + return vm; } - /// <summary> - /// 缁戝畾鏁版嵁 - /// </summary> - public void SetBindingData(PumpRunViewViewModel vm) + //鍒涘缓宸ュ喌瑙嗗浘 + private PumpRunViewViewModel CreateWorkingViewModel() { - this.pumpRunViewChart1.SetBindingData(vm); - //this.barCheckE.Checked=this.pumpRunViewChart1. + if (_hydroInfo == null) + { + return default; + } + if (_pumpInfo == null) + { + return default; + } + var vm = new PumpRunViewViewModel(); + vm.Id = _pumpInfo.Code; + vm.Name = _pumpInfo.Name; + vm.CurveName = $"棰濆畾鏇茬嚎({_pumpInfo.RatedHz}hz)"; + vm.RatedQ = _pumpInfo.RatedQ ?? 0; + vm.RatedH = _pumpInfo.RatedH ?? 0; + vm.RatedP = _pumpInfo.RatedP; + vm.RatedN = _pumpInfo.RatedN ?? 0; + vm.RatedHz = _pumpInfo.RatedHz; + vm.Color = Color.Black; + + var curveqh = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQH); + if (curveqh != null) + { + var qh_pts = curveqh.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); + if (qh_pts != null && qh_pts.Count > 3) + { + vm.CurveQH = new CubicSpline2d(qh_pts); + } + } + + var curveqp = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQP); + if (curveqp != null) + { + var qp_pts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); + if (qp_pts != null && qp_pts.Count > 3) + { + vm.CurveQP = new CubicSpline2d(qp_pts); + } + } + + var curveqe = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQE); + if (curveqe != null) + { + var qepts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); + if (qepts != null && qepts.Count > 3) + { + vm.CurveQE = new CubicSpline2d(qepts); + } + } + + if (_allWorkingList != null && _allWorkingList.Count > 0) + { + vm.Items = new List<PumpRunViewItemViewModel>(); + foreach (var working in _allWorkingList) + { + var workingInfo = JsonHelper.Json2Object<HydroWorkingInfoViewModel>(working.WorkingInfo); + if (workingInfo != null && workingInfo.Pumps != null && workingInfo.Pumps.Count > 0) + { + var workingPumpInfo = workingInfo.Pumps.Find(x => x.Code == _pumpInfo.Code); + if (workingPumpInfo != null) + { + var vmItem = new PumpRunViewItemViewModel(); + vm.Items.Add(vmItem); + vmItem.Id = working.ID.ToString(); + vmItem.Name = working.Name; + vmItem.Hz = workingPumpInfo.CurrentHz; + vmItem.Color = HydroPumpCurveColorHelper.GetRandomColor(_allWorkingList.IndexOf(working)); + if (_pumpInfo.RatedN.HasValue) + { + var speedRatio = workingPumpInfo.CurrentHz / _pumpInfo.RatedHz; + vmItem.N = Math.Round(_pumpInfo.RatedN.Value * speedRatio, 1); + } + vmItem.CurveName = $"{working.Name}({vmItem.Hz}hz)"; + if (_allWorkingCalcuResultDict == null) + { + _allWorkingCalcuResultDict = new Dictionary<HydroWorkingVmo, Dictionary<string, HydroCalcuVisualResult>>(); + } + if (!_allWorkingCalcuResultDict.ContainsKey(working)) + { + _hydroInfo.UpdateWorkingInfo(workingInfo); + var calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss); + _allWorkingCalcuResultDict.Add(working, calcuResult?.GetVisualDict()); + } + var calcuResultVisualDict = _allWorkingCalcuResultDict[working]; + var calcuPumpResult = calcuResultVisualDict?.GetValue(_pumpInfo.Code) as HydroCalcuPumpResult; + if (calcuPumpResult != null) + { + vmItem.Q = calcuPumpResult.CalcuQ ?? 0; + vmItem.H = calcuPumpResult.CalcuH ?? 0; + vmItem.P = calcuPumpResult.CalcuP; + vmItem.E = calcuPumpResult.CalcuE; + } + + if (vm.CurveQH != null) + { + var qh_pts = vm.CurveQH.GetPointList(20); + var qh_run_pts = qh_pts.GetQHPointListByN(vm.RatedHz, vmItem.Hz); + vmItem.CurveQH = new CubicSpline2d(qh_run_pts); + } + + if (vm.CurveQP != null) + { + var qp_pts = vm.CurveQP.GetPointList(20); + var qp_run_pts = qp_pts.GetQPPointListByN(vm.RatedHz, vmItem.Hz); + vmItem.CurveQP = new CubicSpline2d(qp_run_pts); + } + + if (vm.CurveQE != null) + { + var qe_pts = vm.CurveQE.GetPointList(20); + var qe_run_pts = qe_pts.GetQEPointListByN(vm.RatedHz, vmItem.Hz); + vmItem.CurveQE = new CubicSpline2d(qe_run_pts); + } + } + } + } + } + + return vm; } //鏁堢巼绾� -- Gitblit v1.9.3