using DevExpress.XtraEditors; using IStation.Epanet; using IStation.Epanet.Enums; using System.Data; using System.Text; namespace IStation.Win { public partial class CorrectionFactorView : DevExpress.XtraEditors.XtraUserControl { public CorrectionFactorView() { InitializeComponent(); this.layoutControl1.SetupLayoutControl(); this.bandedGridView1.SetNormalView(); this.bandedGridView1.OptionsView.ColumnAutoWidth = false; this.gridView2.SetNormalView(); this.dtDay.SetOnlyShowDate(); this.dtDay.DateTime = new DateTime(2024, 6, 5); this.colTime.Visible = true; this.colTotalFlow1.Visible = false; this.colTotalHead1.Visible = false; this.colRunFlags1.Visible = false; this.colTotalFlow2.Visible = true; this.colTotalHead2.Visible = true; this.colRunFlags2.Visible = true; ShowWL(false); ShowFlow(false); ShowPump(false); ShowPressure(false); ShowWL(false); ShowFlow(false); ShowPump(true); ShowPressure(true); } private void ShowWL(bool v) { this.colR1.Visible = v; this.colR2.Visible = v; this.colR3.Visible = v; this.colRPump21.Visible = v; this.colRPump22.Visible = v; this.colRPump23.Visible = v; this.colRPump24.Visible = v; this.colRPump25.Visible = v; this.colRPump26.Visible = v; this.colRPump27.Visible = v; } private void ShowFlow(bool v) { this.colDN2400F.Visible = v; this.colDN2700F.Visible = v; this.colPump21F.Visible = v; this.colPump22F.Visible = v; this.colPump23F.Visible = v; this.colPump24F.Visible = v; this.colPump25F.Visible = v; this.colPump26F.Visible = v; this.colPump27F.Visible = v; this.colDN2400FM.Visible = v; this.colDN2700FM.Visible = v; this.colPump21FM.Visible = v; this.colPump22FM.Visible = v; this.colPump23FM.Visible = v; this.colPump24FM.Visible = v; this.colPump25FM.Visible = v; this.colPump26FM.Visible = v; this.colPump27FM.Visible = v; this.colDN2400FDiff.Visible = v; this.colDN2700FDiff.Visible = v; this.colPump21FDiff.Visible = v; this.colPump22FDiff.Visible = v; this.colPump23FDiff.Visible = v; this.colPump24FDiff.Visible = v; this.colPump25FDiff.Visible = v; this.colPump26FDiff.Visible = v; this.colPump27FDiff.Visible = v; if (v) { return; } this.colJD1FDiff.Visible = v; this.colJD2FDiff.Visible = v; this.colJD3FDiff.Visible = v; this.colJD1FM.Visible = v; this.colJD2FM.Visible = v; this.colJD3FM.Visible = v; this.colJD1F.Visible = v; this.colJD2F.Visible = v; this.colJD3F.Visible = v; } private void ShowPressure(bool v) { this.colDN2400P.Visible = v; this.colDN2700P.Visible = v; this.colPump21P.Visible = v; this.colPump22P.Visible = v; this.colPump23P.Visible = v; this.colPump24P.Visible = v; this.colPump25P.Visible = v; this.colPump26P.Visible = v; this.colPump27P.Visible = v; this.colDN2400PM.Visible = v; this.colDN2700PM.Visible = v; this.colPump21PM.Visible = v; this.colPump22PM.Visible = v; this.colPump23PM.Visible = v; this.colPump24PM.Visible = v; this.colPump25PM.Visible = v; this.colPump26PM.Visible = v; this.colPump27PM.Visible = v; this.colDN2400PDiff.Visible = v; this.colDN2700PDiff.Visible = v; this.colPump21PDiff.Visible = v; this.colPump22PDiff.Visible = v; this.colPump23PDiff.Visible = v; this.colPump24PDiff.Visible = v; this.colPump25PDiff.Visible = v; this.colPump26PDiff.Visible = v; this.colPump27PDiff.Visible = v; if (v) { return; } this.colJD1P.Visible = v; this.colJD2P.Visible = v; this.colJD3P.Visible = v; this.colPump11P.Visible = v; this.colPump12P.Visible = v; this.colPump13P.Visible = v; this.colPump14P.Visible = v; this.colPump15P.Visible = v; this.colPump16P.Visible = v; this.colPump17P.Visible = v; this.colPump18P.Visible = v; this.colJD1PM.Visible = v; this.colJD2PM.Visible = v; this.colJD3PM.Visible = v; this.colPump11PM.Visible = v; this.colPump12PM.Visible = v; this.colPump13PM.Visible = v; this.colPump14PM.Visible = v; this.colPump15PM.Visible = v; this.colPump16PM.Visible = v; this.colPump17PM.Visible = v; this.colPump18PM.Visible = v; this.colJD1PDiff.Visible = v; this.colJD2PDiff.Visible = v; this.colJD3PDiff.Visible = v; this.colPump11PDiff.Visible = v; this.colPump12PDiff.Visible = v; this.colPump13PDiff.Visible = v; this.colPump14PDiff.Visible = v; this.colPump15PDiff.Visible = v; this.colPump16PDiff.Visible = v; this.colPump17PDiff.Visible = v; this.colPump18PDiff.Visible = v; } private void ShowPump(bool v) { this.colPump21.Visible = v; this.colPump22.Visible = v; this.colPump23.Visible = v; this.colPump24.Visible = v; this.colPump25.Visible = v; this.colPump26.Visible = v; this.colPump27.Visible = v; this.colPump21M.Visible = v; this.colPump22M.Visible = v; this.colPump23M.Visible = v; this.colPump24M.Visible = v; this.colPump25M.Visible = v; this.colPump26M.Visible = v; this.colPump27M.Visible = v; this.colPump21Diff.Visible = v; this.colPump22Diff.Visible = v; this.colPump23Diff.Visible = v; this.colPump24Diff.Visible = v; this.colPump25Diff.Visible = v; this.colPump26Diff.Visible = v; this.colPump27Diff.Visible = v; if (v) { return; } this.colPump11.Visible = v; this.colPump12.Visible = v; this.colPump13.Visible = v; this.colPump14.Visible = v; this.colPump15.Visible = v; this.colPump16.Visible = v; this.colPump17.Visible = v; this.colPump18.Visible = v; this.colPump11M.Visible = v; this.colPump12M.Visible = v; this.colPump13M.Visible = v; this.colPump14M.Visible = v; this.colPump15M.Visible = v; this.colPump16M.Visible = v; this.colPump17M.Visible = v; this.colPump18M.Visible = v; this.colPump11Diff.Visible = v; this.colPump12Diff.Visible = v; this.colPump13Diff.Visible = v; this.colPump14Diff.Visible = v; this.colPump15Diff.Visible = v; this.colPump16Diff.Visible = v; this.colPump17Diff.Visible = v; this.colPump18Diff.Visible = v; } private List _scada_vm_list = null; private List _correction_factor_vm_list = null; //调度 private void btnSchedule_Click(object sender, EventArgs e) { var service_station = new Service.Station(); var service_schedule_config = new Service.ScheduleConfig(); var hydraulic_model_file = System.IO.Path.Combine( Settings.ParasHelper.LocalFile.DataFolderDirectory, Settings.ParasHelper.LocalFile.HydraulicModelFile); _scada_vm_list = new List(); _correction_factor_vm_list = new List(); var day = this.dtDay.DateTime; var day_value = IStation.DayValueHelper.GetDayValue(day); if (day_value == null) { XtraMessageBox.Show("无法加载日期数据!"); return; } var bol = CorrectionFactorHelper.Analysis(day_value, out Dictionary>> correction_factor_dict); if (!bol) { XtraMessageBox.Show("无法加载修正系数!"); return; } if (correction_factor_dict == null || !correction_factor_dict.Any()) { XtraMessageBox.Show("无法加载修正系数!"); return; } WaitHelper.ShowWaitForm(); var time_value_list = day_value.TimeValueList; foreach (var time_value in time_value_list) { var time = time_value.Time; var scada_value_dict = time_value.Value; var vm = new ScadaScheduleViewModel(); vm.Time = time; vm.R1 = scada_value_dict["R1"]; vm.R2 = scada_value_dict["R2"]; vm.R3 = scada_value_dict["R3"]; vm.RPump21 = scada_value_dict["RPump21"]; vm.RPump22 = scada_value_dict["RPump22"]; vm.RPump23 = scada_value_dict["RPump23"]; vm.RPump24 = scada_value_dict["RPump24"]; vm.RPump25 = scada_value_dict["RPump25"]; vm.RPump26 = scada_value_dict["RPump26"]; vm.RPump27 = scada_value_dict["RPump27"]; vm.JD1P = scada_value_dict["SPJD1"]; vm.JD2P = scada_value_dict["SPJD2"]; vm.JD3P = scada_value_dict["SPJD3"]; vm.Pump11P = scada_value_dict["SPPump11"]; vm.Pump12P = scada_value_dict["SPPump12"]; vm.Pump13P = scada_value_dict["SPPump13"]; vm.Pump14P = scada_value_dict["SPPump14"]; vm.Pump15P = scada_value_dict["SPPump15"]; vm.Pump16P = scada_value_dict["SPPump16"]; vm.Pump17P = scada_value_dict["SPPump17"]; vm.Pump18P = scada_value_dict["SPPump18"]; vm.DN2400P = scada_value_dict["SPDN2400"]; vm.DN2700P = scada_value_dict["SPDN2700"]; vm.Pump21P = scada_value_dict["SPPump21"]; vm.Pump22P = scada_value_dict["SPPump22"]; vm.Pump23P = scada_value_dict["SPPump23"]; vm.Pump24P = scada_value_dict["SPPump24"]; vm.Pump25P = scada_value_dict["SPPump25"]; vm.Pump26P = scada_value_dict["SPPump26"]; vm.Pump27P = scada_value_dict["SPPump27"]; vm.JD1F = scada_value_dict["SFJD1"]; vm.JD2F = scada_value_dict["SFJD2"]; vm.JD3F = scada_value_dict["SFJD3"]; vm.DN2700F = scada_value_dict["SFDN2700"]; vm.DN2400F = scada_value_dict["SFDN2400"]; vm.Pump21F = scada_value_dict["SFPump21"]; vm.Pump22F = scada_value_dict["SFPump22"]; vm.Pump23F = scada_value_dict["SFPump23"]; vm.Pump24F = scada_value_dict["SFPump24"]; vm.Pump25F = scada_value_dict["SFPump25"]; vm.Pump26F = scada_value_dict["SFPump26"]; vm.Pump27F = scada_value_dict["SFPump27"]; vm.Pump11 = scada_value_dict["Pump11"]; vm.Pump12 = scada_value_dict["Pump12"]; vm.Pump13 = scada_value_dict["Pump13"]; vm.Pump14 = scada_value_dict["Pump14"]; vm.Pump15 = scada_value_dict["Pump15"]; vm.Pump16 = scada_value_dict["Pump16"]; vm.Pump17 = scada_value_dict["Pump17"]; vm.Pump18 = scada_value_dict["Pump18"]; vm.Pump21 = scada_value_dict["Pump21"]; vm.Pump22 = scada_value_dict["Pump22"]; vm.Pump23 = scada_value_dict["Pump23"]; vm.Pump24 = scada_value_dict["Pump24"]; vm.Pump25 = scada_value_dict["Pump25"]; vm.Pump26 = scada_value_dict["Pump26"]; vm.Pump27 = scada_value_dict["Pump27"]; vm.Sum(); _scada_vm_list.Add(vm); } foreach (var correction_factor_group_item in correction_factor_dict) { var flags = correction_factor_group_item.Key; foreach (var item in correction_factor_group_item.Value) { var vm = new CorrectionFactorViewModel { RunFlags = flags, Flag = item.Item1, Avg = item.Item2, Mode = item.Item3, ModeDisplay = Yw.Untity.DoubleListHelper.ToString(item.Item3) }; _correction_factor_vm_list.Add(vm); } } this.correctionFactorViewModelBindingSource.DataSource=_correction_factor_vm_list; this.correctionFactorViewModelBindingSource.ResetBindings(false); #region init_dict var pressure_id_mapping_dict = new Dictionary() { {"Jjd1","SPJD1"}, {"Jjd2","SPJD2"}, {"Jjd3","SPJD3"}, {"Jpump11","SPPump11" }, {"Jpump12","SPPump12" }, {"Jpump13","SPPump13" }, {"Jpump14","SPPump14" }, {"Jpump15","SPPump15" }, {"Jpump16","SPPump16" }, {"Jpump17","SPPump17" }, {"Jpump18","SPPump18" }, {"Jdn2400","SPDN2400"}, {"Jdn2700","SPDN2700"}, {"Jpump21","SPPump21"}, {"Jpump22","SPPump22"}, {"Jpump23","SPPump23"}, {"Jpump24","SPPump24"}, {"Jpump25","SPPump25"}, {"Jpump26","SPPump26"}, {"Jpump27","SPPump27"} }; var flow_id_mapping_dict = new Dictionary() { {"Pjd1","SFJD1"}, {"Pjd2","SFJD2"}, {"Pjd3","SFJD3"}, {"Pdn2400","SFDN2400"}, {"Pdn2700","SFDN2700"}, {"Ppump21","SFPump21"}, {"Ppump22","SFPump22"}, {"Ppump23","SFPump23"}, {"Ppump24","SFPump24"}, {"Ppump25","SFPump25"}, {"Ppump26","SFPump26"}, {"Ppump27","SFPump27"} }; var pattern_id_mapping_dict = new Dictionary() { {"R3", "R3"}, {"R2", "R2"}, {"R1", "R1"}, {"SFJD1", "SFJD1"}, {"SFJD2", "SFJD2"}, {"SFJD3", "SFJD3"}, {"RPump21", "RPump21"}, {"RPump22", "RPump22"}, {"RPump23", "RPump23"}, {"RPump24", "RPump24"}, {"RPump25", "RPump25"}, {"RPump26", "RPump26"}, {"RPump27", "RPump27"}, {"SFPump21", "SFPump21"}, {"SFPump22", "SFPump22"}, {"SFPump23", "SFPump23"}, {"SFPump24", "SFPump24"}, {"SFPump25", "SFPump25"}, {"SFPump26", "SFPump26"}, {"SFPump27", "SFPump27"}, {"SFDN2400", "SFDN2400"}, {"SFDN2700", "SFDN2700"}, }; var pump_id_mapping_dict_int = new Dictionary(){ { "Pump11",GlobalHelper.Flag11}, { "Pump12",GlobalHelper.Flag12}, { "Pump13",GlobalHelper.Flag13}, { "Pump14",GlobalHelper.Flag14}, { "Pump15",GlobalHelper.Flag15}, { "Pump16",GlobalHelper.Flag16}, { "Pump17",GlobalHelper.Flag17}, { "Pump18",GlobalHelper.Flag18}, { "Pump21",GlobalHelper.Flag21}, { "Pump22",GlobalHelper.Flag22}, { "Pump23",GlobalHelper.Flag23}, { "Pump24",GlobalHelper.Flag24}, { "Pump25",GlobalHelper.Flag25}, { "Pump26",GlobalHelper.Flag26}, { "Pump27",GlobalHelper.Flag27} }; var pump_pressure_mapping_dict_int = new Dictionary(){ { "Pump11","Jpump11"}, { "Pump12","Jpump12"}, { "Pump13","Jpump13"}, { "Pump14","Jpump14"}, { "Pump15","Jpump15"}, { "Pump16","Jpump16"}, { "Pump17","Jpump17"}, { "Pump18","Jpump18" }, { "Pump21","Jpump21"}, { "Pump22","Jpump22"}, { "Pump23","Jpump23"}, { "Pump24","Jpump24"}, { "Pump25","Jpump25"}, { "Pump26","Jpump26"}, { "Pump27","Jpump27"} }; #endregion #region init_config var station_info = service_station.Get(); var station1 = station_info.Station1; var station2 = station_info.Station2; var station1_same_type_flag_group_first = GlobalHelper.Station1SameTypeFlagGroupFirst; var station2_same_type_flag_group_first = GlobalHelper.Station2SameTypeFlagGroupFirst; var station1_schedule_config = service_schedule_config.GetStation1(); var station2_schedule_config = service_schedule_config.GetStation2(); var station1_flag_list = GlobalHelper.Station1FlagList; var station2_flag_list = GlobalHelper.Station2FlagList; var pump_id_mapping_dict = GlobalHelper.ModelPumpIdMappingDict; var flag_nr_mapping_dict = GlobalHelper.GetFlagNrMappingDict(); var pump_pattern_custom_dict = new Dictionary(); var pattern_dict = new Dictionary(); var scada_dict = new Dictionary(); var pattern_dict_temp = new Dictionary(); #endregion var helper = new IStation.Algorithm.ScheduleHelper(); foreach (var time_value in time_value_list) { var time = time_value.Time; var scada_value_dict = time_value.Value; var vm = _scada_vm_list.Find(x => x.Time == time); pump_pattern_custom_dict.Clear(); pattern_dict.Clear(); scada_dict.Clear(); foreach (var item in pump_id_mapping_dict_int) { pump_pattern_custom_dict[item.Key] = 0; } foreach (var zy_scada in scada_value_dict) { var tag = zy_scada.Key; var value = zy_scada.Value; foreach (var item in pattern_id_mapping_dict) { if (item.Key == tag) { var pattern_id = item.Key; var factor = value; pattern_dict.Add(pattern_id, new float[] { (float)factor }); break; } } foreach (var item in flow_id_mapping_dict) { if (item.Value != tag) continue; scada_dict.Add(tag, value); } foreach (var item in pressure_id_mapping_dict) { if (item.Value != tag) continue; var pressure_value = value; scada_dict.Add(tag, pressure_value); } } var pump_model_scada_diff_dict = new Dictionary(){ { "Pump11",vm.Pump11}, { "Pump12",vm.Pump12}, { "Pump13",vm.Pump13}, { "Pump14",vm.Pump14}, { "Pump15",vm.Pump15}, { "Pump16",vm.Pump16}, { "Pump17",vm.Pump17}, { "Pump18",vm.Pump18}, { "Pump21",vm.Pump21}, { "Pump22",vm.Pump22}, { "Pump23",vm.Pump23}, { "Pump24",vm.Pump24}, { "Pump25",vm.Pump25}, { "Pump26",vm.Pump26}, { "Pump27",vm.Pump27} }; var target_flow1 = vm.TotalFlow1; var target_head1 = vm.TotalHead1; var target_flow2 = vm.TotalFlow2; var target_head2 = vm.TotalHead2; CorrectionFactorHelper.OutOpenFlagList(scada_value_dict, out List station1_open_flag_list, out List station2_open_flag_list); CorrectionFactorHelper.OutWaterLevel(scada_value_dict, out Dictionary station1_flag_inlet_water_level_dict, out Dictionary station2_flag_inlet_water_level_dict); helper.Initial(station2_open_flag_list, station2_schedule_config); if (_correction_factor_vm_list != null && _correction_factor_vm_list.Any()) { var station2_open_flag_list_str = Yw.Untity.IntListHelper.ToString(station2_open_flag_list); var correction_factor_vm_list = _correction_factor_vm_list.Where(x => x.RunFlags.Equals(station2_open_flag_list_str)).ToList(); if (correction_factor_vm_list != null && correction_factor_vm_list.Any()) { if (this.cekUseMode.Checked) { var correction_factor_dict_diff2 = correction_factor_vm_list.ToDictionary(x => x.Flag, y => y.Mode.FirstOrDefault()); helper.InitCorrectionFactorDict(correction_factor_dict_diff2); } else { var correction_factor_dict_diff2 = correction_factor_vm_list.ToDictionary(x => x.Flag, y => y.Avg); helper.InitCorrectionFactorDict(correction_factor_dict_diff2); } } } var optimal_combine2 = helper.GetOptAnaCombine(station2, station2_same_type_flag_group_first, station2_flag_inlet_water_level_dict, null, target_flow2, target_head2); var station2_open_flag_list_bak = station2_open_flag_list.Select(x => x).ToList(); if (optimal_combine2 != null) { station2_open_flag_list = new List(); foreach (var fre_pump in optimal_combine2.AnaFrePumps) { var flag = fre_pump.Flag; var modelId = pump_id_mapping_dict[flag]; pump_pattern_custom_dict[modelId] = fre_pump.Frequency / 50; if (fre_pump.Frequency > 0) { station2_open_flag_list.Add(flag); } } } pattern_dict_temp.Clear(); foreach (var item in pattern_dict) pattern_dict_temp.Add(item.Key, item.Value); foreach (var item in pump_pattern_custom_dict) pattern_dict_temp.Add(item.Key, new float[] { (float)item.Value }); var record_list = Verify(999, time, hydraulic_model_file, flow_id_mapping_dict, pressure_id_mapping_dict, pattern_dict_temp, scada_value_dict); var model_value_dict = record_list.ToDictionary(x => x.ScadaId, y => y.ModelValue); vm.JD1PM = model_value_dict["SPJD1"]; vm.JD2PM = model_value_dict["SPJD2"]; vm.JD3PM = model_value_dict["SPJD3"]; vm.Pump11PM = model_value_dict["SPPump11"]; vm.Pump12PM = model_value_dict["SPPump12"]; vm.Pump13PM = model_value_dict["SPPump13"]; vm.Pump14PM = model_value_dict["SPPump14"]; vm.Pump15PM = model_value_dict["SPPump15"]; vm.Pump16PM = model_value_dict["SPPump16"]; vm.Pump17PM = model_value_dict["SPPump17"]; vm.Pump18PM = model_value_dict["SPPump18"]; vm.DN2400PM = model_value_dict["SPDN2400"]; vm.DN2700PM = model_value_dict["SPDN2700"]; vm.Pump21PM = model_value_dict["SPPump21"]; vm.Pump22PM = model_value_dict["SPPump22"]; vm.Pump23PM = model_value_dict["SPPump23"]; vm.Pump24PM = model_value_dict["SPPump24"]; vm.Pump25PM = model_value_dict["SPPump25"]; vm.Pump26PM = model_value_dict["SPPump26"]; vm.Pump27PM = model_value_dict["SPPump27"]; vm.JD1FM = model_value_dict["SFJD1"]; vm.JD2FM = model_value_dict["SFJD2"]; vm.JD3FM = model_value_dict["SFJD3"]; vm.DN2400FM = model_value_dict["SFDN2400"]; vm.DN2700FM = model_value_dict["SFDN2700"]; vm.Pump21FM = model_value_dict["SFPump21"]; vm.Pump22FM = model_value_dict["SFPump22"]; vm.Pump23FM = model_value_dict["SFPump23"]; vm.Pump24FM = model_value_dict["SFPump24"]; vm.Pump25FM = model_value_dict["SFPump25"]; vm.Pump26FM = model_value_dict["SFPump26"]; vm.Pump27FM = model_value_dict["SFPump27"]; vm.Pump11M = pump_pattern_custom_dict["Pump11"]; vm.Pump12M = pump_pattern_custom_dict["Pump12"]; vm.Pump13M = pump_pattern_custom_dict["Pump13"]; vm.Pump14M = pump_pattern_custom_dict["Pump14"]; vm.Pump15M = pump_pattern_custom_dict["Pump15"]; vm.Pump16M = pump_pattern_custom_dict["Pump16"]; vm.Pump17M = pump_pattern_custom_dict["Pump17"]; vm.Pump18M = pump_pattern_custom_dict["Pump18"]; vm.Pump21M = pump_pattern_custom_dict["Pump21"]; vm.Pump22M = pump_pattern_custom_dict["Pump22"]; vm.Pump23M = pump_pattern_custom_dict["Pump23"]; vm.Pump24M = pump_pattern_custom_dict["Pump24"]; vm.Pump25M = pump_pattern_custom_dict["Pump25"]; vm.Pump26M = pump_pattern_custom_dict["Pump26"]; vm.Pump27M = pump_pattern_custom_dict["Pump27"]; vm.Set(); } this.scadaScheduleViewModelBindingSource.DataSource = _scada_vm_list; this.scadaScheduleViewModelBindingSource.ResetBindings(false); this.bandedGridView1.BestFitColumns(); WaitHelper.HideWaitForm(); } /// /// 模型验证 /// public static List Verify( long verify_id, DateTime verify_time, string verify_file_path, Dictionary flow_id_mapping_dict, Dictionary pressure_id_mapping_dict, Dictionary pattern_dict, Dictionary scada_dict) { var hydraulic_record_list = new List(); var err = EpanetMethods.ENopen(verify_file_path, "", ""); if (err != 0) { return default; } err = EpanetMethods.ENopenH(); if (err != 0) { return default; } var model_id_build = new StringBuilder(31); var pattern_init = true; foreach (var pattern in pattern_dict) { var pattern_id = pattern.Key; var pattern_factor_array = pattern.Value; var pattern_factor_array_count = pattern_factor_array.Length == 0 ? 1 : pattern_factor_array.Length; err = EpanetMethods.ENgetpatternindex(pattern_id, out int pattern_index); if (err != ErrorCode.Ok) { pattern_init = false; continue; } err = EpanetMethods.ENsetpattern(pattern_index, pattern_factor_array, pattern_factor_array_count); if (err != ErrorCode.Ok) { pattern_init = false; continue; } } if (!pattern_init) { return default; } EpanetMethods.ENinitH(0); EpanetMethods.ENrunH(out _); EpanetMethods.ENgetcount(CountType.Link, out int link_count); EpanetMethods.ENgetcount(CountType.Node, out int node_count); for (int link_index = 1; link_index <= link_count; link_index++) { if (EpanetMethods.ENgetlinkid(link_index, model_id_build) != ErrorCode.Ok) continue; var model_id = model_id_build.ToString(); if (flow_id_mapping_dict.ContainsKey(model_id)) { var scada_id = flow_id_mapping_dict[model_id]; var scada_value = scada_dict[scada_id]; EpanetMethods.ENgetlinkvalue(link_index, LinkValue.Flow, out float model_value); model_value = Math.Abs(model_value); var record = new IStation.Model.HydraulicModelRecord { VerificationID = verify_id, Time = verify_time, ModelId = model_id, ScadaId = scada_id, ValueType = IStation.eValueType.Flow, ModelValue = (double)model_value, ScadaValue = scada_value }; record.DifferenceValue = record.ModelValue - record.ScadaValue; hydraulic_record_list.Add(record); } EpanetMethods.ENgetlinktype(link_index, out LinkType linkType); if (linkType == LinkType.Pump) { EpanetMethods.ENgetlinkvalue(link_index, LinkValue.HeadLoss, out float val); } } for (int node_index = 1; node_index <= node_count; node_index++) { if (EpanetMethods.ENgetnodeid(node_index, model_id_build) != ErrorCode.Ok) continue; var model_id = model_id_build.ToString(); if (pressure_id_mapping_dict.ContainsKey(model_id)) { var scada_id = pressure_id_mapping_dict[model_id]; var scada_value = scada_dict[scada_id]; EpanetMethods.ENgetnodevalue(node_index, NodeValue.Head, out float model_value); var record = new IStation.Model.HydraulicModelRecord { VerificationID = verify_id, Time = verify_time, ModelId = model_id, ScadaId = scada_id, ValueType = IStation.eValueType.Head, ModelValue = (double)model_value, ScadaValue = scada_value }; record.DifferenceValue = record.ModelValue - record.ScadaValue; hydraulic_record_list.Add(record); } } EpanetMethods.ENcloseH(); return hydraulic_record_list; } } }