|
|
|
//var fileName =$"{AppDomain.CurrentDomain.BaseDirectory}w.inp";
|
using IStation.Epanet;
|
using IStation.Epanet.Analysis;
|
using IStation.Epanet.Enums;
|
using System.Text;
|
using Yw;
|
using Yw.Untity;
|
|
|
|
IStation.ConfigHelper.InitHydraulicDB();
|
|
|
var station1 = "Pump11,Pump12,Pump13,Pump14,Pump15,Pump16,Pump17,Pump18,R3,R2,R1,SFJD1,SFJD2,SFJD3";
|
var mode_tag_list1 = StringListHelper.ToList(station1);
|
|
var station2 = "RPump21,SFPump21,Pump21,RPump22,SFPump22,Pump22,RPump23,SFPump23,Pump23,RPump24,SFPump24,Pump24,RPump25,SFPump25,Pump25,RPump26,SFPump26,Pump26,RPump27,SFPump27,Pump27,SFDN2400,SFDN2700";
|
var mode_tag_list2 = StringListHelper.ToList(station2);
|
|
var mode_tag_list = new List<string>();
|
mode_tag_list.AddRange(mode_tag_list1);
|
mode_tag_list.AddRange(mode_tag_list2);
|
|
var pressure_tag_list1 = new List<string>() { "SPJD1", "SPJD2", "SPJD3", "SPPump11", "SPPump12", "SPPump13", "SPPump14", "SPPump15", "SPPump16", "SPPump17", "SPPump18" };
|
var pressure_tag_list2 = new List<string>() { "SPDN2400","SPDN2700","SPPump21","SPPump22","SPPump23","SPPump24","SPPump25","SPPump26","SPPump27" };
|
|
var pressure_tag_list = new List<string>();
|
pressure_tag_list.AddRange(pressure_tag_list1);
|
pressure_tag_list.AddRange(pressure_tag_list2);
|
|
|
var flow_tag_list1 = new List<string>() { "SFJD1", "SFJD2", "SFJD3" };
|
var flow_tag_list2 = new List<string>() { "SFDN2400", "SFDN2700", "SFPump21", "SFPump22", "SFPump23", "SFPump24", "SFPump25", "SFPump26", "SFPump27" };
|
|
var flow_tag_list = new List<string>();
|
flow_tag_list.AddRange(flow_tag_list1);
|
flow_tag_list.AddRange(flow_tag_list2);
|
|
|
var pressure_node_dict1=new Dictionary<string, string>()
|
{
|
{"SPJD1","Jjd1"},
|
{"SPJD2","Jjd1"},
|
{"SPJD3","Jjd3"},
|
{"SPPump11","Jpump11"},
|
{"SPPump12","Jpump12"},
|
{"SPPump13","Jpump13"},
|
{"SPPump14","Jpump14"},
|
{"SPPump15","Jpump15"},
|
{"SPPump16","Jpump16"},
|
{"SPPump17","Jpump17"},
|
{"SPPump18","Jpump18"}
|
};
|
|
var pressure_node_dict2 = new Dictionary<string, string>()
|
{
|
{"SPDN2400","Jdn2400"},
|
{"SPDN2700","Jdn2700"},
|
{"SPPump21","Jpump21"},
|
{"SPPump22","Jpump22"},
|
{"SPPump23","Jpump23"},
|
{"SPPump24","Jpump24"},
|
{"SPPump25","Jpump25"},
|
{"SPPump26","Jpump26"},
|
{"SPPump27","Jpump27"}
|
};
|
|
|
|
var flow_node_dict1 = new Dictionary<string, string>()
|
{
|
{"SFJD1","Pjd1"},
|
{"SFJD2","Pjd2"},
|
{"SFJD3","Pjd3"}
|
};
|
|
var flow_node_dict2 = new Dictionary<string, string>()
|
{
|
{"SFDN2400","Pdn2400"},
|
{"SFDN2700","Pdn2700"},
|
{"SFPump21","Ppump21"},
|
{"SFPump22","Ppump22"},
|
{"SFPump23","Ppump23"},
|
{"SFPump24","Ppump24"},
|
{"SFPump25","Ppump25"},
|
{"SFPump26","Ppump26"},
|
{"SFPump27","Ppump27"}
|
};
|
|
|
|
|
|
var filePath = $"{AppDomain.CurrentDomain.BaseDirectory}ch2_v3_20240614.inp";
|
var dayValues = DayValueHelper.GetDayValues(1);
|
if (dayValues == null || !dayValues.Any())
|
return;
|
|
|
var err = EpanetMethods.ENopen(filePath, "", "");
|
if (err != 0)
|
{
|
var msg = err.GetMsg();
|
return;
|
}
|
|
|
var records=new List<IStation.Model.HydraulicRecord>();
|
|
var mode_float_dict = new Dictionary<string, List<float>>();
|
foreach (var tag in mode_tag_list)
|
{
|
mode_float_dict[tag] = new List<float>();
|
}
|
|
|
int patIndex;
|
EpanetMethods.ENopenH();
|
foreach (var dayValue in dayValues)
|
{
|
|
foreach (var item in mode_float_dict)
|
item.Value.Clear();
|
|
//更新时间模式
|
var timeValueList = dayValue.TimeValues;
|
for (int i = 0; i < timeValueList.Count; i++)
|
{
|
var valueDict = timeValueList[i].Value;
|
foreach (var item in valueDict)
|
{
|
var tag = item.Key;
|
var value = item.Value;
|
if (mode_tag_list.Contains(tag))
|
{
|
var fv = (float)value;
|
mode_float_dict[tag].Add(fv);
|
}
|
}
|
}
|
|
foreach (var mode in mode_float_dict)
|
{
|
var patId = mode.Key;
|
var patFactors = mode.Value.ToArray();
|
var patFactorsCount = mode.Value.Count;
|
patFactorsCount = patFactorsCount == 0 ? 1 : patFactorsCount;
|
err = EpanetMethods.ENgetpatternindex(patId, out patIndex);
|
if (err != ErrorCode.Ok)
|
{
|
var msg = err.GetMsg();
|
return;
|
}
|
err = EpanetMethods.ENsetpattern(patIndex, patFactors, patFactorsCount);
|
if (err != ErrorCode.Ok)
|
{
|
var msg = err.GetMsg();
|
return;
|
}
|
}
|
|
var output = new Output();
|
int tstep = 0;
|
EpanetMethods.ENinitH(0);
|
do
|
{
|
const int MAXID = 31;
|
var idBuild = new StringBuilder(MAXID);
|
var jsonBuild = new StringBuilder();
|
|
EpanetMethods.ENrunH(out int t);
|
EpanetMethods.ENgetcount(CountType.Node, out int nodeCount);
|
EpanetMethods.ENgetcount(CountType.Link, out int linkCount);
|
|
var time = TimeSpan.FromSeconds(t);
|
TimeValue timeVlaue = null;
|
if (time.TotalSeconds != 86400)
|
{
|
timeVlaue = timeValueList.Find(x => x.Time.TimeOfDay == time);
|
if (timeVlaue == null)
|
continue;
|
}
|
else
|
{
|
|
|
}
|
|
|
for (int i = 1; i <= nodeCount; i++)
|
{
|
if (EpanetMethods.ENgetnodeid(i, idBuild) != ErrorCode.Ok)
|
continue;
|
var nodeId = idBuild.ToString();
|
if (!Exist(nodeId, out string tag))
|
continue;
|
|
|
jsonBuild.Clear();
|
jsonBuild.Append("{");
|
foreach (NodeValue f in Enum.GetValues(typeof(NodeValue)))
|
{
|
EpanetMethods.ENgetnodevalue(i, f, out float v);
|
jsonBuild.Append($"\"{f}\":\"{v}\",");
|
}
|
jsonBuild.Remove(jsonBuild.Length - 1, 1);
|
jsonBuild.Append("}");
|
|
EpanetMethods.ENgetnodetype(i, out NodeType type);
|
var outNode = JsonHelper.Json2Object<OutNode>(jsonBuild.ToString());
|
outNode.NodeType = type;
|
outNode.ID = nodeId;
|
outNode.Time = time;
|
output.Nodes.Add(outNode);
|
|
if (timeVlaue != null && timeVlaue.Value.ContainsKey(tag))
|
{
|
var value = timeVlaue.Value[tag];
|
var record = new IStation.Model.HydraulicRecord();
|
record.Time = timeVlaue.Time;
|
record.ModeId = nodeId;
|
record.ScadaId = tag;
|
record.ValueType = IStation.eValueType.Head;
|
record.ModeValue = (double)outNode.Head;
|
record.ScadaValue = value;
|
record.DifferenceValue = record.ScadaValue - record.ModeValue;
|
records.Add(record);
|
}
|
|
}
|
|
for (int i = 1; i <= linkCount; i++)
|
{
|
if (EpanetMethods.ENgetlinkid(i, idBuild) != ErrorCode.Ok)
|
continue;
|
var linkId = idBuild.ToString();
|
if (!Exist(linkId, out string tag))
|
continue;
|
// Console.WriteLine(tag);
|
|
jsonBuild.Clear();
|
jsonBuild.Append("{");
|
foreach (LinkValue f in Enum.GetValues(typeof(LinkValue)))
|
{
|
EpanetMethods.ENgetlinkvalue(i, f, out float v);
|
jsonBuild.Append($"\"{f}\":\"{v}\",");
|
}
|
jsonBuild.Remove(jsonBuild.Length - 1, 1);
|
jsonBuild.Append("}");
|
|
EpanetMethods.ENgetlinktype(i, out LinkType type);
|
var outLink = JsonHelper.Json2Object<OutLink>(jsonBuild.ToString());
|
outLink.LinkType = type;
|
outLink.ID = linkId;
|
outLink.Time = time;
|
output.Links.Add(outLink);
|
|
|
if (timeVlaue != null && timeVlaue.Value.ContainsKey(tag))
|
{
|
var value = timeVlaue.Value[tag];
|
var record = new IStation.Model.HydraulicRecord();
|
record.Time = timeVlaue.Time;
|
record.ModeId = linkId;
|
record.ScadaId = tag;
|
record.ValueType = IStation.eValueType.Flow;
|
record.ModeValue = (double)outLink.Flow;
|
record.ScadaValue = value;
|
record.DifferenceValue = record.ScadaValue - record.ModeValue;
|
records.Add(record);
|
}
|
|
|
}
|
|
EpanetMethods.ENnextH(out tstep);
|
|
} while (tstep > 0);
|
|
|
var json = JsonHelper.Object2FormatJson(output);
|
File.WriteAllText("D:\\cw.json", json);
|
break;
|
|
}
|
EpanetMethods.ENcloseH();
|
|
var r = records;
|
|
Console.WriteLine("OK");
|
//var json = Yw.JsonHelper.Object2FormatJson(output);
|
//Console.WriteLine(json);
|
Console.ReadKey();
|
|
|
|
bool Exist(string id,out string tag)
|
{
|
var exist = false;
|
tag = string.Empty;
|
foreach (var item in pressure_node_dict1)
|
{
|
if (item.Value == id)
|
{
|
tag = item.Key;
|
exist = true;
|
}
|
}
|
|
if (exist)
|
return true;
|
|
foreach (var item in pressure_node_dict2)
|
{
|
if (item.Value == id)
|
{
|
tag = item.Key;
|
exist = true;
|
}
|
}
|
|
if (exist)
|
return true;
|
|
foreach (var item in flow_node_dict1)
|
{
|
if (item.Value == id)
|
{
|
tag = item.Key;
|
exist = true;
|
}
|
}
|
|
if (exist)
|
return true;
|
|
foreach (var item in flow_node_dict2)
|
{
|
if (item.Value == id)
|
{
|
tag = item.Key;
|
exist = true;
|
}
|
}
|
|
return exist;
|
}
|