| | |
| | | using System.Windows.Forms; |
| | | using Yw.Geometry; |
| | | using Yw.Pump; |
| | | using Yw.Vmo; |
| | | using Yw.WinFrmUI.Phart; |
| | | |
| | | namespace HStation.WinFrmUI |
| | |
| | | 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> |
| | |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | |
| | | //效率线 |