namespace IStation.Test
{
///
/// 导出 分析系数
///
public partial class AnalysisHelper
{
#region Model
public class ScadaDiffViewModel
{
public DateTime Time { get; set; }
public int Flag { get; set; }
public double Rpm { get; set; }
public double Hz { get; set; }
public double Hz0 { get; set; }
public double Flow { get; set; }
public double Head { get; set; }
public double CurveHead { get; set; }
public double HeadDiff { get; set; }
public double CorrectCurveHead { get; set; }
public double CorrectHeadDiff { get; set; }
}
public class ModelDiffViewMdoel
{
public string Time { get; set; }
public string MonitorID { get; set; }
public string ModelID { get; set; }
public double ModelValue { get; set; }
public double MonitorValue { get; set; }
public double DiffVlaue { get; set; }
public int? Flag { get; set; }
public double? Hz { get; set; }
public double? Hz0 { get; set; }
}
public class AnalysisFactorDto
{
///
/// 泵站
///
public int Station { get; set; }
///
/// 泵标志
///
public int Flag { get; set; }
///
/// 频率
///
public double Hz { get; set; }
///
/// 扬程标准差
///
public double? HeadSTDP { get; set; }
///
/// 扬程偏差
///
public double? HeadDeviation { get; set; }
///
/// 准确度
///
public double Accuracy { get; set; }
///
/// 数量
///
public int Count { get; set; }
}
public class AnalysisDeviationDto
{
///
/// 泵站
///
public int Station { get; set; }
///
/// 运行组合
///
public List RunFlags { get; set; }
public int RunCount { get; set; }
public double MinFlow { get; set; }
public double MaxFlow { get; set; }
public Dictionary PressureDiff { get; set; }
public string Remark { get; set; }
public int Count { get; set; }
}
public class PumpMapping
{
public int Flag { get; set; }
public string PumpId { get; set; }
public string FlowId { get; set; }
public string PressureId { get; set; }
public string CurveId { get; set; }
public int PumpIndex { get; set; }
public int FlowIndex { get; set; }
public int PressureIndex { get; set; }
public int CurveIndex { get; set; }
}
public class StationMapping
{
public string Name { get; set; }
public string ScadaFlowId { get; set; }
public string ScadaPressureId { get; set; }
public string FlowId { get; set; }
public string PressureId { get; set; }
public int FlowIndex { get; set; }
public int PressureIndex { get; set; }
}
#endregion
#region Function
public static bool SaveAnalysisFactorDtoList(int station_index, List> eq_list, List> flag_hz_head_diff_list)
{
if (eq_list == null || !eq_list.Any())
{
return default;
}
if (flag_hz_head_diff_list == null || !flag_hz_head_diff_list.Any())
{
return default;
}
var flag_pump_dict = eq_list.ToDictionary(x => x.SortCode, x => x.RatedParas);
var all_list = GetAnalysisFactorDtoList(flag_pump_dict, flag_hz_head_diff_list);
if (all_list == null || !all_list.Any())
{
return default;
}
all_list.ForEach(x => x.Station = station_index);
var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "分析");
if (!Directory.Exists(root_folder))
{
Directory.CreateDirectory(root_folder);
}
List exist_list = null;
var fileName = root_folder + "\\" + "AnalysisFactor.json";
if (File.Exists(fileName))
{
var exist_json = File.ReadAllText(fileName);
var all_exist_list = JsonHelper.Json2Object>(exist_json);
exist_list = all_exist_list?.Where(x => x.Station != station_index).ToList();
File.Delete(fileName);
}
if (exist_list != null)
{
all_list.AddRange(exist_list);
}
all_list = all_list.OrderBy(x => x.Flag).ThenBy(x => x.Hz).ToList();
var json = JsonHelper.Object2Json(all_list);
File.WriteAllText(fileName, json);
return true;
}
public static bool SaveAnalysisDeviationDtoList(int station_index, List> eq_list, List>>> run_flags_flow_pressure_diff_dict, double minQ = 0, double maxQ = 100000, double spaceQ = 1000)
{
if (eq_list == null || !eq_list.Any())
{
return default;
}
if (run_flags_flow_pressure_diff_dict == null || !run_flags_flow_pressure_diff_dict.Any())
{
return default;
}
var flag_pump_dict = eq_list.ToDictionary(x => x.SortCode, x => x.RatedParas);
var all_list = GetAnalysisDeviationDtoList(flag_pump_dict, run_flags_flow_pressure_diff_dict, minQ, maxQ, spaceQ);
if (all_list == null || !all_list.Any())
{
return default;
}
all_list.ForEach(x => x.Station = station_index);
var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "分析");
if (!Directory.Exists(root_folder))
{
Directory.CreateDirectory(root_folder);
}
List exist_list = null;
var fileName = root_folder + "\\" + "AnalysisDeviation.json";
if (File.Exists(fileName))
{
var exist_json = File.ReadAllText(fileName);
var all_exist_list = JsonHelper.Json2Object>(exist_json);
exist_list = all_exist_list?.Where(x => x.Station != station_index).ToList();
File.Delete(fileName);
}
if (exist_list != null)
{
all_list.AddRange(exist_list);
}
all_list = all_list.OrderBy(x => x.Station).ThenBy(x => x.MinFlow).ToList();
var json = JsonHelper.Object2Json(all_list);
File.WriteAllText(fileName, json);
return true;
}
public static bool SaveAnalysisFactorDtoListAdd(string name, List> eq_list, List> flag_hz_head_diff_list)
{
if (eq_list == null || !eq_list.Any())
{
return default;
}
if (flag_hz_head_diff_list == null || !flag_hz_head_diff_list.Any())
{
return default;
}
var flag_pump_dict = eq_list.ToDictionary(x => x.SortCode, x => x.RatedParas);
var all_analysis_factor_list = GetAnalysisFactorDtoList(flag_pump_dict, flag_hz_head_diff_list);
if (all_analysis_factor_list == null || !all_analysis_factor_list.Any())
{
return default;
}
var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "分析系数");
if (!Directory.Exists(root_folder))
{
Directory.CreateDirectory(root_folder);
}
var fileName = root_folder + "\\" + name + ".json";
if (File.Exists(fileName))
{
var exist_json = File.ReadAllText(fileName);
var exist_all_analysis_factor_list = JsonHelper.Json2Object>(exist_json);
if (exist_all_analysis_factor_list != null && exist_all_analysis_factor_list.Any())
{
foreach (var item in all_analysis_factor_list)
{
var exist = exist_all_analysis_factor_list.Find(x => x.Flag == item.Flag && x.Hz == item.Hz);
if (exist == null)
continue;
item.HeadDeviation += exist.HeadDeviation;
}
}
}
var json = JsonHelper.Object2Json(all_analysis_factor_list);
File.WriteAllText(fileName, json);
return true;
}
public static List GetAnalysisDeviationDtoList(Dictionary flag_pump_dict, List>>> run_flags_flow_pressure_diff_dict, double minQ = 0, double maxQ = 100000, double spaceQ = 1000)
{
if (flag_pump_dict == null || !flag_pump_dict.Any())
{
return default;
}
if (run_flags_flow_pressure_diff_dict == null || !run_flags_flow_pressure_diff_dict.Any())
{
return default;
}
var list = new List();
var error_value = false;
for (double current_minQ = minQ; current_minQ <= maxQ; current_minQ += spaceQ)
{
var current_maxQ = current_minQ + spaceQ;
var combine_list = run_flags_flow_pressure_diff_dict.Where(x => x.Item2 >= current_minQ && x.Item2 <= current_maxQ).ToList();
if (combine_list == null || !combine_list.Any())
continue;
var group_by_run_flags = combine_list.GroupBy(x => x.Item1);
foreach (var item_run_flags in group_by_run_flags)
{
if (item_run_flags.Count() < 5)
continue;
var flags = item_run_flags.Key;
var vm = new AnalysisDeviationDto();
vm.RunFlags = IStation.Untity.IntListHelper.ToList(flags);
vm.MinFlow = current_minQ;
vm.MaxFlow = current_maxQ;
var dev_dict = new Dictionary();
List> tuple_list = item_run_flags.SelectMany(x => x.Item3).ToList();
var group_by_flag = tuple_list.GroupBy(x => x.Item1);
foreach (var flag_item in group_by_flag)
{
var flag = flag_item.Key;
var head_diff_array = flag_item.Select(x => x.Item3).ToArray();
var filter_std_dev_pop_tuple = AnalysisHelper.GetFilterBySTDP(head_diff_array);
var filter_std_dev_pop_array = filter_std_dev_pop_tuple.Item1;
var std_dev_pop = filter_std_dev_pop_tuple.Item2;
var std_dev_pop_head_avg = filter_std_dev_pop_array.Average();
var head_diff_avg = std_dev_pop_head_avg;
head_diff_avg = Math.Round(head_diff_avg, 5);
dev_dict.Add(flag, head_diff_avg);
}
vm.Count = item_run_flags.Count();
vm.PressureDiff = dev_dict;
error_value = false;
foreach (var dev in dev_dict)
{
if (Math.Abs(dev.Value) > 3)
{
error_value = true;
break;
}
}
if (error_value)
{
continue;
}
list.Add(vm);
}
}
return list;
}
public static List GetCalcFlowAnalysisDeviationDtoList(Dictionary flag_pump_dict, List>>> run_flags_flow_pressure_diff_dict, double minQ = 0, double maxQ = 100000, double spaceQ = 1000)
{
if (flag_pump_dict == null || !flag_pump_dict.Any())
{
return default;
}
if (run_flags_flow_pressure_diff_dict == null || !run_flags_flow_pressure_diff_dict.Any())
{
return default;
}
var list = new List();
var error_value = false;
var opt_std_dev_pop = 0.3;
for (double current_minQ = minQ; current_minQ <= maxQ; current_minQ += spaceQ)
{
var current_maxQ = current_minQ + spaceQ;
var combine_list = run_flags_flow_pressure_diff_dict.Where(x => x.Item2 >= current_minQ && x.Item2 <= current_maxQ).ToList();
if (combine_list == null || !combine_list.Any())
continue;
var group_by_run_flags = combine_list.GroupBy(x => x.Item1);
foreach (var item_run_flags in group_by_run_flags)
{
if (item_run_flags.Count() < 5)
continue;
var flags = item_run_flags.Key;
var vm = new AnalysisDeviationDto();
vm.RunFlags = IStation.Untity.IntListHelper.ToList(flags);
vm.MinFlow = current_minQ;
vm.MaxFlow = current_maxQ;
var dev_dict = new Dictionary();
List> tuple_list = item_run_flags.SelectMany(x => x.Item3).ToList();
var group_by_flag = tuple_list.GroupBy(x => x.Item1);
foreach (var flag_item in group_by_flag)
{
var flag = flag_item.Key;
var pump = flag_pump_dict[flag];
var head_diff_list = flag_item.Select(x => x.Item3).ToList();
var head_filter_tuple = AnalysisHelper.GetFilterBySTDP(head_diff_list.ToArray(), opt_std_dev_pop);
var head_filter_array = head_filter_tuple.Item1;
var head_std_dev_pop = head_filter_tuple.Item2;
var head_std_dev_pop_head_avg = head_filter_array.Average();
var flow_list = flag_item.Select(x => x.Item2).ToList();
var flow_filter_tuple = AnalysisHelper.GetFilterBySTDP(flow_list.ToArray(), 50, 1, 3);
var flow_filter_array = flow_filter_tuple.Item1;
var flow_std_dev_pop = flow_filter_tuple.Item2;
var flow_std_dev_pop_head_avg = flow_filter_array.Average();
var other_press = Model.CurveCalcuHelper.CalculateOtherPress(flow_std_dev_pop_head_avg, pump.Ic, pump.Oc, null, null);
//if (!pump.IsBp)
//{
// other_press = 0;
//}
var head_diff_avg = head_std_dev_pop_head_avg - other_press;
head_diff_avg = Math.Round(head_diff_avg, 6);
dev_dict.Add(flag, head_diff_avg);
}
vm.Count = item_run_flags.Count();
vm.PressureDiff = dev_dict;
error_value = false;
foreach (var dev in dev_dict)
{
if (Math.Abs(dev.Value) > 3)
{
error_value = true;
break;
}
}
if (error_value)
{
continue;
}
list.Add(vm);
}
}
return list;
}
public static List GetAnalysisFactorDtoList(Dictionary flag_pump_dict, List> flag_hz_head_diff_list)
{
if (flag_pump_dict == null || !flag_pump_dict.Any())
{
return default;
}
if (flag_hz_head_diff_list == null || !flag_hz_head_diff_list.Any())
{
return default;
}
var exist_data_analysis_factor_list = new List();
var opt_std_dev_pop = 0.3;
//分析5hz范围内的系数
var group_by_flag = flag_hz_head_diff_list.GroupBy(x => x.Item1);
var flag_range5_hz_factor_dict = new Dictionary>>();
foreach (var flag_item in group_by_flag)
{
var flag = flag_item.Key;
var pump = flag_pump_dict[flag];
if (!pump.IsBp)
continue;
for (double i = 20; i <= 50; i += 5)
{
var min_hz = i - 5;
double max_hz = i;
var list = flag_item.Where(x => x.Item2 >= min_hz && x.Item2 <= max_hz).ToList();
if (list == null || list.Count < 10)
continue;
var head_diff_list = list.Select(x => x.Item3).ToList();
var filter_tuple = GetFilterBySTDP(head_diff_list.ToArray(), opt_std_dev_pop);
var filter_array = filter_tuple.Item1;
var std_dev_pop = filter_tuple.Item2;
var std_dev_pop_head_avg = filter_array.Average();
if (!flag_range5_hz_factor_dict.ContainsKey(flag))
{
flag_range5_hz_factor_dict.Add(flag, new Dictionary>());
}
flag_range5_hz_factor_dict[flag].Add(max_hz, new Tuple(std_dev_pop, std_dev_pop_head_avg, filter_array.Length));
}
}
//分析1hz范围内的系数
var group_by_flag_hz = flag_hz_head_diff_list.GroupBy(x => new { x.Item1, x.Item2 });
foreach (var item in group_by_flag_hz)
{
var hz = item.Key.Item2;
if (hz < 20)
continue;
if (item.Count() < 5)
continue;
var flag = item.Key.Item1;
var pump = flag_pump_dict[flag];
var head_diff_list = item.Select(x => x.Item3).ToList();
var filter_std_dev_pop_tuple = GetFilterBySTDP(head_diff_list.ToArray(), opt_std_dev_pop);
var filter_std_dev_pop_array = filter_std_dev_pop_tuple.Item1;
var std_dev_pop = filter_std_dev_pop_tuple.Item2;
var std_dev_pop_head_avg = filter_std_dev_pop_array.Average();
var head_diff_avg = std_dev_pop_head_avg;
if (Math.Abs(head_diff_avg) > 5)
continue;
if (Math.Abs(std_dev_pop) > 1)
continue;
if (Math.Abs(std_dev_pop) > 0.5 && item.Count() < 10)
continue;
var analysis_facotr = new AnalysisFactorDto();
analysis_facotr.Flag = flag;
analysis_facotr.Hz = hz;
analysis_facotr.HeadSTDP = std_dev_pop;
analysis_facotr.HeadDeviation = std_dev_pop_head_avg;
analysis_facotr.Accuracy = 0;
exist_data_analysis_factor_list.Add(analysis_facotr);
}
exist_data_analysis_factor_list = exist_data_analysis_factor_list.OrderBy(x => x.Flag).ThenBy(x => x.Hz).ToList();
//相似换算修正系数(不存在监测数据的频率)
var similar_analysis_factor_list = new List();
foreach (var pump_item in flag_pump_dict)
{
var flag = pump_item.Key;
var pump = pump_item.Value;
if (!pump.IsBp)
continue;
if (!flag_range5_hz_factor_dict.ContainsKey(flag))
continue;
var range5_hz_item = flag_range5_hz_factor_dict[flag];
for (int hz = 1; hz <= 50; hz++)
{
if (exist_data_analysis_factor_list.Exists(x => x.Flag == flag && x.Hz == hz))
continue;
var hz_range_num = hz / 5;
var hz_key = (hz_range_num + 1) * 5;
if (hz_key > 50)
hz_key = 50;
if (range5_hz_item.ContainsKey(hz_key))
{
var item = range5_hz_item[hz_key];
var analysis_facotr = new AnalysisFactorDto();
analysis_facotr.Flag = flag;
analysis_facotr.Hz = hz;
analysis_facotr.HeadSTDP = item.Item1;
analysis_facotr.HeadDeviation = item.Item2;
analysis_facotr.Accuracy = 0;
similar_analysis_factor_list.Add(analysis_facotr);
}
else
{
var hz_list = range5_hz_item.Select(x => x.Key).ToList();
var similar_hz = hz_list.Where(x => x >= hz_key)?.OrderBy(x => x).FirstOrDefault();
if (similar_hz == null || similar_hz.Value == 0)
{
similar_hz = hz_list.OrderByDescending(x => x).FirstOrDefault();
}
if (similar_hz == null)
{
throw new Exception("similar_hz error");
}
var tuple = range5_hz_item[similar_hz.Value];
var similar_ratio = hz / similar_hz.Value;
var head_dev = tuple.Item2 * similar_ratio;
var head_stdp = tuple.Item1 * similar_ratio;
var analysis_facotr = new AnalysisFactorDto();
analysis_facotr.Flag = flag;
analysis_facotr.Hz = hz;
analysis_facotr.HeadSTDP = head_stdp;
analysis_facotr.HeadDeviation = head_dev;
analysis_facotr.Accuracy = -1;
similar_analysis_factor_list.Add(analysis_facotr);
}
}
}
var all_analysis_factor_list = new List();
all_analysis_factor_list.AddRange(exist_data_analysis_factor_list);
all_analysis_factor_list.AddRange(similar_analysis_factor_list);
all_analysis_factor_list = all_analysis_factor_list.OrderBy(x => x.Flag).ThenBy(x => x.Hz).ToList();
return all_analysis_factor_list;
}
public static Tuple GetFilterBySTDP(double[] array, double min_dev = 0.3, int start_index = 0, int max_iteration_count = 1)
{
if (array == null || !array.Any())
{
return default;
}
var array_avg = array.Average();
var array_count = array.Count();
FilterOutliersHelper.STDEV(array, out double std_dev, out double std_dev_pop);
if (Math.Abs(std_dev_pop) < min_dev)
{
return new Tuple(array, std_dev_pop);
}
if (start_index > max_iteration_count)
{
return new Tuple(array, std_dev_pop);
}
var filter_array = array.Where(x => !(Math.Abs(x - array_avg) > Math.Abs(std_dev_pop * 2))).ToArray();
if (filter_array == null || !filter_array.Any())
{
return default;
}
start_index++;
return GetFilterBySTDP(filter_array, min_dev, start_index, max_iteration_count);
}
public static List GetStationMappingList()
{
var list = new List();
var dn2400 = new StationMapping();
var dn2700 = new StationMapping();
var jd1 = new StationMapping();
var jd2 = new StationMapping();
var jd3 = new StationMapping();
jd1.Name = "JD1";
jd2.Name = "JD2";
jd3.Name = "JD3";
dn2400.Name = "DN2400";
dn2700.Name = "SN2700";
jd1.ScadaFlowId = "SFJD1";
jd2.ScadaFlowId = "SFJD2";
jd3.ScadaFlowId = "SFJD3";
dn2400.ScadaFlowId = "SFDN2400";
dn2700.ScadaFlowId = "SFDN2700";
jd1.ScadaPressureId = "SPJD1";
jd2.ScadaPressureId = "SPJD2";
jd3.ScadaPressureId = "SPJD3";
dn2400.ScadaPressureId = "SPDN2400";
dn2700.ScadaPressureId = "SPDN2700";
jd1.FlowId = "Pjd1";
jd2.FlowId = "Pjd2";
jd3.FlowId = "Pjd3";
dn2400.FlowId = "Pdn2400";
dn2700.FlowId = "Pdn2700";
jd1.PressureId = "Jjd1";
jd2.PressureId = "Jjd2";
jd3.PressureId = "Jjd3";
dn2400.PressureId = "Jdn2400";
dn2700.PressureId = "Jdn2700";
list.Add(jd1);
list.Add(jd2);
list.Add(jd3);
list.Add(dn2400);
list.Add(dn2700);
return list;
}
public static List GetPumpModelMappingList()
{
var list = new List();
var pump11 = new PumpMapping();
var pump12 = new PumpMapping();
var pump13 = new PumpMapping();
var pump14 = new PumpMapping();
var pump15 = new PumpMapping();
var pump16 = new PumpMapping();
var pump17 = new PumpMapping();
var pump18 = new PumpMapping();
var pump21 = new PumpMapping();
var pump22 = new PumpMapping();
var pump23 = new PumpMapping();
var pump24 = new PumpMapping();
var pump25 = new PumpMapping();
var pump26 = new PumpMapping();
var pump27 = new PumpMapping();
pump11.Flag = GlobalHelperW.Flag11;
pump12.Flag = GlobalHelperW.Flag12;
pump13.Flag = GlobalHelperW.Flag13;
pump14.Flag = GlobalHelperW.Flag14;
pump15.Flag = GlobalHelperW.Flag15;
pump16.Flag = GlobalHelperW.Flag16;
pump17.Flag = GlobalHelperW.Flag17;
pump18.Flag = GlobalHelperW.Flag18;
pump21.Flag = GlobalHelperW.Flag21;
pump22.Flag = GlobalHelperW.Flag22;
pump23.Flag = GlobalHelperW.Flag23;
pump24.Flag = GlobalHelperW.Flag24;
pump25.Flag = GlobalHelperW.Flag25;
pump26.Flag = GlobalHelperW.Flag26;
pump27.Flag = GlobalHelperW.Flag27;
pump11.PumpId = "Pump11";
pump12.PumpId = "Pump12";
pump13.PumpId = "Pump13";
pump14.PumpId = "Pump14";
pump15.PumpId = "Pump15";
pump16.PumpId = "Pump16";
pump17.PumpId = "Pump17";
pump18.PumpId = "Pump18";
pump21.PumpId = "Pump21";
pump22.PumpId = "Pump22";
pump23.PumpId = "Pump23";
pump24.PumpId = "Pump24";
pump25.PumpId = "Pump25";
pump26.PumpId = "Pump26";
pump27.PumpId = "Pump27";
pump11.FlowId = "";
pump12.FlowId = "";
pump13.FlowId = "";
pump14.FlowId = "";
pump15.FlowId = "";
pump16.FlowId = "";
pump17.FlowId = "";
pump18.FlowId = "";
pump21.FlowId = "Ppump21";
pump22.FlowId = "Ppump22";
pump23.FlowId = "Ppump23";
pump24.FlowId = "Ppump24";
pump25.FlowId = "Ppump25";
pump26.FlowId = "Ppump26";
pump27.FlowId = "Ppump27";
pump11.PressureId = "Jpump11";
pump12.PressureId = "Jpump12";
pump13.PressureId = "Jpump13";
pump14.PressureId = "Jpump14";
pump15.PressureId = "Jpump15";
pump16.PressureId = "Jpump16";
pump17.PressureId = "Jpump17";
pump18.PressureId = "Jpump18";
pump21.PressureId = "Jpump21";
pump22.PressureId = "Jpump22";
pump23.PressureId = "Jpump23";
pump24.PressureId = "Jpump24";
pump25.PressureId = "Jpump25";
pump26.PressureId = "Jpump26";
pump27.PressureId = "Jpump27";
pump11.CurveId = "11";
pump12.CurveId = "12";
pump13.CurveId = "13";
pump14.CurveId = "14";
pump15.CurveId = "15";
pump16.CurveId = "16";
pump17.CurveId = "17";
pump18.CurveId = "18";
pump21.CurveId = "21";
pump22.CurveId = "22";
pump23.CurveId = "23";
pump24.CurveId = "24";
pump25.CurveId = "25";
pump26.CurveId = "26";
pump27.CurveId = "27";
list.Add(pump11);
list.Add(pump12);
list.Add(pump13);
list.Add(pump14);
list.Add(pump15);
list.Add(pump16);
list.Add(pump17);
list.Add(pump18);
list.Add(pump21);
list.Add(pump22);
list.Add(pump23);
list.Add(pump24);
list.Add(pump25);
list.Add(pump26);
list.Add(pump27);
return list;
}
public static List GetPatternIdList()
{
var list = new List();
list.Add("Pump11");
list.Add("Pump12");
list.Add("Pump13");
list.Add("Pump14");
list.Add("Pump15");
list.Add("Pump16");
list.Add("Pump17");
list.Add("Pump18");
list.Add("R3");
list.Add("R2");
list.Add("R1");
list.Add("SFJD1");
list.Add("SFJD2");
list.Add("SFJD3");
list.Add("RPump21");
list.Add("RPump22");
list.Add("RPump23");
list.Add("RPump24");
list.Add("RPump25");
list.Add("RPump26");
list.Add("RPump27");
list.Add("SFPump21");
list.Add("SFPump22");
list.Add("SFPump23");
list.Add("SFPump24");
list.Add("SFPump25");
list.Add("SFPump26");
list.Add("SFPump27");
list.Add("Pump21");
list.Add("Pump22");
list.Add("Pump23");
list.Add("Pump24");
list.Add("Pump25");
list.Add("Pump26");
list.Add("Pump27");
list.Add("SFDN2400");
list.Add("SFDN2700");
return list;
}
public static Dictionary GetWLDict(Dictionary flag_pressure_diff_dev)
{
if (flag_pressure_diff_dev == null || !flag_pressure_diff_dev.Any())
{
return default;
}
var wl_dict = new Dictionary();
wl_dict.Add("R3", 0);
wl_dict.Add("R2", 0);
wl_dict.Add("R1", 0);
wl_dict.Add("RPump21", 0);
wl_dict.Add("RPump22", 0);
wl_dict.Add("RPump23", 0);
wl_dict.Add("RPump24", 0);
wl_dict.Add("RPump25", 0);
wl_dict.Add("RPump26", 0);
wl_dict.Add("RPump27", 0);
double? r1 = null, r2 = null;
foreach (var item in flag_pressure_diff_dev)
{
var flag = item.Key;
var pressure_diff_dev = item.Value;
if (flag < 16 && r2 == null)
{
r2 = pressure_diff_dev;
wl_dict["R2"] = r2 ?? 0;
}
else if (flag < 21 && r1 == null)
{
r1 = pressure_diff_dev;
wl_dict["R1"] = r1 ?? 0;
}
else
{
switch (flag)
{
case 21: wl_dict["RPump21"] = pressure_diff_dev; break;
case 22: wl_dict["RPump22"] = pressure_diff_dev; break;
case 23: wl_dict["RPump23"] = pressure_diff_dev; break;
case 24: wl_dict["RPump24"] = pressure_diff_dev; break;
case 25: wl_dict["RPump25"] = pressure_diff_dev; break;
case 26: wl_dict["RPump26"] = pressure_diff_dev; break;
case 27: wl_dict["RPump27"] = pressure_diff_dev; break;
default:
break;
}
}
}
return wl_dict;
}
#endregion
}
}