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<eType, int> defineEPATypeCode = new Dictionary<eType, int>()
|
{
|
{ 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
|
{
|
/// <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,
|
}
|
|
/// <summary>
|
/// 结合INP文件,输入要设置的对象的编号
|
/// </summary>
|
public string ObjectID;
|
|
/// <summary>
|
/// 结合INP文件,输入要设置的对象类型,类型包括:
|
/// </summary>
|
public eType Type;
|
|
/// <summary>
|
/// 输入参数的数值
|
/// </summary>
|
public float Value { get; set; }
|
|
|
}
|
|
|
public class EPAModelOutput
|
{
|
public enum ObjType
|
{
|
/// <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,
|
}
|
|
public enum eType
|
{
|
|
|
/// <summary>
|
/// 绝对水压
|
/// </summary>
|
HEAD_HEADLOSSS = (int)Epanet.Const_class.Const_Node.EN_HEAD,//10
|
|
///// <summary>
|
///// 自由水压
|
///// </summary>
|
//PRESSURE = (int)Epanet.Const_class.Const_Node.EN_PRESSURE,//11
|
|
|
/// <summary>
|
/// 需水量
|
/// </summary>
|
DEMAND = (int)Epanet.Const_class.Const_Node.EN_DEMAND,//9
|
|
/// <summary>
|
/// 节点水质&&转速|粗糙|阀门设置
|
/// </summary>
|
QUALITY_SETTINGS = (int)Epanet.Const_class.Const_Node.EN_QUALITY,//12
|
|
///// <summary>
|
///// 节点水龄
|
///// </summary>
|
//HEAD = (int)Epanet.Const_class.Const_Node.EN_QUALITY,//12
|
|
/// <summary>
|
/// 流量(计算结果,单位立方米每小时,从开始节点流向结束节点为正)
|
/// </summary>
|
FLOW = (int)Epanet.Const_class.Const_Link.EN_FLOW,//8
|
/// <summary>
|
/// 流速 && 需水量
|
/// </summary>
|
VELOCITY_DEMAND = (int)Epanet.Const_class.Const_Link.EN_VELOCITY,//9
|
/// <summary>
|
/// 能耗
|
/// </summary>
|
ENERGY = (int)Epanet.Const_class.Const_Link.EN_ENERGY,//13
|
/// <summary>
|
/// 开关量
|
/// </summary>
|
INITSTATUS = (int)Epanet.Const_class.Const_Link.EN_INITSTATUS,//4
|
|
/// <summary>
|
/// 状态or自由水压
|
/// </summary>
|
STATUS_PRESSURE = (int)Epanet.Const_class.Const_Link.EN_STATUS,//11
|
/// <summary>
|
/// 转速|粗糙系数|阀门设置
|
/// </summary>
|
//EN_INITSTATUS = (int)Epanet.Const_class.Const_Link.EN_SETTING,//12
|
|
/// <summary>
|
/// 口径
|
/// </summary>
|
EN_DIAMETER = (int)Epanet.Const_class.Const_Link.EN_DIAMETER,//0
|
|
/// <summary>
|
/// 长度
|
/// </summary>
|
EN_LENGTH = (int)Epanet.Const_class.Const_Link.EN_LENGTH,//1
|
|
|
|
}
|
|
|
public string ObjectID;
|
public ObjType Type;
|
|
}
|
|
|
|
|
|
|
public class EpaModelOutputNode : EPAModelOutput
|
{
|
public class Result
|
{
|
/// <summary>
|
/// 标高
|
/// </summary>
|
public double EN_ELEVATION { get; set; }
|
/// <summary>
|
/// 基本需水量
|
/// </summary>
|
public double EN_BASEDEMAND { get; set; }
|
|
/// <summary>
|
/// 实际需水量
|
/// </summary>
|
public double EN_DEMAND { get; set; }
|
/// <summary>
|
/// 绝对压力(计算结果,单位米水柱)
|
/// </summary>
|
public double EN_HEAD { get; set; }
|
/// <summary>
|
/// 自由压力(计算结果,单位米水柱)
|
/// </summary>
|
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
|
{
|
/// <summary>
|
/// 直径
|
/// </summary>
|
public double EN_DIAMETER { get; set; }
|
/// <summary>
|
/// 长度
|
/// </summary>
|
public double EN_LENGTH { get; set; }
|
/// <summary>
|
/// 流量(计算结果,单位立方米每小时,从开始节点流向结束节点为正)
|
/// </summary>
|
public double EN_FLOW { get; set; }
|
/// <summary>
|
/// 流速(计算结果,单位米每秒)
|
/// </summary>
|
public double EN_VELOCITY { get; set; }
|
/// <summary>
|
/// 水头损失(计算结果,如果是水泵,则表示提升水头,值为负)
|
/// </summary>
|
public double EN_HEADLOSS { get; set; }
|
/// <summary>
|
/// 实际管段状态(0关1开)
|
/// </summary>
|
public double EN_STATUS { get; set; }
|
/// <summary>
|
/// 实际水泵转速比(计算结果,转换为Hz一般乘以50)
|
/// </summary>
|
public double EN_SETTING { get; set; }
|
/// <summary>
|
/// 消耗能量(计算结果,千瓦)
|
/// </summary>
|
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; }
|
//}
|
|
|
}
|