using IStation.Epanet.Analysis; using IStation.Epanet.Enums; using System.Text; using Yw; namespace IStation.Epanet { /// /// 水力模型调度 /// public class StationScheduleHelper { public static string Schedule(int stationId,string filePath) { var err = EpanetMethods.ENopen(filePath, "", ""); if (err != 0) { return $"ENopen:{new EnException(err).Message}!"; } int tstep = 0; EpanetMethods.ENopenH(); 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); for (int i = 1; i <= nodeCount; i++) { if (EpanetMethods.ENgetnodeid(i, idBuild) != 0) 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 = idBuild.ToString(); outNode.Time = TimeSpan.FromSeconds(t); output.Nodes.Add(outNode); } for (int i = 1; i <= linkCount; i++) { if (EpanetMethods.ENgetlinkid(i, idBuild) != 0) continue; 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 = idBuild.ToString(); outLink.Time = TimeSpan.FromSeconds(t); output.Links.Add(outLink); } EpanetMethods.ENnextH(out tstep); } while (tstep > 0); EpanetMethods.ENcloseH(); return string.Empty; } } }