From 558cd523a935fc27a4d69ac63db0115d96460a7c Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期四, 08 八月 2024 17:28:32 +0800
Subject: [PATCH] 项目整理

---
 Hydro/Yw.EPAnet.Core/EpanetBase2.2.cs                  |  320 +++++++++++++
 Hydro/Yw.EPAnet.Core/EPAmodel.cs                       |  256 ++++++++++
 Hydro/Yw.EPAnet.Core/Yw.EPAnet.Core.csproj             |    9 
 Hydro/Yw.EPAnet.Core/HydraulicCore.cs                  |  796 +++++++++++++++++++++++++++++++++
 HStation.Xhs.Core.sln                                  |   42 
 Hydro/Yw.EPAnet.Calcu.Core/Yw.EPAnet.Calcu.Core.csproj |    3 
 6 files changed, 1,405 insertions(+), 21 deletions(-)

diff --git a/HStation.Xhs.Core.sln b/HStation.Xhs.Core.sln
index e64d1a0..61088ec 100644
--- a/HStation.Xhs.Core.sln
+++ b/HStation.Xhs.Core.sln
@@ -99,13 +99,13 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yw.EPAnet.Calcu.Core", "Hydro\Yw.EPAnet.Calcu.Core\Yw.EPAnet.Calcu.Core.csproj", "{0BA4B37E-D5D2-41B1-890E-4436E496DC18}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yw.EPAcore.Test", "Hydro\Yw.EPAcore.Test\Yw.EPAcore.Test.csproj", "{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yw.WinFrmUI.Hydro.Core", "WinFrmUI\Yw.WinFrmUI.Hydro.Core\Yw.WinFrmUI.Hydro.Core.csproj", "{BBC8C860-98B1-45B1-B41D-518DCB402C17}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yw.Hydro.Core", "Hydro\Yw.Hydro.Core\Yw.Hydro.Core.csproj", "{F6068234-6BFC-48B1-9FAB-2892C097C430}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Yw.Hydraulic.Core", "Hydro\Yw.Hydraulic.Core\Yw.Hydraulic.Core.vcxproj", "{D2B8356F-0EA6-4167-8119-57B3E49A55CF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yw.EPAnet.Core", "Hydro\Yw.EPAnet.Core\Yw.EPAnet.Core.csproj", "{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -804,24 +804,6 @@
 		{0BA4B37E-D5D2-41B1-890E-4436E496DC18}.Release|x64.Build.0 = Release|Any CPU
 		{0BA4B37E-D5D2-41B1-890E-4436E496DC18}.Release|x86.ActiveCfg = Release|Any CPU
 		{0BA4B37E-D5D2-41B1-890E-4436E496DC18}.Release|x86.Build.0 = Release|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Debug|x64.Build.0 = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Debug|x86.Build.0 = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.dll_test|Any CPU.ActiveCfg = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.dll_test|Any CPU.Build.0 = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.dll_test|x64.ActiveCfg = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.dll_test|x64.Build.0 = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.dll_test|x86.ActiveCfg = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.dll_test|x86.Build.0 = Debug|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Release|x64.ActiveCfg = Release|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Release|x64.Build.0 = Release|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Release|x86.ActiveCfg = Release|Any CPU
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653}.Release|x86.Build.0 = Release|Any CPU
 		{BBC8C860-98B1-45B1-B41D-518DCB402C17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{BBC8C860-98B1-45B1-B41D-518DCB402C17}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{BBC8C860-98B1-45B1-B41D-518DCB402C17}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -876,6 +858,24 @@
 		{D2B8356F-0EA6-4167-8119-57B3E49A55CF}.Release|x64.Build.0 = Release|x64
 		{D2B8356F-0EA6-4167-8119-57B3E49A55CF}.Release|x86.ActiveCfg = Release|Win32
 		{D2B8356F-0EA6-4167-8119-57B3E49A55CF}.Release|x86.Build.0 = Release|Win32
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Debug|x64.Build.0 = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Debug|x86.Build.0 = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.dll_test|Any CPU.ActiveCfg = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.dll_test|Any CPU.Build.0 = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.dll_test|x64.ActiveCfg = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.dll_test|x64.Build.0 = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.dll_test|x86.ActiveCfg = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.dll_test|x86.Build.0 = Debug|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Release|x64.ActiveCfg = Release|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Release|x64.Build.0 = Release|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Release|x86.ActiveCfg = Release|Any CPU
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -919,10 +919,10 @@
 		{1808ADF5-93D9-4F62-B60C-0E5993FC4350} = {CF8E0A6C-9342-430D-BD10-6E1B5DE18571}
 		{42261EEA-8BA7-4096-92B1-E809BDD72A82} = {4F0A7BA1-6ED6-4F4F-A3B4-B9B3A133D869}
 		{0BA4B37E-D5D2-41B1-890E-4436E496DC18} = {9F4F9ECE-9C4C-4796-91A1-69805F823EA5}
-		{EB7A36E1-7DAB-4562-BF44-D7F4D05D1653} = {9F4F9ECE-9C4C-4796-91A1-69805F823EA5}
 		{BBC8C860-98B1-45B1-B41D-518DCB402C17} = {4F0A7BA1-6ED6-4F4F-A3B4-B9B3A133D869}
 		{F6068234-6BFC-48B1-9FAB-2892C097C430} = {9F4F9ECE-9C4C-4796-91A1-69805F823EA5}
 		{D2B8356F-0EA6-4167-8119-57B3E49A55CF} = {9F4F9ECE-9C4C-4796-91A1-69805F823EA5}
+		{D6F58BEC-660B-4EFF-9A8F-D70571F6EFB8} = {9F4F9ECE-9C4C-4796-91A1-69805F823EA5}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {E02989A8-9B6F-43E5-AACA-790328215089}
diff --git a/Hydro/Yw.EPAnet.Calcu.Core/Yw.EPAnet.Calcu.Core.csproj b/Hydro/Yw.EPAnet.Calcu.Core/Yw.EPAnet.Calcu.Core.csproj
index a37d884..595aca9 100644
--- a/Hydro/Yw.EPAnet.Calcu.Core/Yw.EPAnet.Calcu.Core.csproj
+++ b/Hydro/Yw.EPAnet.Calcu.Core/Yw.EPAnet.Calcu.Core.csproj
@@ -41,6 +41,9 @@
     <Compile Remove="Object\VisualObject.cs" />
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\Yw.EPAnet.Core\Yw.EPAnet.Core.csproj" />
+  </ItemGroup>
+  <ItemGroup>
     <None Update="Template\template.inp">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
diff --git a/Hydro/Yw.EPAnet.Core/EPAmodel.cs b/Hydro/Yw.EPAnet.Core/EPAmodel.cs
new file mode 100644
index 0000000..c897e7b
--- /dev/null
+++ b/Hydro/Yw.EPAnet.Core/EPAmodel.cs
@@ -0,0 +1,256 @@
+锘�//using AForge;
+//using AForge.Genetic;
+//using Hydro.CodeProvider;
+//using Hydro.CommonBase;
+//using Yw.EPAcore.Core;
+//using SolutionDBHelper_NS;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.Drawing;
+using System.Linq;
+using System.Net.NetworkInformation;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Threading.Tasks;
+////using WaterDistributioinManager;
+//using Hydro.ConfigModel;
+
+namespace Yw.EPAcore.Core
+{
+   
+    //public static class EPAModelInput
+    //{
+    //    public static Dictionary<HydraulicInputType, int> defineEPATypeCode = new Dictionary<HydraulicInputType, int>() 
+    //    {
+    //        { HydraulicInputType.press,HydraulicCore.Const_class.Const_Node.EN_TANKLEVEL },
+    //        { HydraulicInputType.demand,HydraulicCore.Const_class.Const_Node.EN_DEMAND },
+    //        { HydraulicInputType.level,HydraulicCore.Const_class.Const_Node.EN_TANKLEVEL },
+    //        { HydraulicInputType.initPumpRS,HydraulicCore.Const_class.Const_Link.EN_INITSETTING },
+    //        { HydraulicInputType.initSettings,HydraulicCore.Const_class.Const_Link.EN_INITSETTING },
+    //        { HydraulicInputType.initStatus,HydraulicCore.Const_class.Const_Link.EN_INITSTATUS },
+    //        { HydraulicInputType.pattern,HydraulicCore.Const_class.Const_Node.EN_PATTERN },
+
+
+    //    };
+       
+    //}
+    public enum HydraulicInputType
+    {
+        /// <summary>
+        /// 绌�
+        /// </summary>
+        None = -1,
+        /// <summary>
+        /// 缁濆鍘嬪姏锛屽崟浣嶇背姘存煴
+        /// </summary>
+        press = 0,   //缁濆鍘嬪姏
+        /// <summary>
+        /// 鐢ㄦ按閲忥紝鍗曚綅鏄珛鏂圭背姣忓皬鏃�
+        /// </summary>
+        demand = 1,//     鐢ㄦ按閲�
+        /// <summary>
+        /// 姘存睜姘翠綅锛屽崟浣嶆槸绫�
+        /// </summary>
+        level = 2,//  姘存睜娑蹭綅
+        /// <summary>
+        /// 姘存车杞�熸瘮
+        /// </summary>
+        initPumpRS = 3,// 0 姘存车鐘舵��0/1杩樻槸姘存车棰戠巼0~1  棰戠巼/50   杞��/棰濆畾杞�� 
+        /// <summary>
+        /// 绮楃硻搴︺�侀榾闂ㄥ紑搴�
+        /// </summary>
+        initSettings = 4,
+        /// <summary>
+        /// 寮�鍏崇姸鎬�
+        /// </summary>
+        initStatus = 5,// 0 姘存车鐘舵��0/1杩樻槸姘存车棰戠巼0~1  棰戠巼/50   杞��/棰濆畾杞�� 
+        /// <summary>
+        /// 绠″緞
+        /// </summary>
+        diameter = 6,
+        /// <summary>
+        /// 闀垮害
+        /// </summary>
+        length = 7,
+        /// <summary>
+        /// 妯″紡
+        /// </summary>
+        pattern = 8,
+        /// <summary>
+        /// 鎬绘按閲�
+        /// </summary>
+        totalDemand = 9,
+        /// <summary>
+        /// 鍒嗛厤姘撮噺
+        /// </summary>
+        Distribution_TotalDemand = 10,
+        /// <summary>
+        /// 鍒嗛厤褰撻噺
+        /// </summary>
+        Distribution_UnitDemand = 11,
+    }
+
+    public static class NodeOutputType
+    {
+        public static List<HydraulicOutputType> List=new List<HydraulicOutputType>()
+        {
+            HydraulicOutputType.None,
+            HydraulicOutputType.Elev,
+            HydraulicOutputType.Head,
+            HydraulicOutputType.Pressure,
+            HydraulicOutputType.Demand,
+            HydraulicOutputType.Quality,
+        };
+    }
+
+    public enum HydraulicOutputType
+    {
+        /// <summary>
+        /// 绌�
+        /// </summary>
+        None= -1,
+
+        /// <summary>
+        /// 鑺傜偣鏍囬珮
+        /// </summary>
+        Elev = (int)HydraulicCore.Const_class.Const_Node.EN_ELEVATION,//0
+
+        /// <summary>
+        /// 缁濆姘村帇
+        /// </summary>
+        Head = (int)HydraulicCore.Const_class.Const_Node.EN_HEAD,//10
+
+        /// <summary>
+        /// 鑷敱姘村帇
+        /// </summary> 
+        Pressure = (int)HydraulicCore.Const_class.Const_Link.EN_STATUS,//11
+
+        /// <summary>
+        /// 闇�姘撮噺
+        /// </summary>
+        Demand = (int)HydraulicCore.Const_class.Const_Node.EN_DEMAND,//9
+
+        /// <summary>
+        /// 鑺傜偣姘磋川
+        /// </summary>
+        Quality = (int)HydraulicCore.Const_class.Const_Node.EN_QUALITY,//12
+
+        
+
+
+
+        /// <summary>
+        /// 鍙e緞
+        /// </summary> 
+        Diameter = (int)HydraulicCore.Const_class.Const_Link.EN_DIAMETER,//0
+
+        /// <summary>
+        /// 闀垮害
+        /// </summary> 
+        Length = (int)HydraulicCore.Const_class.Const_Link.EN_LENGTH,//1
+
+
+        /// <summary>
+        /// 姘村ご鎹熷け
+        /// </summary>
+        HeadLoss = (int)HydraulicCore.Const_class.Const_Link.EN_HEADLOSS,//10
+
+
+
+        /// <summary>
+        /// 娴侀噺锛堣绠楃粨鏋滐紝鍗曚綅绔嬫柟绫虫瘡灏忔椂锛屼粠寮�濮嬭妭鐐规祦鍚戠粨鏉熻妭鐐逛负姝o級
+        /// </summary>
+        Flow = (int)HydraulicCore.Const_class.Const_Link.EN_FLOW,//8
+        /// <summary>
+        /// 娴侀�� 
+        /// </summary>
+        Velocity = (int)HydraulicCore.Const_class.Const_Link.EN_VELOCITY,//9
+        /// <summary>
+        /// 鑳借��
+        /// </summary>
+        Energy = (int)HydraulicCore.Const_class.Const_Link.EN_ENERGY,//13
+        /// <summary>
+        /// 寮�鍏抽噺
+        /// </summary> 
+        InitStatus = (int)HydraulicCore.Const_class.Const_Link.EN_INITSTATUS,//4
+
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        Status = (int)HydraulicCore.Const_class.Const_Link.EN_STATUS,//11
+
+
+
+
+        /// <summary>
+        /// 杞�焲绮楃硻绯绘暟|闃�闂ㄨ缃�
+        /// </summary> 
+        Settings = (int)HydraulicCore.Const_class.Const_Link.EN_SETTING,//12
+
+       
+
+
+
+    }
+
+
+    public enum HydraulicObjectType
+    {
+        /// <summary>
+        /// 鑺傜偣
+        /// </summary>
+        EN_JUNCTION = 0,
+        /// <summary>
+        /// 姘村簱鑺傜偣
+        /// </summary>
+        EN_RESERVOIR = 1,
+        /// <summary>
+        /// 姘存睜鑺傜偣
+        /// </summary>
+        EN_TANK = 2,
+        /// <summary>
+        /// 鍏锋湁姝㈠洖闃�鐨勭閬�
+        /// </summary>
+        EN_CVPIPE = 10,
+        /// <summary>
+        /// 绠¢亾
+        /// </summary>
+        EN_PIPE = 11,
+
+        /// <summary>
+        /// 姘存车
+        /// </summary>
+        EN_PUMP = 12,
+        /// <summary>
+        /// 鍑忓帇闃�
+        /// </summary>
+        EN_PRV = 13,
+        /// <summary>
+        /// 绋冲帇闃�
+        /// </summary>
+        EN_PSV = 14,
+        /// <summary>
+        /// 鍘嬪姏鍒跺姩闃�
+        /// </summary>
+        EN_PBV = 15,
+        /// <summary>
+        /// 娴侀噺鎺у埗闃�
+        /// </summary>
+        EN_FCV = 16,
+        /// <summary>
+        /// 鑺傛祦鎺у埗闃�
+        /// </summary>
+        EN_TCV = 17,
+        /// <summary>
+        /// 甯歌闃�闂�
+        /// </summary>
+        EN_GPV = 18,
+    }
+
+
+
+}
diff --git a/Hydro/Yw.EPAnet.Core/EpanetBase2.2.cs b/Hydro/Yw.EPAnet.Core/EpanetBase2.2.cs
new file mode 100644
index 0000000..a3b8085
--- /dev/null
+++ b/Hydro/Yw.EPAnet.Core/EpanetBase2.2.cs
@@ -0,0 +1,320 @@
+锘�#define EPA2_2  //EPA2_0
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+
+
+namespace Yw.EPAcore.Core
+{
+
+    class HydraulicCoreBase
+    {
+
+        const string DLLName = "Yw.Hydraulic.Core.dll";//"epanet2.2.dll";//"epanet2.2.dll"
+                                                       //{ These are codes used by the DLL functions }Yw.EPAcore.Core
+
+
+        #region 鑺傜偣
+        //        鑾峰彇鑺傜偣鍙傛暟鍊�
+        [DllImport(DLLName)]
+        public static extern int ENgetnodevalue22(int projectID, int index, int paramcode, ref float value);
+        //        鑾峰彇鑺傜偣绫诲瀷
+        [DllImport(DLLName)]
+        public static extern int ENgetnodetype22(int projectID, int index, ref int typecode);
+        //        鑾峰彇鑺傜偣缂栧彿
+        [DllImport(DLLName)]
+        public static extern int ENgetnodeindex22(int projectID, string nodeid, ref int nodeindex);
+
+        //        鑾峰彇鑺傜偣        id
+        [DllImport(DLLName)]
+        public static extern int ENgetnodeid22(int projectID, int index, StringBuilder id);
+        [DllImport(DLLName)]
+        public static extern int ENgetnodecomment22(int projectID, int index, StringBuilder id);
+        [DllImport(DLLName)]
+        public static extern int ENaddnode22(int projectID, string id, int nodeType, ref int index);
+
+        [DllImport(DLLName)]
+        public static extern int ENgetcoord22(int projectID, int index, ref double x, ref double y);
+        [DllImport(DLLName)]
+        public static extern int ENsetcoord22(int projectID, int index, double x, double y);
+
+        //        璁剧疆鑺傜偣鍙傛暟
+        [DllImport(DLLName)]
+        public static extern int ENsetnodevalue22(int projectID, int index, int paramcode, float value);
+        #endregion
+
+        #region 绠℃
+
+        //        璁剧疆绠℃鍙傛暟
+        [DllImport(DLLName)]
+        public static extern int ENsetlinkvalue22(int projectID, int index, int paramcode, float value);
+
+        //        鑾峰彇绠℃        id
+        [DllImport(DLLName)]
+
+        public static extern int ENgetlinkid22(int projectID, int index, StringBuilder id);
+        [DllImport(DLLName)]
+
+        public static extern int ENgetlinkcomment22(int projectID, int index, StringBuilder id);
+        //        鑾峰彇绠℃        id
+        [DllImport(DLLName)]
+
+        public static extern int ENgetlinkindex22(int projectID, string id, ref int index);
+        //        鑾峰彇绠℃鑺傜偣
+        [DllImport(DLLName)]
+        public static extern int ENgetlinknodes22(int projectID, int index, ref int fromnode, ref int tonode);
+
+
+        //        鑾峰緱绠℃鍙傛暟
+        [DllImport(DLLName)]
+        public static extern int ENgetlinkvalue22(int projectID, int index, int paramcode, ref float value);
+
+        //        璁剧疆绠℃绫诲瀷
+        [DllImport(DLLName)]
+        public static extern int ENgetlinktype22(int projectID, int index, ref int typecode);
+        //        澧炲姞绠$嚎
+        [DllImport(DLLName)]
+        public static extern int ENaddlink22(int projectID, string id, int linkType, string fromNode, string toNode, ref int index);
+
+
+        #endregion
+
+        #region 妯″紡
+        //          鑾峰彇妯″紡id
+        [DllImport(DLLName)]
+        public static extern int ENgetpatternindex22(int projectID, string patternID, ref int patternindex);
+
+
+        //        澧炲姞鏂扮殑鏃堕棿妯″紡
+        [DllImport(DLLName)]
+        public static extern int ENaddpattern22(int projectID, string patternID);
+        //        璁剧疆鏃堕棿妯″紡鐨勫��
+        [DllImport(DLLName)]
+        public static extern int ENsetpatternvalue22(int projectID, int index, int period, float value);
+
+
+
+        public static int ENsetpatternvalue_ex(int projectID, string patternID, int period, float value)
+        {
+            int err = 0;
+            int patternid = 0;
+            err = ENgetpatternindex22(projectID, patternID, ref patternid);
+            if (err > 0) return err;
+            if (patternid == 0)
+            {
+                err = ENaddpattern22(projectID, patternID);
+                if (err > 0) return err;
+                err = ENgetpatternindex22(projectID, patternID, ref patternid);
+                if (err > 0) return err;
+
+            }
+            return ENsetpatternvalue22(projectID, patternid, period, value);
+        }
+
+
+
+        [DllImport(DLLName)]
+        public static extern int ENsetpattern22(int projectID, int index, float[] values, int n);
+
+        /// <summary>
+        /// 鍔犲己鐗堟坊鍔犳ā寮�,濡傛灉妯″紡鍚嶇О涓嶅瓨鍦�,鍒欒嚜鍔ㄦ柊澧炴ā寮�;鏂板瀹屽悗,鑷畾缁戝畾鑺傜偣
+        /// </summary>
+        /// <param name="projectID"></param>
+        /// <param name="nodeID"></param>
+        /// <param name="patternID"></param>
+        /// <param name="values"></param>
+        /// <returns></returns>
+        public static int ENsetpatternvalue_ex(int projectID, int nodeindex, string patternID, double[] values)
+        {
+            int err = 0;
+            int patternid = 0;
+            err = ENgetpatternindex22(projectID, patternID, ref patternid);
+
+            if (err > 0 || patternid == 0)
+            {
+                err = ENaddpattern22(projectID, patternID);
+                if (err > 0) return err;
+                err = ENgetpatternindex22(projectID, patternID, ref patternid);
+                if (err > 0) return err;
+            }
+
+            float[] v = values.Select(f => (float)f).ToArray();
+            err = ENsetpattern22(projectID, patternid, v, values.Length);
+            if (err > 0) return err;
+            //int nodeindex = 0;
+            //err = ENgetnodeindex22 (projectID,nodeID,ref nodeindex);
+            //if (err > 0) return err;
+            err = ENsetnodevalue22(projectID, nodeindex, HydraulicCore.Const_class.Const_Node.EN_PATTERN, patternid);
+            return err;
+        }
+
+
+        [DllImport(DLLName)]
+        public static extern int ENsetcurve22(int projectID, int index, float[] Xvalues, float[] Yvalues, int n);
+
+
+
+
+
+        #endregion
+
+        #region 璁$畻鎺у埗
+
+        //epanet        瀹屽叏妯℃嫙鍑芥暟
+        [DllImport(DLLName)]
+        public static extern int ENepanet22(int projectID, string f1, string f2, string f3, IntPtr vfunc);
+        //        鍏抽棴绠$綉鏂囦欢
+        [DllImport(DLLName)]
+        public static extern int ENclose22(int projectID);
+        //        鍏抽棴姘村姏妯℃嫙绯荤粺锛岄噴鏀惧唴瀛�
+        [DllImport(DLLName)]
+        public static extern int ENcloseH22(int projectID);
+        //        鍏抽棴姘磋川妯℃嫙绯荤粺锛岄噴鏀惧唴瀛�
+        [DllImport(DLLName)]
+        public static extern int ENcloseQ22(int projectID);
+        //        璋冪敤鎵撳紑绠$綉鏂囦欢
+        [DllImport(DLLName)]
+        public static extern int ENopen22(int projectID, string f1, string f2, string f3);
+        //        璋冪敤鎵撳紑姘村姏鍒嗘瀽绯荤粺
+        [DllImport(DLLName)]
+        public static extern int ENopenH22(int projectID);
+        //        璋冪敤鎵撳紑姘村姏鍒嗘瀽绯荤粺
+        [DllImport(DLLName)]
+        public static extern int ENopenQ22(int projectID);
+
+        /// <summary>
+        /// 璋冪敤鍒濆鍖栨按鍔涜绠楃郴缁�
+        /// </summary>
+        /// <param name="saveflag">0-1鏍囧織锛岃鏄庡垎鏋愮粨鏋滄槸鍚︿互鍧囧寑鎶ュ憡鏃舵淇濆瓨鍒癊PANETH浜岃繘鍒惰緭鍑烘枃浠躲��</param>
+        /// <returns>杩斿洖閿欒缂栧彿锛�0琛ㄧず鏃犻敊璇�</returns>
+        [DllImport(DLLName)]
+        public static extern int ENinitH22(int projectID, int saveflag);
+
+        //        璋冪敤杩愯姘村姏璁$畻
+        [DllImport(DLLName)]
+        public static extern int ENrunH22(int projectID, ref int t1);
+        //        姘村姏璁$畻姝ラ暱
+        [DllImport(DLLName)]
+        public static extern int ENnextH22(int projectID, ref int tstep1);
+        //        璋冪敤鍒濆鍖栨按璐ㄨ绠楃郴缁�
+        [DllImport(DLLName)]
+        public static extern int ENinitQ22(int projectID, int saveflag);
+        //        璋冪敤杩愯姘村姏璁$畻
+        [DllImport(DLLName)]
+        public static extern int ENrunQ22(int projectID, ref int t1);
+        //        姘村姏璁$畻姝ラ暱
+        [DllImport(DLLName)]
+        public static extern int ENnextQ22(int projectID, ref int tstep1);
+
+
+
+        //        鍏ㄩ儴姘村姏妯℃嫙
+        [DllImport(DLLName)]
+        public static extern int ENsolveH22(int projectID);
+        //        鍏ㄩ儴姘磋川妯℃嫙
+        [DllImport(DLLName)]
+        public static extern int ENsolveQ22(int projectID);
+
+        //        鐢熸垚鎶ュ憡
+        [DllImport(DLLName)]
+        public static extern int ENsaveH22(int projectID);
+        #endregion
+
+        #region 鎶ュ憡
+        //        鐢熸垚鎶ュ憡
+        [DllImport(DLLName)]
+        public static extern int ENreport22(int projectID);
+        //        閲嶇疆鎶ュ憡
+        [DllImport(DLLName)]
+        public static extern int ENresetreport22(int projectID);
+
+        //        閲嶇疆鎶ュ憡
+        [DllImport(DLLName)]
+        public static extern int ENsetreport22(int projectID, string x);
+        #endregion
+
+        #region 鍏朵粬
+
+
+        //        鑾峰彇绠$綉鍏冧欢鏁�
+        [DllImport(DLLName)]
+        public static extern int ENgetcount22(int projectID, int countcode, ref int count);
+
+        //        鑾峰彇閿欒淇℃伅
+        [DllImport(DLLName)]
+        public static extern int ENgeterror22(int projectID, int errcode, StringBuilder errmsg, int nchar);
+
+        //  杈撳嚭鏂囦欢淇℃伅
+        [DllImport(DLLName)]
+        public static extern int ENsaveinpfile22(int projectID, string filename);
+
+
+
+        //        鑾峰彇绠�鍗曟帶鍒剁姸鎬佺殑鍙傛暟
+        [DllImport(DLLName)]
+        public static extern int ENgetcontrol22(int projectID, int cindex, ref int ctype, ref int index, ref
+        float setting, ref int nindex, ref float level);
+
+
+
+        //   璁剧疆閫夐」
+        [DllImport(DLLName)]
+        public static extern int ENsetoption22(int projectID, int code, float v);
+        //   璁剧疆閫夐」
+        [DllImport(DLLName)]
+        public static extern int ENsetstatusreport22(int projectID, int code);
+        //   璁剧疆閫夐」
+        [DllImport(DLLName)]
+        public static extern int ENgetoption22(int projectID, int code, ref float v);
+
+
+        //   璁剧疆閫夐」
+        [DllImport(DLLName)]
+        public static extern int ENgettimeparam22(int projectID, int code, ref int v);
+        //   璁剧疆姘磋川绫诲瀷
+        [DllImport(DLLName)]
+        public static extern int ENsetqualtype22(int projectID, int qualcode, string chemname,
+                               string chemunits, string tracenode);
+
+
+
+
+        #endregion
+
+        //琛ュ厖
+        [DllImport(DLLName)]
+        public static extern int ENsetinistatus22(int projectID, string id, string value);
+
+        //琛ュ厖
+        [DllImport(DLLName)]
+        public static extern int ENsetprojectreport22(int projectID, int value);
+
+        ////琛ュ厖
+        //EN_Project p, int nodeIndex, int demandIndex,
+        //                      double* baseDemand
+        //琛ュ厖
+        [DllImport(DLLName)]
+        public static extern int ENgetbasedemand22(int projectID, int nodeIndex, int demandIndex, out List<double> baseDemand);
+        //                      
+
+        //琛ュ厖
+        [DllImport(DLLName)]
+        public static extern int ENgetdemandpattern22(int projectID, int nodeIndex, int demandIndex,
+                                 out List<int> patIndex);
+
+        //琛ュ厖
+        [DllImport(DLLName)]
+        public static extern int ENgetTotalDemand22(int projectID, int p, out double value);
+
+
+        //int DLLEXPORT EN_getTotalDemand(EN_Project pr, int p, double *value)
+        //
+    }
+
+
+
+
+}
\ No newline at end of file
diff --git a/Hydro/Yw.EPAnet.Core/HydraulicCore.cs b/Hydro/Yw.EPAnet.Core/HydraulicCore.cs
new file mode 100644
index 0000000..4796caf
--- /dev/null
+++ b/Hydro/Yw.EPAnet.Core/HydraulicCore.cs
@@ -0,0 +1,796 @@
+锘�
+using System.Text;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+
+namespace Yw.EPAcore.Core
+{
+    //public enum NodeValueType
+    //{
+    //    EN_ELEVATION = 0,  //  { Mode parameters }
+    //    EN_BASEDEMAND = 1,
+    //    EN_PATTERN = 2,
+    //    EN_EMITTER = 3,
+    //    EN_INITQUAL = 4,
+    //    EN_SOURCEQUAL = 5,
+    //    EN_SOURCEPAT = 6,
+    //    EN_SOURCETYPE = 7,
+    //    EN_TANKLEVEL = 8,
+    //    EN_DEMAND = 9,
+    //    EN_HEAD = 10,
+    //    EN_PRESSURE = 11,
+    //    EN_QUALITY = 12,
+    //    EN_SOURCEMASS = 13,
+    //    EN_INITVOLUME = 14,
+    //    EN_MIXMODEL = 15,
+    //    EN_MIXZONEVOL = 16,
+    //}
+    //public enum LinkValueType
+    //{
+    //    EN_DIAMETER = 0,  // { Link parameters }
+    //    EN_LENGTH = 1,
+    //    EN_ROUGHNESS = 2,
+    //    EN_MINORLOSS = 3,
+    //    EN_INITSTATUS = 4,
+    //    EN_INITSETTING = 5,
+    //    EN_KBULK = 6,
+    //    EN_KWALL = 7,
+    //    EN_FLOW = 8,
+    //    EN_VELOCITY = 9,
+    //    EN_HEADLOSS = 10,
+    //    EN_STATUS = 11,
+    //    EN_SETTING = 12,
+    //    EN_ENERGY = 13,
+    //}
+    public enum NodeValueType
+    {
+        鏍囬珮 = 0,  //  { Mode parameters }
+        鍩烘湰闇�姘撮噺 = 1,
+        闇�姘撮噺妯″紡 = 2,
+        鎵╂暎鍣ㄧ郴鏁� = 3,
+        鍒濆鐗╄川娴撳害 = 4,
+        杈撳叆鐗╄川娴撳害 = 5,
+        娴撳害妯″紡 = 6,
+        姘存簮绫诲瀷 = 7,
+        姘存睜姘翠綅 = 8,
+        闇�姘撮噺 = 9,
+        缁濆鍘嬪姏 = 10,
+        鑷敱鍘嬪姏 = 11,
+        鐗╄川娴撳害 = 12,
+        鐗╄川鎵╂暎娴撳害 = 13,
+        鍒濆瀹圭Н = 14,
+        澶氱墿璐ㄦ贩鍚堟ā鍨� = 15,
+        澶氱墿璐ㄦ贩鍚堝绉� = 16,
+    }
+    public enum LinkValueType
+    {
+        绠″緞 = 0,  // { Link parameters }
+        绠¢暱 = 1,
+        娴锋.濞佸粔绯绘暟 = 2,
+        灞�閮ㄦ按澶存崯澶� = 3,
+        鍒濆鐘舵�� = 4,
+        鍒濆璁剧疆 = 5,
+        姘翠綋鍙嶅簲绯绘暟 = 6,
+        绠″鍙嶅簲绯绘暟 = 7,
+        娴侀噺 = 8,
+        娴侀�� = 9,
+        姘存崯 = 10,
+        鐘舵�� = 11,
+        璁剧疆 = 12,
+        鍔熺巼 = 13,
+    }
+    public sealed class HydraulicCore
+    {
+        public static class Const_class
+        {
+            public static class Const_Node
+            {
+                public const int EN_ELEVATION = 0;  //  { Mode parameters }
+                public const int EN_BASEDEMAND = 1;
+                public const int EN_PATTERN = 2;
+                public const int EN_EMITTER = 3;
+                public const int EN_INITQUAL = 4;
+                public const int EN_SOURCEQUAL = 5;
+                public const int EN_SOURCEPAT = 6;
+                public const int EN_SOURCETYPE = 7;
+                public const int EN_TANKLEVEL = 8;
+                public const int EN_DEMAND = 9;
+                public const int EN_HEAD = 10;
+                public const int EN_PRESSURE = 11;
+                public const int EN_QUALITY = 12;
+                public const int EN_SOURCEMASS = 13;
+                public const int EN_INITVOLUME = 14;
+                public const int EN_MIXMODEL = 15;
+                public const int EN_MIXZONEVOL = 16;
+            }
+
+            public static class Const_Tank
+            {
+                public const int EN_TANKDIAM = 17;
+                public const int EN_MINVOLUME = 18;
+                public const int EN_VOLCURVE = 19;
+                public const int EN_MINLEVEL = 20;
+                public const int EN_MAXLEVEL = 21;
+                public const int EN_MIXFRACTION = 22;
+                public const int EN_TANK_KBULK = 23;
+            }
+
+            public static class Const_Link
+            {
+
+                public const int EN_DIAMETER = 0;  // { Link parameters }
+                public const int EN_LENGTH = 1;
+                public const int EN_ROUGHNESS = 2;
+                public const int EN_MINORLOSS = 3;
+                public const int EN_INITSTATUS = 4;
+                public const int EN_INITSETTING = 5;
+                public const int EN_KBULK = 6;
+                public const int EN_KWALL = 7;
+                public const int EN_FLOW = 8;
+                public const int EN_VELOCITY = 9;
+                public const int EN_HEADLOSS = 10;
+                public const int EN_STATUS = 11;
+                public const int EN_SETTING = 12;
+                public const int EN_ENERGY = 13;
+            }
+
+            public static class Const_Time
+            {
+                public const int EN_DURATION = 0; // { Time parameters }
+                public const int EN_HYDSTEP = 1;
+                public const int EN_QUALSTEP = 2;
+                public const int EN_PATTERNSTEP = 3;
+                public const int EN_PATTERNSTART = 4;
+                public const int EN_REPORTSTEP = 5;
+                public const int EN_REPORTSTART = 6;
+                public const int EN_RULESTEP = 7;
+                public const int EN_STATISTIC = 8;
+                public const int EN_PERIODS = 9;
+            }
+
+            public static class Const_Component
+            {
+                public const int EN_NODECOUNT = 0; //{ Component counts }
+                public const int EN_TANKCOUNT = 1;
+                public const int EN_LINKCOUNT = 2;
+                public const int EN_PATCOUNT = 3;
+                public const int EN_CURVECOUNT = 4;
+                public const int EN_CONTROLCOUNT = 5;
+            }
+
+            public static class Const_Node_Type
+            {
+                public const int EN_JUNCTION = 0;  // { Node types }
+                public const int EN_RESERVOIR = 1;
+                public const int EN_TANK = 2;
+            }
+
+            public static class Const_Link_types
+            {
+                public const int EN_CVPIPE = 0; //  { Link types }
+                public const int EN_PIPE = 1;
+                public const int EN_PUMP = 2;
+                public const int EN_PRV = 3;
+                public const int EN_PSV = 4;
+                public const int EN_PBV = 5;
+                public const int EN_FCV = 6;
+                public const int EN_TCV = 7;
+                public const int EN_GPV = 8;
+            }
+
+            public static class Const_Quality_analysis_types
+            {
+                public const int EN_NONE = 0; //  { Quality analysis types }
+                public const int EN_CHEM = 1;
+                public const int EN_AGE = 2;
+                public const int EN_TRACE = 3;
+            }
+
+            public static class Const_Source_quality_types
+            {
+                public const int EN_CONCEN = 0;  // { Source quality types }
+                public const int EN_MASS = 1;
+                public const int EN_SETPOINT = 2;
+                public const int EN_FLOWPACED = 3;
+            }
+
+            public static class Const_Flow_units_types
+            {
+                public const int EN_CFS = 0;  // { Flow units types }
+                public const int EN_GPM = 1;
+                public const int EN_MGD = 2;
+                public const int EN_IMGD = 3;
+                public const int EN_AFD = 4;
+                public const int EN_LPS = 5;
+                public const int EN_LPM = 6;
+                public const int EN_MLD = 7;
+                public const int EN_CMH = 8;
+                public const int EN_CMD = 9;
+            }
+
+            public static class Const_Option_types
+            {
+                public const int EN_TRIALS = 0;  // { Option types }
+                public const int EN_ACCURACY = 1;
+                public const int EN_TOLERANCE = 2;
+                public const int EN_EMITEXPON = 3;
+                public const int EN_DEMANDMULT = 4;
+            }
+
+            public static class Const_Control_types
+            {
+                public const int EN_LOWLEVEL = 0;   //{ Control types }
+                public const int EN_HILEVEL = 1;
+                public const int EN_TIMER = 2;
+                public const int EN_TIMEOFDAY = 3;
+            }
+
+            public static class Const_Time_statistic_types
+            {
+                public const int EN_AVERAGE = 1;  // { Time statistic types }
+                public const int EN_MINIMUM = 2;
+                public const int EN_MAXIMUM = 3;
+                public const int EN_RANGE = 4;
+            }
+
+            public static class Const_Tank_mixing_models
+            {
+                public const int EN_MIX1 = 0;  // { Tank mixing models }
+                public const int EN_MIX2 = 1;
+                public const int EN_FIFO = 2;
+                public const int EN_LIFO = 3;
+            }
+
+            public static class Const_Save_results_Mode
+            {
+                public const int EN_NOSAVE = 0;  // { Save-results-to-file flag }
+                public const int EN_SAVE = 1;
+                public const int EN_INITFLOW = 10; // { Re-initialize flow flag }
+            }
+            public static class Const_statuslevel
+            {
+                public const int EN_NONE = 0;
+                public const int EN_NORMAL = 0;
+                public const int EN_FULL = 0;
+            }
+
+        }
+
+        static int ProjectCount = 0;
+
+        public void Dispose()
+        {
+            HydraulicCore.ProjectCount--;
+        }
+
+        int projectID;
+        bool isWaterModelCalc = true;
+        public int GetProjectID()
+        {
+            return projectID;
+        }
+        public HydraulicCore(bool isWaterModelCalc)
+        {
+            this.isWaterModelCalc = isWaterModelCalc;
+            this.projectID = ProjectCount;
+            HydraulicCore.ProjectCount++;
+        }
+        //        鑾峰彇鑺傜偣鍙傛暟鍊�
+
+        public int getnodevalue(int index, int paramcode, ref float value)
+        {
+            return HydraulicCoreBase.ENgetnodevalue22(projectID, index, paramcode, ref value);
+        }
+        //        鑾峰彇鑺傜偣绫诲瀷
+
+        public float getvalue(string ID, int paramcode)
+        {
+            int err = 0;
+            int index = 0;
+            err = getnodeindex(ID, ref index);
+            float value = 0;
+            if (index > 0)
+            {
+                err = getnodevalue(index, paramcode, ref value);
+            }
+            else
+            {
+                err = getlinkindex(ID, ref index);
+                err = getlinkvalue(index, paramcode, ref value);
+            }
+            return value;
+
+        }
+        public float getvalue(string ID, int paramcode, bool isNode)
+        {
+            int err = 0;
+            int index = 0;
+            float value = 0;
+            if (isNode)
+            {
+                err = getnodeindex(ID, ref index);
+
+                if (index > 0)
+                    err = getnodevalue(index, paramcode, ref value);
+            }
+
+            else
+            {
+                err = getlinkindex(ID, ref index);
+                if (index > 0)
+                    err = getlinkvalue(index, paramcode, ref value);
+            }
+            return value;
+
+        }
+        public int setvalue(string ID, int paramcode, double value, bool isNode)
+        {
+            int err = 0;
+            int index = 0;
+
+            if (isNode)
+            {
+                err = getnodeindex(ID, ref index);
+
+                if (index > 0)
+                    err = setnodevalue(index, paramcode, (float)value);
+            }
+
+            else
+            {
+                err = getlinkindex(ID, ref index);
+                if (index > 0)
+                    err = setlinkvalue(index, paramcode, (float)value);
+            }
+
+            return err;
+
+        }
+        public int getnodetype(int index, ref int typecode)
+        {
+            return HydraulicCoreBase.ENgetnodetype22(projectID, index, ref typecode);
+        }
+        //        鑾峰彇鑺傜偣缂栧彿
+
+        public int getnodeindex(string nodeid, ref int nodeindex)
+        {
+            return HydraulicCoreBase.ENgetnodeindex22(projectID, nodeid, ref nodeindex);
+        }
+
+        //        鑾峰彇鑺傜偣        id
+
+        public int getnodeid(int index, StringBuilder id)
+        {
+            return HydraulicCoreBase.ENgetnodeid22(projectID, index, id);
+        }
+        public int getnodecomment(int index, StringBuilder id)
+        {
+            return HydraulicCoreBase.ENgetnodecomment22(projectID, index, id);
+        }
+        public int addnode(string id, int nodeType, ref int index)
+        {
+            return HydraulicCoreBase.ENaddnode22(projectID, id, nodeType, ref index);
+        }
+
+
+        public int getcoord(int index, ref double x, ref double y)
+        {
+            return HydraulicCoreBase.ENgetcoord22(projectID, index, ref x, ref y);
+        }
+
+        public int setcoord(int index, double x, double y)
+        {
+            return HydraulicCoreBase.ENsetcoord22(projectID, index, x, y);
+        }
+
+        //        璁剧疆鑺傜偣鍙傛暟
+
+        public int setnodevalue(int index, int paramcode, float value)
+        {
+            return HydraulicCoreBase.ENsetnodevalue22(projectID, index, paramcode, value);
+        }
+
+
+
+        #region 绠℃
+
+        //        璁剧疆绠℃鍙傛暟
+
+        public int setlinkvalue(int index, int paramcode, float value)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENsetlinkvalue22(projectID, index, paramcode, value);
+        }
+
+        //        鑾峰彇绠℃        id
+
+
+        public int getlinkid(int index, StringBuilder id)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgetlinkid22(projectID, index, id);
+        }
+        public int getlinkcomment(int index, StringBuilder id)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgetlinkcomment22(projectID, index, id);
+        }
+        //        鑾峰彇绠℃        id
+
+
+        public int getlinkindex(string id, ref int index)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgetlinkindex22(projectID, id, ref index);
+        }
+        //        鑾峰彇绠℃鑺傜偣
+
+        public int getlinknodes(int index, ref int fromnode, ref int tonode)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgetlinknodes22(projectID, index, ref fromnode, ref tonode);
+        }
+
+
+        //        鑾峰緱绠℃鍙傛暟
+
+        public int getlinkvalue(int index, int paramcode, ref float value)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgetlinkvalue22(projectID, index, paramcode, ref value);
+        }
+
+        //        璁剧疆绠℃绫诲瀷
+
+        public int getlinktype(int index, ref int typecode)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgetlinktype22(projectID, index, ref typecode);
+        }
+        //        澧炲姞绠$嚎
+
+        public int addlink(string id, int linkType, string fromNode, string toNode, ref int index)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENaddlink22(projectID, id, linkType, fromNode, toNode, ref index);
+        }
+
+
+        #endregion
+
+        #region 妯″紡
+        //          鑾峰彇妯″紡id
+
+        public int getpatternindex(string patternID, ref int patternindex)
+        {
+            return HydraulicCoreBase.ENgetpatternindex22(projectID, patternID, ref patternindex);
+        }
+
+
+        //        澧炲姞鏂扮殑鏃堕棿妯″紡
+
+        public int addpattern(string patternID)
+        {
+            return HydraulicCoreBase.ENaddpattern22(projectID, patternID);
+        }
+        //        璁剧疆鏃堕棿妯″紡鐨勫��
+
+        public int setpatternvalue(int index, int period, float value)
+        {
+            return HydraulicCoreBase.ENsetpatternvalue22(projectID, index, period, value);
+        }
+
+
+
+        public int setpatternvalue_ex(string patternID, int period, float value)
+        {
+            return HydraulicCoreBase.ENsetpatternvalue_ex(projectID, patternID, period, value);
+        }
+
+
+
+
+
+        public int setpattern(int index, float[] values, int n)
+        {
+            return HydraulicCoreBase.ENsetpattern22(projectID, index, values, n);
+        }
+
+        /// <summary>
+        /// 鍔犲己鐗堟坊鍔犳ā寮�,濡傛灉妯″紡鍚嶇О涓嶅瓨鍦�,鍒欒嚜鍔ㄦ柊澧炴ā寮�;鏂板瀹屽悗,鑷畾缁戝畾鑺傜偣
+        /// </summary>
+        /// <param name="projectID"></param>
+        /// <param name="index"></param>
+        /// <param name="patternID"></param>
+        /// <param name="values"></param>
+        /// <returns></returns>
+        public int setpatternvalue_ex(int index, string patternID, double[] values)
+        {
+            return HydraulicCoreBase.ENsetpatternvalue_ex(projectID, index, patternID, values);
+        }
+
+
+
+
+        public int setcurve(int index, float[] Xvalues, float[] Yvalues, int n)
+        {
+            return HydraulicCoreBase.ENsetcurve22(projectID, index, Xvalues, Yvalues, n);
+        }
+
+
+
+
+
+        #endregion
+
+        #region 璁$畻鎺у埗
+
+        //epanet        瀹屽叏妯℃嫙鍑芥暟
+
+        public int epanet(string f1, string f2, string f3, IntPtr vfunc)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENepanet22(projectID, f1, f2, f3, vfunc);
+        }
+        //        鍏抽棴绠$綉鏂囦欢
+
+        public int close()
+        {
+            ProjectCount--;
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENclose22(projectID);
+
+        }
+        //        鍏抽棴姘村姏妯℃嫙绯荤粺锛岄噴鏀惧唴瀛�
+
+        public int closeH()
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENcloseH22(projectID);
+        }
+        //        鍏抽棴姘磋川妯℃嫙绯荤粺锛岄噴鏀惧唴瀛�
+
+        public int closeQ()
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENcloseQ22(projectID);
+        }
+        //        璋冪敤鎵撳紑绠$綉鏂囦欢
+
+        public int open(string f1, string f2, string f3)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENopen22(projectID, f1, f2, f3);
+        }
+        //        璋冪敤鎵撳紑姘村姏鍒嗘瀽绯荤粺
+
+        public int openH()
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENopenH22(projectID);
+        }
+        //        璋冪敤鎵撳紑姘村姏鍒嗘瀽绯荤粺
+
+        public int openQ()
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENopenQ22(projectID);
+        }
+
+        /// <summary>
+        /// 璋冪敤鍒濆鍖栨按鍔涜绠楃郴缁�
+        /// </summary>
+        /// <param name="saveflag">0-1鏍囧織锛岃鏄庡垎鏋愮粨鏋滄槸鍚︿互鍧囧寑鎶ュ憡鏃舵淇濆瓨鍒癊PANETH浜岃繘鍒惰緭鍑烘枃浠躲��</param>
+        /// <returns>杩斿洖閿欒缂栧彿锛�0琛ㄧず鏃犻敊璇�</returns>
+
+        public int initH(int saveflag)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENinitH22(projectID, saveflag);
+        }
+
+        //        璋冪敤杩愯姘村姏璁$畻
+
+        public int runH(ref int t1)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENrunH22(projectID, ref t1);
+        }
+        //        姘村姏璁$畻姝ラ暱
+
+        public int nextH(ref int tstep1)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENnextH22(projectID, ref tstep1);
+        }
+        //        璋冪敤鍒濆鍖栨按璐ㄨ绠楃郴缁�
+
+        public int initQ(int saveflag)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENinitQ22(projectID, saveflag);
+        }
+        //        璋冪敤杩愯姘村姏璁$畻
+
+        public int runQ(ref int t1)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENrunQ22(projectID, ref t1);
+        }
+        //        姘村姏璁$畻姝ラ暱
+
+        public int nextQ(ref int tstep1)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENnextQ22(projectID, ref tstep1);
+        }
+
+
+
+        //        鍏ㄩ儴姘村姏妯℃嫙
+
+        public int solveH()
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENsolveH22(projectID);
+        }
+        //        鍏ㄩ儴姘磋川妯℃嫙
+
+        public int solveQ()
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENsolveQ22(projectID);
+        }
+
+        //        鐢熸垚鎶ュ憡
+
+        public int saveH()
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENsaveH22(projectID);
+        }
+        #endregion
+
+        #region 鎶ュ憡
+        //        鐢熸垚鎶ュ憡
+
+        public int report()
+        {
+            return HydraulicCoreBase.ENreport22(projectID);
+        }
+        //        閲嶇疆鎶ュ憡
+
+        public int resetreport()
+        {
+            return HydraulicCoreBase.ENresetreport22(projectID);
+        }
+
+        //        閲嶇疆鎶ュ憡
+
+        public int setreport(string x)
+        {
+            return HydraulicCoreBase.ENsetreport22(projectID, x);
+        }
+        #endregion
+
+        #region 鍏朵粬
+
+
+        //        鑾峰彇绠$綉鍏冧欢鏁�
+
+        public int getcount(int countcode, ref int count)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgetcount22(projectID, countcode, ref count);
+        }
+
+        //        鑾峰彇閿欒淇℃伅
+
+        public int geterror(int errcode, StringBuilder errmsg, int nchar)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgeterror22(projectID, errcode, errmsg, nchar);
+        }
+
+        //  杈撳嚭鏂囦欢淇℃伅
+
+        public int saveinpfile(string filename)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENsaveinpfile22(projectID, filename);
+        }
+
+
+
+        //        鑾峰彇绠�鍗曟帶鍒剁姸鎬佺殑鍙傛暟
+
+        public int getcontrol(int cindex, ref int ctype, ref int index, ref
+        float setting, ref int nindex, ref float level)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgetcontrol22(projectID, cindex, ref ctype, ref index, ref
+        setting, ref nindex, ref level);
+        }
+
+
+
+        //   璁剧疆閫夐」
+
+        public int setoption(int code, float v)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENsetoption22(projectID, code, v);
+        }
+        public int setstatusreport(int code)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENsetstatusreport22(projectID, code);
+        }
+        public float getoption(int code)
+        {
+            if (!isWaterModelCalc) return 0;
+            float v = 0;
+            HydraulicCoreBase.ENgetoption22(projectID, code, ref v);
+            return v;
+        }
+
+        //   璁剧疆閫夐」
+
+        public int gettimeparam(int code, ref int v)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENgettimeparam22(projectID, code, ref v);
+        }
+        //   璁剧疆姘磋川绫诲瀷
+
+        public int setqualtype(int qualcode, string chemname,
+                               string chemunits, string tracenode)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENsetqualtype22(projectID, qualcode, chemname, chemunits, tracenode);
+        }
+
+
+
+
+        #endregion
+
+        //琛ュ厖
+
+        public int setinistatus(string id, string value)
+        {
+            if (!isWaterModelCalc) return 0;
+            return HydraulicCoreBase.ENsetinistatus22(projectID, id, value);
+        }
+
+        //琛ュ厖
+
+        public int setprojectreport(int value)
+        {
+            return HydraulicCoreBase.ENsetprojectreport22(projectID, value);
+        }
+
+
+
+        public int getbasedemand(int nodeIndex, int demandIndex, out List<double> baseDemand)
+        {
+            return HydraulicCoreBase.ENgetbasedemand22(projectID, nodeIndex, demandIndex, out baseDemand);
+        }
+        //琛ュ厖
+
+        public int getdemandpattern(int nodeIndex, int demandIndex,
+                                  out List<int> patIndex)
+        {
+            return HydraulicCoreBase.ENgetdemandpattern22(projectID, nodeIndex, demandIndex, out patIndex);
+        }
+
+        public int getTotalDemand(int p, out double value)
+        {
+            return HydraulicCoreBase.ENgetTotalDemand22(projectID, p, out value);
+        }
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/Hydro/Yw.EPAnet.Core/Yw.EPAnet.Core.csproj b/Hydro/Yw.EPAnet.Core/Yw.EPAnet.Core.csproj
new file mode 100644
index 0000000..141e38f
--- /dev/null
+++ b/Hydro/Yw.EPAnet.Core/Yw.EPAnet.Core.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+  </PropertyGroup>
+
+</Project>

--
Gitblit v1.9.3