using DevExpress.XtraEditors; using IStation; using System.IO; using System.Text; namespace Verify { public partial class VerifyView : DevExpress.XtraEditors.XtraUserControl { public VerifyView() { InitializeComponent(); this.treeList1.InitialMultiColSettings(); this.gridView2.SetNormalView(); this.gridView4.SetNormalView(); } private List> _log_list = null; private List _verify_vm_list = null; private List _pumps = null; private static readonly IStation.Service.Station _service_station = new(); private static readonly IStation.Service.ScheduleConfig _service_schedule_config = new(); private static readonly IStation.Service.ScheduleRequest _service_schedule_request = new(); private static readonly IStation.Service.ScheduleConclusion _service_schedule_conclusion = new(); private static readonly IStation.Service.SchedulePump _service_schedule_pump = new(); public void SetBindingData() { var station_info = _service_station.Get(); if (station_info != null) { _pumps = station_info.Station2; } //_log_list = LogHelper.Parse(); //if (_log_list == null || !_log_list.Any()) //{ // Clear(); // return; //} _verify_vm_list = new List(); var request_list = _service_schedule_request.GetAll(); var conclusion_list = _service_schedule_conclusion.GetAll(); var pump_list = _service_schedule_pump.GetAll(); if (request_list != null && request_list.Any()) { foreach (var rhs in request_list) { var conclusion = conclusion_list?.Find(x => x.RequestID == rhs.ID && x.Station == IStation.eDockingStation.Ch2s); if (conclusion == null) continue; var vm = new VerifyViewModel(); vm.Time = rhs.ReceptionTime; vm.TargetFlow = rhs.TargetFlow2; vm.TargetHead = Mpa2M(rhs.TargetPressure2); var log_list = _log_list?.Where(x => x.Item1 == rhs.ID).ToList(); if (log_list == null ||!log_list.Any()) continue; var total_flow = 0d; { var scada_str = log_list.Find(x => !x.Item4); if (scada_str == null) continue; GetRealTimeZyScadaList(scada_str.Item3, out List zy_scada_list); vm.SchedulingScadaList = GetScadaList(zy_scada_list); vm.ScheduleFlow = conclusion.TotalFlow; vm.SchedulePower = conclusion.TotalPower; vm.SchedulePumpList = pump_list?.Where(x => x.RequestID == rhs.ID).ToList(); } { var real_scada_str = log_list.Find(x => x.Item4); if (real_scada_str == null) continue; GetRealTimeZyScadaList(real_scada_str.Item3, out List zy_scada_list); vm.VerifyScadaList = GetScadaList(zy_scada_list); OutValue( zy_scada_list, out double? DN2400Flow, out double? DN2400Head, out double? DN2700Flow, out double? DN2700Head); vm.RealDN2400Q = DN2400Flow ?? 0; vm.RealDN2700Q = DN2700Flow ?? 0; vm.RealFlow = (DN2400Flow + DN2700Flow) ?? 0; vm.RealPower = vm.VerifyScadaList?.Sum(x => x.Power) ?? 0; vm.RealDN2400Head = DN2400Head ?? 0; vm.RealDN2700Head = DN2700Head ?? 0; } var total_flow_diff = total_flow - vm.RealFlow; vm.ScheduleFlowDiff = vm.ScheduleFlow - vm.TargetFlow; vm.RealFlowDiff = vm.RealFlow - vm.TargetFlow; vm.Round(); _verify_vm_list.Add(vm); } } this.verifyViewModelBindingSource.DataSource = _verify_vm_list; this.verifyViewModelBindingSource.ResetBindings(false); this.treeList1.BestFitColumns(); Clear(); } private bool _use_temp = false; private bool _use_factor = false; public void SetUseTempData(bool use) { _use_temp = use; } public void SetFactor(bool use) { _use_factor = use; } private void Clear() { this.memoExpand.Text = ""; this.pumpScadaViewModelBindingSource.DataSource = new List(); this.pumpScheduleViewModelBindingSource.DataSource = new List(); } #region config private void OutValue(List zy_scada_list, out double? DN2400Flow, out double? DN2400Head, out double? DN2700Flow, out double? DN2700Head) { DN2400Flow = null; DN2400Head = null; DN2700Flow = null; DN2700Head = null; if (zy_scada_list == null || !zy_scada_list.Any()) { return; } var zy_scada_dict = zy_scada_list.ToDictionary(x => x.Code, x => x.Value); DN2400Flow = zy_scada_dict[IStation.GlobalHelper.DN2400总管_瞬时流量_长江管网图]; DN2400Head = Mpa2M(zy_scada_dict[IStation.GlobalHelper.DN2400_出厂压力_长江管网图] ?? 0); DN2700Flow = zy_scada_dict[IStation.GlobalHelper.DN2700总管_瞬时流量_长江管网图]; DN2700Head = Mpa2M(zy_scada_dict[IStation.GlobalHelper.DN2700_出厂压力_长江管网图] ?? 0); } private List GetScadaList( List zy_scada_list) { if (zy_scada_list == null || !zy_scada_list.Any()) { return default; } var zy_scada_dict = zy_scada_list.ToDictionary(x => x.Code, x => x.Value); var DN2400Flow = zy_scada_dict[IStation.GlobalHelper.DN2400总管_瞬时流量_长江管网图]; var DN2400Pressure = zy_scada_dict[IStation.GlobalHelper.DN2400_出厂压力_长江管网图]; var DN2700Flow = zy_scada_dict[IStation.GlobalHelper.DN2700总管_瞬时流量_长江管网图]; var DN2700Pressure = zy_scada_dict[IStation.GlobalHelper.DN2700_出厂压力_长江管网图]; var pump_vm21 = new PumpScadaViewModel(); var pump_vm22 = new PumpScadaViewModel(); var pump_vm23 = new PumpScadaViewModel(); var pump_vm24 = new PumpScadaViewModel(); var pump_vm25 = new PumpScadaViewModel(); var pump_vm26 = new PumpScadaViewModel(); var pump_vm27 = new PumpScadaViewModel(); pump_vm21.Flag = IStation.GlobalHelper.Flag21; pump_vm22.Flag = IStation.GlobalHelper.Flag22; pump_vm23.Flag = IStation.GlobalHelper.Flag23; pump_vm24.Flag = IStation.GlobalHelper.Flag24; pump_vm25.Flag = IStation.GlobalHelper.Flag25; pump_vm26.Flag = IStation.GlobalHelper.Flag26; pump_vm27.Flag = IStation.GlobalHelper.Flag27; pump_vm21.RunStatus = zy_scada_dict[IStation.GlobalHelper.二输21泵_运行状态]; pump_vm22.RunStatus = zy_scada_dict[IStation.GlobalHelper.二输22泵_运行状态]; pump_vm23.RunStatus = zy_scada_dict[IStation.GlobalHelper.二输23泵_运行状态]; pump_vm24.RunStatus = zy_scada_dict[IStation.GlobalHelper.二输24泵_运行状态]; pump_vm25.RunStatus = zy_scada_dict[IStation.GlobalHelper.二输25泵_运行状态]; pump_vm26.RunStatus = zy_scada_dict[IStation.GlobalHelper.二输26泵_运行状态]; pump_vm27.RunStatus = zy_scada_dict[IStation.GlobalHelper.二输27泵_运行状态]; pump_vm21.WL = zy_scada_dict[IStation.GlobalHelper.二输21泵_泵井液位]; pump_vm22.WL = zy_scada_dict[IStation.GlobalHelper.二输22泵_泵井液位]; pump_vm23.WL = zy_scada_dict[IStation.GlobalHelper.二输23泵_泵井液位]; pump_vm24.WL = zy_scada_dict[IStation.GlobalHelper.二输24泵_泵井液位]; pump_vm25.WL = zy_scada_dict[IStation.GlobalHelper.二输25泵_泵井液位]; pump_vm26.WL = zy_scada_dict[IStation.GlobalHelper.二输26泵_泵井液位]; pump_vm27.WL = zy_scada_dict[IStation.GlobalHelper.二输27泵_泵井液位]; pump_vm21.Head = Mpa2M(zy_scada_dict[IStation.GlobalHelper.二输21泵_出水压力] ?? 0); pump_vm22.Head = Mpa2M(zy_scada_dict[IStation.GlobalHelper.二输22泵_出水压力] ?? 0); pump_vm23.Head = Mpa2M(zy_scada_dict[IStation.GlobalHelper.二输23泵_出水压力] ?? 0); pump_vm24.Head = Mpa2M(zy_scada_dict[IStation.GlobalHelper.二输24泵_出水压力] ?? 0); pump_vm25.Head = Mpa2M(zy_scada_dict[IStation.GlobalHelper.二输25泵_出水压力] ?? 0); pump_vm26.Head = Mpa2M(zy_scada_dict[IStation.GlobalHelper.二输26泵_出水压力] ?? 0); pump_vm27.Head = Mpa2M(zy_scada_dict[IStation.GlobalHelper.二输27泵_出水压力] ?? 0); pump_vm21.Power = zy_scada_dict[IStation.GlobalHelper.二输21泵_有功功率]; pump_vm22.Power = zy_scada_dict[IStation.GlobalHelper.二输22泵_有功功率]; pump_vm23.Power = zy_scada_dict[IStation.GlobalHelper.二输23泵_有功功率]; pump_vm24.Power = zy_scada_dict[IStation.GlobalHelper.二输24泵_有功功率]; pump_vm25.Power = zy_scada_dict[IStation.GlobalHelper.二输25泵_有功功率]; pump_vm26.Power = zy_scada_dict[IStation.GlobalHelper.二输26泵_有功功率]; pump_vm27.Power = zy_scada_dict[IStation.GlobalHelper.二输27泵_有功功率]; pump_vm21.Flow = zy_scada_dict[IStation.GlobalHelper.二输21泵_瞬时流量]; pump_vm22.Flow = zy_scada_dict[IStation.GlobalHelper.二输22泵_瞬时流量]; pump_vm23.Flow = zy_scada_dict[IStation.GlobalHelper.二输23泵_瞬时流量]; pump_vm24.Flow = zy_scada_dict[IStation.GlobalHelper.二输24泵_瞬时流量]; pump_vm25.Flow = zy_scada_dict[IStation.GlobalHelper.二输25泵_瞬时流量]; pump_vm26.Flow = zy_scada_dict[IStation.GlobalHelper.二输26泵_瞬时流量]; pump_vm27.Flow = zy_scada_dict[IStation.GlobalHelper.二输27泵_瞬时流量]; pump_vm21.Speed = zy_scada_dict[IStation.GlobalHelper.二输21泵_转速]; pump_vm22.Speed = zy_scada_dict[IStation.GlobalHelper.二输22泵_转速]; pump_vm23.Speed = zy_scada_dict[IStation.GlobalHelper.二输23泵_转速]; pump_vm24.Speed = zy_scada_dict[IStation.GlobalHelper.二输24泵_转速]; pump_vm25.Speed = zy_scada_dict[IStation.GlobalHelper.二输25泵_转速]; pump_vm26.Speed = zy_scada_dict[IStation.GlobalHelper.二输26泵_转速]; pump_vm27.Speed = zy_scada_dict[IStation.GlobalHelper.二输27泵_转速]; pump_vm21.MaintenanceState = zy_scada_dict[IStation.GlobalHelper.二输21泵_检修状态]; pump_vm22.MaintenanceState = zy_scada_dict[IStation.GlobalHelper.二输22泵_检修状态]; pump_vm23.MaintenanceState = zy_scada_dict[IStation.GlobalHelper.二输23泵_检修状态]; pump_vm24.MaintenanceState = zy_scada_dict[IStation.GlobalHelper.二输24泵_检修状态]; pump_vm25.MaintenanceState = zy_scada_dict[IStation.GlobalHelper.二输25泵_检修状态]; pump_vm26.MaintenanceState = zy_scada_dict[IStation.GlobalHelper.二输26泵_检修状态]; pump_vm27.MaintenanceState = zy_scada_dict[IStation.GlobalHelper.二输27泵_检修状态]; var pump_dict = _pumps.ToDictionary(x=>x.Flag,x=>x); pump_vm21.Round(); pump_vm22.Round(); pump_vm23.Round(); pump_vm24.Round(); pump_vm25.Round(); pump_vm26.Round(); pump_vm27.Round(); pump_vm21.Set(pump_dict[21]); pump_vm22.Set(pump_dict[22]); pump_vm23.Set(pump_dict[23]); pump_vm24.Set(pump_dict[24]); pump_vm25.Set(pump_dict[25]); pump_vm26.Set(pump_dict[26]); pump_vm27.Set(pump_dict[27]); var pump_scada_list = new List { pump_vm21, pump_vm22, pump_vm23, pump_vm24, pump_vm25, pump_vm26, pump_vm27 }; return pump_scada_list; } /// /// 获取泵站运行标志列表 /// private void GetStationOpenFlagList(List list2, out List station2_open_flag_list) { station2_open_flag_list = list2?.Where(x => x.RunStatus == 1).Select(x => x.Flag).ToList(); } /// /// 获取泵进口水位字典 /// private void GetFlagInletWaterLevelDict(List list2, out Dictionary station2_flag_inlet_water_level_dict) { station2_flag_inlet_water_level_dict = list2?.ToDictionary(x => x.Flag, x => x.WL ?? 0); } /// /// 获取泵站检修标志列表(0是正常,1是检修) /// private void GetStationMaintenanceFlagList(List list2, out List station2_maintenance_flag_list) { station2_maintenance_flag_list = list2?.Where(x => x.MaintenanceState == 1).Select(x => x.Flag).ToList(); } /// /// 获取组合偏差系数字典 /// /// 总流量 /// 组合标志 /// private Dictionary GetCombineDeviationFactorDict(double flow, IEnumerable flags) { var deviation_factor_dict = new Dictionary(); foreach (var flag in flags) { deviation_factor_dict.Add(flag, 0); } var analysis_deviation = new IStation.Service.AnalysisDeviation().GetByFlowAndRunFlags(flow, flags); if (analysis_deviation == null) { if (IStation.GlobalHelper.IsStation2(flags)) { Yw.LogHelper.Error($"[{Yw.Untity.IntListHelper.ToString(flags)}]组合不存在偏差系数!"); } return deviation_factor_dict; } foreach (var flag in flags) { var scada_correction_factor = 0d; var model_correction_factor = 0d; var model_correction_factor_use = 0d; if (analysis_deviation.CurveDeviation != null && analysis_deviation.CurveDeviation.ContainsKey(flag)) { scada_correction_factor = analysis_deviation.CurveDeviation[flag]; } if (analysis_deviation.ModelDeviation != null && analysis_deviation.ModelDeviation.ContainsKey(flag)) { model_correction_factor = analysis_deviation.ModelDeviation[flag]; } if (model_correction_factor < 0) { model_correction_factor_use = Math.Abs(model_correction_factor); } else { model_correction_factor_use = -model_correction_factor; } var correction_factor = scada_correction_factor + model_correction_factor_use; deviation_factor_dict[flag] = correction_factor; } return deviation_factor_dict; } /// /// 获取实时众毅Scada数据列表 /// public static string GetRealTimeZyScadaList(string json, out List zy_scada_list, bool use_debug = false) { zy_scada_list = new List(); try { zy_scada_list = Yw.JsonHelper.Json2Object>(json); } catch (System.Exception ex) { return ex.Message; } if (zy_scada_list == null || !zy_scada_list.Any()) { return "zy_scada_list 无数据"; } return string.Empty; } /// /// Mpa=>m /// public double Mpa2M(double mpa) { return mpa * IStation.Curve.Constant.WaterDensity / IStation.Curve.Constant.g; } /// /// m=>Mpa /// public double M2Mpa(double m) { return m * IStation.Curve.Constant.g / IStation.Curve.Constant.WaterDensity; } #endregion #region event private void treeList1_CustomDrawNodeCell(object sender, DevExpress.XtraTreeList.CustomDrawNodeCellEventArgs e) { if (e.Column == this.colScheduleFlowDiff || e.Column == this.colRealFlowDiff) { if (e.CellValue != null) { var cell_value = e.CellValue.ToString() ?? string.Empty; if (double.TryParse(cell_value, out double value)) { if (value > 0) { e.Appearance.ForeColor = Color.Green; } else { e.Appearance.ForeColor = Color.Red; } } } } } private void gridView4_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { if (e.Column == this.colSpeedDiif || e.Column == this.colFlowDiif) { if (e.CellValue != null) { var cell_value = e.CellValue.ToString() ?? string.Empty; if (double.TryParse(cell_value, out double value)) { if (value > 0) { e.Appearance.ForeColor = Color.Green; } else { e.Appearance.ForeColor = Color.Red; } } } } } private void gridView2_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { if (e.Column == this.colCurveFlowDiff || e.Column == this.colCurveHeadDiff) { if (e.CellValue != null) { var cell_value = e.CellValue.ToString() ?? string.Empty; if (double.TryParse(cell_value, out double value)) { if (value > 0) { e.Appearance.ForeColor = Color.Green; } else { e.Appearance.ForeColor = Color.Red; } } } } } private void treeList1_RowCellClick(object sender, DevExpress.XtraTreeList.RowCellClickEventArgs e) { if (e.Column == this.colButton) { var vm = this.treeList1.GetFocusedRow() as VerifyViewModel; if (vm == null) return; var TargetFlow = vm.TargetFlow; var TargetHead = vm.TargetHead; var RealFlow = vm.RealFlow; var RealDN2400Head = vm.RealDN2400Head; var RealDN2700Head = vm.RealDN2700Head; var SchedulePumpList = vm.SchedulePumpList; var VerifyScadaList = vm.VerifyScadaList; var SchedulingScadaList = vm.SchedulingScadaList; if (_use_temp) { var temp_file_path = IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\0827_1.txt"; var temp_json = File.ReadAllText(temp_file_path); var temp_scada_list = Yw.JsonHelper.Json2Object>(temp_json); VerifyScadaList = GetScadaList(temp_scada_list); OutValue( temp_scada_list, out double? DN2400Flow, out double? DN2400Pressure, out double? DN2700Flow, out double? DN2700Pressure); RealFlow = (DN2400Flow + DN2700Flow) ?? 0; RealDN2400Head = DN2400Pressure ?? 0; RealDN2700Head = DN2700Pressure ?? 0; } //Schedule( // TargetFlow, // TargetHead, // RealFlow, // RealDN2400Head, // RealDN2700Head, // SchedulePumpList, // VerifyScadaList); Schedule( TargetFlow, TargetHead, RealFlow, SchedulingScadaList, VerifyScadaList); } } #endregion private void Schedule( double TargetFlow, double TargetHead, double RealFlow, double RealDN2400Head, double RealDN2700Head, List SchedulePumpList, List VerifyScadaList ) { if (SchedulePumpList == null || VerifyScadaList == null) { Clear(); return; } if (_pumps == null || !_pumps.Any()) { WaitHelper.HideWaitForm(); XtraMessageBox.Show("Station文件缺失!"); return; } var station2 = _pumps; var helper = new IStation.Algorithm.ScheduleHelper(); var rpm_dict = VerifyScadaList.ToDictionary(x => x.Flag, x => x.Speed ?? 0); var inlet_water_level_dict = VerifyScadaList.ToDictionary(x => x.Flag, x => x.WL ?? 0); var flow_dict = VerifyScadaList.ToDictionary(x => x.Flag, x => x.Flow ?? 0); var head_dict = VerifyScadaList.ToDictionary(x => x.Flag, x => x.Head ?? 0); var working_ana_pump_list = helper.GetAnaFrePumpListByWorking(station2, rpm_dict, inlet_water_level_dict, flow_dict, head_dict, RealFlow, out Dictionary flag_curve_head_dict, _use_factor); var schedule_vm_list = new List(); var run_flags = SchedulePumpList.Select(x => x.Flag).OrderBy(x => x).ToList(); var analysis_deviation = new IStation.Service.AnalysisDeviation().GetByFlowAndRunFlags(TargetFlow, run_flags); var str = new StringBuilder(); var dn24_head_diff = RealDN2400Head - TargetHead; var dn27_head_diff = RealDN2700Head - TargetHead; str.AppendLine($"目标扬程:{TargetHead}\r\n实际扬程:DN2400:{RealDN2400Head:N3} (差:{dn24_head_diff:N3}米) DN2700:{RealDN2700Head:N3} (差:{dn27_head_diff:N3}米)"); var diff_flow_sum = 0d; foreach (var flag in IStation.GlobalHelper.Station2FlagList) { var pump = station2.Find(x => x.Flag == flag); if (pump == null) continue; var verify_scada = VerifyScadaList.Find(x => x.Flag == flag); var schedule_vm = new PumpScheduleViewModel(); schedule_vm.Flag = flag; schedule_vm.WL = verify_scada.WL; var ana_pump = SchedulePumpList.Find(x => x.Flag == flag); if (ana_pump != null) { schedule_vm.RunStatus = 1; schedule_vm.Flow = ana_pump.Flow; schedule_vm.PumpHead = ana_pump.Head; schedule_vm.Speed = ana_pump.Rpm; schedule_vm.Power = ana_pump.Power; schedule_vm.PressureDiff= ana_pump.PressureDiff; schedule_vm.Head = ana_pump.PressureDiff + verify_scada.WL; if (analysis_deviation != null) { var scada_correction_factor = 0d; var model_correction_factor = 0d; var model_correction_factor_use = 0d; if (analysis_deviation.CurveDeviation != null && analysis_deviation.CurveDeviation.ContainsKey(flag)) scada_correction_factor = analysis_deviation.CurveDeviation[flag]; if (analysis_deviation.ModelDeviation != null && analysis_deviation.ModelDeviation.ContainsKey(flag)) model_correction_factor = analysis_deviation.ModelDeviation[flag]; if (model_correction_factor < 0) model_correction_factor_use = Math.Abs(model_correction_factor); else model_correction_factor_use = -model_correction_factor; schedule_vm.ScadaFactor = Math.Round(scada_correction_factor, 5); schedule_vm.ModelFactor = Math.Round(model_correction_factor_use, 5); } } schedule_vm.PowerDiff = verify_scada.Power - schedule_vm.Power; schedule_vm.SpeedDiif = verify_scada.Speed - schedule_vm.Speed; schedule_vm.FlowDiif = verify_scada.Flow - schedule_vm.Flow; if (ana_pump != null) { var hz_diff = schedule_vm.SpeedDiif / pump.Nr * 50; str.Append($"{flag}# 频率差:{hz_diff:N3} "); } var working_ana_pump = working_ana_pump_list?.Find(x => x.Flag == flag); if (working_ana_pump != null) { var wokring_flow_diff = verify_scada.Flow - working_ana_pump.Flow; verify_scada.CurveFlow = Math.Round(working_ana_pump.Flow, 2); verify_scada.CurveFlowDiff = Math.Round(wokring_flow_diff ?? 0, 2); diff_flow_sum += verify_scada.CurveFlowDiff ?? 0; if (flag_curve_head_dict != null && flag_curve_head_dict.ContainsKey(flag)) { var curve_head = flag_curve_head_dict[flag]; var wokring_head_diff = verify_scada.PumpHead - curve_head; verify_scada.CurveHead = Math.Round(curve_head, 3); verify_scada.CurveHeadDiff = Math.Round(wokring_head_diff ?? 0, 3); } } schedule_vm.Round(); schedule_vm_list.Add(schedule_vm); } str.AppendLine($"曲线流量总偏差:{diff_flow_sum}"); this.memoExpand.Text = str.ToString(); var real_list = VerifyScadaList.Select(x => x).ToList(); real_list.ForEach(x => x.Round()); this.pumpScadaViewModelBindingSource.DataSource = real_list; this.pumpScadaViewModelBindingSource.ResetBindings(false); this.pumpScheduleViewModelBindingSource.DataSource = schedule_vm_list; this.pumpScheduleViewModelBindingSource.ResetBindings(false); this.gridView4.BestFitColumns(); } private void Schedule( double TargetFlow, double TargetHead, double RealFlow, List SchedulingScadaList, List VerifyScadaList) { var station_info = _service_station.Get(); if (station_info == null) { WaitHelper.HideWaitForm(); XtraMessageBox.Show("Station文件缺失!"); return; } var station2 = _pumps; var rpm_dict = VerifyScadaList.ToDictionary(x => x.Flag, x => x.Speed ?? 0); var inlet_water_level_dict = VerifyScadaList.ToDictionary(x => x.Flag, x => x.WL ?? 0); var flow_dict = VerifyScadaList.ToDictionary(x => x.Flag, x => x.Flow ?? 0); var head_dict = VerifyScadaList.ToDictionary(x => x.Flag, x => x.Head ?? 0); var helper = new IStation.Algorithm.ScheduleHelper(); var working_ana_pump_list = helper.GetAnaFrePumpListByWorking(station2, rpm_dict, inlet_water_level_dict, flow_dict, head_dict, RealFlow, out Dictionary flag_curve_head_dict, _use_factor); var station2_schedule_config = _service_schedule_config.GetStation2(); var station2_flag_list = GlobalHelper.Station2FlagList; GetStationOpenFlagList(SchedulingScadaList, out List station2_open_flag_list); GetStationMaintenanceFlagList(SchedulingScadaList, out List station2_maintenance_flag_list); GetFlagInletWaterLevelDict(SchedulingScadaList, out Dictionary station2_flag_inlet_water_level_dict); if (station2_maintenance_flag_list != null && station2_maintenance_flag_list.Any()) { station2_schedule_config.MustCloseFlagList.AddRange(station2_maintenance_flag_list); } var diff_flow_sum = 0d; var schedule_vm_list = new List(); var str = new StringBuilder(); helper.Initial(station2_open_flag_list, station2_schedule_config); var optimal_combine2 = helper.GetOptAnaCombine(station2, station2_flag_inlet_water_level_dict, TargetFlow, TargetHead); foreach (var flag in IStation.GlobalHelper.Station2FlagList) { var pump = station2.Find(x => x.Flag == flag); if (pump == null) continue; var verify_scada = VerifyScadaList.Find(x => x.Flag == flag); var schedule_vm = new PumpScheduleViewModel(); schedule_vm.Flag = flag; schedule_vm.WL = verify_scada.WL; var ana_pump = optimal_combine2?.AnaFrePumps?.Find(x => x.Flag == flag); if (ana_pump != null) { schedule_vm.RunStatus = 1; schedule_vm.Flow = ana_pump.Flow; schedule_vm.PumpHead = ana_pump.Head; schedule_vm.Speed = ana_pump.Speed; schedule_vm.Power = ana_pump.Power; schedule_vm.PressureDiff = ana_pump.PressureDiff; schedule_vm.Head = ana_pump.PressureDiff + verify_scada.WL; } schedule_vm.PowerDiff = verify_scada.Power - schedule_vm.Power; schedule_vm.SpeedDiif = verify_scada.Speed - schedule_vm.Speed; schedule_vm.FlowDiif = verify_scada.Flow - schedule_vm.Flow; if (ana_pump != null) { var hz_diff = schedule_vm.SpeedDiif / pump.Nr * 50; str.Append($"{flag}# 频率差:{hz_diff:N3} "); } var working_ana_pump = working_ana_pump_list?.Find(x => x.Flag == flag); if (working_ana_pump != null) { var wokring_flow_diff = verify_scada.Flow - working_ana_pump.Flow; verify_scada.CurveFlow = Math.Round(working_ana_pump.Flow, 2); verify_scada.CurveFlowDiff = Math.Round(wokring_flow_diff ?? 0, 2); diff_flow_sum += verify_scada.CurveFlowDiff ?? 0; if (flag_curve_head_dict != null && flag_curve_head_dict.ContainsKey(flag)) { var curve_head = flag_curve_head_dict[flag]; var wokring_head_diff = verify_scada.PumpHead - curve_head; verify_scada.CurveHead = Math.Round(curve_head, 3); verify_scada.CurveHeadDiff = Math.Round(wokring_head_diff ?? 0, 3); } } schedule_vm.Round(); schedule_vm_list.Add(schedule_vm); } // str.AppendLine($"曲线流量总偏差:{diff_flow_sum}"); var flow_sum = schedule_vm_list.Sum(x => x.Flow); str.AppendLine($"调度总流量:{flow_sum:N2} 偏差:{flow_sum-TargetFlow:N2}"); this.memoExpand.Text = str.ToString(); var real_list = VerifyScadaList.Select(x => x).ToList(); real_list.ForEach(x => x.Round()); this.pumpScadaViewModelBindingSource.DataSource = real_list; this.pumpScadaViewModelBindingSource.ResetBindings(false); this.pumpScheduleViewModelBindingSource.DataSource = schedule_vm_list; this.pumpScheduleViewModelBindingSource.ResetBindings(false); this.gridView4.BestFitColumns(); } } }