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<ScadaScheduleViewModel> _scada_vm_list = null;
|
private List<CorrectionFactorViewModel> _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<ScadaScheduleViewModel>();
|
_correction_factor_vm_list = new List<CorrectionFactorViewModel>();
|
|
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<string, List<Tuple<int, double, double[]>>> 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<string, string>()
|
{
|
{"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<string, string>()
|
{
|
{"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<string, string>()
|
{
|
{"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<string, int>(){
|
{ "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<string, string>(){
|
{ "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<string, double>();
|
var pattern_dict = new Dictionary<string, float[]>();
|
var scada_dict = new Dictionary<string, double>();
|
var pattern_dict_temp = new Dictionary<string, float[]>();
|
|
#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<string, double?>(){
|
{ "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<int> station1_open_flag_list, out List<int> station2_open_flag_list);
|
CorrectionFactorHelper.OutWaterLevel(scada_value_dict, out Dictionary<int, double> station1_flag_inlet_water_level_dict, out Dictionary<int, double> 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<int>();
|
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();
|
|
}
|
|
/// <summary>
|
/// 模型验证
|
/// </summary>
|
public static List<Model.HydraulicModelRecord> Verify(
|
long verify_id,
|
DateTime verify_time,
|
string verify_file_path,
|
Dictionary<string, string> flow_id_mapping_dict,
|
Dictionary<string, string> pressure_id_mapping_dict,
|
Dictionary<string, float[]> pattern_dict,
|
Dictionary<string, double> scada_dict)
|
{
|
var hydraulic_record_list = new List<Model.HydraulicModelRecord>();
|
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;
|
}
|
|
|
|
}
|
}
|