using DevExpress.XtraEditors;
|
using IStation.Epanet;
|
using IStation.Epanet.Enums;
|
using IStation.Hydraulic;
|
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);
|
ShowScada(true);
|
ShowModel(true);
|
}
|
private void ShowScada(bool v)
|
{
|
this.gbScada.Visible = v;
|
}
|
|
private void ShowModel(bool v)
|
{
|
this.gbMdoel.Visible = v;
|
}
|
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;
|
}
|
|
#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 water_supply_limit_list = station2_schedule_config.WaterSupplyLimitList;
|
var exist_water_supply_limit_list = water_supply_limit_list != null && water_supply_limit_list.Any();
|
//var time_vlaue_list_temp = new List<TimeValue>();
|
//foreach (var item in day_value.TimeValueList)
|
//{
|
// var scada_vm = _scada_vm_list.Find(x => x.Time == item.Time);
|
// if (exist_water_supply_limit_list && scada_vm != null)
|
// {
|
// var limit = water_supply_limit_list.Find(x => x.PumpCount == scada_vm.RunCount2);
|
// if (limit != null)
|
// {
|
// if (scada_vm.TotalFlow2 < limit.Min || scada_vm.TotalFlow2 > limit.Max)
|
// {
|
|
// }
|
// else
|
// {
|
// time_vlaue_list_temp.Add(item);
|
// }
|
// }
|
// }
|
//}
|
|
foreach (var time_value in day_value.TimeValueList)
|
{
|
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);
|
//if (exist_water_supply_limit_list)
|
//{
|
// var limit = water_supply_limit_list.Find(x => x.PumpCount == vm.RunCount2);
|
// if (limit != null)
|
// {
|
// if (vm.TotalFlow2 < limit.Min || vm.TotalFlow2 > limit.Max)
|
// {
|
|
// }
|
// else
|
// {
|
// _scada_vm_list.Add(vm);
|
// }
|
// }
|
//}
|
}
|
|
|
|
//day_value.TimeValueList = time_vlaue_list_temp;
|
|
|
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;
|
}
|
|
#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
|
|
|
var r = Analysis(day_value, hydraulic_model_file, flow_id_mapping_dict, pressure_id_mapping_dict, out Dictionary<string, List<Tuple<int, double, double[]>>> model_correction_factor_dict);
|
if (!r)
|
{
|
return;
|
}
|
WaitHelper.ShowWaitForm();
|
|
|
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 model_correction_factor_avg = 0d;
|
if (model_correction_factor_dict.ContainsKey(flags))
|
{
|
var model_factor_avg = model_correction_factor_dict[flags].Find(x => x.Item1 == item.Item1).Item2;
|
model_correction_factor_avg = model_factor_avg > 0 ? -model_factor_avg : Math.Abs(model_factor_avg);
|
}
|
|
var vm = new CorrectionFactorViewModel
|
{
|
RunFlags = flags,
|
Flag = item.Item1,
|
Avg = item.Item2 + model_correction_factor_avg,
|
Mode = item.Item3.FirstOrDefault() + model_correction_factor_avg,
|
};
|
_correction_factor_vm_list.Add(vm);
|
}
|
}
|
|
this.correctionFactorViewModelBindingSource.DataSource = _correction_factor_vm_list;
|
this.correctionFactorViewModelBindingSource.ResetBindings(false);
|
this.gridView2.ExpandAllGroups();
|
|
var helper = new IStation.Algorithm.ScheduleHelper();
|
foreach (var time_value in day_value.TimeValueList)
|
{
|
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);
|
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"];
|
}
|
|
_scada_vm_list?.ForEach(x => x.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;
|
}
|
|
|
|
public static bool Analysis(DayValue day_value,
|
string hydraulic_model_file,
|
Dictionary<string, string> flow_id_mapping_dict,
|
Dictionary<string, string> pressure_id_mapping_dict,
|
out Dictionary<string, List<Tuple<int, double, double[]>>> correction_factor_dict)
|
{
|
correction_factor_dict = new Dictionary<string, List<Tuple<int, double, double[]>>>();
|
if (day_value == null)
|
return false;
|
|
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 mapping_dict_int = new Dictionary<int, string>(){
|
{GlobalHelper.Flag11, "Pump11"},
|
{GlobalHelper.Flag12, "Pump12"},
|
{GlobalHelper.Flag13, "Pump13"},
|
{GlobalHelper.Flag14, "Pump14"},
|
{GlobalHelper.Flag15, "Pump15"},
|
{GlobalHelper.Flag16, "Pump16"},
|
{GlobalHelper.Flag17, "Pump17"},
|
{GlobalHelper.Flag18, "Pump18"},
|
{GlobalHelper.Flag21, "Pump21"},
|
{GlobalHelper.Flag22, "Pump22"},
|
{GlobalHelper.Flag23, "Pump23"},
|
{GlobalHelper.Flag24, "Pump24"},
|
{GlobalHelper.Flag25, "Pump25"},
|
{GlobalHelper.Flag26, "Pump26"},
|
{GlobalHelper.Flag27, "Pump27"}
|
};
|
|
var pump_pressure_mapping_dict_int = new Dictionary<string, int>(){
|
//{ "Jpump11",GlobalHelper.Flag11},
|
//{ "Jpump12",GlobalHelper.Flag12},
|
//{ "Jpump13",GlobalHelper.Flag13},
|
//{ "Jpump14",GlobalHelper.Flag14},
|
//{ "Jpump15",GlobalHelper.Flag15},
|
//{ "Jpump16",GlobalHelper.Flag16},
|
//{ "Jpump17",GlobalHelper.Flag17},
|
//{ "Jpump18",GlobalHelper.Flag18},
|
{ "Jpump21",GlobalHelper.Flag21},
|
{ "Jpump22",GlobalHelper.Flag22},
|
{ "Jpump23",GlobalHelper.Flag23},
|
{ "Jpump24",GlobalHelper.Flag24},
|
{ "Jpump25",GlobalHelper.Flag25},
|
{ "Jpump26",GlobalHelper.Flag26},
|
{ "Jpump27",GlobalHelper.Flag27}
|
};
|
|
var day_value_list = new List<DayValue>() { day_value };
|
var zy_scada_day_dict = new Dictionary<DateTime, Dictionary<DateTime, Dictionary<string, double>>>();
|
foreach (var item in day_value_list)
|
{
|
var day_dt = new DateTime(item.Year, item.Month, item.Day);
|
var day_dict = item.TimeValueList.ToDictionary(x => x.Time, y => y.Value);
|
zy_scada_day_dict.Add(day_dt, day_dict);
|
}
|
var hydraulic_model_record_list_dict = Verify(999, hydraulic_model_file, flow_id_mapping_dict, pressure_id_mapping_dict, zy_scada_day_dict);
|
|
|
var hydraulic_pump_record_group = new Dictionary<string, Dictionary<int, List<IStation.Model.HydraulicModelRecord>>>();
|
var list_temp = new List<Tuple<string, List<Tuple<int, Model.HydraulicModelRecord>>>>();
|
foreach (var item in hydraulic_model_record_list_dict)
|
{
|
var flags = new List<int>();
|
var item_temp_list = new List<Tuple<int, Model.HydraulicModelRecord>>();
|
foreach (var rp in pump_pressure_mapping_dict_int)
|
{
|
var p_id = mapping_dict_int[rp.Value];
|
var r_h = item.Value.Item1.Find(x => x.ModelId == rp.Key);
|
var pump_value = item.Value.Item2[p_id];
|
if (r_h != null && pump_value > 0)
|
{
|
flags.Add(rp.Value);
|
item_temp_list.Add(new(rp.Value, r_h));
|
}
|
}
|
flags = flags?.OrderBy(x => x).ToList();
|
var flags_str = Yw.Untity.IntListHelper.ToString(flags);
|
list_temp.Add(new(flags_str, item_temp_list));
|
}
|
var group_temp = list_temp.GroupBy(x => x.Item1);
|
foreach (var item in group_temp)
|
{
|
var flags = item.Key;
|
var dict = item.SelectMany(x => x.Item2).GroupBy(x => x.Item1).ToDictionary(x => x.Key, y => y.Select(z => z.Item2).ToList());
|
|
hydraulic_pump_record_group.Add(flags, dict);
|
}
|
|
foreach (var group in hydraulic_pump_record_group)
|
{
|
var flags = group.Key;
|
var dict = group.Value;
|
correction_factor_dict[flags] = new List<Tuple<int, double, double[]>>();
|
foreach (var item in dict)
|
{
|
var flag = item.Key;
|
var diff_value_list = item.Value.Select(x => x.DifferenceValue).ToList();
|
var avg_value = diff_value_list.Average() ?? 0;
|
|
var diff_value_array = diff_value_list.Select(x => Math.Round(x.Value, 2)).ToArray();
|
var mode_value_array = ModeHelper.ModeOf(diff_value_array);
|
|
correction_factor_dict[flags].Add(new(flag, avg_value, mode_value_array));
|
}
|
}
|
|
return true;
|
}
|
|
/// <summary>
|
/// 历史数据验证
|
/// </summary>
|
/// <param name="verify_id">验证标识</param>
|
/// <param name="verify_file_path">验证模型文件</param>
|
/// <param name="zy_scada_day_dict">ZyScada数据列表</param>
|
/// <returns></returns>
|
public static Dictionary<DateTime, Tuple<List<Model.HydraulicModelRecord>, Dictionary<string, double>>> Verify(
|
long verify_id,
|
string verify_file_path,
|
Dictionary<string, string> flow_id_mapping_dict,
|
Dictionary<string, string> pressure_id_mapping_dict,
|
Dictionary<DateTime, Dictionary<DateTime, Dictionary<string, double>>> zy_scada_day_dict)
|
{
|
if (zy_scada_day_dict == null || !zy_scada_day_dict.Any())
|
{
|
return default;
|
}
|
|
var pump_nr_dict = GlobalHelper.ModelPumpNrDict;
|
var pattern_id_mapping_dict = GlobalHelper.ModelPatternIdMappingDict;
|
|
var day_value_dict = new Dictionary<DateTime, Tuple<Dictionary<string, float[]>, Dictionary<DateTime, Dictionary<string, double>>>>();
|
foreach (var day_item in zy_scada_day_dict)
|
{
|
var day = day_item.Key;
|
var zy_scada_list_dict = day_item.Value;
|
|
var pattern_list_dict = new Dictionary<string, List<float>>();
|
foreach (var item in pattern_id_mapping_dict)
|
{
|
pattern_list_dict.Add(item.Key, new List<float>());
|
}
|
|
|
var scada_dict_dict = new Dictionary<DateTime, Dictionary<string, double>>();
|
|
#region 初始化 pattern_dict scada_dict
|
for (int i = 0; i < zy_scada_list_dict.Count; i++)
|
{
|
var item = zy_scada_list_dict.ElementAt(i);
|
var time = item.Key;
|
var zy_scada_list = item.Value;
|
|
var scada_dict = new Dictionary<string, double>();
|
foreach (var zy_scada in zy_scada_list)
|
{
|
var tag = zy_scada.Key;
|
var value = zy_scada.Value;
|
|
#region Pattern
|
foreach (var mapping in pattern_id_mapping_dict)
|
{
|
if (mapping.Key != tag)
|
continue;
|
var pattern_id = mapping.Key;
|
var factor = value;
|
|
if (pump_nr_dict.ContainsKey(pattern_id))
|
{
|
//factor /= pump_nr_dict[pattern_id];
|
factor = factor < 0 ? 0 : factor;
|
}
|
pattern_list_dict[pattern_id].Add((float)factor);
|
}
|
|
#endregion
|
|
#region Scada
|
|
foreach (var mapping in flow_id_mapping_dict)
|
{
|
if (mapping.Value != tag)
|
continue;
|
scada_dict.Add(tag, value);
|
}
|
|
foreach (var mapping in pressure_id_mapping_dict)
|
{
|
if (mapping.Value != tag)
|
continue;
|
var pressure_value = value;
|
scada_dict.Add(tag, pressure_value);
|
}
|
#endregion
|
}
|
scada_dict_dict.Add(time, scada_dict);
|
}
|
#endregion
|
|
var pattern_array_dict = pattern_list_dict.ToDictionary(x => x.Key, y => y.Value.ToArray());
|
day_value_dict.Add(day, new(pattern_array_dict, scada_dict_dict));
|
}
|
|
var hydraulic_record_list_dict = Verify(verify_id, verify_file_path, flow_id_mapping_dict, pressure_id_mapping_dict, day_value_dict);
|
return hydraulic_record_list_dict;
|
|
}
|
|
/// <summary>
|
/// 历史数据验证
|
/// </summary>
|
/// <param name="verify_id">验证标识</param>
|
/// <param name="verify_file_path">验证模型文件</param>
|
/// <param name="flow_id_mapping_dict">流量Scada标识字典</param>
|
/// <param name="pressure_id_mapping_dict">压力Scada标识字典</param>
|
/// <param name="day_value_dict">日数据列表</param>
|
/// <returns></returns>
|
public static Dictionary<DateTime, Tuple<List<Model.HydraulicModelRecord>, Dictionary<string, double>>> Verify(
|
long verify_id,
|
string verify_file_path,
|
Dictionary<string, string> flow_id_mapping_dict,
|
Dictionary<string, string> pressure_id_mapping_dict,
|
Dictionary<DateTime, Tuple<Dictionary<string, float[]>, Dictionary<DateTime, Dictionary<string, double>>>> day_value_dict)
|
{
|
#region 入参验证
|
|
var log_title = "开始验证";
|
var log_msg = string.Empty;
|
var hydraulic_record_list_dict = new Dictionary<DateTime, Tuple<List<Model.HydraulicModelRecord>, Dictionary<string, double>>>();
|
if (flow_id_mapping_dict == null || !flow_id_mapping_dict.Any())
|
{
|
log_msg = "流量标签字典为空!";
|
Log.Info(verify_id, log_title, log_msg);
|
return default;
|
}
|
if (pressure_id_mapping_dict == null || !pressure_id_mapping_dict.Any())
|
{
|
log_msg = "压力标签字典为空!";
|
Log.Info(verify_id, log_title, log_msg);
|
return default;
|
}
|
if (day_value_dict == null || !day_value_dict.Any())
|
{
|
log_msg = "日数据列表为空!";
|
Log.Info(verify_id, log_title, log_msg);
|
return default;
|
}
|
|
#endregion
|
|
#region 加载模型
|
|
|
var err = EpanetMethods.ENopen(verify_file_path, "", "");
|
if (err != 0)
|
{
|
log_msg = err.GetMsg();
|
Log.Info(verify_id, log_title, log_msg);
|
return default;
|
}
|
|
//EpanetMethods.ENsettimeparam(TimeParameter.PatternStep, 1);
|
//EpanetMethods.ENsettimeparam(TimeParameter.HydStep, 1);
|
//EpanetMethods.ENsettimeparam(TimeParameter.ReportStep, 1);
|
err = EpanetMethods.ENopenH();
|
if (err != 0)
|
{
|
log_msg = err.GetMsg();
|
Log.Info(verify_id, log_title, log_msg);
|
return default;
|
}
|
|
#endregion
|
|
|
log_title = "验证";
|
var model_id_build = new StringBuilder(31);
|
var pattern_init = true;
|
var pattern_time_step = 0;
|
foreach (var day_value in day_value_dict)
|
{
|
var day = day_value.Key;
|
var pattern_dict = day_value.Value.Item1;
|
var time_value_dict = day_value.Value.Item2;
|
if (time_value_dict == null || !time_value_dict.Any())
|
{
|
continue;
|
}
|
|
#region 模式初始化
|
pattern_init = true;
|
pattern_time_step = 0;
|
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;
|
log_msg = err.GetMsg();
|
Log.Info(verify_id, log_title, log_msg);
|
continue;
|
}
|
err = EpanetMethods.ENsetpattern(pattern_index, pattern_factor_array, pattern_factor_array_count);
|
if (err != ErrorCode.Ok)
|
{
|
pattern_init = false;
|
log_msg = err.GetMsg();
|
Log.Info(verify_id, log_title, log_msg);
|
continue;
|
}
|
}
|
|
if (!pattern_init)
|
{
|
log_msg = $"{day:G}:模式初始化失败!";
|
Log.Info(verify_id, log_title, log_msg);
|
return default;
|
}
|
#endregion
|
|
#region 模型验证
|
|
var time_value_dict_dict = time_value_dict.ToDictionary(x => x.Key.TimeOfDay.TotalSeconds, y => y);
|
|
EpanetMethods.ENinitH(0);
|
do
|
{
|
EpanetMethods.ENrunH(out int current_ts);
|
EpanetMethods.ENgetcount(CountType.Link, out int link_count);
|
EpanetMethods.ENgetcount(CountType.Node, out int node_count);
|
|
var current_time = TimeSpan.FromSeconds(current_ts);
|
if (time_value_dict_dict.ContainsKey(current_time.TotalSeconds))
|
{
|
var hydraulic_record_list = new List<Model.HydraulicModelRecord>();
|
var hydraulic_pump_dict = new Dictionary<string, double>();
|
var time_value = time_value_dict_dict[current_ts];
|
var verify_time = time_value.Key;
|
var scada_dict = time_value.Value;
|
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);
|
var record = new IStation.Model.HydraulicModelRecord
|
{
|
VerificationID = verify_id,
|
Time = verify_time,
|
ModelId = model_id,
|
ScadaId = scada_id,
|
ValueType = IStation.eValueType.Flow,
|
ModelValue = (double)Math.Abs(model_value),
|
ScadaValue = scada_value
|
};
|
record.DifferenceValue = record.ScadaValue - record.ModelValue;
|
hydraulic_record_list.Add(record);
|
}
|
|
EpanetMethods.ENgetlinktype(link_index, out LinkType linkType);
|
if (linkType == LinkType.Pump)
|
{
|
EpanetMethods.ENgetlinkvalue(link_index, LinkValue.Status, out float on_off);
|
hydraulic_pump_dict.Add(model_id, on_off);
|
}
|
}
|
|
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.ScadaValue - record.ModelValue;
|
hydraulic_record_list.Add(record);
|
}
|
}
|
|
hydraulic_record_list_dict.Add(verify_time, new(hydraulic_record_list, hydraulic_pump_dict));
|
}
|
|
EpanetMethods.ENnextH(out pattern_time_step);
|
|
} while (pattern_time_step > 0);
|
|
#endregion
|
|
}
|
EpanetMethods.ENcloseH();
|
return hydraulic_record_list_dict;
|
}
|
|
private void cekShowScada_CheckedChanged(object sender, EventArgs e)
|
{
|
ShowScada(this.cekShowScada.Checked);
|
}
|
|
private void cekShowModel_CheckedChanged(object sender, EventArgs e)
|
{
|
ShowModel(this.cekShowModel.Checked);
|
|
}
|
}
|
}
|