From 94ebf14787ea1c67b6a6139a2b19e3693b809625 Mon Sep 17 00:00:00 2001 From: ningshuxia <ningshuxia0927@outlook.com> Date: 星期五, 28 三月 2025 14:24:45 +0800 Subject: [PATCH] 模拟计算 --- WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.Designer.cs | 10 ++ WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/General/OptAna.cs | 28 ++--- /dev/null | 54 ---------- WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/MachineRunPara.cs | 4 WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/02-chart/SystemCurveChartCtrl.cs | 2 WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.resx | 3 WinFrmUI/PBS.WinFrmUI.Hydro/Resources/calcdate.svg | 10 ++ WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/SimuPumpViewModel.cs | 8 - WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/SimulationSchedulePage.cs | 60 +---------- WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.Designer.cs | 23 ++-- WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/TimeValue.cs | 8 - WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs | 89 ++++++++++------- 12 files changed, 113 insertions(+), 186 deletions(-) diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.Designer.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.Designer.cs index 864a357..c8fe2ac 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.Designer.cs +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.Designer.cs @@ -39,6 +39,7 @@ ComponentResourceManager resources = new ComponentResourceManager(typeof(SystemCurvePage)); ribbonControl1 = new DevExpress.XtraBars.Ribbon.RibbonControl(); barBtnCalc = new DevExpress.XtraBars.BarButtonItem(); + barBtnSimulationCalc = new DevExpress.XtraBars.BarButtonItem(); ribbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); dockManager1 = new DevExpress.XtraBars.Docking.DockManager(components); @@ -53,7 +54,6 @@ dockPanel2_Container = new DevExpress.XtraBars.Docking.ControlContainer(); systemCurveChartCtrl1 = new SystemCurveChartCtrl(); dockPanel3 = new DevExpress.XtraBars.Docking.DockPanel(); - barButtonItem1 = new DevExpress.XtraBars.BarButtonItem(); ((ISupportInitialize)ribbonControl1).BeginInit(); ((ISupportInitialize)dockManager1).BeginInit(); dockPanel1.SuspendLayout(); @@ -71,7 +71,7 @@ ribbonControl1.EmptyAreaImageOptions.ImagePadding = new Padding(34, 39, 34, 39); ribbonControl1.ExpandCollapseItem.Id = 0; ribbonControl1.ItemPanelStyle = DevExpress.XtraBars.Ribbon.RibbonItemPanelStyle.Classic; - ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnCalc, barButtonItem1 }); + ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnCalc, barBtnSimulationCalc }); ribbonControl1.Location = new Point(0, 0); ribbonControl1.Margin = new Padding(3, 4, 3, 4); ribbonControl1.MaxItemId = 44; @@ -92,6 +92,14 @@ barBtnCalc.Name = "barBtnCalc"; barBtnCalc.ItemClick += barBtnCalc_ItemClick; // + // barBtnSimulationCalc + // + barBtnSimulationCalc.Caption = "妯℃嫙璁$畻"; + barBtnSimulationCalc.Id = 43; + barBtnSimulationCalc.ImageOptions.SvgImage = Properties.Resources.calcdate; + barBtnSimulationCalc.Name = "barBtnSimulationCalc"; + barBtnSimulationCalc.ItemClick += barBtnSimulationCalc_ItemClick; + // // ribbonPage // ribbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribbonPageGroup1 }); @@ -101,7 +109,7 @@ // ribbonPageGroup1 // ribbonPageGroup1.ItemLinks.Add(barBtnCalc); - ribbonPageGroup1.ItemLinks.Add(barButtonItem1); + ribbonPageGroup1.ItemLinks.Add(barBtnSimulationCalc); ribbonPageGroup1.Name = "ribbonPageGroup1"; ribbonPageGroup1.Text = "ribbonPageGroup1"; // @@ -224,13 +232,6 @@ dockPanel3.Tabbed = true; dockPanel3.Text = "panelContainer1"; // - // barButtonItem1 - // - barButtonItem1.Caption = "barButtonItem1"; - barButtonItem1.Id = 43; - barButtonItem1.Name = "barButtonItem1"; - barButtonItem1.ItemClick += barButtonItem1_ItemClick; - // // SystemCurvePage // Appearance.BackColor = SystemColors.Control; @@ -273,6 +274,6 @@ private FacilityPropertyCtrl facilityPropertyCtrl1; private DevExpress.XtraBars.Docking.DockPanel dockPanel1; private SystemCurveChartCtrl systemCurveChartCtrl1; - private DevExpress.XtraBars.BarButtonItem barButtonItem1; + private DevExpress.XtraBars.BarButtonItem barBtnSimulationCalc; } } diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs index 07ef700..413d556 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs @@ -13,7 +13,8 @@ _curveLowerPressure = l; _curveAveragePressure = a; }; - + + } @@ -52,27 +53,8 @@ } - //璁$畻 - private void barBtnCalc_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - - if (_facility == null) - { - TipFormHelper.ShowWarn("璇烽�夋嫨璁炬柦!"); - return; - } - - - var file_path = _facility.ModelPath; - var minDemand = 0; // 鏈�灏忔�婚渶姘撮噺(m鲁/h) - var maxDemand = _facility.MaxWaterDemand ?? 45; // 鏈�澶ф�婚渶姘撮噺(m鲁/h) - var calcCount = 1000; // 璁$畻娆℃暟 - var maxHeight = 22.5; //椤舵ゼ鏍囬珮 - var requiredEndPressure = _facility.TerminalPressure ?? 15; //闈欏帇 - CalcSystemCurve(file_path, minDemand, maxDemand, maxHeight, requiredEndPressure, calcCount); - - } - + #region 璁$畻 + /// <summary> /// 璁$畻绯荤粺鏇茬嚎 /// </summary> @@ -86,7 +68,6 @@ string inpFilePath, double minDemand, double maxDemand, - //double reservoirElevation, double maxHeight, double requiredEndPressure, int calcCount) @@ -195,12 +176,61 @@ if ((int)code > 100) { var msg = code.GetDisplayText(); + //TipFormHelper.ShowError(msg); throw new Exception(msg); } } } + //璁$畻 + private void barBtnCalc_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + + if (_facility == null) + { + TipFormHelper.ShowWarn("璇烽�夋嫨璁炬柦!"); + return; + } + + + var file_path = _facility.ModelPath; + var minDemand = 0; // 鏈�灏忔�婚渶姘撮噺(m鲁/h) + var maxDemand = _facility.MaxWaterDemand ?? 45; // 鏈�澶ф�婚渶姘撮噺(m鲁/h) + var calcCount = 1000; // 璁$畻娆℃暟 + var maxHeight = 22.5; //椤舵ゼ鏍囬珮 + var requiredEndPressure = _facility.TerminalPressure ?? 15; //闈欏帇 + CalcSystemCurve(file_path, minDemand, maxDemand, maxHeight, requiredEndPressure, calcCount); + } + #endregion + + #region 妯℃嫙璁$畻 + + //妯℃嫙璁$畻 + private void barBtnSimulationCalc_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + if (_facility==null) + { + return; + } + if (_curveAveragePressure==null) + { + TipFormHelper.ShowWarn("璇峰厛璁$畻鏇茬嚎锛�"); + return; + } + var page = new SimulationSchedulePage(); + page.Dock = DockStyle.Fill; + page.InitialData(_facility, _curveUpperPressure, _curveLowerPressure, _curveAveragePressure); + var dlg = new XtraForm(); + dlg.Text = "妯℃嫙璁$畻"; + dlg.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon; + dlg.Controls.Add(page); + dlg.StartPosition = FormStartPosition.CenterScreen; + dlg.WindowState = FormWindowState.Maximized; + dlg.ShowDialog(); + + } + #endregion /// <summary> /// 鍒锋柊鏁版嵁 @@ -211,18 +241,7 @@ InitialDataSource(); } - private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - var page=new SimulationSchedulePage(); - page.Dock= DockStyle.Fill; - page.InitialData(_facility, _curveUpperPressure, _curveLowerPressure, _curveAveragePressure); - var dlg=new XtraForm(); - dlg.Controls.Add(page); - dlg.StartPosition= FormStartPosition.CenterScreen; - dlg.WindowState = FormWindowState.Maximized; - dlg.ShowDialog(); - - } + } } \ No newline at end of file diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/02-chart/SystemCurveChartCtrl.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/02-chart/SystemCurveChartCtrl.cs index b26e552..de1411a 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/02-chart/SystemCurveChartCtrl.cs +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/02-chart/SystemCurveChartCtrl.cs @@ -10,6 +10,8 @@ { InitializeComponent(); this.layoutControl1.SetupLayoutControl(); + this.gridView1.SetNormalView(); + this.sidePanel1.Visible = false; InitialChart(); } diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/SimulationSchedulePage.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/SimulationSchedulePage.cs index 7dcba6e..ba0b594 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/SimulationSchedulePage.cs +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/SimulationSchedulePage.cs @@ -1044,7 +1044,7 @@ calcValue.TargetHead = targetHead; calcValues.Add(calcValue); - var schemes = calcHelper.CalcSchemes(simuPumps.Values.ToList(), complexRequestPras, null, combinRunStatus, out string errorInfo); + var schemes = calcHelper.CalcSchemes(simuPumps.Values.ToList(), complexRequestPras, combinRunStatus, out string errorInfo); if (schemes == null || !schemes.Any()) { calcValue.CalcSuccess = false; @@ -1115,14 +1115,14 @@ }; var simuTime = dateTime; - + complexRequestPras.OutletPipePara = new List<Dispatch.Model.OutletPipePara>(); complexRequestPras.OutletPipePara.Add(new OutletPipePara() { TargetFlow = targetFlow, TargetPress = targetHead }); - + var combin = _pumpCombine[combinIndex]; var combinRunStatus = new Dispatch.Model.MachineRunPara(); combinRunStatus.MachineRunFilter = new List<MachineRunFilter>(); @@ -1144,7 +1144,7 @@ double.TryParse(this.txtEndP.Text, out double endP); //璁$畻 - var schemes = calcHelper.CalcSchemes(simuPumps, complexRequestPras, null, combinRunStatus, out string errorInfo); + var schemes = calcHelper.CalcSchemes(simuPumps, complexRequestPras, combinRunStatus, out string errorInfo); if (schemes == null || !schemes.Any()) { return default; @@ -1166,13 +1166,13 @@ { calcValue.Pumps = new List<PumpViewModel>(); foreach (var item in scheme.Items) - { - calcValue.Pumps = GetPumpViewModelList(targetFlow,item, out double clac_power); + { + calcValue.Pumps = GetPumpViewModelList(targetFlow, item, out double clac_power); } } complexRequestPras.OutletPipePara[0].TargetPress = constantP; - var compareSchemes = calcHelper.CalcSchemes(simuPumps, complexRequestPras, null, combinRunStatus, out errorInfo); + var compareSchemes = calcHelper.CalcSchemes(simuPumps, complexRequestPras, combinRunStatus, out errorInfo); if (compareSchemes != null && compareSchemes.Any()) { var compareScheme = compareSchemes[0]; @@ -1185,51 +1185,7 @@ private List<PumpViewModel> GetPumpViewModelList(double targetFlow, AnaSchemeItem item, out double clac_power) { - //var pump = _pumpMainList.Find(x => x.ID == item.Flag); - //var curve = _pumpCurveList[pump.ID]; - - //clac_power = 0; - //var calc_pump = new PumpViewModel(); - //calc_pump.DbID = item.Flag; - //calc_pump.Name = pump.Name + "-鍙樺帇"; - //calc_pump.HZ = item.Frequency; - //calc_pump.Power = item.Power; - //calc_pump.Eff = item.Eff; - //calc_pump.Head = item.Head; - //calc_pump.Flow = item.Flow; - ////calc_pump.CurveInfoQH = item.GetDescription; - ////calc_pump.CurveInfoQP = item.CurveInfoQP; - - - //var pt = new Yw.Geometry.Point2d(targetFlow, _constantPressure); - - //var sect_pt = Yw.Pump.PerformParabolaHelper.GetQHSectPoint(Item1, pt); - //if (sect_pt == null || sect_pt.IsZeroPoint()) - // return null; - - //var wrk_speed = sect_pt.Y.CalculateSimuByH(pump.RatedSpeed, pt.Y); - //var wrk_fre = Math.Round(wrk_speed / pump.RatedSpeed * 50, 1); - - - //var wrk_curve_qh = new Yw.Pump.CurveQH(Yw.Ahart.eFeatType.Cubic, Item1.GetPointListByN(pump.RatedSpeed, wrk_speed)); - //var wrk_curve_qp = new Yw.Pump.CurveQP(Yw.Ahart.eFeatType.Cubic, Item2.GetPointListByN(pump.RatedSpeed, wrk_speed)); - //var wrk_power = wrk_curve_qp.FeatGetPointY(targetFlow); - //var wrk_eff = Yw.Pump.CalculationHelper.CalcuE(targetFlow, _constantPressure, wrk_power); - - //var calc_pump2 = new PumpViewModel(); - //calc_pump2.DbID = item.Flag; - //calc_pump2.Name = pump.Name + "-鎭掑帇"; - //calc_pump2.HZ = wrk_fre; - //calc_pump2.Power = Math.Round(wrk_power, 3); - //calc_pump2.Eff = Math.Round(wrk_eff, 1); - //calc_pump2.Head = _constantPressure; - //calc_pump2.Flow = Math.Round(targetFlow, 2); - //calc_pump2.CurveInfoQH = wrk_curve_qh; - //calc_pump2.CurveInfoQP = wrk_curve_qp; - //calc_pump2.IsCalc = true; - - //clac_power = wrk_power; - //return new List<PumpViewModel>() { calc_pump2, calc_pump }; + clac_power = 0; diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/General/OptAna.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/General/OptAna.cs index 861afc4..32fa50b 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/General/OptAna.cs +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/General/OptAna.cs @@ -12,31 +12,25 @@ /// <summary> /// /// </summary> - protected List<PBS.WinFrmUI.Hydro.Dispatch.Model.MachineDetailEx> allMachineList = null; + protected List<Model.MachineDetailEx> allMachineList = null; #region 璁$畻 鏈�浼樻柟妗� - /// <summary> - /// 璁$畻 鏈�浼樻柟妗� - /// </summary> - /// <param name="complex_request_paras"></param> - /// <param name="eta_ana_records"></param> - /// <param name="machine_run_status"></param> - /// <param name="error_info"></param> + public List<Dispatch.Model.AnaScheme> CalcSchemes( List<SimuPumpViewModel> simuCalcPumps, - PBS.WinFrmUI.Hydro.Dispatch.Model.RequestParasComplex complex_request_paras, - PBS.WinFrmUI.Hydro.Dispatch.Model.EtaAnaRecord4Station eta_ana_records, - PBS.WinFrmUI.Hydro.Dispatch.Model.MachineRunPara machine_run_status, + Model.RequestParasComplex complex_request_paras, + Model.MachineRunPara machine_run_status, out string error_info) { return CalcSchemes鎵▼(simuCalcPumps, complex_request_paras, machine_run_status, out error_info); } - protected List<Dispatch.Model.AnaScheme> CalcSchemes鎵▼(List<SimuPumpViewModel> simuCalcPumps, - PBS.WinFrmUI.Hydro.Dispatch.Model.RequestParasComplex complex_request_paras, - PBS.WinFrmUI.Hydro.Dispatch.Model.MachineRunPara machine_run_status, - out string error_info) + protected List<Dispatch.Model.AnaScheme> CalcSchemes鎵▼( + List<SimuPumpViewModel> simuCalcPumps, + Model.RequestParasComplex complex_request_paras, + Model.MachineRunPara machine_run_status, + out string error_info) { error_info = null; if (complex_request_paras == null) @@ -98,8 +92,8 @@ } - PBS.WinFrmUI.Hydro.Dispatch.Common.DispatchAnaGeneralHelper鎵▼ calc_pipe_helper = - new PBS.WinFrmUI.Hydro.Dispatch.Common.DispatchAnaGeneralHelper鎵▼(); + Common.DispatchAnaGeneralHelper鎵▼ calc_pipe_helper = + new Common.DispatchAnaGeneralHelper鎵▼(); calc_pipe_helper.InitialParas( target_flow, target_head, diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Helper/SimuSpeedCalcHelper.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Helper/SimuSpeedCalcHelper.cs deleted file mode 100644 index 71f20b1..0000000 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Helper/SimuSpeedCalcHelper.cs +++ /dev/null @@ -1,494 +0,0 @@ -锘縩amespace PBS.WinFrmUI.Hydro.Dispatch.Common -{ - /// <summary> - /// - /// </summary> - public class SimuSpeedCalcHelper - { - /// <summary> - /// / - /// </summary> - /// <param name="OriginExpress"></param> - /// <param name="origin_speed"></param> - /// <param name="change_speed"></param> - /// <param name="pointNum"></param> - /// <returns></returns> - public static Yw.Ahart.CubicCurve GetSimuPointQH(Yw.Ahart.CubicCurve OriginExpress, double origin_speed, double change_speed, int pointNum = 12) - { - //change鍙互澶т簬origin,鏈夋椂鐢ㄤ簬鍙嶆眰 - if (OriginExpress == null) - return null; - if (change_speed < 1) - return null; - - var simularPoints = new List<Yw.Geometry.Point2d>(); - var curvePoints = OriginExpress.GetPointList(); - foreach (Yw.Geometry.Point2d pt in curvePoints) - { - simularPoints.Add(new Yw.Geometry.Point2d( - GetQ(pt.X, origin_speed, change_speed), - GetH(pt.Y, origin_speed, change_speed))); - } - return FitHelper.BuildCurveExpress(curvePoints, OriginExpress.FitType); - } - /// <summary> - /// - /// </summary> - /// <param name="OriginExpress"></param> - /// <param name="origin"></param> - /// <param name="change"></param> - /// <param name="pointNum"></param> - /// <returns></returns> - public static Yw.Ahart.CubicCurve GetSimuPointQP(Yw.Ahart.CubicCurve OriginExpress, double origin, double change, int pointNum = 12) - { - if (OriginExpress == null) - return null; - - var simularPoints = new List<Yw.Geometry.Point2d>(); - var curvePoints = OriginExpress.GetPointList(); - foreach (Yw.Geometry.Point2d pt in curvePoints) - { - simularPoints.Add(new Yw.Geometry.Point2d( - GetQ(pt.X, origin, change), - GetP(pt.Y, origin, change))); - } - - return new Yw.Ahart.CubicCurve(curvePoints, OriginExpress.FitType); - } - /// <summary> - /// - /// </summary> - /// <param name="curveExpressQH"></param> - /// <param name="simularPoint"></param> - /// <param name="originValue"></param> - /// <param name="extendRatio"></param> - /// <returns></returns> - public static double GetSimuValue(ISupply.c.CurveExpress curveExpressQH, Yw.Geometry.Point2d simularPoint, double originValue, double extendRatio = 1) - { - if (curveExpressQH == null) - return -3; - if (simularPoint.X < 0.1 || simularPoint.Y < 0.1) - return -2; - if (simularPoint.X > curveExpressQH.Max * extendRatio * 1.5) - return -4; - if (curveExpressQH.FitType == ISupply.Model.eCurveFitType.ThroughPoint) - { - } - //璁$畻浜ょ偣浣嶇疆鍙傛暟 - var sectPoint = GetSectPoint(curveExpressQH, simularPoint, extendRatio); - if (sectPoint == null || IsZeroPoint(sectPoint)) - return -5; - - //璁$畻鐩镐技鐐圭殑杞��/鐩村緞 - return GetSimuByH(originValue, sectPoint.Y, simularPoint.Y); - } - - /// <summary> - /// ratioIgnore:浣滅敤 褰搒imularPoint瓒呭嚭鏇茬嚎鑼冨洿鏃�,鏇茬嚎鎵╁ぇ鐨勫�嶆暟 - /// </summary> - /// <param name="CurveExpress"></param> - /// <param name="simularPoint"></param> - /// <param name="ratioIgnore"></param> - /// <returns></returns> - public static Yw.Geometry.Point2d GetSectPoint(CurveExpress CurveExpress, Yw.Geometry.Point2d simularPoint, double ratioIgnore) - { - return GetSectPointGeneral(CurveExpress, simularPoint, 2, ratioIgnore); - } - - /// <summary> - /// ratioIgnore:浣滅敤 褰搒imularPoint瓒呭嚭鑼冨洿鏃�,鎵╁ぇ鐨勫�嶆暟 - /// </summary> - /// <param name="curveExpress"></param> - /// <param name="simularPoint"></param> - /// <param name="index"></param> - /// <param name="ratioIgnore"></param> - /// <returns></returns> - public static Yw.Geometry.Point2d GetSectPointGeneral(Yw.Ahart.CubicCurve curveExpress, Yw.Geometry.Point2d simularPoint, double index, double ratioIgnore) - { - var sectPoint = new Yw.Geometry.Point2d(0, 0); - if (curveExpress == null) - return sectPoint; - - if (simularPoint.X < 1) - return sectPoint; - var CurveExpressEx = new Yw.Ahart.CubicCurve(curveExpress); - //妫�鏌ユ槸鍚﹀湪鏇茬嚎鐨勫尯鍩熻寖鍥村唴 - double maxQ = CurveExpressEx.Max锛�; - double maxH = ISupply.Model.FitCurveHelper.GetFitPointY(CurveExpressEx, maxQ); - double k1 = maxH / Math.Pow(maxQ, index); - double k2 = simularPoint.Y / Math.Pow(simularPoint.X, index); - if (k1 > k2) - { - CurveExpressEx.Max = CurveExpressEx.Max * ratioIgnore;//鏀惧ぇ1.2鍊� - } - - if (Math.Abs(index - 1) < 0.01) - return GetSectPointLine(CurveExpressEx, simularPoint); - if (Math.Abs(index - 2) < 0.01) - return GetSectPointParabola(CurveExpressEx, simularPoint); - - //璁$畻绯绘暟K - double fixK = simularPoint.Y / Math.Pow(simularPoint.X, index); - if (fixK < 0.000001) - return sectPoint; - - //鎬濊矾鏄粠simularPoint寮�濮嬮�愪釜澧炲姞0.1,鐩村埌k鍊兼渶鎺ヨ繎fixK - double space = (CurveExpressEx.Max - simularPoint.X) / 1000; - double x = simularPoint.X; - double y, k; - do - { - x = x + space; - y = ISupply.Model.FitCurveHelper.GetFitPointY(CurveExpressEx, x); - k = y / Math.Pow(x, index); - } while (k > fixK); - - sectPoint.X = x; - sectPoint.Y = y; - return sectPoint; - } - /// <summary> - /// - /// </summary> - /// <param name="curveExpress"></param> - /// <param name="simularPoint"></param> - /// <returns></returns> - protected static Yw.Geometry.Point2d GetSectPointLine(Yw.Ahart.CubicCurve curveExpress, Yw.Geometry.Point2d simularPoint) - { - var sectPoint = new Yw.Geometry.Point2d(0, 0); - if (curveExpress == null) - return sectPoint; - - //璁$畻鐩寸嚎鐨凨 - if (simularPoint.X < 1) - return sectPoint; - double a = simularPoint.Y / simularPoint.X; - if (a < 0.0001) - return sectPoint; - - //鐐硅秺澶氳秺绮剧‘ - return GetSectPointLine(ISupply.Model.FitCurveHelper.GetPointList(curveExpress, 100), simularPoint); - } - - /// <summary> - /// 閫氳繃鐐箂imularPoint鍜岀偣(0,0)鐨勭洿绾�,涓庢洸绾緾urve鐨勪氦鐐�(娌℃湁,杩斿洖Point(0,0)) - /// </summary> - /// <param name="CurvePoints"></param> - /// <param name="simularPoint"></param> - /// <returns></returns> - protected static Yw.Geometry.Point2d GetSectPointLine(List<Yw.Geometry.Point2d> CurvePoints, Yw.Geometry.Point2d simularPoint) - { - var sectPoint = new Yw.Geometry.Point2d(0, 0); - if (CurvePoints == null || CurvePoints.Count < 2) - return sectPoint; - - //璁$畻鐩寸嚎鐨凨 - if (simularPoint.X < 1) - return sectPoint; - double a = simularPoint.Y / simularPoint.X; - if (a < 0.0001) - return sectPoint; - - //涓�2鐐硅繛鎴愮洿绾跨殑浜ょ偣,鍒ゆ柇浜ょ偣鏄惁鍦�2鐐逛箣闂�,鍗冲彲鏄洸绾跨殑浜ょ偣 - double b, c; - double x; - for (int i = 0; i < CurvePoints.Count - 1; i++) - { - CurveLineHelper.GetKandB(CurvePoints[i], CurvePoints[i + 1], out b, out c); - - /*瑙f柟绋� - * y=ax - * y=bx+c - */ - if (Math.Abs(a - b) < 0.001) - continue; - - x = c / (a - b); - if (ISupply.Common.PointHelper.IsMiddlePt(CurvePoints[i].X, CurvePoints[i + 1].X, x)) - { - sectPoint.X = x; - sectPoint.Y = a * x; - return sectPoint; - } - } - - return sectPoint; - } - - #region 鍙樻崲鍏紡 - private static double _speedIndexQ = 1; - /// <summary> - /// - /// </summary> - /// <returns></returns> - public static double GetIndexQ() { return _speedIndexQ; } - - private static double _speedIndexH = 2; - /// <summary> - /// - /// </summary> - /// <returns></returns> - public static double GetIndexH() { return _speedIndexH; } - - /// <summary> - /// 鐭ラ亾鍘熷閫熷害鍜屾敼鍙樺悗鐨勯�熷害,姹傚師濮嬫祦閲弌riginQ瀵瑰簲鏀瑰彉鍚庣殑娴侀噺 - /// </summary> - /// <param name="originQ"></param> - /// <param name="originN"></param> - /// <param name="changeN"></param> - /// <returns></returns> - public static double GetQ(double originQ, double originN, double changeN) - { - double ratio = originN / changeN; - return originQ / ratio; - } - - /// <summary> - /// 鐭ラ亾鍘熷閫熷害鍜屾敼鍙樺悗鐨勯�熷害,姹傚師濮嬫壃绋媜riginH瀵瑰簲鏀瑰彉鍚庣殑鎵▼ - /// </summary> - /// <param name="originH"></param> - /// <param name="originN"></param> - /// <param name="changeN"></param> - /// <returns></returns> - public static double GetH(double originH, double originN, double changeN) - { - double ratio = Math.Pow(originN / changeN, _speedIndexH); - return originH / ratio; - } - /// <summary> - /// 鐭ラ亾鍘熷閫熷害鍜屾敼鍙樺悗鐨勯�熷害,姹傚師濮嬪姛鐜噊riginP瀵瑰簲鏀瑰彉鍚庣殑鍔熺巼 - /// </summary> - /// <param name="originP"></param> - /// <param name="originN"></param> - /// <param name="changeN"></param> - /// <returns></returns> - public static double GetP(double originP, double originN, double changeN) - { - double ratio = Math.Pow(originN / changeN, _speedIndexH + _speedIndexQ); - return originP / ratio; - } - /// <summary> - /// 鐭ラ亾鍘熷閫熷害鍜屾敼鍙樺悗鐨勯�熷害,姹傚師濮嬫晥鐜噊riginE瀵瑰簲鏀瑰彉鍚庣殑鏁堢巼 - /// </summary> - /// <param name="originE"></param> - /// <param name="originN"></param> - /// <param name="changeN"></param> - /// <returns></returns> - public static double GetE(double originE, double originN, double changeN) - {//鍙橀�熷害鍏紡(P65椤�) - if (changeN >= originN) - return originE;//涓嶈兘澶勭悊杞�熷彉澶х殑鎯呭喌,涓嶇劧鏁堢巼鍙兘瓒呰繃100 - double ratio = originN / changeN; - double bilv = Math.Pow(ratio, 0.17); - return originE * 100 / (originE + (100 - originE) * bilv); - } - - /// <summary> - /// 鐭ラ亾鍘熷閫熷害,浠ュ強鍘熷鐨勬潹绋婬浠ュ強瀵瑰簲鐨勫彉閫熷悗鐨勬潹绋�,姹傚彉閫熷悗鐨勯�熷害 - /// </summary> - /// <param name="originSpeend"></param> - /// <param name="originH"></param> - /// <param name="changeH"></param> - /// <returns></returns> - public static double GetSimuByH(double originSpeend, double originH, double changeH) - { - double ratio = Math.Pow(originH / changeH, 1 / _speedIndexH); - return originSpeend / ratio; - } - #endregion - - /// <summary> - /// 鍒ゆ柇鏄惁鏄�0鐐�,鐢ㄤ簬鍒ゆ柇鍑芥暟鏄惁鎴愬姛杩斿洖 - /// </summary> - /// <param name="pt"></param> - /// <returns></returns> - public static bool IsZeroPoint(Yw.Geometry.Point2d pt) - { - if (pt.X < 0.01 && pt.Y < 0.01) - return true; - else - return false; - } - /// <summary> - /// - /// </summary> - /// <param name="points"></param> - /// <param name="maxY"></param> - /// <param name="minY"></param> - /// <returns></returns> - public static bool GetMinMaxPointY(List<Yw.Geometry.Point2d> points, out double maxY, out double minY) - { - if (points == null) - { - maxY = (minY = 0.0); - return false; - } - - List<Yw.Geometry.Point2d> fitPointsByExtend = ISupply.Model.FitCurveHelper.GetFitPointsByExtend(points, 50.0, 20); - maxY = fitPointsByExtend.Max(x => x.Y); - minY = fitPointsByExtend.Min(x => x.Y); - return true; - } - - /// <summary> - /// - /// </summary> - /// <param name="curve"></param> - /// <param name="maxY"></param> - /// <param name="minY"></param> - /// <returns></returns> - public static bool GetMinMaxPointY(Yw.Ahart.CubicCurve curve, out double maxY, out double minY) - { - if (curve == null) - { - maxY = (minY = 0.0); - return false; - } - var points = ISupply.Model.FitCurveHelper.GetPointList(curve); - if (points == null) - { - maxY = (minY = 0.0); - return false; - } - - List<Yw.Geometry.Point2d> fitPointsByExtend = ISupply.Model.FitCurveHelper.GetFitPointsByExtend(points, 50.0, 20); - maxY = fitPointsByExtend.Max(x => x.Y); - minY = fitPointsByExtend.Min(x => x.Y); - return true; - } - - /// <summary> - /// - /// </summary> - /// <param name="CurveExpress"></param> - /// <param name="simularPoint"></param> - /// <returns></returns> - public static Yw.Geometry.Point2d GetSectPointParabola(CurveExpress CurveExpress, Yw.Geometry.Point2d simularPoint) - { - Yw.Geometry.Point2d result = new Yw.Geometry.Point2d(0, 0); - if (CurveExpress == null) - { - return result; - } - - return GetSectPointParabola(FitCurveHelper.GetFitPointsByExtend(CurveExpress, 1.2, 50), simularPoint); - } - /// <summary> - /// - /// </summary> - /// <param name="CurvePoints"></param> - /// <param name="simularPoint"></param> - /// <returns></returns> - public static Yw.Geometry.Point2d GetSectPointParabola(List<Yw.Geometry.Point2d> CurvePoints, Yw.Geometry.Point2d simularPoint) - { - return GetSectPoint(CurvePoints, simularPoint, 0.0); - } - /// <summary> - /// - /// </summary> - /// <param name="CurvePoints"></param> - /// <param name="simularPoint"></param> - /// <param name="equipCurveZeroH"></param> - /// <returns></returns> - public static Yw.Geometry.Point2d GetSectPoint(List<Yw.Geometry.Point2d> CurvePoints, Yw.Geometry.Point2d simularPoint, double equipCurveZeroH) - { - Yw.Geometry.Point2d point = new Yw.Geometry.Point2d(0, 0); - if (CurvePoints == null || CurvePoints.Count < 2) - { - return point; - } - - if (simularPoint.X < CurvePoints.First().X) - { - return point; - } - - if (simularPoint.X < 0.1) - { - return point; - } - - double num = (simularPoint.Y - equipCurveZeroH) / (simularPoint.X * simularPoint.X); - if (num < 0.0001) - { - GetSectPointLn(CurvePoints, simularPoint); - } - - double num2 = 0.0; - for (int i = 0; i < CurvePoints.Count - 1; i++) - { - CurveLineHelper.GetKandB(CurvePoints[i], CurvePoints[i + 1], out double k, out double b, 1E-10); - b -= equipCurveZeroH; - num2 = k * k + 4.0 * num * b; - if (!(num2 < 0.0)) - { - double num3 = (k + Math.Sqrt(num2)) / (2.0 * num); - if (ISupply.Common.PointHelper.IsMiddlePt(CurvePoints[i].X, CurvePoints[i + 1].X, num3)) - { - point.X = num3; - point.Y = k * num3 + b + equipCurveZeroH; - return point; - } - - double num4 = (k - Math.Sqrt(num2)) / (2.0 * num); - if (ISupply.Common.PointHelper.IsMiddlePt(CurvePoints[i].X, CurvePoints[i + 1].X, num4)) - { - point.X = num4; - point.Y = k * num4 + b + equipCurveZeroH; - return point; - } - } - } - return point; - } - - /// <summary> - /// - /// </summary> - /// <param name="CurvePoints"></param> - /// <param name="simularPoint"></param> - /// <returns></returns> - protected static Yw.Geometry.Point2d GetSectPointLn(List<Yw.Geometry.Point2d> CurvePoints, Yw.Geometry.Point2d simularPoint) - { - Yw.Geometry.Point2d featPoint = new Yw.Geometry.Point2d(0, 0); - if (CurvePoints == null || CurvePoints.Count < 2) - { - return featPoint; - } - - double num = Math.Log10(simularPoint.Y) / Math.Log10(simularPoint.X); - if (num < 0.0001) - { - return featPoint; - } - - var list = new List<Yw.Geometry.Point2d>(); - for (int i = 0; i < CurvePoints.Count; i++) - { - if (CurvePoints[i].X > 1.0) - { - list.Add(new Yw.Geometry.Point2d(Math.Log10(CurvePoints[i].X), Math.Log10(CurvePoints[i].Y))); - } - } - - for (int j = 0; j < list.Count - 1; j++) - { - CurveLineHelper.GetKandB(list[j], list[j + 1], out double k, out double b); - if (!(Math.Abs(num - k) < 0.001)) - { - double num2 = b / (num - k); - if (ISupply.Common.PointHelper.IsMiddlePt(list[j].X, list[j + 1].X, num2)) - { - featPoint.X = Math.Pow(10.0, num2); - featPoint.Y = Math.Pow(10.0, num * num2); - return featPoint; - } - } - } - - return featPoint; - } - - - } -} diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/EtaAnaRecord4Pump.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/EtaAnaRecord4Pump.cs deleted file mode 100644 index e339963..0000000 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/EtaAnaRecord4Pump.cs +++ /dev/null @@ -1,61 +0,0 @@ -锘縩amespace PBS.WinFrmUI.Hydro.Dispatch.Model -{ - /// <summary> - /// 褰撳墠鏈烘车鑳芥晥鍒嗘瀽璁板綍 - /// </summary> - public class EtaAnaRecord4Pump - { - /// <summary> - /// - /// </summary> - public EtaAnaRecord4Pump() { } - - - /// <summary> - /// Machine鏍囪瘑 - /// </summary> - public long MachineID { get; set; } - /// <summary> - /// Machine鏍囪瘑 - /// </summary> - public long PumpID { get; set; } - - /// <summary> - /// PipeLine鏍囪瘑 - /// </summary> - public long PipeLineID { get; set; } - - /// <summary> - /// 鍚嶇О - /// </summary> - public string Name { get; set; } - /// <summary> - /// 鍔熺巼 - /// </summary> - public double? P { get; set; } - /// <summary> - /// 娴侀噺 - /// </summary> - public double? Q { get; set; } - /// <summary> - /// 鎵▼ - /// </summary> - public double? H { get; set; } - /// <summary> - /// 鏁堢巼 - /// </summary> - public double? E { get; set; } - /// <summary> - /// 鍗冨惃鑳借�� - /// </summary> - public double? WP { get; set; } - /// <summary> - /// 鍗曚綅鑳借�� - /// </summary> - public double? UWP { get; set; } - /// <summary> - /// 棰戠巼 - /// </summary> - public double HZ { get; set; } - } -} diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/EtaAnaRecord4Station.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/EtaAnaRecord4Station.cs deleted file mode 100644 index b6789c4..0000000 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/EtaAnaRecord4Station.cs +++ /dev/null @@ -1,54 +0,0 @@ -锘縰sing System.Collections.Generic; - -namespace PBS.WinFrmUI.Hydro.Dispatch.Model -{ - /// <summary> - /// 褰撳墠娉电珯鑳芥晥鍒嗘瀽璁板綍 - /// </summary> - public class EtaAnaRecord4Station - { - /// <summary> - /// - /// </summary> - public EtaAnaRecord4Station() { } - - - /// <summary> - /// 鍚嶇О - /// </summary> - public string Name { get; set; } - /// <summary> - /// 娴侀噺 - /// </summary> - public double? Q { get; set; } - /// <summary> - /// 鍔熺巼 - /// </summary> - public double? P { get; set; } - /// <summary> - /// 鎵▼ - /// </summary> - public double? H { get; set; } - /// <summary> - /// 鏁堢巼 - /// </summary> - public double? E { get; set; } - /// <summary> - /// 鍗冨惃鑳借�� - /// </summary> - public double? WP { get; set; } - /// <summary> - /// 鍗曚綅鑳借�� - /// </summary> - public double? UWP { get; set; } - /// <summary> - /// 杩愯鐘舵�� - /// </summary> - public int RunStatus { get; set; } - /// <summary> - /// 瀛愰」闆嗗悎 - /// </summary> - public List<EtaAnaRecord4Pump> Items { get; set; } - - } -} diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/MachineRunPara.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/MachineRunPara.cs index b373247..0e9b837 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/MachineRunPara.cs +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/dispatch/Input/MachineRunPara.cs @@ -1,6 +1,4 @@ -锘縰sing System.Collections.Generic; - -namespace PBS.WinFrmUI.Hydro.Dispatch.Model +锘縩amespace PBS.WinFrmUI.Hydro.Dispatch.Model { /// <summary> /// diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/SimuPumpViewModel.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/SimuPumpViewModel.cs index de5ba9c..d161b22 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/SimuPumpViewModel.cs +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/SimuPumpViewModel.cs @@ -1,10 +1,4 @@ -锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace PBS.WinFrmUI.Hydro +锘縩amespace PBS.WinFrmUI.Hydro { public class SimuPumpViewModel { diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/TimeValue.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/TimeValue.cs index 4a60140..b6a80a6 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/TimeValue.cs +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/06-schedule-simulation/simulationviewmodel/TimeValue.cs @@ -1,10 +1,4 @@ -锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace PBS.WinFrmUI.Hydro +锘縩amespace PBS.WinFrmUI.Hydro { public class TimeValue { diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.Designer.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.Designer.cs index 11e7132..6b5c5d2 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.Designer.cs +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.Designer.cs @@ -83,6 +83,16 @@ /// <summary> /// 鏌ユ壘 DevExpress.Utils.Svg.SvgImage 绫诲瀷鐨勬湰鍦板寲璧勬簮銆� /// </summary> + internal static DevExpress.Utils.Svg.SvgImage calcdate { + get { + object obj = ResourceManager.GetObject("calcdate", resourceCulture); + return ((DevExpress.Utils.Svg.SvgImage)(obj)); + } + } + + /// <summary> + /// 鏌ユ壘 DevExpress.Utils.Svg.SvgImage 绫诲瀷鐨勬湰鍦板寲璧勬簮銆� + /// </summary> internal static DevExpress.Utils.Svg.SvgImage connector { get { object obj = ResourceManager.GetObject("connector", resourceCulture); diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.resx b/WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.resx index 6c0ba05..227343a 100644 --- a/WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.resx +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/Properties/Resources.resx @@ -166,4 +166,7 @@ <data name="actions_reload" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\actions_reload.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value> </data> + <data name="calcdate" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\calcdate.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value> + </data> </root> \ No newline at end of file diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/Resources/calcdate.svg b/WinFrmUI/PBS.WinFrmUI.Hydro/Resources/calcdate.svg new file mode 100644 index 0000000..df04b30 --- /dev/null +++ b/WinFrmUI/PBS.WinFrmUI.Hydro/Resources/calcdate.svg @@ -0,0 +1,10 @@ +锘�<?xml version='1.0' encoding='UTF-8'?> +<svg x="0px" y="0px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" id="Layer_1" style="enable-background:new 0 0 16 16"> + <style type="text/css"> + .Blue{fill:#3475BA;} + .Black{fill:#737373;} +</style> + <path d="M0,1v14h16V1H0z M15,14H1V2h14V14z" class="Black" /> + <path d="M8,4C5.8,4,4,5.8,4,8s1.8,4,4,4s4-1.8,4-4S10.2,4,8,4z M8,11c-1.6,0-3-1.4-3-3s1.3-3,3-3s3,1.3,3,3 S9.7,11,8,11z" class="Blue" /> + <polygon points="8,8 8,6 7,6 7,9 10,9 10,8 " class="Black" /> +</svg> \ No newline at end of file -- Gitblit v1.9.3