using IStation.Curve;
using IStation.Test.Init;
using System.Linq;
using Yw;
using static IStation.Algorithm.ScheduleHelper;
namespace IStation
{
///
/// Scada 模型验证
///
public class ScadaModelValidHelper
{
#region 实时数据 Analysis
public static bool Analysis()
{
var model_file_path = $"{AppDomain.CurrentDomain.BaseDirectory}Data\\HydraulicModel.inp";
if (!File.Exists(model_file_path))
return false;
var data_foler_path = $"{AppDomain.CurrentDomain.BaseDirectory}Data\\实时数据";
if (!Directory.Exists(data_foler_path))
{
return false;
}
var data_file_path_list = Directory.GetFiles(data_foler_path);
if (data_file_path_list == null || !data_file_path_list.Any())
{
return false;
}
var now = DateTime.Now;
var zy_scada_day_dict = new Dictionary>>();
var zy_scada_dict = new Dictionary>();
foreach (var file_path in data_file_path_list)
{
var file_json = File.ReadAllText(file_path);
var zy_scada_list = JsonHelper.Json2Object>(file_json);
if (zy_scada_list == null || !zy_scada_list.Any())
{
continue;
}
var file_name = Path.GetFileNameWithoutExtension(file_path);
var split_name = file_name.Split("-").Select(x => int.Parse(x)).ToArray();
var time = new DateTime(now.Year, now.Month, now.Day, split_name[0], split_name[1], split_name[2]);
if (zy_scada_dict.Any())
{
var last = zy_scada_dict.Last().Value.Find(x => x.Code == "10157");
var current = zy_scada_list.Find(x => x.Code == "10157");
if (last?.Value == current?.Value)
{
continue;
}
}
zy_scada_dict.Add(time, zy_scada_list);
}
zy_scada_day_dict.Add(now, zy_scada_dict);
//var hydraulic_record_list_dict = IStation.Hydraulic.ModeVerifyHelper.Verify(1, model_file_path, zy_scada_day_dict);
//Console.WriteLine("Scada代入模型验证");
//Console.WriteLine("Time Jd1 Jd2 Jd3 dn2400 dn2700");
//foreach (var item in hydraulic_record_list_dict)
//{
// var time = item.Key;
// var diff_dict = item.Value.ToDictionary(x => x.ModelId, y => Math.Round(y.DifferenceValue ?? -999, 4));
// Console.WriteLine($"{time:T} {diff_dict["Jjd1"]} {diff_dict["Jjd2"]} {diff_dict["Jjd3"]} {diff_dict["Jdn2400"]} {diff_dict["Jdn2700"]}");
//}
IStation.Service.Station _service_station = new();
IStation.Service.ScheduleConfig _service_schedule_config = new();
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;
Console.WriteLine("time flag wl scada ana diff ");
List> ana_pump_value_list = new List>();
foreach (var zy_scada_day in zy_scada_day_dict)
{
var time = zy_scada_day.Key;
foreach (var item in zy_scada_day.Value)
{
var time2 = item.Key;
var zy_scada_list = item.Value;
if (!OutTarget(zy_scada_list, out double target_flow1, out double target_head1, out double target_flow2, out double target_head2))
{
continue;
}
if (!OutRpm(zy_scada_list, out Dictionary station1_flag_rpm_dict, out Dictionary station2_flag_rpm_dict))
{
continue;
}
if (!OutHead(zy_scada_list, out Dictionary station1_flag_head_dict, out Dictionary station2_flag_head_dict))
{
continue;
}
if (!OutFlow(zy_scada_list, out Dictionary station1_flag_flow_dict, out Dictionary station2_flag_flow_dict))
{
continue;
}
GlobalHelper.GetFlagInletWaterLevelDict(zy_scada_list, out Dictionary station1_flag_inlet_water_level_dict, out Dictionary station2_flag_inlet_water_level_dict);
var ana_pump_list2 = GetOptAnaPumpListByFlow(station2, station2_flag_rpm_dict, station2_flag_flow_dict);
foreach (var ana_pump in ana_pump_list2)
{
var flag = ana_pump.Flag;
var wl = station2_flag_inlet_water_level_dict[flag];
var scada_head = station2_flag_head_dict[flag];
var ana_head = ana_pump.Head;
var diff_head = ana_head - (scada_head - wl);
ana_pump_value_list.Add(new(time2, flag, wl, scada_head, ana_head, diff_head));
// Console.WriteLine($"{time:T} {flag} {wl:N2} {scada_head:N4} {ana_head:N4} {diff_head:N4}");
}
#region 调度
//if (station1_maintenance_flag_list != null && station1_maintenance_flag_list.Any())
// station1_schedule_config.MustCloseFlagList.AddRange(station1_maintenance_flag_list);
//if (station2_maintenance_flag_list != null && station2_maintenance_flag_list.Any())
// station2_schedule_config.MustCloseFlagList.AddRange(station2_maintenance_flag_list);
//var helper = new Algorithm.ScheduleHelper();
//helper.Initial(station1_open_flag_list, station1_schedule_config);
//var optimal_combine1 = helper.GetOptAnaCombine(station1, station1_same_type_flag_group_first, station1_flag_inlet_water_level_dict, station1_flag_cumulative_run_time_dict, target_flow1, target_head1);
//helper.Initial(station2_open_flag_list, station2_schedule_config);
//var optimal_combine2 = helper.GetOptAnaCombine(station2, station2_same_type_flag_group_first, station2_flag_inlet_water_level_dict, station2_flag_cumulative_run_time_dict, target_flow2, target_head2);
#endregion
}
}
var group = ana_pump_value_list.GroupBy(x => x.Item2);
foreach (var item in group)
{
var flag = item.Key;
foreach (var item2 in item)
{
Console.WriteLine($"{item2.Item1:T} {flag} {item2.Item3:N2} {item2.Item4:N4} {item2.Item5:N4} {item2.Item6:N4}");
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
foreach (var item in group)
{
var flag = item.Key;
var value = item.Average(x => x.Item6);
Console.WriteLine($"{flag} {value} ");
}
return true;
}
private static bool OutTarget(List zy_scada_list, out double target_flow1, out double target_head1, out double target_flow2, out double target_head2)
{
var scada_dict = zy_scada_list.ToDictionary(x => x.Code, y => y.Value);
var jd1_flow = scada_dict[GlobalHelper.嘉定1线_瞬时流量_长江管网图];
var jd2_flow = scada_dict[GlobalHelper.嘉定2线_瞬时流量_长江管网图];
var jd3_flow = scada_dict[GlobalHelper.嘉定3线_瞬时流量_长江管网图];
var jd1_pressure = scada_dict[GlobalHelper.嘉定1线_压力_长江管网图];
var jd2_pressure = scada_dict[GlobalHelper.嘉定2线_压力_长江管网图];
var jd3_pressure = scada_dict[GlobalHelper.嘉定3线_压力_长江管网图];
var dn24_flow = scada_dict[GlobalHelper.DN2400总管_瞬时流量_长江管网图];
var dn27_flow = scada_dict[GlobalHelper.DN2700总管_瞬时流量_长江管网图];
var dn24_pressure = scada_dict[GlobalHelper.DN2400_出厂压力_长江管网图];
var dn27_pressure = scada_dict[GlobalHelper.DN2700_出厂压力_长江管网图];
target_flow1 = 0;
target_head1 = 0;
target_flow2 = 0;
target_head2 = 0;
if (jd1_flow < 0 || jd2_flow < 0 || jd3_flow < 0)
{
return false;
}
if (dn24_flow < 0 || dn27_flow < 0)
{
return false;
}
if (jd1_pressure < 0 || jd2_pressure < 0 || jd3_pressure < 0)
{
return false;
}
if (dn24_pressure < 0 || dn27_pressure < 0)
{
return false;
}
var max_pressure1 = new List() { jd1_pressure, jd2_pressure, jd3_pressure }.Max();
var head1 = IStation.Curve.PumpCalculateHelper.Mpa2M(max_pressure1.Value);
var max_pressure2 = new List() { dn24_pressure, dn27_pressure }.Max();
var head2 = IStation.Curve.PumpCalculateHelper.Mpa2M(max_pressure2.Value);
target_flow1 = jd1_flow.Value + jd2_flow.Value + jd3_flow.Value;
target_head1 = head1;
target_flow2 = dn24_flow.Value + dn27_flow.Value;
target_head2 = head2;
return true;
}
private static bool OutRpm(List zy_scada_list, out Dictionary station1_flag_rpm_dict, out Dictionary station2_flag_rpm_dict)
{
station1_flag_rpm_dict = new Dictionary();
station2_flag_rpm_dict = new Dictionary();
foreach (var mapping in GlobalHelper.FlagNrMappingDict1)
{
var code = mapping.Value;
var zy_scada = zy_scada_list.Find(x => x.Code == code);
if (zy_scada == null)
continue;
station1_flag_rpm_dict.Add(mapping.Key, zy_scada.Value ?? 0);
}
foreach (var mapping in GlobalHelper.FlagNrMappingDict2)
{
var code = mapping.Value;
var zy_scada = zy_scada_list.Find(x => x.Code == code);
if (zy_scada == null)
continue;
station2_flag_rpm_dict.Add(mapping.Key, zy_scada.Value ?? 0);
}
return true;
}
private static bool OutHead(List zy_scada_list, out Dictionary station1_flag_head_dict, out Dictionary station2_flag_head_dict)
{
station1_flag_head_dict = new Dictionary();
station2_flag_head_dict = new Dictionary();
foreach (var mapping in GlobalHelper.FlagOutletPressureMappingDict1)
{
var code = mapping.Value;
var zy_scada = zy_scada_list.Find(x => x.Code == code);
if (zy_scada == null)
continue;
var value = (zy_scada.Value ?? 0) / 1000;
var head = IStation.Curve.PumpCalculateHelper.Mpa2M(value);
station1_flag_head_dict.Add(mapping.Key, head);
}
foreach (var mapping in GlobalHelper.FlagOutletPressureMappingDict2)
{
var code = mapping.Value;
var zy_scada = zy_scada_list.Find(x => x.Code == code);
if (zy_scada == null)
continue;
var value = (zy_scada.Value ?? 0);
var head = IStation.Curve.PumpCalculateHelper.Mpa2M(value);
station2_flag_head_dict.Add(mapping.Key, head);
}
return true;
}
private static bool OutFlow(List zy_scada_list, out Dictionary station1_flag_flow_dict, out Dictionary station2_flag_flow_dict)
{
station1_flag_flow_dict = new Dictionary();
station2_flag_flow_dict = new Dictionary();
foreach (var mapping in GlobalHelper.FlagOutletFlowMappingDict2)
{
var code = mapping.Value;
var zy_scada = zy_scada_list.Find(x => x.Code == code);
if (zy_scada == null)
continue;
station2_flag_flow_dict.Add(mapping.Key, zy_scada.Value ?? 0);
}
return true;
}
private static List GetOptAnaPumpListByFlow(
List pumps,
Dictionary flag_rpm_dic,
Dictionary flag_flow_dic
)
{
if (pumps == null || !pumps.Any())
{
return default;
}
if (flag_rpm_dic == null || !flag_rpm_dic.Any())
{
return default;
}
double total_flow = 0;
double total_power = 0;
var ana_fre_pump_list = new List();
foreach (var item in flag_rpm_dic)
{
var pump = pumps.Find(x => x.Flag == item.Key);
if (pump == null)
continue;
var rpm = Math.Round(item.Value, 1);
if (rpm == 0)
continue;
if (rpm<1)
{
continue;
}
var curveQH = Curve.PumpCalculateHelper.CalculateSimilarQH(pump.CurveQH, pump.Nr, rpm);
var curveQP = Curve.PumpCalculateHelper.CalculateSimilarQP(pump.CurveQP, pump.Nr, rpm);
double flow = 0, head = 0;
if (flag_flow_dic != null && flag_flow_dic.ContainsKey(pump.Flag))
{
flow = flag_flow_dic[pump.Flag];
}
head = curveQH.GetFitPointY(flow);
if (head < 0)
continue;
var fre_pump = new AnaFrePump();
fre_pump.Flag = item.Key;
fre_pump.Flow = flow;
fre_pump.Head = head;
fre_pump.Power = curveQP.GetFitPointY(flow);
fre_pump.Efficiency = Curve.PumpCalculateHelper.CalculateE(fre_pump.Flow, fre_pump.Head, fre_pump.Power);
fre_pump.Frequency = rpm / pump.Nr * 50;
fre_pump.Speed = rpm;
total_flow += flow;
total_power += fre_pump.Power;
ana_fre_pump_list.Add(fre_pump);
}
return ana_fre_pump_list;
}
#endregion
#region 实时数据 Analysis
public static bool Analysis2()
{
var dt = new DateTime(2024, 2, 7);
var day_value = DayValueHelper.GetDayValue(dt);
if (day_value == null)
return false;
var time_value_list = day_value.TimeValueList;
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"},
{"Pump11", "Pump11"},
{"Pump12", "Pump12"},
{"Pump13", "Pump13"},
{"Pump14", "Pump14"},
{"Pump15", "Pump15"},
{"Pump16", "Pump16"},
{"Pump17", "Pump17"},
{"Pump18", "Pump18"},
{"SFJD1", "SFJD1"},
{"SFJD2", "SFJD2"},
{"SFJD3", "SFJD3"},
{"RPump21", "RPump21"},
{"RPump22", "RPump22"},
{"RPump23", "RPump23"},
{"RPump24", "RPump24"},
{"RPump25", "RPump25"},
{"RPump26", "RPump26"},
{"RPump27", "RPump27"},
{"Pump21", "Pump21"},
{"Pump22", "Pump22"},
{"Pump23", "Pump23"},
{"Pump24", "Pump24"},
{"Pump25", "Pump25"},
{"Pump26", "Pump26"},
{"Pump27", "Pump27"},
{"SFPump21", "SFPump21"},
{"SFPump22", "SFPump22"},
{"SFPump23", "SFPump23"},
{"SFPump24", "SFPump24"},
{"SFPump25", "SFPump25"},
{"SFPump26", "SFPump26"},
{"SFPump27", "SFPump27"},
{"SFDN2400", "SFDN2400"},
{"SFDN2700", "SFDN2700"},
};
IStation.Service.Station _service_station = new();
IStation.Service.ScheduleConfig _service_schedule_config = new();
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;
Console.WriteLine("time flag wl scada ana diff ");
List> ana_pump_value_list = new List>();
foreach (var zy_scada_day in time_value_list)
{
var time = zy_scada_day.Time;
var zy_scada_dict = zy_scada_day.Value;
if (!OutTarget(zy_scada_dict, out double target_flow1, out double target_head1, out double target_flow2, out double target_head2))
{
continue;
}
if (!OutRpm(zy_scada_dict, out Dictionary station1_flag_rpm_dict, out Dictionary station2_flag_rpm_dict))
{
continue;
}
if (!OutHead(zy_scada_dict, out Dictionary station1_flag_head_dict, out Dictionary station2_flag_head_dict))
{
continue;
}
if (!OutFlow(zy_scada_dict, out Dictionary station1_flag_flow_dict, out Dictionary station2_flag_flow_dict))
{
continue;
}
OutWaterLevel(zy_scada_dict, out Dictionary station1_flag_inlet_water_level_dict, out Dictionary station2_flag_inlet_water_level_dict);
//var ana_pump_list1 = GetOptAnaPumpListByFlow(station1, station1_flag_rpm_dict, station1_flag_flow_dict);
//foreach (var ana_pump in ana_pump_list1)
//{
// var flag = ana_pump.Flag;
// var wl = station1_flag_inlet_water_level_dict[flag];
// var scada_head = station1_flag_head_dict[flag];
// var ana_head = ana_pump.Head;
// var diff_head = ana_head - (scada_head - wl);
// ana_pump_value_list.Add(new(time, flag, wl, scada_head, ana_head, diff_head));
//}
var ana_pump_list2 = GetOptAnaPumpListByFlow(station2, station2_flag_rpm_dict, station2_flag_flow_dict);
foreach (var ana_pump in ana_pump_list2)
{
var flag = ana_pump.Flag;
var wl = station2_flag_inlet_water_level_dict[flag];
var scada_head = station2_flag_head_dict[flag];
var ana_head = ana_pump.Head;
var diff_head = ana_head - (scada_head - wl);
ana_pump_value_list.Add(new(time, flag, wl, scada_head, ana_head, diff_head));
}
}
var group = ana_pump_value_list.GroupBy(x => x.Item2);
foreach (var item in group)
{
var flag = item.Key;
foreach (var item2 in item)
{
Console.WriteLine($"{item2.Item1:T} {flag} {item2.Item3:N2} {item2.Item4:N4} {item2.Item5:N4} {item2.Item6:N4}");
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
}
Console.WriteLine("平均数");
Console.WriteLine();
Console.WriteLine();
foreach (var item in group)
{
var flag = item.Key;
var value = item.Average(x => x.Item6);
Console.WriteLine($"{flag}: {value} ");
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("众数");
Console.WriteLine();
Console.WriteLine();
foreach (var item in group)
{
//Console.WriteLine($"{flag}: {value} ");
var flag = item.Key;
var value = item.Average(x => x.Item6);
var nums = item.Select(x => Math.Round(x.Item6, 2)).ToArray();
var array = ModeHelper.ModeOf(nums);
Console.WriteLine($"{flag}:");
foreach (var vls in array)
{
Console.WriteLine(" " + vls);
}
}
return true;
}
public static bool Analysis3()
{
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"},
{"Pump11", "Pump11"},
{"Pump12", "Pump12"},
{"Pump13", "Pump13"},
{"Pump14", "Pump14"},
{"Pump15", "Pump15"},
{"Pump16", "Pump16"},
{"Pump17", "Pump17"},
{"Pump18", "Pump18"},
{"SFJD1", "SFJD1"},
{"SFJD2", "SFJD2"},
{"SFJD3", "SFJD3"},
{"RPump21", "RPump21"},
{"RPump22", "RPump22"},
{"RPump23", "RPump23"},
{"RPump24", "RPump24"},
{"RPump25", "RPump25"},
{"RPump26", "RPump26"},
{"RPump27", "RPump27"},
{"Pump21", "Pump21"},
{"Pump22", "Pump22"},
{"Pump23", "Pump23"},
{"Pump24", "Pump24"},
{"Pump25", "Pump25"},
{"Pump26", "Pump26"},
{"Pump27", "Pump27"},
{"SFPump21", "SFPump21"},
{"SFPump22", "SFPump22"},
{"SFPump23", "SFPump23"},
{"SFPump24", "SFPump24"},
{"SFPump25", "SFPump25"},
{"SFPump26", "SFPump26"},
{"SFPump27", "SFPump27"},
{"SFDN2400", "SFDN2400"},
{"SFDN2700", "SFDN2700"},
};
IStation.Service.Station _service_station = new();
IStation.Service.ScheduleConfig _service_schedule_config = new();
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;
//Console.WriteLine("time flag wl scada ana diff ");
var day_value_list = DayValueHelper.GetDayValues();
day_value_list = day_value_list?.Where(x=>x.Month==6&&x.Day==5).ToList();
if (day_value_list == null)
return false;
List> ana_pump_value_list = new List>();
foreach (var day_value in day_value_list)
{
var time_value_list = day_value.TimeValueList;
foreach (var zy_scada_day in time_value_list)
{
var time = zy_scada_day.Time;
var zy_scada_dict = zy_scada_day.Value;
if (!OutTarget(zy_scada_dict, out double target_flow1, out double target_head1, out double target_flow2, out double target_head2))
{
continue;
}
if (!OutRpm(zy_scada_dict, out Dictionary station1_flag_rpm_dict, out Dictionary station2_flag_rpm_dict))
{
continue;
}
if (!OutHead(zy_scada_dict, out Dictionary station1_flag_head_dict, out Dictionary station2_flag_head_dict))
{
continue;
}
if (!OutFlow(zy_scada_dict, out Dictionary station1_flag_flow_dict, out Dictionary station2_flag_flow_dict))
{
continue;
}
OutWaterLevel(zy_scada_dict, out Dictionary station1_flag_inlet_water_level_dict, out Dictionary station2_flag_inlet_water_level_dict);
//没有单泵流量计
//var ana_pump_list1 = GetOptAnaPumpListByFlow(station1, station1_flag_rpm_dict, station1_flag_flow_dict);
//foreach (var ana_pump in ana_pump_list1)
//{
// var flag = ana_pump.Flag;
// var wl = station1_flag_inlet_water_level_dict[flag];
// var scada_head = station1_flag_head_dict[flag];
// var ana_head = ana_pump.Head;
// var diff_head = ana_head - (scada_head - wl);
// ana_pump_value_list.Add(new(time, flag, wl, scada_head, ana_head, diff_head));
//}
var ana_pump_list2 = GetOptAnaPumpListByFlow(station2, station2_flag_rpm_dict, station2_flag_flow_dict);
var flags = ana_pump_list2.Select(x => x.Flag).OrderBy(x => x).ToList();
var flags_str = Yw.Untity.IntListHelper.ToString(flags);
foreach (var ana_pump in ana_pump_list2)
{
var flag = ana_pump.Flag;
var wl = station2_flag_inlet_water_level_dict[flag];
var scada_head = station2_flag_head_dict[flag];
var ana_head = ana_pump.Head;
var diff_head = ana_head - (scada_head - wl);
ana_pump_value_list.Add(new(time, flags_str, flag, wl, scada_head, ana_head, diff_head));
}
}
}
var combine_group_list = ana_pump_value_list.GroupBy(x => x.Item2);
foreach (var combine_group in combine_group_list)
{
var flags = combine_group.Key;
Console.WriteLine();
Console.WriteLine($"---------------{flags}--------------");
var group = combine_group.GroupBy(x => x.Item3);
//foreach (var item in group)
//{
// var flag = item.Key;
// foreach (var item2 in item)
// {
// Console.WriteLine($"{item2.Item1:T} {flag} {item2.Item3:N2} {item2.Item4:N4} {item2.Item5:N4} {item2.Item6:N4}");
// }
// Console.WriteLine();
//}
Console.WriteLine("平均数");
foreach (var item in group)
{
var flag = item.Key;
var value = item.Average(x => x.Item7);
var min = item.Min(x => x.Item7);
var max = item.Max(x => x.Item7);
Console.WriteLine($"{flag}: {value} {min} {max}");
}
Console.WriteLine();
Console.WriteLine("众数");
foreach (var item in group)
{
//Console.WriteLine($"{flag}: {value} ");
var flag = item.Key;
var value = item.Average(x => x.Item7);
var nums = item.Select(x => Math.Round(x.Item7, 2)).ToArray();
var array = ModeHelper.ModeOf(nums);
Console.WriteLine($"{flag}:");
foreach (var vls in array)
{
Console.WriteLine(" " + vls);
}
}
}
return true;
}
private static bool OutTarget(Dictionary scada_dict, out double target_flow1, out double target_head1, out double target_flow2, out double target_head2)
{
var jd1_flow = scada_dict["SFJD1"];
var jd2_flow = scada_dict["SFJD2"];
var jd3_flow = scada_dict["SFJD3"];
var jd1_head = scada_dict["SPJD1"];
var jd2_head = scada_dict["SPJD2"];
var jd3_head = scada_dict["SPJD3"];
var dn24_flow = scada_dict["SFDN2400"];
var dn27_flow = scada_dict["SFDN2700"];
var dn24_head = scada_dict["SPDN2400"];
var dn27_head = scada_dict["SPDN2700"];
target_flow1 = 0;
target_head1 = 0;
target_flow2 = 0;
target_head2 = 0;
if (jd1_flow < 0 || jd2_flow < 0 || jd3_flow < 0)
{
return false;
}
if (dn24_flow < 0 || dn27_flow < 0)
{
return false;
}
if (jd1_head < 0 || jd2_head < 0 || jd3_head < 0)
{
return false;
}
if (dn24_head < 0 || dn27_head < 0)
{
return false;
}
var max_head = new List() { jd1_head, jd2_head, jd3_head }.Max();
var head1 = max_head;
var max_pressure2 = new List() { dn24_head, dn27_head }.Max();
var head2 = max_pressure2;
target_flow1 = jd1_flow + jd2_flow + jd3_flow;
target_head1 = head1;
target_flow2 = dn24_flow + dn27_flow;
target_head2 = head2;
return true;
}
public static void OutWaterLevel(Dictionary scada_dict, out Dictionary station1_flag_inlet_water_level_dict, out Dictionary station2_flag_inlet_water_level_dict)
{
station1_flag_inlet_water_level_dict = new Dictionary();
station1_flag_inlet_water_level_dict.Add(11, scada_dict["R3"]);
station1_flag_inlet_water_level_dict.Add(12,scada_dict["R3"]);
station1_flag_inlet_water_level_dict.Add(13,scada_dict["R3"]);
station1_flag_inlet_water_level_dict.Add(14,scada_dict["R2"]);
station1_flag_inlet_water_level_dict.Add(15,scada_dict["R2"]);
station1_flag_inlet_water_level_dict.Add(16,scada_dict["R1"]);
station1_flag_inlet_water_level_dict.Add(17,scada_dict["R1"]);
station1_flag_inlet_water_level_dict.Add(18, scada_dict["R1"]);
station2_flag_inlet_water_level_dict = new Dictionary();
station2_flag_inlet_water_level_dict.Add(21, scada_dict["RPump21"]);
station2_flag_inlet_water_level_dict.Add(22, scada_dict["RPump22"]);
station2_flag_inlet_water_level_dict.Add(23, scada_dict["RPump23"]);
station2_flag_inlet_water_level_dict.Add(24, scada_dict["RPump24"]);
station2_flag_inlet_water_level_dict.Add(25, scada_dict["RPump25"]);
station2_flag_inlet_water_level_dict.Add(26, scada_dict["RPump26"]);
station2_flag_inlet_water_level_dict.Add(27, scada_dict["RPump27"]);
}
private static bool OutRpm(Dictionary scada_dict, out Dictionary station1_flag_rpm_dict, out Dictionary station2_flag_rpm_dict)
{
var FlagNrMappingDict1 = new Dictionary(){
{ "Pump11",11},
{ "Pump12",12},
{ "Pump13",13},
{ "Pump14",14},
{ "Pump15",15},
{ "Pump16",16},
{ "Pump17",17},
{ "Pump18",18}
};
var FlagNrMappingDict2 = new Dictionary(){
{ "Pump21",21},
{ "Pump22",22},
{ "Pump23",23},
{ "Pump24",24},
{ "Pump25",25},
{ "Pump26",26},
{ "Pump27",27}
};
station1_flag_rpm_dict = new Dictionary();
station2_flag_rpm_dict = new Dictionary();
foreach (var mapping in FlagNrMappingDict1)
{
var code = mapping.Key;
if (scada_dict.ContainsKey(code))
{
var value = scada_dict[code];
var hz = GlobalHelper.ModelPumpNrDict[code];
if (code != "Pump15" && code != "Pump16")
{
hz = value * GlobalHelper.ModelPumpNrDict[code];
}
station1_flag_rpm_dict.Add(mapping.Value, hz);
}
}
foreach (var mapping in FlagNrMappingDict2)
{
var code = mapping.Key;
if (scada_dict.ContainsKey(code))
{
var value = scada_dict[code];
var hz = value * GlobalHelper.ModelPumpNrDict[code];
station2_flag_rpm_dict.Add(mapping.Value, hz);
}
}
return true;
}
private static bool OutHead(Dictionary scada_dict, out Dictionary station1_flag_head_dict, out Dictionary station2_flag_head_dict)
{
station1_flag_head_dict = new Dictionary();
station2_flag_head_dict = new Dictionary();
var FlagOutletPressureMappingDict1 = new Dictionary()
{
{"SPPump11" ,11},
{"SPPump12" ,12},
{"SPPump13" ,13},
{"SPPump14" ,14},
{"SPPump15" ,15},
{"SPPump16" ,16},
{"SPPump17" ,17},
{"SPPump18" ,18},
};
var FlagOutletPressureMappingDict2 = new Dictionary()
{
{"SPPump21" ,21},
{"SPPump22" ,22},
{"SPPump23" ,23},
{"SPPump24" ,24},
{"SPPump25" ,25},
{"SPPump26" ,26},
{"SPPump27" ,27}
};
foreach (var mapping in FlagOutletPressureMappingDict1)
{
var code = mapping.Key;
if (scada_dict.ContainsKey(code))
{
var value = scada_dict[code];
station1_flag_head_dict.Add(mapping.Value, value);
}
}
foreach (var mapping in FlagOutletPressureMappingDict2)
{
var code = mapping.Key;
if (scada_dict.ContainsKey(code))
{
var value = scada_dict[code];
station2_flag_head_dict.Add(mapping.Value, value);
}
}
return true;
}
private static bool OutFlow(Dictionary scada_dict, out Dictionary station1_flag_flow_dict, out Dictionary station2_flag_flow_dict)
{
station1_flag_flow_dict = new Dictionary();
station2_flag_flow_dict = new Dictionary();
var flow_id_mapping_dict2 = new Dictionary()
{
{"SFPump21",21},
{"SFPump22",22},
{"SFPump23",23},
{"SFPump24",24},
{"SFPump25",25},
{"SFPump26",26},
{"SFPump27",27}
};
foreach (var mapping in flow_id_mapping_dict2)
{
var code = mapping.Key;
if (scada_dict.ContainsKey(code))
{
var value = scada_dict[code];
station2_flag_flow_dict.Add(mapping.Value, value);
}
}
return true;
}
#endregion
}
}