From e39e22e12380551c79f99a9c96bb77d5dc3839b1 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期四, 28 十一月 2024 12:25:33 +0800
Subject: [PATCH] 工况分析优化

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj                                     |    1 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-calcu/01-result/HydroCalcuResult.cs                                    |   18 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.resx                                             |    3 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.Designer.cs  |   89 +--
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs           |  254 ++++-------
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/00-core/HydroMonitorValueExtensions.cs                         |   26 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.Designer.cs                 |   44 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs                               |   45 +
 WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.resx                                                             |   98 ++--
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/02-visual/02-list/SimulationVisualListHelper.cs |   30 -
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/03-statistics/HydroSingleWorkingLossStatisticsDlg.cs              |   40 +
 /dev/null                                                                                                 |  210 ----------
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs                         |  196 +++++++++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/Resources/pump_run_32.png                                             |    0 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.cs                              |    2 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.Designer.cs                                      |   10 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.resx         |   69 ---
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.cs                          |   19 
 WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.Designer.cs                                                      |   91 ++--
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueViewModel.cs                         |    5 
 20 files changed, 576 insertions(+), 674 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/02-visual/02-list/SimulationVisualListHelper.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/02-visual/02-list/SimulationVisualListHelper.cs
index c1e30c8..3e43f5f 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/02-visual/02-list/SimulationVisualListHelper.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/02-visual/02-list/SimulationVisualListHelper.cs
@@ -33,22 +33,14 @@
             {
                 return;
             }
-            _dict = new Dictionary<string, HydroVisualInfo>();
-            var allVisualList = this.HydroInfo.GetAllVisuals();
-            allVisualList?.ForEach(x => _dict.Add(x.Code, x));
+            _dict = hydroInfo?.GetVisualDict();
         }
-
-
 
         /// <summary>
         /// 鑾峰彇鍙瀛楀吀
         /// </summary>
         public Dictionary<string, HydroVisualInfo> GetVisualDict()
         {
-            if (_hydroInfo == null)
-            {
-                return default;
-            }
             return _dict;
         }
 
@@ -57,10 +49,6 @@
         /// </summary>
         public List<HydroVisualInfo> GetVisualList()
         {
-            if (_hydroInfo == null)
-            {
-                return default;
-            }
             return _dict?.Values.ToList();
         }
 
@@ -69,11 +57,7 @@
         /// </summary>
         public List<HydroNodeInfo> GetNodeList()
         {
-            if (_hydroInfo == null)
-            {
-                return default;
-            }
-            var nodes = _hydroInfo.GetAllNodes();
+            var nodes = _hydroInfo?.GetAllNodes();
             return nodes;
         }
 
@@ -82,11 +66,7 @@
         /// </summary>
         public List<HydroLinkInfo> GetLinkList()
         {
-            if (_hydroInfo == null)
-            {
-                return default;
-            }
-            var links = _hydroInfo.GetAllLinks();
+            var links = _hydroInfo?.GetAllLinks();
             return links;
         }
 
@@ -95,10 +75,6 @@
         /// </summary>
         public HydroVisualInfo GetVisual(string code)
         {
-            if (_hydroInfo == null)
-            {
-                return default;
-            }
             if (_dict == null || _dict.Count < 1)
             {
                 return default;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.Designer.cs
index bb13454..ede83c1 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.Designer.cs
@@ -37,20 +37,18 @@
             barBtnVisualList = new DevExpress.XtraBars.BarButtonItem();
             barBtnWorkingParallel = new DevExpress.XtraBars.BarButtonItem();
             barBtnSearch = new DevExpress.XtraBars.BarButtonItem();
-            barBtnSetGradingList = new DevExpress.XtraBars.BarButtonItem();
             barBtnApplyGradingList = new DevExpress.XtraBars.BarButtonItem();
             barBtnSetMark = new DevExpress.XtraBars.BarButtonItem();
-            barBtnSetMonitorValue = new DevExpress.XtraBars.BarButtonItem();
+            barBtnShowMonitorValue = new DevExpress.XtraBars.BarButtonItem();
             barCkMonitor = new DevExpress.XtraBars.BarCheckItem();
             barCkMark = new DevExpress.XtraBars.BarCheckItem();
             barCkFlowEffect = new DevExpress.XtraBars.BarCheckItem();
             barCkGrading = new DevExpress.XtraBars.BarCheckItem();
             barCkCalcu = new DevExpress.XtraBars.BarCheckItem();
             barBtnWorkingLossCurve = new DevExpress.XtraBars.BarButtonItem();
-            barBtnWorkingLossScale = new DevExpress.XtraBars.BarButtonItem();
+            barBtnWorkingLossStatistics = new DevExpress.XtraBars.BarButtonItem();
             barBtnWorkingPower = new DevExpress.XtraBars.BarButtonItem();
             barBtnWorkingAnaly = new DevExpress.XtraBars.BarButtonItem();
-            barBtnPumpParallel = new DevExpress.XtraBars.BarButtonItem();
             barBtnWorkingEvaluation = new DevExpress.XtraBars.BarButtonItem();
             barBtnSetVisualVisible = new DevExpress.XtraBars.BarButtonItem();
             barCkDecorator = new DevExpress.XtraBars.BarCheckItem();
@@ -59,8 +57,8 @@
             ribbonPageGroup6 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             ribbonPageGroup7 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
-            ribbonPageGroup5 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             ribbonPageGroup9 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+            ribbonPageGroup2 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             ribbonPageGroup4 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             tabPane1 = new DevExpress.XtraBars.Navigation.TabPane();
             tabPageBimface = new DevExpress.XtraBars.Navigation.TabNavigationPage();
@@ -82,7 +80,7 @@
             // 
             ribbonControl1.ExpandCollapseItem.Id = 0;
             ribbonControl1.ItemPanelStyle = DevExpress.XtraBars.Ribbon.RibbonItemPanelStyle.Classic;
-            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnExportInp, barBtnVisualList, barBtnWorkingParallel, barBtnSearch, barBtnSetGradingList, barBtnApplyGradingList, barBtnSetMark, barBtnSetMonitorValue, barCkMonitor, barCkMark, barCkFlowEffect, barCkGrading, barCkCalcu, barBtnWorkingLossCurve, barBtnWorkingLossScale, barBtnWorkingPower, barBtnWorkingAnaly, barBtnPumpParallel, barBtnWorkingEvaluation, barBtnSetVisualVisible, barCkDecorator });
+            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnExportInp, barBtnVisualList, barBtnWorkingParallel, barBtnSearch, barBtnApplyGradingList, barBtnSetMark, barBtnShowMonitorValue, barCkMonitor, barCkMark, barCkFlowEffect, barCkGrading, barCkCalcu, barBtnWorkingLossCurve, barBtnWorkingLossStatistics, barBtnWorkingPower, barBtnWorkingAnaly, barBtnWorkingEvaluation, barBtnSetVisualVisible, barCkDecorator });
             ribbonControl1.Location = new Point(0, 0);
             ribbonControl1.MaxItemId = 80;
             ribbonControl1.Name = "ribbonControl1";
@@ -101,7 +99,6 @@
             barBtnExportInp.Id = 4;
             barBtnExportInp.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnExportInp.ImageOptions.SvgImage");
             barBtnExportInp.Name = "barBtnExportInp";
-            barBtnExportInp.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
             barBtnExportInp.ItemClick += barBtnExportInp_ItemClick;
             // 
             // barBtnVisualList
@@ -116,7 +113,8 @@
             // 
             barBtnWorkingParallel.Caption = "姘存车鍒嗘瀽";
             barBtnWorkingParallel.Id = 31;
-            barBtnWorkingParallel.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnWorkingParallel.ImageOptions.SvgImage");
+            barBtnWorkingParallel.ImageOptions.Image = Xhs.Core.Properties.Resources.pump_run_32;
+            barBtnWorkingParallel.ImageOptions.LargeImage = Xhs.Core.Properties.Resources.pump_run_32;
             barBtnWorkingParallel.Name = "barBtnWorkingParallel";
             barBtnWorkingParallel.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
             barBtnWorkingParallel.ItemClick += barBtnAnaly_ItemClick;
@@ -129,14 +127,6 @@
             barBtnSearch.Name = "barBtnSearch";
             barBtnSearch.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
             barBtnSearch.ItemClick += barBtnSearch_ItemClick;
-            // 
-            // barBtnSetGradingList
-            // 
-            barBtnSetGradingList.Caption = "閰嶇疆";
-            barBtnSetGradingList.Id = 34;
-            barBtnSetGradingList.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnSetGradingList.ImageOptions.SvgImage");
-            barBtnSetGradingList.Name = "barBtnSetGradingList";
-            barBtnSetGradingList.ItemClick += barBtnSetGradingList_ItemClick;
             // 
             // barBtnApplyGradingList
             // 
@@ -153,17 +143,16 @@
             barBtnSetMark.Id = 40;
             barBtnSetMark.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnSetMark.ImageOptions.SvgImage");
             barBtnSetMark.Name = "barBtnSetMark";
-            barBtnSetMark.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
             barBtnSetMark.ItemClick += barBtnSetMark_ItemClick;
             // 
-            // barBtnSetMonitorValue
+            // barBtnShowMonitorValue
             // 
-            barBtnSetMonitorValue.Caption = "鐩戞祴鍊�";
-            barBtnSetMonitorValue.Id = 57;
-            barBtnSetMonitorValue.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnSetMonitorValue.ImageOptions.SvgImage");
-            barBtnSetMonitorValue.Name = "barBtnSetMonitorValue";
-            barBtnSetMonitorValue.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
-            barBtnSetMonitorValue.ItemClick += barBtnSetMonitorValue_ItemClick;
+            barBtnShowMonitorValue.Caption = "鐩戞祴鍊�";
+            barBtnShowMonitorValue.Id = 57;
+            barBtnShowMonitorValue.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnShowMonitorValue.ImageOptions.SvgImage");
+            barBtnShowMonitorValue.Name = "barBtnShowMonitorValue";
+            barBtnShowMonitorValue.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
+            barBtnShowMonitorValue.ItemClick += barBtnShowMonitorValue_ItemClick;
             // 
             // barCkMonitor
             // 
@@ -214,14 +203,14 @@
             barBtnWorkingLossCurve.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
             barBtnWorkingLossCurve.ItemClick += barBtnWorkingLossCurve_ItemClick;
             // 
-            // barBtnWorkingLossScale
+            // barBtnWorkingLossStatistics
             // 
-            barBtnWorkingLossScale.Caption = "鎹熷け姣斾緥";
-            barBtnWorkingLossScale.Id = 70;
-            barBtnWorkingLossScale.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnWorkingLossScale.ImageOptions.SvgImage");
-            barBtnWorkingLossScale.Name = "barBtnWorkingLossScale";
-            barBtnWorkingLossScale.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
-            barBtnWorkingLossScale.ItemClick += barBtnWorkingLossScale_ItemClick;
+            barBtnWorkingLossStatistics.Caption = "鎹熷け姣斾緥";
+            barBtnWorkingLossStatistics.Id = 70;
+            barBtnWorkingLossStatistics.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnWorkingLossScale.ImageOptions.SvgImage");
+            barBtnWorkingLossStatistics.Name = "barBtnWorkingLossStatistics";
+            barBtnWorkingLossStatistics.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
+            barBtnWorkingLossStatistics.ItemClick += barBtnWorkingLossStatistics_ItemClick;
             // 
             // barBtnWorkingPower
             // 
@@ -241,14 +230,6 @@
             barBtnWorkingAnaly.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large;
             barBtnWorkingAnaly.ItemClick += barBtnWorkingAnaly_ItemClick;
             // 
-            // barBtnPumpParallel
-            // 
-            barBtnPumpParallel.Caption = "骞惰仈妯℃嫙";
-            barBtnPumpParallel.Id = 73;
-            barBtnPumpParallel.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnParallel.ImageOptions.SvgImage");
-            barBtnPumpParallel.Name = "barBtnPumpParallel";
-            barBtnPumpParallel.ItemClick += barBtnParallel_ItemClick;
-            // 
             // barBtnWorkingEvaluation
             // 
             barBtnWorkingEvaluation.Caption = "绮惧害璇勪及";
@@ -264,7 +245,6 @@
             barBtnSetVisualVisible.Id = 77;
             barBtnSetVisualVisible.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnSetVisualVisible.ImageOptions.SvgImage");
             barBtnSetVisualVisible.Name = "barBtnSetVisualVisible";
-            barBtnSetVisualVisible.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
             barBtnSetVisualVisible.ItemClick += barBtnSetVisualVisible_ItemClick;
             // 
             // barCkDecorator
@@ -275,12 +255,11 @@
             barCkDecorator.Id = 78;
             barCkDecorator.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barCkDecorator.ImageOptions.SvgImage");
             barCkDecorator.Name = "barCkDecorator";
-            barCkDecorator.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
             barCkDecorator.CheckedChanged += barCkDecorator_CheckedChanged;
             // 
             // ribbonPage1
             // 
-            ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { pageGroupModel, ribbonPageGroup6, ribbonPageGroup1, ribbonPageGroup7, ribbonPageGroup5, ribbonPageGroup9 });
+            ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { pageGroupModel, ribbonPageGroup6, ribbonPageGroup1, ribbonPageGroup7, ribbonPageGroup9, ribbonPageGroup2 });
             ribbonPage1.Name = "ribbonPage1";
             ribbonPage1.Text = "ribbonPage1";
             // 
@@ -304,7 +283,6 @@
             // 
             // ribbonPageGroup1
             // 
-            ribbonPageGroup1.ItemLinks.Add(barBtnSetGradingList);
             ribbonPageGroup1.ItemLinks.Add(barBtnApplyGradingList);
             ribbonPageGroup1.ItemLinks.Add(barCkGrading);
             ribbonPageGroup1.Name = "ribbonPageGroup1";
@@ -312,28 +290,27 @@
             // 
             // ribbonPageGroup7
             // 
-            ribbonPageGroup7.ItemLinks.Add(barBtnSetMonitorValue);
+            ribbonPageGroup7.ItemLinks.Add(barBtnShowMonitorValue);
             ribbonPageGroup7.ItemLinks.Add(barCkMonitor);
             ribbonPageGroup7.Name = "ribbonPageGroup7";
             ribbonPageGroup7.Text = "鐩戞祴";
             // 
-            // ribbonPageGroup5
-            // 
-            ribbonPageGroup5.ItemLinks.Add(barBtnPumpParallel);
-            ribbonPageGroup5.Name = "ribbonPageGroup5";
-            ribbonPageGroup5.Text = "姘存车";
-            // 
             // ribbonPageGroup9
             // 
-            ribbonPageGroup9.ItemLinks.Add(barBtnExportInp);
             ribbonPageGroup9.ItemLinks.Add(barBtnWorkingParallel);
             ribbonPageGroup9.ItemLinks.Add(barBtnWorkingEvaluation);
             ribbonPageGroup9.ItemLinks.Add(barBtnWorkingPower);
             ribbonPageGroup9.ItemLinks.Add(barBtnWorkingLossCurve);
-            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingLossScale);
+            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingLossStatistics);
             ribbonPageGroup9.ItemLinks.Add(barBtnWorkingAnaly);
             ribbonPageGroup9.Name = "ribbonPageGroup9";
             ribbonPageGroup9.Text = "鍒嗘瀽";
+            // 
+            // ribbonPageGroup2
+            // 
+            ribbonPageGroup2.ItemLinks.Add(barBtnExportInp);
+            ribbonPageGroup2.Name = "ribbonPageGroup2";
+            ribbonPageGroup2.Text = "鏇村";
             // 
             // ribbonPageGroup4
             // 
@@ -452,13 +429,12 @@
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup pageGroupModel;
         private DevExpress.XtraBars.Docking.DockPanel docPnlBottom;
         private DevExpress.XtraBars.Docking.ControlContainer controlContainerBottom;
-        private DevExpress.XtraBars.BarButtonItem barBtnSetGradingList;
         private DevExpress.XtraBars.BarButtonItem barBtnApplyGradingList;
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
         private DevExpress.XtraBars.BarButtonItem barBtnSetMark;
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup6;
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup7;
-        private DevExpress.XtraBars.BarButtonItem barBtnSetMonitorValue;
+        private DevExpress.XtraBars.BarButtonItem barBtnShowMonitorValue;
         private DevExpress.XtraBars.BarCheckItem barCkMonitor;
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup9;
         private DevExpress.XtraBars.BarCheckItem barCkMark;
@@ -466,13 +442,12 @@
         private DevExpress.XtraBars.BarCheckItem barCkGrading;
         private DevExpress.XtraBars.BarCheckItem barCkCalcu;
         private DevExpress.XtraBars.BarButtonItem barBtnWorkingLossCurve;
-        private DevExpress.XtraBars.BarButtonItem barBtnWorkingLossScale;
+        private DevExpress.XtraBars.BarButtonItem barBtnWorkingLossStatistics;
         private DevExpress.XtraBars.BarButtonItem barBtnWorkingPower;
         private DevExpress.XtraBars.BarButtonItem barBtnWorkingAnaly;
-        private DevExpress.XtraBars.BarButtonItem barBtnPumpParallel;
         private DevExpress.XtraBars.BarButtonItem barBtnWorkingEvaluation;
         private DevExpress.XtraBars.BarButtonItem barBtnSetVisualVisible;
         private DevExpress.XtraBars.BarCheckItem barCkDecorator;
-        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup5;
+        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup2;
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs
index 4c6e647..77e20f8 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs
@@ -94,17 +94,18 @@
                 _bimfaceCtrl = new XhsProjectSimulationBimfaceCtrl();
                 _bimfaceCtrl.Dock = DockStyle.Fill;
                 await _bimfaceCtrl.InitialData(_project, _projectSite);
-                _bimfaceCtrl.LoadCompletedEvent += () =>
+                _bimfaceCtrl.LoadCompletedEvent += async () =>
                 {//view鍔犺浇瀹屾垚浜嬩欢
                     if (_hydroInfo == null)
                     {
                         return;
                     }
+                    await InitialWorking();
                     this.barCkDecorator.Checked = false;
                     this.barCkMonitor.Checked = true;
                     this.barCkGrading.Checked = true;
                     this.barCkCalcu.Checked = true;
-                    CalcuWorking();
+
                 };
                 _bimfaceCtrl.HydroMouseLeftClickEvent += (code) =>
                 {//榧犳爣宸﹂敭鐐瑰嚮浜嬩欢
@@ -776,36 +777,6 @@
             return _gradingHelper;
         }
 
-        //璁剧疆棰滆壊鍒嗙骇鍒楄〃
-        private async void SetGradingList()
-        {
-            if (_hydroInfo == null)
-            {
-                return;
-            }
-            var gradingHelper = await GetGradingHelper();
-            var allGradingList = await gradingHelper.GetGradingList();
-            var dlg = new SetHydroGradingTreeDlg();
-            dlg.SetBindingData(_hydroInfo, allGradingList);
-            dlg.ReloadDataEvent += (list) =>
-            {
-                gradingHelper.SetGradingList(list);
-                gradingHelper.Set();
-            };
-            dlg.ApplyDataEvent += (catalog, propName) =>
-            {
-                gradingHelper.UpdateApply(catalog, propName);
-                gradingHelper.Set();
-            };
-            dlg.ShowDialog();
-        }
-
-        //閰嶇疆棰滆壊鍒嗙骇
-        private void barBtnSetGradingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
-        {
-            SetGradingList();
-        }
-
         //搴旂敤棰滆壊鍒嗙骇鍒楄〃
         private async void ApplyGradingList()
         {
@@ -930,42 +901,6 @@
             return _monitorHelper;
         }
 
-        //璁剧疆鐩戞祴鐐瑰垪琛�
-        private async void SetMonitorList(HydroVisualInfo visual)
-        {
-            if (_hydroInfo == null)
-            {
-                return;
-            }
-            var monitorHelper = GetMonitorHelper();
-            var allMonitorList = await monitorHelper.Get();
-            var dlg = new SetHydroMonitorListDlg();
-            dlg.SetBindingData(_hydroInfo, visual, allMonitorList);
-            dlg.ReloadDataEvent += async (list) =>
-            {
-                var bol = await BLLFactory<Yw.BLL.HydroMonitor>.Instance.Save(_hydroInfo.ID, visual.Code, list);
-                if (!bol)
-                {
-                    TipFormHelper.ShowError("璁剧疆澶辫触锛�");
-                    return;
-                }
-                TipFormHelper.ShowSucceed("璁剧疆鎴愬姛锛�");
-                var monitorList = await monitorHelper.Update(visual.Code);
-                var monitorValueHelper = GetMonitorValueHelper();
-                monitorValueHelper.Update(visual.Code, monitorList);
-                var monitorMarkerHelper = await GetMonitorMarkerHelper();
-                monitorMarkerHelper.Update(visual.Code, monitorList);
-                monitorMarkerHelper.Set();
-            };
-            dlg.ShowDialog();
-        }
-
-        //璁剧疆鐩戞祴鐐�
-        private void barBtnSetMonitor_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
-        {
-            SetMonitorList(_visual);
-        }
-
         #endregion
 
         #region 鐩戞祴鍊�
@@ -999,6 +934,7 @@
             {
                 _monitorValueListCtrl = new HydroMonitorValueListCtrl();
                 _monitorValueListCtrl.Dock = DockStyle.Fill;
+                _monitorValueListCtrl.SetViewBoard();
                 _monitorValueListCtrl.HydroViewEvent += (code) =>
                 {
                     var visualListHelper = GetVisualListHelper();
@@ -1045,8 +981,8 @@
             monitorValueListCtrl.SetBindingData(allMonitorValueList);
         }
 
-        //璁剧疆鐩戞祴鍊�
-        private void barBtnSetMonitorValue_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        //鏄剧ず鐩戞祴鍊�
+        private void barBtnShowMonitorValue_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
             ShowMonitorValueListCtrl();
         }
@@ -1340,59 +1276,6 @@
 
         #endregion
 
-        #region 宸ュ喌璁$畻
-
-        //璁$畻宸ュ喌
-        private async void CalcuWorking()
-        {
-            if (_hydroInfo == null)
-            {
-                return;
-            }
-            if (_working == null)
-            {
-                return;
-            }
-            _hydroInfo.UpdateWorkingInfo(_working.WorkingInfo);
-
-            var workingHelper = GetWorkingHelper();
-            //鏍¢獙
-            var checkResult = _hydroInfo.Check();
-            if (!checkResult.Succeed)
-            {
-                workingHelper.InitialData(_hydroInfo, _working, checkResult, null);
-                ShowCheckCtrl(checkResult);
-                TipFormHelper.ShowError("鏍¢獙澶辫触锛岃妫�鏌ュ悗閲嶈瘯");
-                return;
-            }
-            //璁$畻
-            var calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
-            workingHelper.InitialData(_hydroInfo, _working, checkResult, calcuResult);
-            if (calcuResult.Succeed)
-            {
-                if (calcuResult.WainingList != null && calcuResult.WainingList.Count > 0)
-                {
-                    ShowCalcuWarningCtrl(calcuResult);
-                }
-                TipFormHelper.ShowSucceed("璁$畻鎴愬姛锛�");
-            }
-            else
-            {
-                ShowCalcuFailedCtrl(calcuResult);
-                TipFormHelper.ShowError("璁$畻澶辫触锛�");
-            }
-
-            #region 璁$畻鏍囩
-
-            var calcuResultLabelHelper = await GetCalcuResultLabelHelper();
-            calcuResultLabelHelper.Set();
-
-            #endregion
-        }
-
-
-        #endregion
-
         #region 绠$綉淇
 
         //淇绠$綉
@@ -1598,6 +1481,50 @@
             return workingHelper.CalcuResult;
         }
 
+        //鍒濆鍖栧伐鍐�
+        private async Task InitialWorking()
+        {
+            if (_hydroInfo == null)
+            {
+                return;
+            }
+            if (_working == null)
+            {
+                return;
+            }
+            _hydroInfo.UpdateWorkingInfo(_working.WorkingInfo);
+            var monitorValueHelper = GetMonitorValueHelper();
+            var allMonitorValueList = await monitorValueHelper.Get();
+            allMonitorValueList.UpdateMonitorValue(_working.MonitorInfo);
+
+            var workingHelper = GetWorkingHelper();
+            //鏍¢獙
+            var checkResult = _hydroInfo.Check();
+            if (!checkResult.Succeed)
+            {
+                workingHelper.InitialData(_hydroInfo, _working, checkResult, null);
+                ShowCheckCtrl(checkResult);
+                TipFormHelper.ShowError("鏍¢獙澶辫触锛�");
+                return;
+            }
+            //璁$畻
+            var calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
+            workingHelper.InitialData(_hydroInfo, _working, checkResult, calcuResult);
+            if (calcuResult.Succeed)
+            {
+                if (calcuResult.WainingList != null && calcuResult.WainingList.Count > 0)
+                {
+                    ShowCalcuWarningCtrl(calcuResult);
+                }
+            }
+            else
+            {
+                ShowCalcuFailedCtrl(calcuResult);
+                TipFormHelper.ShowError("璁$畻澶辫触锛�");
+            }
+
+        }
+
         #endregion
 
         #region 宸ュ喌鍒嗘瀽
@@ -1709,59 +1636,60 @@
 
         #endregion
 
-        #region 宸ュ喌鑳芥晥
-
+        //鑳芥晥鍒嗘瀽
         private void barBtnWorkingPower_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
-            XtraMessageBox.Show("姝e湪寮�鍙戜腑锛屾暚璇锋湡寰咃紒");
-        }
-
-        #endregion
-
-        #region 鎹熷け鏇茬嚎
-
-        private void barBtnWorkingLossCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
-        {
-            if (_visual == null)
-            {
-                XtraMessageBox.Show("璇烽�夋嫨鑺傜偣鍚庨噸璇曪紒");
-                return;
-            }
-            if (!(_visual is Yw.Model.HydroNodeInfo))
-            {
-                XtraMessageBox.Show("璇烽�夋嫨鑺傜偣鍚庨噸璇曪紒");
-                return;
-            }
-            var network = _hydroInfo.ToNetwork();
-            var calcuResult = network.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
-            var allNodeList = network.GetAllNodes();
-            var node = allNodeList.Find(x => x.Id == _visual.Code);
-            var allPathList = network.AnalyzeDownstreamPath(node, calcuResult);
-            var allEpaLossList = network.GetChartNodeByPathLinks(allPathList, calcuResult);
-            var allLossList = allEpaLossList?.Select(x => new HydroNodeLossViewModel(x)).ToList();
-            var dlg = new HydroSingleLossCurveDlg();
-            dlg.SetBindingData(allLossList);
+            var workingHelper = GetWorkingHelper();
+            var dlg = new SimulationSingleWorkingEnergyDlg();
+            dlg.SetBindingData(workingHelper.HydroInfo, workingHelper.CalcuResult);
             dlg.ShowDialog();
         }
 
-        #endregion
-
-        #region 鎹熷け姣斾緥
-
-        private void barBtnWorkingLossScale_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        //鎹熷け鏇茬嚎
+        private void barBtnWorkingLossCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
-            XtraMessageBox.Show("姝e湪寮�鍙戜腑锛屾暚璇锋湡寰咃紒");
+            var workingHelper = GetWorkingHelper();
+            if (!workingHelper.Initialized)
+            {
+                TipFormHelper.ShowError("宸ュ喌璁$畻澶辫触锛�");
+                return;
+            }
+            if (_visual == null)
+            {
+                TipFormHelper.ShowWarn("璇烽�夋嫨鏋勪欢锛�");
+                return;
+            }
+            HydroVisualInfo visual = _visual;
+            if (_visual is HydroLinkInfo linkInfo)
+            {
+                var visualListHelper = GetVisualListHelper();
+                visual = visualListHelper.GetVisual(linkInfo.StartCode);
+            }
+
+            var dlg = new HydroSingleLossCurveDlg();
+            dlg.SetBindingData(workingHelper.HydroInfo, workingHelper.CalcuResult, visual);
+            dlg.ShowDialog();
         }
 
-        #endregion
+        //鎹熷け缁熻
+        private void barBtnWorkingLossStatistics_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            var workingHelper = GetWorkingHelper();
+            if (!workingHelper.Initialized)
+            {
+                TipFormHelper.ShowError("宸ュ喌璁$畻澶辫触锛�");
+                return;
+            }
+            var dlg = new HydroSingleWorkingLossStatisticsDlg();
+            dlg.SetBindingData(workingHelper.HydroInfo, workingHelper.CalcuResult);
+            dlg.ShowDialog();
+        }
 
-        #region 缁煎悎鍒嗘瀽
+        //缁煎悎鍒嗘瀽
         private void barBtnWorkingAnaly_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
             XtraMessageBox.Show("姝e湪寮�鍙戜腑锛屾暚璇锋湡寰咃紒");
         }
-
-        #endregion
 
         #endregion
 
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.resx
index 9221c3c..3949aaa 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.resx
@@ -168,25 +168,6 @@
         MjJ6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
 </value>
   </data>
-  <data name="barBtnWorkingParallel.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMYCAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iQ3JlYXRlX0Z1bGxfU3RhY2tlZF9MaW5lX0NoYXJ0X05vX01hcmtlcnMi
-        IHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRl
-        eHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuUmVk
-        e2ZpbGw6I0QxMUMxQzt9Cjwvc3R5bGU+DQogIDxyZWN0IHg9IjIiIHk9IjQiIHdpZHRoPSIyNiIgaGVp
-        Z2h0PSIyIiBjbGFzcz0iUmVkIiAvPg0KICA8cG9seWdvbiBwb2ludHM9IjEuNywxMy45IDEuNywxMy45
-        IDIuMywxMiAxNCwxNS45IDI3LjcsMTIgMjguMywxMy45IDE0LDE4IDEuNywxMy45ICIgY2xhc3M9Illl
-        bGxvdyIgLz4NCiAgPHBhdGggZD0iTTIuNCwyOS45TDIuNCwyOS45TDIuNCwyOS45TDIuNCwyOS45TDIu
-        NCwyOS45eiBNMS42LDI4LjFMMTMuOSwyMmwxNC40LDQuMUwyNy43LDI4bC0xMy42LTMuOUwyLjQsMjku
-        OSAgTDEuNiwyOC4xTDEuNiwyOC4xeiIgY2xhc3M9IkJsdWUiIC8+DQo8L3N2Zz4L
-</value>
-  </data>
   <data name="barBtnSearch.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
@@ -211,35 +192,6 @@
         ICAgYzAuOS0zLDMuNy01LDctNXM2LjEsMiw3LDVDMjkuMSwyNiwyNi4zLDI4LDIzLDI4eiBNMjMsMjZj
         LTEuNywwLTMtMS4zLTMtM3MxLjMtMywzLTNzMywxLjMsMywzUzI0LjcsMjYsMjMsMjZ6IiBjbGFzcz0i
         QmxhY2siIC8+DQogIDwvZz4NCjwvc3ZnPgs=
-</value>
-  </data>
-  <data name="barBtnSetGradingList.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAAsFAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
-        LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3
-        RDc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7b3Bh
-        Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tm
-        aWxsOiNGRkIxMTU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iRWRpdENvbG9ycyI+DQogICAgPHBhdGggZD0i
-        TTI5LDBIMUMwLjUsMCwwLDAuNSwwLDF2MjhjMCwwLjUsMC41LDEsMSwxaDI4YzAuNSwwLDEtMC41LDEt
-        MVYxQzMwLDAuNSwyOS41LDAsMjksMHogTTI4LDI4SDJWMmgyNlYyOHoiIGNsYXNzPSJCbGFjayIgLz4N
-        CiAgICA8cGF0aCBkPSJNMTAsMTBINFY0aDZWMTB6IE0xOCw0aC02djZoNlY0eiBNMTAsMTJINHY2aDZW
-        MTJ6IiBjbGFzcz0iWWVsbG93IiAvPg0KICAgIDxwYXRoIGQ9Ik0xMCwyNkg0di02aDZWMjZ6IE0xOCwx
-        MmgtNnY2aDZWMTJ6IiBjbGFzcz0iR3JlZW4iIC8+DQogICAgPHBhdGggZD0iTTI2LDEwaC02VjRoNlYx
-        MHogTTI2LDEyaC02djZoNlYxMnoiIGNsYXNzPSJSZWQiIC8+DQogICAgPHBhdGggZD0iTTI2LDI2aC02
-        di02aDZWMjZ6IE0xOCwyMGgtNnY2aDZWMjB6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgICA8ZyBjbGFzcz0i
-        c3QxIj4NCiAgICAgIDxyZWN0IHg9IjQiIHk9IjEyIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0i
-        R3JlZW4iIC8+DQogICAgICA8cGF0aCBkPSJNMTgsMTBoLTZWNGg2VjEweiBNMjYsMjBoLTZ2Nmg2VjIw
-        eiIgY2xhc3M9IlJlZCIgLz4NCiAgICAgIDxwYXRoIGQ9Ik0yNiwxOGgtNnYtNmg2VjE4eiBNMTgsMTJo
-        LTZ2Nmg2VjEyeiIgY2xhc3M9IkJsdWUiIC8+DQogICAgPC9nPg0KICAgIDxnIGNsYXNzPSJzdDEiPg0K
-        ICAgICAgPHJlY3QgeD0iMjAiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iQmx1ZSIg
-        Lz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPgs=
 </value>
   </data>
   <data name="barBtnApplyGradingList.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -283,7 +235,7 @@
         LDE4eiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
 </value>
   </data>
-  <data name="barBtnSetMonitorValue.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+  <data name="barBtnShowMonitorValue.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
@@ -407,25 +359,6 @@
         eiBNMzAsMjZIMlY2aDI4VjI2eiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDxwb2x5bGluZSBwb2ludHM9
         IjQsMjAgOCwxNiAxMCwxOCAxNiwxMiAxOCwxNCAyNCw4IDI4LDEyIDI4LDE1IDI0LDExIDE4LDE3IDE2
         LDE1IDEwLDIxIDgsMTkgNCwyMyA0LDIwICAiIGNsYXNzPSJSZWQiIC8+DQogIDwvZz4NCjwvc3ZnPgs=
-</value>
-  </data>
-  <data name="barBtnParallel.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMYCAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iQ3JlYXRlX0Z1bGxfU3RhY2tlZF9MaW5lX0NoYXJ0X05vX01hcmtlcnMi
-        IHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRl
-        eHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuUmVk
-        e2ZpbGw6I0QxMUMxQzt9Cjwvc3R5bGU+DQogIDxyZWN0IHg9IjIiIHk9IjQiIHdpZHRoPSIyNiIgaGVp
-        Z2h0PSIyIiBjbGFzcz0iUmVkIiAvPg0KICA8cG9seWdvbiBwb2ludHM9IjEuNywxMy45IDEuNywxMy45
-        IDIuMywxMiAxNCwxNS45IDI3LjcsMTIgMjguMywxMy45IDE0LDE4IDEuNywxMy45ICIgY2xhc3M9Illl
-        bGxvdyIgLz4NCiAgPHBhdGggZD0iTTIuNCwyOS45TDIuNCwyOS45TDIuNCwyOS45TDIuNCwyOS45TDIu
-        NCwyOS45eiBNMS42LDI4LjFMMTMuOSwyMmwxNC40LDQuMUwyNy43LDI4bC0xMy42LTMuOUwyLjQsMjku
-        OSAgTDEuNiwyOC4xTDEuNiwyOC4xeiIgY2xhc3M9IkJsdWUiIC8+DQo8L3N2Zz4L
 </value>
   </data>
   <data name="barBtnWorkingEvaluation.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
index 2aeb399..645ac99 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
@@ -102,6 +102,7 @@
     <Content Include="map\gaode\js\xhs_base64.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <None Include="Resources\pump_run_32.png" />
     <None Include="Resources\Cancel.svg" />
     <None Include="Resources\Close32.png" />
     <None Include="Resources\Folder.svg" />
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.Designer.cs
index 7553532..1d17410 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.Designer.cs
@@ -111,6 +111,16 @@
         }
         
         /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        internal static System.Drawing.Bitmap pump_run_32 {
+            get {
+                object obj = ResourceManager.GetObject("pump_run_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
         ///   鏌ユ壘 DevExpress.Utils.Svg.SvgImage 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
         /// </summary>
         internal static DevExpress.Utils.Svg.SvgImage Remove {
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.resx
index 385eb81..a3132ae 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Properties/Resources.resx
@@ -145,4 +145,7 @@
   <data name="IncomingCall" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\IncomingCall.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
   </data>
+  <data name="pump_run_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\pump_run_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Resources/pump_run_32.png b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Resources/pump_run_32.png
new file mode 100644
index 0000000..cec7ed9
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/Resources/pump_run_32.png
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.Designer.cs
index 2a4dcf5..5ec72a8 100644
--- a/WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.Designer.cs
@@ -28,63 +28,62 @@
         /// </summary>
         private void InitializeComponent()
         {
-            this.components = new System.ComponentModel.Container();
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TipForm));
-            this.labText = new DevExpress.XtraEditors.LabelControl();
-            this.img32 = new DevExpress.Utils.ImageCollection(this.components);
-            this.timer1 = new System.Windows.Forms.Timer(this.components);
-            ((System.ComponentModel.ISupportInitialize)(this.img32)).BeginInit();
-            this.SuspendLayout();
+            components = new Container();
+            ComponentResourceManager resources = new ComponentResourceManager(typeof(TipForm));
+            labText = new LabelControl();
+            img32 = new ImageCollection(components);
+            timer1 = new System.Windows.Forms.Timer(components);
+            ((ISupportInitialize)img32).BeginInit();
+            SuspendLayout();
             // 
             // labText
             // 
-            this.labText.AllowHtmlString = true;
-            this.labText.Appearance.BackColor = System.Drawing.Color.White;
-            this.labText.Appearance.FontSizeDelta = 1;
-            this.labText.Appearance.Options.UseBackColor = true;
-            this.labText.Appearance.Options.UseFont = true;
-            this.labText.Appearance.Options.UseTextOptions = true;
-            this.labText.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
-            this.labText.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center;
-            this.labText.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None;
-            this.labText.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.labText.ImageAlignToText = DevExpress.XtraEditors.ImageAlignToText.LeftCenter;
-            this.labText.ImageOptions.ImageIndex = 0;
-            this.labText.ImageOptions.Images = this.img32;
-            this.labText.ImageOptions.SvgImageSize = new System.Drawing.Size(24, 24);
-            this.labText.Location = new System.Drawing.Point(1, 1);
-            this.labText.Name = "labText";
-            this.labText.Size = new System.Drawing.Size(298, 78);
-            this.labText.TabIndex = 0;
+            labText.AllowHtmlString = true;
+            labText.Appearance.BackColor = Color.White;
+            labText.Appearance.FontSizeDelta = 1;
+            labText.Appearance.Options.UseBackColor = true;
+            labText.Appearance.Options.UseFont = true;
+            labText.Appearance.Options.UseTextOptions = true;
+            labText.Appearance.TextOptions.HAlignment = HorzAlignment.Center;
+            labText.Appearance.TextOptions.VAlignment = VertAlignment.Center;
+            labText.AutoSizeMode = LabelAutoSizeMode.None;
+            labText.Dock = DockStyle.Fill;
+            labText.ImageAlignToText = ImageAlignToText.LeftCenter;
+            labText.ImageOptions.ImageIndex = 0;
+            labText.ImageOptions.Images = img32;
+            labText.ImageOptions.SvgImageSize = new Size(24, 24);
+            labText.Location = new Point(1, 1);
+            labText.Name = "labText";
+            labText.Size = new Size(298, 78);
+            labText.TabIndex = 0;
             // 
             // img32
             // 
-            this.img32.ImageSize = new System.Drawing.Size(32, 32);
-            this.img32.ImageStream = ((DevExpress.Utils.ImageCollectionStreamer)(resources.GetObject("img32.ImageStream")));
-            this.img32.Images.SetKeyName(0, "info32.png");
-            this.img32.Images.SetKeyName(1, "success32.png");
-            this.img32.Images.SetKeyName(2, "error32.png");
-            this.img32.Images.SetKeyName(3, "warning32.png");
+            img32.ImageSize = new Size(32, 32);
+            img32.ImageStream = (ImageCollectionStreamer)resources.GetObject("img32.ImageStream");
+            img32.Images.SetKeyName(0, "info32.png");
+            img32.Images.SetKeyName(1, "success32.png");
+            img32.Images.SetKeyName(2, "warning32.png");
+            img32.Images.SetKeyName(3, "error32.png");
             // 
             // timer1
             // 
-            this.timer1.Interval = 2000;
-            this.timer1.Tick += new System.EventHandler(this.timer_Tick);
+            timer1.Interval = 2000;
+            timer1.Tick += timer_Tick;
             // 
-            // NormalTipFrm
+            // TipForm
             // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(300, 80);
-            this.Controls.Add(this.labText);
-            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
-            this.Name = "NormalTipFrm";
-            this.Padding = new System.Windows.Forms.Padding(1);
-            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
-            this.TopMost = true;
-            ((System.ComponentModel.ISupportInitialize)(this.img32)).EndInit();
-            this.ResumeLayout(false);
-
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(300, 80);
+            Controls.Add(labText);
+            FormBorderStyle = FormBorderStyle.None;
+            Name = "TipForm";
+            Padding = new Padding(1);
+            StartPosition = FormStartPosition.CenterScreen;
+            TopMost = true;
+            ((ISupportInitialize)img32).EndInit();
+            ResumeLayout(false);
         }
 
         #endregion
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.resx b/WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.resx
index 0739b53..c4353b7 100644
--- a/WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Core/01-tip/TipForm.resx
@@ -1,17 +1,17 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <root>
-  <!-- 
+  <!--
     Microsoft ResX Schema 
-    
+
     Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
     associated with the data types.
-    
+
     Example:
-    
+
     ... ado.net/XML headers & schema ...
     <resheader name="resmimetype">text/microsoft-resx</resheader>
     <resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
         <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
         <comment>This is a comment</comment>
     </data>
-                
-    There are any number of "resheader" rows that contain simple 
+
+    There are any number of "resheader" rows that contain simple
     name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
     mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
     extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
     read any of the formats listed below.
-    
+
     mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
+    value   : The object must be serialized with
             : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
             : and then encoded with base64 encoding.
     
     mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
+    value   : The object must be serialized with
             : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
             : and then encoded with base64 encoding.
 
     mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
+    value   : The object must be serialized into a byte array
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
@@ -120,11 +120,11 @@
   <metadata name="img32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>107, 17</value>
   </metadata>
-  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
+  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
   <data name="img32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMS4yLCBWZXJzaW9uPTIxLjIu
-        Ni4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
+        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
         eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
         a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
         cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
@@ -148,27 +148,27 @@
         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
-        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
+        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
 </value>
   </data>
   <metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs
index 9dc99eb..17630fb 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs
@@ -1,8 +1,5 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+锘縰sing Yw.EPAnet;
+using Yw.Hydro;
 using Yw.Model;
 
 namespace Yw.WinFrmUI
@@ -25,6 +22,195 @@
             return allVisualList?.ToDictionary(x => x.Code);
         }
 
+        /// <summary>
+        /// 璁$畻
+        /// </summary>
+        public static HydroCalcuResult Calcu(this Yw.Model.HydroModelInfo hydroInfo, string calcuMode = Yw.EPAnet.CalcuMode.Simple)
+        {
+            var network = hydroInfo.ToNetwork();
+            if (network == null)
+            {
+                return default;
+            }
+            var calcuResult = network.Calcu(calcuMode);
+            if (calcuResult == null)
+            {
+                return default;
+            }
+            return hydroInfo.GetCalcuResult(calcuResult);
+        }
+
+        /// <summary>
+        /// 鑾峰彇璁$畻缁撴灉
+        /// </summary>
+        public static HydroCalcuResult GetCalcuResult(this Yw.Model.HydroModelInfo hydroInfo, Yw.EPAnet.CalcuResult calcuResult)
+        {
+            if (hydroInfo == null)
+            {
+                return default;
+            }
+            if (calcuResult == null)
+            {
+                return default;
+            }
+
+            var hydroCalcuResult = new HydroCalcuResult(calcuResult);
+
+            //娴侀噺璁�
+            var allFlowmeterList = hydroInfo.Flowmeters;
+            if (allFlowmeterList != null && allFlowmeterList.Count > 0)
+            {
+                var allLinkList = hydroInfo.GetAllLinks();
+                foreach (var flowmeter in allFlowmeterList)
+                {
+                    var calcuFlowmeterResult = hydroCalcuResult.NodeList?.Find(x => x.Code == flowmeter.Code);
+                    if (calcuFlowmeterResult != null)
+                    {
+                        var calcuFlowmeterNewResult = new HydroCalcuFlowmeterResult(calcuFlowmeterResult);
+                        var calcuFlowmeterLinkResultList = new List<HydroCalcuLinkResult>();
+                        var flowmeterLinkList = allLinkList?.Where(x => x.StartCode == flowmeter.Code || x.EndCode == flowmeter.Code).ToList();
+                        if (flowmeterLinkList != null && flowmeterLinkList.Count > 0)
+                        {
+                            foreach (var flowmeterLink in flowmeterLinkList)
+                            {
+                                var calcuFlowmeterLinkResult = hydroCalcuResult.LinkList?.Find(x => x.Code == flowmeterLink.Code);
+                                if (calcuFlowmeterLinkResult != null)
+                                {
+                                    calcuFlowmeterLinkResultList.Add(calcuFlowmeterLinkResult);
+                                }
+                            }
+                        }
+                        if (calcuFlowmeterLinkResultList.Exists(x => x.CalcuFlow.HasValue))
+                        {
+                            calcuFlowmeterNewResult.CalcuQ = calcuFlowmeterLinkResultList.Where(x => x.CalcuFlow.HasValue).Average(x => x.CalcuFlow.Value);
+                        }
+                        hydroCalcuResult.NodeList.Remove(calcuFlowmeterResult);
+                        hydroCalcuResult.NodeList.Add(calcuFlowmeterNewResult);
+                    }
+                }
+            }
+
+            //鍘嬪姏琛�
+            var allPressmeterList = hydroInfo.Pressmeters;
+            if (allPressmeterList != null && allPressmeterList.Count > 0)
+            {
+                foreach (var pressmeter in allPressmeterList)
+                {
+                    var calcuPressmeterResult = hydroCalcuResult.NodeList?.Find(x => x.Code == pressmeter.Code);
+                    if (calcuPressmeterResult != null)
+                    {
+                        var calcuPressmeterNewResult = new HydroCalcuPressmeterResult(calcuPressmeterResult);
+                        calcuPressmeterNewResult.CalcuPr = calcuPressmeterResult.CalcuPress;
+                        hydroCalcuResult.NodeList.Remove(calcuPressmeterResult);
+                        hydroCalcuResult.NodeList.Add(calcuPressmeterNewResult);
+                    }
+                }
+            }
+
+            //姘存车
+            var allPumpList = hydroInfo.Pumps;
+            if (allPumpList != null && allPumpList.Count > 0)
+            {
+                foreach (var pump in allPumpList)
+                {
+                    var calcuPumpResult = hydroCalcuResult.LinkList.Find(x => x.Code == pump.Code);
+                    if (calcuPumpResult != null)
+                    {
+                        var calcuPumpNewResult = new HydroCalcuPumpResult(calcuPumpResult);
+                        calcuPumpNewResult.CalcuQ = calcuPumpResult.CalcuFlow;
+                        if (calcuPumpNewResult.CalcuQ.HasValue)
+                        {
+                            var calcuNodeStartResult = hydroCalcuResult.NodeList?.Find(x => x.Code == pump.StartCode);
+                            var calcuNodeEndResult = hydroCalcuResult.NodeList?.Find(x => x.Code == pump.EndCode);
+                            if (calcuNodeStartResult != null && calcuNodeEndResult != null)
+                            {
+                                if (calcuNodeStartResult.CalcuPress.HasValue && calcuNodeEndResult.CalcuPress.HasValue)
+                                {
+                                    calcuPumpNewResult.CalcuH = Math.Abs(calcuNodeStartResult.CalcuPress.Value - calcuNodeEndResult.CalcuPress.Value);
+                                }
+                                if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open && pump.RatedN.HasValue)
+                                {
+                                    var curveqp = hydroInfo.Curves?.Find(x => x.Code == pump.CurveQP);
+                                    if (curveqp != null)
+                                    {
+                                        if (curveqp.CurveData != null && curveqp.CurveData.Count > 3)
+                                        {
+                                            var point2dList = curveqp.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
+                                            var point2dSimularList = point2dList.GetQPPointListByN(pump.RatedN.Value, pump.RatedN.Value * pump.SpeedRatio);
+                                            var pumpCurveQp = new Yw.Pump.CurveQP(eFeatType.Cubic, point2dSimularList);
+                                            calcuPumpNewResult.CalcuP = pumpCurveQp.FeatCurve.GetPointY(calcuPumpNewResult.CalcuQ.Value);
+                                        }
+                                    }
+                                }
+                                if (calcuPumpNewResult.CalcuH.HasValue && calcuPumpNewResult.CalcuP.HasValue)
+                                {
+                                    calcuPumpNewResult.CalcuE = Yw.Pump.CalculationHelper.CalcuE(calcuPumpNewResult.CalcuQ.Value, calcuPumpNewResult.CalcuH.Value, calcuPumpNewResult.CalcuP.Value);
+                                }
+                            }
+                        }
+                        hydroCalcuResult.LinkList.Remove(calcuPumpResult);
+                        hydroCalcuResult.LinkList.Add(calcuPumpNewResult);
+
+                        switch (pump.LinkStatus)
+                        {
+                            case Yw.Hydro.PumpStatus.Open:
+                                {
+                                    if (calcuPumpNewResult.CalcuFlow.HasValue)
+                                    {
+                                        if (calcuPumpNewResult.CalcuFlow.Value <= 0)
+                                        {
+                                            hydroCalcuResult.WainingList.Add(new HydroCalcuWarning()
+                                            {
+                                                Code = pump.Code,
+                                                Message = $"[{pump.Name}]涓嶆弧瓒冲綋鍓嶅伐鍐� "
+                                            });
+                                        }
+                                    }
+                                    else
+                                    {
+                                        hydroCalcuResult.WainingList.Add(new HydroCalcuWarning()
+                                        {
+                                            Code = pump.Code,
+                                            Message = $"[{pump.Name}]娴侀噺璁$畻澶辫触 "
+                                        });
+                                    }
+                                }
+                                break;
+                            case Yw.Hydro.PumpStatus.Closed:
+                                {
+                                    if (calcuPumpNewResult.CalcuFlow.HasValue)
+                                    {
+                                        if (calcuPumpNewResult.CalcuFlow.Value > 0)
+                                        {
+                                            hydroCalcuResult.WainingList.Add(new HydroCalcuWarning()
+                                            {
+                                                Code = pump.Code,
+                                                Message = $"[{pump.Name}]涓嶆弧瓒冲綋鍓嶅伐鍐� "
+                                            });
+                                        }
+                                    }
+                                    else
+                                    {
+                                        hydroCalcuResult.WainingList.Add(new HydroCalcuWarning()
+                                        {
+                                            Code = pump.Code,
+                                            Message = $"[{pump.Name}]娴侀噺璁$畻澶辫触 "
+                                        });
+                                    }
+                                }
+                                break;
+                            default: break;
+                        }
+
+                    }
+                }
+            }
+
+
+
+            return hydroCalcuResult;
+        }
+
 
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-calcu/01-result/HydroCalcuResult.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-calcu/01-result/HydroCalcuResult.cs
index 4089f38..81a3134 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-calcu/01-result/HydroCalcuResult.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-calcu/01-result/HydroCalcuResult.cs
@@ -18,6 +18,19 @@
         }
 
         /// <summary>
+        /// 
+        /// </summary>
+        public HydroCalcuResult(Yw.EPAnet.CalcuResult calcuResult)
+        {
+            this.Succeed = calcuResult.Succeed;
+            this.FailedList = calcuResult.FailedList?.Select(x => new HydroCalcuFailed(x)).ToList();
+            this.NodeList = calcuResult.NodeList?.Select(x => new HydroCalcuNodeResult(x)).ToList();
+            this.LinkList = calcuResult.LinkList?.Select(x => new HydroCalcuLinkResult(x)).ToList();
+            this.WainingList = new List<HydroCalcuWarning>();
+            this.EPAnetCalcuResult = calcuResult;
+        }
+
+        /// <summary>
         /// 鏄惁鎴愬姛
         /// </summary>
         public bool Succeed { get; set; }
@@ -43,6 +56,11 @@
         public List<HydroCalcuWarning> WainingList { get; set; }
 
         /// <summary>
+        /// EPAnet 璁$畻缁撴灉
+        /// </summary>
+        public Yw.EPAnet.CalcuResult EPAnetCalcuResult { get; set; }
+
+        /// <summary>
         /// 鑾峰彇鍙鍒楄〃
         /// </summary>
         public List<HydroCalcuVisualResult> GetVisualList()
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-calcu/01-result/HydroCalcuResultHelper.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-calcu/01-result/HydroCalcuResultHelper.cs
deleted file mode 100644
index 27d7cfa..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-calcu/01-result/HydroCalcuResultHelper.cs
+++ /dev/null
@@ -1,210 +0,0 @@
-锘縰sing Yw.EPAnet;
-using Yw.Hydro;
-
-namespace Yw.WinFrmUI
-{
-    /// <summary>
-    /// 璁$畻缁撴灉杈呭姪绫�
-    /// </summary>
-    public static class HydroCalcuResultHelper
-    {
-        /// <summary>
-        /// 璁$畻
-        /// </summary>
-        public static HydroCalcuResult Calcu(this Yw.Model.HydroModelInfo hydroInfo, string calcuMode = Yw.EPAnet.CalcuMode.Simple)
-        {
-            var network = hydroInfo.ToNetwork();
-            if (network == null)
-            {
-                return default;
-            }
-            var calcuResult = network.Calcu(calcuMode);
-            if (calcuResult == null)
-            {
-                return default;
-            }
-            return hydroInfo.GetCalcuResult(calcuResult);
-        }
-
-        /// <summary>
-        /// 鑾峰彇璁$畻缁撴灉
-        /// </summary>
-        public static HydroCalcuResult GetCalcuResult(this Yw.Model.HydroModelInfo hydroInfo, Yw.EPAnet.CalcuResult calcuResult)
-        {
-            if (hydroInfo == null)
-            {
-                return default;
-            }
-            if (calcuResult == null)
-            {
-                return default;
-            }
-
-            var hydroCalcuResult = new HydroCalcuResult();
-            hydroCalcuResult.Succeed = calcuResult.Succeed;
-            //澶辫触鍒楄〃
-            hydroCalcuResult.FailedList = calcuResult.FailedList?.Select(x => new HydroCalcuFailed(x)).ToList();
-            //鑺傜偣鍒楄〃
-            hydroCalcuResult.NodeList = calcuResult.NodeList?.Select(x => new HydroCalcuNodeResult(x)).ToList();
-            //绠℃鍒楄〃
-            hydroCalcuResult.LinkList = calcuResult.LinkList?.Select(x => new HydroCalcuLinkResult(x)).ToList();
-
-            //娴侀噺璁�
-            var allFlowmeterList = hydroInfo.Flowmeters;
-            if (allFlowmeterList != null && allFlowmeterList.Count > 0)
-            {
-                var allLinkList = hydroInfo.GetAllLinks();
-                foreach (var flowmeter in allFlowmeterList)
-                {
-                    var calcuFlowmeterResult = hydroCalcuResult.NodeList?.Find(x => x.Code == flowmeter.Code);
-                    if (calcuFlowmeterResult != null)
-                    {
-                        var calcuFlowmeterNewResult = new HydroCalcuFlowmeterResult(calcuFlowmeterResult);
-                        var calcuFlowmeterLinkResultList = new List<HydroCalcuLinkResult>();
-                        var flowmeterLinkList = allLinkList?.Where(x => x.StartCode == flowmeter.Code || x.EndCode == flowmeter.Code).ToList();
-                        if (flowmeterLinkList != null && flowmeterLinkList.Count > 0)
-                        {
-                            foreach (var flowmeterLink in flowmeterLinkList)
-                            {
-                                var calcuFlowmeterLinkResult = hydroCalcuResult.LinkList?.Find(x => x.Code == flowmeterLink.Code);
-                                if (calcuFlowmeterLinkResult != null)
-                                {
-                                    calcuFlowmeterLinkResultList.Add(calcuFlowmeterLinkResult);
-                                }
-                            }
-                        }
-                        if (calcuFlowmeterLinkResultList.Exists(x => x.CalcuFlow.HasValue))
-                        {
-                            calcuFlowmeterNewResult.CalcuQ = calcuFlowmeterLinkResultList.Where(x => x.CalcuFlow.HasValue).Average(x => x.CalcuFlow.Value);
-                        }
-                        hydroCalcuResult.NodeList.Remove(calcuFlowmeterResult);
-                        hydroCalcuResult.NodeList.Add(calcuFlowmeterNewResult);
-                    }
-                }
-            }
-
-            //鍘嬪姏琛�
-            var allPressmeterList = hydroInfo.Pressmeters;
-            if (allPressmeterList != null && allPressmeterList.Count > 0)
-            {
-                foreach (var pressmeter in allPressmeterList)
-                {
-                    var calcuPressmeterResult = hydroCalcuResult.NodeList?.Find(x => x.Code == pressmeter.Code);
-                    if (calcuPressmeterResult != null)
-                    {
-                        var calcuPressmeterNewResult = new HydroCalcuPressmeterResult(calcuPressmeterResult);
-                        calcuPressmeterNewResult.CalcuPr = calcuPressmeterResult.CalcuPress;
-                        hydroCalcuResult.NodeList.Remove(calcuPressmeterResult);
-                        hydroCalcuResult.NodeList.Add(calcuPressmeterNewResult);
-                    }
-                }
-            }
-
-            //姘存车
-            var allPumpList = hydroInfo.Pumps;
-            if (allPumpList != null && allPumpList.Count > 0)
-            {
-                foreach (var pump in allPumpList)
-                {
-                    var calcuPumpResult = hydroCalcuResult.LinkList.Find(x => x.Code == pump.Code);
-                    if (calcuPumpResult != null)
-                    {
-                        var calcuPumpNewResult = new HydroCalcuPumpResult(calcuPumpResult);
-                        calcuPumpNewResult.CalcuQ = calcuPumpResult.CalcuFlow;
-                        if (calcuPumpNewResult.CalcuQ.HasValue)
-                        {
-                            var calcuNodeStartResult = hydroCalcuResult.NodeList?.Find(x => x.Code == pump.StartCode);
-                            var calcuNodeEndResult = hydroCalcuResult.NodeList?.Find(x => x.Code == pump.EndCode);
-                            if (calcuNodeStartResult != null && calcuNodeEndResult != null)
-                            {
-                                if (calcuNodeStartResult.CalcuPress.HasValue && calcuNodeEndResult.CalcuPress.HasValue)
-                                {
-                                    calcuPumpNewResult.CalcuH = Math.Abs(calcuNodeStartResult.CalcuPress.Value - calcuNodeEndResult.CalcuPress.Value);
-                                }
-                                if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open && pump.RatedN.HasValue)
-                                {
-                                    var curveqp = hydroInfo.Curves?.Find(x => x.Code == pump.CurveQP);
-                                    if (curveqp != null)
-                                    {
-                                        if (curveqp.CurveData != null && curveqp.CurveData.Count > 3)
-                                        {
-                                            var point2dList = curveqp.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
-                                            var point2dSimularList = point2dList.GetQPPointListByN(pump.RatedN.Value, pump.RatedN.Value * pump.SpeedRatio);
-                                            var pumpCurveQp = new Yw.Pump.CurveQP(eFeatType.Cubic, point2dSimularList);
-                                            calcuPumpNewResult.CalcuP = pumpCurveQp.FeatCurve.GetPointY(calcuPumpNewResult.CalcuQ.Value);
-                                        }
-                                    }
-                                }
-                                if (calcuPumpNewResult.CalcuH.HasValue && calcuPumpNewResult.CalcuP.HasValue)
-                                {
-                                    calcuPumpNewResult.CalcuE = Yw.Pump.CalculationHelper.CalcuE(calcuPumpNewResult.CalcuQ.Value, calcuPumpNewResult.CalcuH.Value, calcuPumpNewResult.CalcuP.Value);
-                                }
-                            }
-                        }
-                        hydroCalcuResult.LinkList.Remove(calcuPumpResult);
-                        hydroCalcuResult.LinkList.Add(calcuPumpNewResult);
-
-                        switch (pump.LinkStatus)
-                        {
-                            case Yw.Hydro.PumpStatus.Open:
-                                {
-                                    if (calcuPumpNewResult.CalcuFlow.HasValue)
-                                    {
-                                        if (calcuPumpNewResult.CalcuFlow.Value <= 0)
-                                        {
-                                            hydroCalcuResult.WainingList.Add(new HydroCalcuWarning()
-                                            {
-                                                Code = pump.Code,
-                                                Message = $"[{pump.Name}]涓嶆弧瓒冲綋鍓嶅伐鍐� "
-                                            });
-                                        }
-                                    }
-                                    else
-                                    {
-                                        hydroCalcuResult.WainingList.Add(new HydroCalcuWarning()
-                                        {
-                                            Code = pump.Code,
-                                            Message = $"[{pump.Name}]娴侀噺璁$畻澶辫触 "
-                                        });
-                                    }
-                                }
-                                break;
-                            case Yw.Hydro.PumpStatus.Closed:
-                                {
-                                    if (calcuPumpNewResult.CalcuFlow.HasValue)
-                                    {
-                                        if (calcuPumpNewResult.CalcuFlow.Value > 0)
-                                        {
-                                            hydroCalcuResult.WainingList.Add(new HydroCalcuWarning()
-                                            {
-                                                Code = pump.Code,
-                                                Message = $"[{pump.Name}]涓嶆弧瓒冲綋鍓嶅伐鍐� "
-                                            });
-                                        }
-                                    }
-                                    else
-                                    {
-                                        hydroCalcuResult.WainingList.Add(new HydroCalcuWarning()
-                                        {
-                                            Code = pump.Code,
-                                            Message = $"[{pump.Name}]娴侀噺璁$畻澶辫触 "
-                                        });
-                                    }
-                                }
-                                break;
-                            default: break;
-                        }
-
-                    }
-                }
-            }
-
-
-
-            return hydroCalcuResult;
-        }
-
-
-    }
-
-}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/00-core/HydroMonitorValueExtensions.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/00-core/HydroMonitorValueExtensions.cs
index 9a2f58f..d8c31eb 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/00-core/HydroMonitorValueExtensions.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/00-core/HydroMonitorValueExtensions.cs
@@ -1,12 +1,32 @@
-锘縰sing DevExpress.CodeParser;
-
-namespace Yw.WinFrmUI
+锘縩amespace Yw.WinFrmUI
 {
     /// <summary>
     /// 鐩戞祴鍊兼嫇灞�
     /// </summary>
     public static class HydroMonitorValueExtensions
     {
+
+        /// <summary>
+        /// 鏇存柊鐩戞祴鍊煎垪琛�
+        /// </summary>
+        public static void UpdateMonitorValue(this List<HydroMonitorValueViewModel> allMonitorValueList, string monitorInfo)
+        {
+            if (allMonitorValueList == null || allMonitorValueList.Count < 1)
+            {
+                return;
+            }
+            if (string.IsNullOrEmpty(monitorInfo))
+            {
+                return;
+            }
+            var allWorkingMonitorList = JsonHelper.Json2Object<List<HydroWorkingMonitorViewModel>>(monitorInfo);
+            if (allWorkingMonitorList == null || allWorkingMonitorList.Count < 1)
+            {
+                return;
+            }
+            allMonitorValueList.UpdateMonitorValue(allWorkingMonitorList);
+        }
+
         /// <summary>
         /// 鏇存柊鐩戞祴鍊煎垪琛�
         /// </summary>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.Designer.cs
index 302d824..2d768c1 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.Designer.cs
@@ -31,16 +31,16 @@
             components = new Container();
             ComponentResourceManager resources = new ComponentResourceManager(typeof(HydroMonitorValueListCtrl));
             gridControl1 = new DevExpress.XtraGrid.GridControl();
+            hydroMonitorValueViewModelBindingSource = new BindingSource(components);
             gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
-            colRelation = new DevExpress.XtraGrid.Columns.GridColumn();
             colPropName = new DevExpress.XtraGrid.Columns.GridColumn();
             colMonitorValue = new DevExpress.XtraGrid.Columns.GridColumn();
             colUnitName = new DevExpress.XtraGrid.Columns.GridColumn();
             colDescription = new DevExpress.XtraGrid.Columns.GridColumn();
-            hydroMonitorValueViewModelBindingSource = new BindingSource(components);
+            colVisualName = new DevExpress.XtraGrid.Columns.GridColumn();
             ((ISupportInitialize)gridControl1).BeginInit();
-            ((ISupportInitialize)gridView1).BeginInit();
             ((ISupportInitialize)hydroMonitorValueViewModelBindingSource).BeginInit();
+            ((ISupportInitialize)gridView1).BeginInit();
             SuspendLayout();
             // 
             // gridControl1
@@ -54,22 +54,16 @@
             gridControl1.TabIndex = 0;
             gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { gridView1 });
             // 
+            // hydroMonitorValueViewModelBindingSource
+            // 
+            hydroMonitorValueViewModelBindingSource.DataSource = typeof(HydroMonitorValueViewModel);
+            // 
             // gridView1
             // 
-            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colRelation, colPropName, colMonitorValue, colUnitName, colDescription });
+            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colVisualName, colPropName, colMonitorValue, colUnitName, colDescription });
             gridView1.GridControl = gridControl1;
             gridView1.Name = "gridView1";
             gridView1.RowClick += gridView1_RowClick;
-            // 
-            // colRelation
-            // 
-            colRelation.FieldName = "Relation";
-            colRelation.MaxWidth = 250;
-            colRelation.MinWidth = 150;
-            colRelation.Name = "colRelation";
-            colRelation.Visible = true;
-            colRelation.VisibleIndex = 0;
-            colRelation.Width = 150;
             // 
             // colPropName
             // 
@@ -77,6 +71,7 @@
             colPropName.MaxWidth = 250;
             colPropName.MinWidth = 150;
             colPropName.Name = "colPropName";
+            colPropName.OptionsColumn.AllowEdit = false;
             colPropName.Visible = true;
             colPropName.VisibleIndex = 1;
             colPropName.Width = 150;
@@ -99,6 +94,7 @@
             colUnitName.MaxWidth = 100;
             colUnitName.MinWidth = 100;
             colUnitName.Name = "colUnitName";
+            colUnitName.OptionsColumn.AllowEdit = false;
             colUnitName.Visible = true;
             colUnitName.VisibleIndex = 3;
             colUnitName.Width = 100;
@@ -108,24 +104,32 @@
             colDescription.FieldName = "Description";
             colDescription.MinWidth = 100;
             colDescription.Name = "colDescription";
+            colDescription.OptionsColumn.AllowEdit = false;
             colDescription.Visible = true;
             colDescription.VisibleIndex = 4;
             colDescription.Width = 100;
             // 
-            // hydroMonitorValueViewModelBindingSource
+            // colVisualName
             // 
-            hydroMonitorValueViewModelBindingSource.DataSource = typeof(HydroMonitorValueViewModel);
+            colVisualName.FieldName = "VisualName";
+            colVisualName.MaxWidth = 250;
+            colVisualName.MinWidth = 150;
+            colVisualName.Name = "colVisualName";
+            colVisualName.OptionsColumn.AllowEdit = false;
+            colVisualName.Visible = true;
+            colVisualName.VisibleIndex = 0;
+            colVisualName.Width = 150;
             // 
-            // HydroVisualMonitorValueListCtrl
+            // HydroMonitorValueListCtrl
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(gridControl1);
-            Name = "HydroVisualMonitorValueListCtrl";
+            Name = "HydroMonitorValueListCtrl";
             Size = new Size(913, 394);
             ((ISupportInitialize)gridControl1).EndInit();
-            ((ISupportInitialize)gridView1).EndInit();
             ((ISupportInitialize)hydroMonitorValueViewModelBindingSource).EndInit();
+            ((ISupportInitialize)gridView1).EndInit();
             ResumeLayout(false);
         }
 
@@ -133,11 +137,11 @@
 
         private DevExpress.XtraGrid.GridControl gridControl1;
         private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
-        private DevExpress.XtraGrid.Columns.GridColumn colRelation;
         private DevExpress.XtraGrid.Columns.GridColumn colPropName;
         private DevExpress.XtraGrid.Columns.GridColumn colMonitorValue;
         private DevExpress.XtraGrid.Columns.GridColumn colDescription;
         private DevExpress.XtraGrid.Columns.GridColumn colUnitName;
         private BindingSource hydroMonitorValueViewModelBindingSource;
+        private DevExpress.XtraGrid.Columns.GridColumn colVisualName;
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.cs
index 167bd7d..460a934 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueListCtrl.cs
@@ -10,8 +10,9 @@
             InitializeComponent();
             this.gridView1.SetNormalEditView(30);
             this.gridView1.RegistCustomDrawRowIndicator(40);
-            this.colRelation.OptionsColumn.AllowEdit = false;
+            this.colVisualName.OptionsColumn.AllowEdit = false;
             this.colPropName.OptionsColumn.AllowEdit = false;
+            this.colUnitName.OptionsColumn.AllowEdit = false;
             this.colDescription.OptionsColumn.AllowEdit = false;
         }
 
@@ -25,12 +26,21 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroMonitorValueViewModel> allValueList)
+        public void SetBindingData(List<HydroMonitorValueViewModel> allMonitorValueList)
         {
             _allBindingList = new BindingList<HydroMonitorValueViewModel>();
-            allValueList?.OrderBy(x => x.SortCode).ForEach(x => _allBindingList.Add(x));
+            allMonitorValueList?.OrderBy(x => x.SortCode).ForEach(x => _allBindingList.Add(x));
             this.hydroMonitorValueViewModelBindingSource.DataSource = _allBindingList;
             this.hydroMonitorValueViewModelBindingSource.ResetBindings(false);
+        }
+
+        /// <summary>
+        /// 璁剧疆瑙嗗浘闈㈡澘
+        /// </summary>
+        public void SetViewBoard()
+        {
+            this.colMonitorValue.OptionsColumn.AllowEdit = false;
+            this.colMonitorValue.ImageOptions.SvgImage = null;
         }
 
         //琛岀偣鍑�
@@ -43,5 +53,8 @@
             }
             this.HydroViewEvent?.Invoke(row.Vmo.Relation);
         }
+
+
+
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueViewModel.cs
index d4e8486..578fb3b 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/12-monitor/02-value/HydroMonitorValueViewModel.cs
@@ -15,7 +15,7 @@
         /// </summary>
         public HydroMonitorValueViewModel(Yw.Vmo.HydroMonitorVmo vmo, Yw.Model.HydroVisualInfo visual)
         {
-            this.Relation = visual.Name;
+            this.VisualName = visual.Name;
             this.PropName = HydroVisualCalcuPropHelper.GetName(vmo.PropName);
             this.MonitorValue = null;
             this.UnitName = HydroVisualCalcuPropHelper.GetUnit(vmo.PropName);
@@ -25,11 +25,12 @@
             this.Vmo = vmo;
         }
 
+
         /// <summary>
         /// 鏋勪欢
         /// </summary>
         [DisplayName("鏋勪欢")]
-        public string Relation { get; set; }
+        public string VisualName { get; set; }
 
         /// <summary>
         /// 灞炴��
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.cs
index a1ab71c..0df5a3f 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.cs
@@ -22,7 +22,7 @@
         }
 
         /// <summary>
-        /// 
+        /// 缁戝畾鏁版嵁
         /// </summary>
         public void SetBindingData(List<HydroNodeLossViewModel> allNodeLossList)
         {
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs
index c8dfcc3..4d7ebc3 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs
@@ -1,4 +1,7 @@
-锘縩amespace Yw.WinFrmUI
+锘縰sing Yw.Hydro;
+using Yw.EPAnet;
+
+namespace Yw.WinFrmUI
 {
     public partial class HydroSingleLossCurveDlg : DevExpress.XtraBars.Ribbon.RibbonForm
     {
@@ -9,23 +12,35 @@
         }
 
         /// <summary>
-        /// 
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, HydroCalcuResult calcuResult, Yw.Model.HydroVisualInfo visual)
+        {
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            var network = hydroInfo.ToNetwork();
+            if (network == null)
+            {
+                return;
+            }
+            var node = network.GetAllNodes()?.Find(x => x.Id == visual.Code);
+            if (node == null)
+            {
+                return;
+            }
+            var allPathList = network.AnalyzeDownstreamPath(node, calcuResult.EPAnetCalcuResult);
+            var allEpaLossList = network.GetChartNodeByPathLinks(allPathList, calcuResult.EPAnetCalcuResult);
+            var allNodeLossList = allEpaLossList?.Select(x => new HydroNodeLossViewModel(x)).ToList();
+            SetBindingData(allNodeLossList);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
         /// </summary>
         public void SetBindingData(List<HydroNodeLossViewModel> allNodeLossList)
         {
-            //allNodeLossList = new List<HydroNodeLossViewModel>()
-            //{
-            //    new HydroNodeLossViewModel(){ Code="1",Elev=10,StartHead=666,EndHead=623,Distance=10},
-            //    new HydroNodeLossViewModel(){ Code="2",Elev=20,StartHead=600,EndHead=567,Distance=30},
-            //    new HydroNodeLossViewModel(){ Code="3",Elev=25,StartHead=544,EndHead=521,Distance=100},
-            //    new HydroNodeLossViewModel(){ Code="4",Elev=19,StartHead=500,EndHead=789,Distance=110},
-            //    new HydroNodeLossViewModel(){ Code="5",Elev=23,StartHead=700,EndHead=677,Distance=150},
-            //    new HydroNodeLossViewModel(){ Code="6",Elev=22,StartHead=632,EndHead=600,Distance=200},
-            //    new HydroNodeLossViewModel(){ Code="7",Elev=13,StartHead=550,EndHead=510,Distance=300},
-            //    new HydroNodeLossViewModel(){ Code="8",Elev=13,StartHead=500,EndHead=345,Distance=500},
-            //    new HydroNodeLossViewModel(){ Code="9",Elev=11,StartHead=300,EndHead=289,Distance=700},
-            //    new HydroNodeLossViewModel(){ Code="10",Elev=10,StartHead=260,EndHead=150,Distance=820},
-            //};
             this.hydroSingleLossCurveCtrl1.SetBindingData(allNodeLossList);
         }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/03-statistics/HydroSingleWorkingLossStatisticsDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/03-statistics/HydroSingleWorkingLossStatisticsDlg.cs
index 038789d..da661fb 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/03-statistics/HydroSingleWorkingLossStatisticsDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/03-statistics/HydroSingleWorkingLossStatisticsDlg.cs
@@ -16,17 +16,47 @@
         /// </summary>
         public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
         {
-            var network = hydroInfo.ToNetwork();
-            var calcuResult = network.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
-            var allEnergyPointList = network.AnalyzeEnergy(calcuResult);
-            SetBindingData(hydroInfo, allEnergyPointList);
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            var calcuResult = hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
+            SetBindingData(hydroInfo, calcuResult);
         }
 
         /// <summary>
-        /// 
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, HydroCalcuResult calcuResult)
+        {
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            List<Yw.EPAnet.EnergyPoint> allEnergyList = null;
+            var network = hydroInfo.ToNetwork();
+            if (network != null)
+            {
+                if (calcuResult != null)
+                {
+                    if (calcuResult.EPAnetCalcuResult != null)
+                    {
+                        allEnergyList = network.AnalyzeEnergy(calcuResult.EPAnetCalcuResult);
+                    }
+                }
+            }
+            SetBindingData(hydroInfo, allEnergyList);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
         /// </summary>
         public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<Yw.EPAnet.EnergyPoint> allEnergyList)
         {
+            if (hydroInfo == null)
+            {
+                return;
+            }
             this.hydroSingleWorkingLossStatisticsCtrl1.SetBindingData(hydroInfo, allEnergyList);
         }
 

--
Gitblit v1.9.3