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; namespace HydraulicModel { public class EPAModelInput { public static Dictionary defineEPATypeCode = new Dictionary() { { eType.press,Epanet.Const_class.Const_Node.EN_TANKLEVEL }, { eType.demand,Epanet.Const_class.Const_Node.EN_DEMAND }, { eType.level,Epanet.Const_class.Const_Node.EN_TANKLEVEL }, { eType.initPumpRS,Epanet.Const_class.Const_Link.EN_INITSETTING }, { eType.initSettings,Epanet.Const_class.Const_Link.EN_INITSETTING }, { eType.initStatus,Epanet.Const_class.Const_Link.EN_INITSTATUS }, { eType.pattern,Epanet.Const_class.Const_Node.EN_PATTERN }, }; public enum eType { /// /// 绝对压力,单位米水柱 /// press = 0, //绝对压力 /// /// 用水量,单位是立方米每小时 /// demand = 1,// 用水量 /// /// 水池水位,单位是米 /// level = 2,// 水池液位 /// /// 水泵转速比 /// initPumpRS = 3,// 0 水泵状态0/1还是水泵频率0~1 频率/50 转速/额定转速 /// /// 粗糙度、阀门开度 /// initSettings = 4, /// /// 开关状态 /// initStatus = 5,// 0 水泵状态0/1还是水泵频率0~1 频率/50 转速/额定转速 /// /// 管径 /// diameter = 6, /// /// 长度 /// length =7, /// /// 模式 /// pattern = 8, /// /// 总水量 /// totalDemand=9, /// /// 分配水量 /// Distribution_TotalDemand=10, /// /// 分配当量 /// Distribution_UnitDemand=11, } /// /// 结合INP文件,输入要设置的对象的编号 /// public string ObjectID; /// /// 结合INP文件,输入要设置的对象类型,类型包括: /// public eType Type; /// /// 输入参数的数值 /// public float Value { get; set; } } public class EPAModelOutput { public enum ObjType { /// /// 节点 /// EN_JUNCTION = 0, /// /// 水库节点 /// EN_RESERVOIR = 1, /// /// 水池节点 /// EN_TANK = 2, /// /// 具有止回阀的管道 /// EN_CVPIPE = 10, /// /// 管道 /// EN_PIPE = 11, /// /// 水泵 /// EN_PUMP = 12, /// /// 减压阀 /// EN_PRV = 13, /// /// 稳压阀 /// EN_PSV = 14, /// /// 压力制动阀 /// EN_PBV = 15, /// /// 流量控制阀 /// EN_FCV = 16, /// /// 节流控制阀 /// EN_TCV = 17, /// /// 常规阀门 /// EN_GPV = 18, } public enum eType { /// /// 绝对水压 /// HEAD_HEADLOSSS = (int)Epanet.Const_class.Const_Node.EN_HEAD,//10 ///// ///// 自由水压 ///// //PRESSURE = (int)Epanet.Const_class.Const_Node.EN_PRESSURE,//11 /// /// 需水量 /// DEMAND = (int)Epanet.Const_class.Const_Node.EN_DEMAND,//9 /// /// 节点水质&&转速|粗糙|阀门设置 /// QUALITY_SETTINGS = (int)Epanet.Const_class.Const_Node.EN_QUALITY,//12 ///// ///// 节点水龄 ///// //HEAD = (int)Epanet.Const_class.Const_Node.EN_QUALITY,//12 /// /// 流量(计算结果,单位立方米每小时,从开始节点流向结束节点为正) /// FLOW = (int)Epanet.Const_class.Const_Link.EN_FLOW,//8 /// /// 流速 && 需水量 /// VELOCITY_DEMAND = (int)Epanet.Const_class.Const_Link.EN_VELOCITY,//9 /// /// 能耗 /// ENERGY = (int)Epanet.Const_class.Const_Link.EN_ENERGY,//13 /// /// 开关量 /// INITSTATUS = (int)Epanet.Const_class.Const_Link.EN_INITSTATUS,//4 /// /// 状态or自由水压 /// STATUS_PRESSURE = (int)Epanet.Const_class.Const_Link.EN_STATUS,//11 /// /// 转速|粗糙系数|阀门设置 /// //EN_INITSTATUS = (int)Epanet.Const_class.Const_Link.EN_SETTING,//12 /// /// 口径 /// EN_DIAMETER = (int)Epanet.Const_class.Const_Link.EN_DIAMETER,//0 /// /// 长度 /// EN_LENGTH = (int)Epanet.Const_class.Const_Link.EN_LENGTH,//1 } public string ObjectID; public ObjType Type; } public class EpaModelOutputNode : EPAModelOutput { public class Result { /// /// 标高 /// public double EN_ELEVATION { get; set; } /// /// 基本需水量 /// public double EN_BASEDEMAND { get; set; } /// /// 实际需水量 /// public double EN_DEMAND { get; set; } /// /// 绝对压力(计算结果,单位米水柱) /// public double EN_HEAD { get; set; } /// /// 自由压力(计算结果,单位米水柱) /// public double EN_PRESSURE { get; set; } } public int[] Get_list_ValueIndex() { return new int[] { 0, 1, 9, 10, 11 }; } public void SetValue(int i, float value) { switch (i) { case 0: result.EN_ELEVATION = value; break; case 1: result.EN_BASEDEMAND = value; break; case 9: result.EN_DEMAND = value; break; case 10: result.EN_HEAD = value; break; case 11: result.EN_PRESSURE = value; break; } } public Result result = new Result(); } public class EpaModelOutputLink : EPAModelOutput { public class Result { /// /// 直径 /// public double EN_DIAMETER { get; set; } /// /// 长度 /// public double EN_LENGTH { get; set; } /// /// 流量(计算结果,单位立方米每小时,从开始节点流向结束节点为正) /// public double EN_FLOW { get; set; } /// /// 流速(计算结果,单位米每秒) /// public double EN_VELOCITY { get; set; } /// /// 水头损失(计算结果,如果是水泵,则表示提升水头,值为负) /// public double EN_HEADLOSS { get; set; } /// /// 实际管段状态(0关1开) /// public double EN_STATUS { get; set; } /// /// 实际水泵转速比(计算结果,转换为Hz一般乘以50) /// public double EN_SETTING { get; set; } /// /// 消耗能量(计算结果,千瓦) /// public double EN_ENERGY { get; set; } } public int[] Get_list_ValueIndex() { return new int[] { 0, 1, 8, 9, 10, 11, 12, 13 }; } public void SetValue(int i, float value) { switch (i) { case 0: result.EN_DIAMETER = value; break; case 1: result.EN_LENGTH = value; break; case 8: result.EN_FLOW = value; break; case 9: result.EN_VELOCITY = value; break; case 10: result.EN_HEADLOSS = value; break; case 11: result.EN_STATUS = value; break; case 12: result.EN_SETTING = value; break; case 13: result.EN_ENERGY = value; break; } } public Result result = new Result(); } //public class ResultPoint //{ // public string Key { get; set; } // public double Value { get; set; } //} }