//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(); mode_tag_list.AddRange(mode_tag_list1); mode_tag_list.AddRange(mode_tag_list2); var pressure_tag_list1 = new List() { "SPJD1", "SPJD2", "SPJD3", "SPPump11", "SPPump12", "SPPump13", "SPPump14", "SPPump15", "SPPump16", "SPPump17", "SPPump18" }; var pressure_tag_list2 = new List() { "SPDN2400","SPDN2700","SPPump21","SPPump22","SPPump23","SPPump24","SPPump25","SPPump26","SPPump27" }; var pressure_tag_list = new List(); pressure_tag_list.AddRange(pressure_tag_list1); pressure_tag_list.AddRange(pressure_tag_list2); var flow_tag_list1 = new List() { "SFJD1", "SFJD2", "SFJD3" }; var flow_tag_list2 = new List() { "SFDN2400", "SFDN2700", "SFPump21", "SFPump22", "SFPump23", "SFPump24", "SFPump25", "SFPump26", "SFPump27" }; var flow_tag_list = new List(); flow_tag_list.AddRange(flow_tag_list1); flow_tag_list.AddRange(flow_tag_list2); var pressure_node_dict1=new Dictionary() { {"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() { {"SPDN2400","Jdn2400"}, {"SPDN2700","Jdn2700"}, {"SPPump21","Jpump21"}, {"SPPump22","Jpump22"}, {"SPPump23","Jpump23"}, {"SPPump24","Jpump24"}, {"SPPump25","Jpump25"}, {"SPPump26","Jpump26"}, {"SPPump27","Jpump27"} }; var flow_node_dict1 = new Dictionary() { {"SFJD1","Pjd1"}, {"SFJD2","Pjd2"}, {"SFJD3","Pjd3"} }; var flow_node_dict2 = new Dictionary() { {"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(); var mode_float_dict = new Dictionary>(); foreach (var tag in mode_tag_list) { mode_float_dict[tag] = new List(); } 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(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(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; }