using AForge; using CodeProvider; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Eptools { public class EPAModelInput { public static Dictionary defineEPATypeCode = new Dictionary() { { eType.press,EpanetBase.Const_class.Const_Node.EN_TANKLEVEL }, { eType.demand,EpanetBase.Const_class.Const_Node.EN_DEMAND }, { eType.level,EpanetBase.Const_class.Const_Node.EN_TANKLEVEL }, { eType.initPumpRS,EpanetBase.Const_class.Const_Link.EN_INITSETTING }, { eType.initSettings,EpanetBase.Const_class.Const_Link.EN_INITSETTING }, { eType.initStatus,EpanetBase.Const_class.Const_Link.EN_INITSTATUS }, }; 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 } /// /// 结合INP文件,输入要设置的对象的编号 /// public string ObjectID; /// /// 结合INP文件,输入要设置的对象类型,类型包括: /// public eType Type; /// /// 输入参数的数值 /// public float Value { get; set; } } [Serializable] public class EPAModelParams { public Guid ID = new Guid(); public List 初始条件 = new List(); public List 下阶段条件 = new List(); public List 约束变量 = new List(); public List 试算变量 = new List(); public List 变量 = new List(); public OBJFunction OFunction; } [Serializable] public class variable { public int ID; public string modelObjectID; public string Name; public int modelIndex; public int ParentID; public bool isNode; public bool? isOutput; public dynamic Type; public dynamic resultType; public double value; public double initValue; public double resultValue; public DRange doubleRange; public double? accuracy; public string DEFINEVALUE; public string expressType; public int ObjType; } [Serializable] public class DRange { private double min; private double max; public double Min { get { return min; } set { min = value; } } public double Max { get { return max; } set { max = value; } } public double Length => max - min; public DRange(double min, double max) { this.min = min; this.max = max; } } [Serializable] public class OBJFunction { public string Text_origin; public string Text; public string ExpressType; public string Name; /// /// true:使用表达式模式,false:使用编号模式 /// public bool? isUseExpression = true; public double value; public double DefineValue; public variable variable; public List paramVariables; public List paramValues; public MyEval eval; } public class GeneticParams { public List list_BestEnerge; public List list_AvgHz; public List ranges; public List DLengths; public List accuracys; public double[] list_AtemtpArr; public int populationSize; public int selectionMethod; public int optimizationMode; public bool showOnlyBest; public int iterations; public double accuracyNum; public int num; public double BestOptValue; public FinishEvent onFinished; public FinishEvent onError; public FinishEvent onReportProgress; } public delegate void FinishEvent(dynamic txt); //public event FinishEvent ss; class ResultCombine { public double[] arrayTryValue = null; public double ObjFunctionValue; } 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 = (int)EpanetBase.Const_class.Const_Node.EN_HEAD,//10 /// /// 流量(计算结果,单位立方米每小时,从开始节点流向结束节点为正) /// FLOW = (int)EpanetBase.Const_class.Const_Link.EN_FLOW,//8 /// /// 流速 /// VELOCITY=(int)EpanetBase.Const_class.Const_Link.EN_VELOCITY,//9 /// /// 能耗 /// EN_ENERGY=(int)EpanetBase.Const_class.Const_Link.EN_ENERGY,//13 /// /// 开关量 /// EN_INITSTATUS = (int)EpanetBase.Const_class.Const_Link.EN_INITSTATUS,//4 } 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 Quene { public static Dictionary ResultDictionary; public static List MissionQuene; public static DateTime ScadaTime; public static EPAModelParams Params; } public class calcParam { public double[] vars; public Guid ID; } public class TimePoint { public DateTime ValueTime { get; set; } public string TagName { get; set; } public double Value { get; set; } } public class Factory { public int ID { get; set; } public double Value { get; set; } } public class WdnmoParam { public int type { get; set; } public List TimeLine { get; set; } public List Factories { get; set; } public List DataConfigs { get; set; } public List FactoryDefines { get; set; } public List ResultPoints { get; set; } } public class DataConfig { public int type { get; set; } public string ConfigPath { get; set; } public string ModelPath { get; set; } } public class ResultPoint { public string Key { get; set; } public double Value { get; set; } } public class FactoryDefine { public string ID { get; set; } public string ModelObjectID { get; set; } } }