using DevExpress.XtraEditors; using IStation.Win.View.ViewModel; using System.IO; namespace IStation.Win.View { public partial class ScheduleLogVerifyView2 : DevExpress.XtraEditors.XtraUserControl { public ScheduleLogVerifyView2() { InitializeComponent(); this.treeList1.InitialMultiColSettings(); this.gridView2.SetNormalView(); this.gridView4.SetNormalView(); } private static readonly Service.Station _service_station = new(); private static readonly Service.ScheduleConfig _service_schedule_config = new(); public void Init() { var request_list = new IStation.Service.ScheduleRequest().GetAll(); this.treeList1.DataSource = request_list; this.treeList1.RefreshDataSource(); this.treeList1.BestFitColumns(); Clear(); } private void Clear() { this.txtDN2400Flow.EditValue = null; this.txtDN2400Pressure.EditValue = null; this.txtDN2700Flow.EditValue = null; this.txtDN2700Pressure.EditValue = null; this.realTimePumpScadaViewModelBindingSource1.DataSource = new List(); this.realTimePumpScheduleViewModelBindingSource1.DataSource = new List(); } #region config private void OutVm(List zy_scada_list, List zy_scada_list_wiat5, out List real_time_pump_scada_vm_list_station2, out List real_time_pump_scada_vm_list_station2_wait5) { real_time_pump_scada_vm_list_station2 = new List(); real_time_pump_scada_vm_list_station2_wait5 = new List(); if (zy_scada_list == null || !zy_scada_list.Any()) { return; } var zy_scada_dict = zy_scada_list.ToDictionary(x => x.Code, x => x.Value); var zy_scada_list_dict_wiat5 = zy_scada_list_wiat5?.ToDictionary(x => x.Code, x => x.Value); var DN2400Flow = zy_scada_dict[GlobalHelper.DN2400总管_瞬时流量_长江管网图]; var DN2400Pressure = zy_scada_dict[GlobalHelper.DN2400_出厂压力_长江管网图]; var DN2700Flow = zy_scada_dict[GlobalHelper.DN2700总管_瞬时流量_长江管网图]; var DN2700Pressure = zy_scada_dict[GlobalHelper.DN2700_出厂压力_长江管网图]; #region RealScada this.txtDN2400Flow.EditValue = DN2400Flow; this.txtDN2400Pressure.EditValue = DN2400Pressure; this.txtDN2700Flow.EditValue = DN2700Flow; this.txtDN2700Pressure.EditValue = DN2700Pressure; var pump_vm21 = new RealTimePumpScadaViewModel(); var pump_vm22 = new RealTimePumpScadaViewModel(); var pump_vm23 = new RealTimePumpScadaViewModel(); var pump_vm24 = new RealTimePumpScadaViewModel(); var pump_vm25 = new RealTimePumpScadaViewModel(); var pump_vm26 = new RealTimePumpScadaViewModel(); var pump_vm27 = new RealTimePumpScadaViewModel(); pump_vm21.Flag = GlobalHelper.Flag21; pump_vm22.Flag = GlobalHelper.Flag22; pump_vm23.Flag = GlobalHelper.Flag23; pump_vm24.Flag = GlobalHelper.Flag24; pump_vm25.Flag = GlobalHelper.Flag25; pump_vm26.Flag = GlobalHelper.Flag26; pump_vm27.Flag = GlobalHelper.Flag27; pump_vm21.RunStatus = zy_scada_dict[GlobalHelper.二输21泵_运行状态]; pump_vm22.RunStatus = zy_scada_dict[GlobalHelper.二输22泵_运行状态]; pump_vm23.RunStatus = zy_scada_dict[GlobalHelper.二输23泵_运行状态]; pump_vm24.RunStatus = zy_scada_dict[GlobalHelper.二输24泵_运行状态]; pump_vm25.RunStatus = zy_scada_dict[GlobalHelper.二输25泵_运行状态]; pump_vm26.RunStatus = zy_scada_dict[GlobalHelper.二输26泵_运行状态]; pump_vm27.RunStatus = zy_scada_dict[GlobalHelper.二输27泵_运行状态]; pump_vm21.InletWaterLevel = zy_scada_dict[GlobalHelper.二输21泵_泵井液位]; pump_vm22.InletWaterLevel = zy_scada_dict[GlobalHelper.二输22泵_泵井液位]; pump_vm23.InletWaterLevel = zy_scada_dict[GlobalHelper.二输23泵_泵井液位]; pump_vm24.InletWaterLevel = zy_scada_dict[GlobalHelper.二输24泵_泵井液位]; pump_vm25.InletWaterLevel = zy_scada_dict[GlobalHelper.二输25泵_泵井液位]; pump_vm26.InletWaterLevel = zy_scada_dict[GlobalHelper.二输26泵_泵井液位]; pump_vm27.InletWaterLevel = zy_scada_dict[GlobalHelper.二输27泵_泵井液位]; pump_vm21.OutletPressure = zy_scada_dict[GlobalHelper.二输21泵_出水压力]; pump_vm22.OutletPressure = zy_scada_dict[GlobalHelper.二输22泵_出水压力]; pump_vm23.OutletPressure = zy_scada_dict[GlobalHelper.二输23泵_出水压力]; pump_vm24.OutletPressure = zy_scada_dict[GlobalHelper.二输24泵_出水压力]; pump_vm25.OutletPressure = zy_scada_dict[GlobalHelper.二输25泵_出水压力]; pump_vm26.OutletPressure = zy_scada_dict[GlobalHelper.二输26泵_出水压力]; pump_vm27.OutletPressure = zy_scada_dict[GlobalHelper.二输27泵_出水压力]; pump_vm21.ActivePower = zy_scada_dict[GlobalHelper.二输21泵_有功功率]; pump_vm22.ActivePower = zy_scada_dict[GlobalHelper.二输22泵_有功功率]; pump_vm23.ActivePower = zy_scada_dict[GlobalHelper.二输23泵_有功功率]; pump_vm24.ActivePower = zy_scada_dict[GlobalHelper.二输24泵_有功功率]; pump_vm25.ActivePower = zy_scada_dict[GlobalHelper.二输25泵_有功功率]; pump_vm26.ActivePower = zy_scada_dict[GlobalHelper.二输26泵_有功功率]; pump_vm27.ActivePower = zy_scada_dict[GlobalHelper.二输27泵_有功功率]; pump_vm21.InstantaneousFlow = zy_scada_dict[GlobalHelper.二输21泵_瞬时流量]; pump_vm22.InstantaneousFlow = zy_scada_dict[GlobalHelper.二输22泵_瞬时流量]; pump_vm23.InstantaneousFlow = zy_scada_dict[GlobalHelper.二输23泵_瞬时流量]; pump_vm24.InstantaneousFlow = zy_scada_dict[GlobalHelper.二输24泵_瞬时流量]; pump_vm25.InstantaneousFlow = zy_scada_dict[GlobalHelper.二输25泵_瞬时流量]; pump_vm26.InstantaneousFlow = zy_scada_dict[GlobalHelper.二输26泵_瞬时流量]; pump_vm27.InstantaneousFlow = zy_scada_dict[GlobalHelper.二输27泵_瞬时流量]; pump_vm21.RotateSpeed = zy_scada_dict[GlobalHelper.二输21泵_转速]; pump_vm22.RotateSpeed = zy_scada_dict[GlobalHelper.二输22泵_转速]; pump_vm23.RotateSpeed = zy_scada_dict[GlobalHelper.二输23泵_转速]; pump_vm24.RotateSpeed = zy_scada_dict[GlobalHelper.二输24泵_转速]; pump_vm25.RotateSpeed = zy_scada_dict[GlobalHelper.二输25泵_转速]; pump_vm26.RotateSpeed = zy_scada_dict[GlobalHelper.二输26泵_转速]; pump_vm27.RotateSpeed = zy_scada_dict[GlobalHelper.二输27泵_转速]; pump_vm21.MaintenanceState = zy_scada_dict[GlobalHelper.二输21泵_检修状态]; pump_vm22.MaintenanceState = zy_scada_dict[GlobalHelper.二输22泵_检修状态]; pump_vm23.MaintenanceState = zy_scada_dict[GlobalHelper.二输23泵_检修状态]; pump_vm24.MaintenanceState = zy_scada_dict[GlobalHelper.二输24泵_检修状态]; pump_vm25.MaintenanceState = zy_scada_dict[GlobalHelper.二输25泵_检修状态]; pump_vm26.MaintenanceState = zy_scada_dict[GlobalHelper.二输26泵_检修状态]; pump_vm27.MaintenanceState = zy_scada_dict[GlobalHelper.二输27泵_检修状态]; real_time_pump_scada_vm_list_station2 = new List { pump_vm21, pump_vm22, pump_vm23, pump_vm24, pump_vm25, pump_vm26, pump_vm27 }; if (zy_scada_list_dict_wiat5 != null && zy_scada_list_dict_wiat5.Any()) { var pump_vm21_wait5 = new RealTimePumpScadaViewModel(); var pump_vm22_wait5 = new RealTimePumpScadaViewModel(); var pump_vm23_wait5 = new RealTimePumpScadaViewModel(); var pump_vm24_wait5 = new RealTimePumpScadaViewModel(); var pump_vm25_wait5 = new RealTimePumpScadaViewModel(); var pump_vm26_wait5 = new RealTimePumpScadaViewModel(); var pump_vm27_wait5 = new RealTimePumpScadaViewModel(); pump_vm21_wait5.Flag = GlobalHelper.Flag21; pump_vm22_wait5.Flag = GlobalHelper.Flag22; pump_vm23_wait5.Flag = GlobalHelper.Flag23; pump_vm24_wait5.Flag = GlobalHelper.Flag24; pump_vm25_wait5.Flag = GlobalHelper.Flag25; pump_vm26_wait5.Flag = GlobalHelper.Flag26; pump_vm27_wait5.Flag = GlobalHelper.Flag27; pump_vm21_wait5.RunStatus = zy_scada_list_dict_wiat5[GlobalHelper.二输21泵_运行状态]; pump_vm22_wait5.RunStatus = zy_scada_list_dict_wiat5[GlobalHelper.二输22泵_运行状态]; pump_vm23_wait5.RunStatus = zy_scada_list_dict_wiat5[GlobalHelper.二输23泵_运行状态]; pump_vm24_wait5.RunStatus = zy_scada_list_dict_wiat5[GlobalHelper.二输24泵_运行状态]; pump_vm25_wait5.RunStatus = zy_scada_list_dict_wiat5[GlobalHelper.二输25泵_运行状态]; pump_vm26_wait5.RunStatus = zy_scada_list_dict_wiat5[GlobalHelper.二输26泵_运行状态]; pump_vm27_wait5.RunStatus = zy_scada_list_dict_wiat5[GlobalHelper.二输27泵_运行状态]; pump_vm21_wait5.InletWaterLevel = zy_scada_list_dict_wiat5[GlobalHelper.二输21泵_泵井液位]; pump_vm22_wait5.InletWaterLevel = zy_scada_list_dict_wiat5[GlobalHelper.二输22泵_泵井液位]; pump_vm23_wait5.InletWaterLevel = zy_scada_list_dict_wiat5[GlobalHelper.二输23泵_泵井液位]; pump_vm24_wait5.InletWaterLevel = zy_scada_list_dict_wiat5[GlobalHelper.二输24泵_泵井液位]; pump_vm25_wait5.InletWaterLevel = zy_scada_list_dict_wiat5[GlobalHelper.二输25泵_泵井液位]; pump_vm26_wait5.InletWaterLevel = zy_scada_list_dict_wiat5[GlobalHelper.二输26泵_泵井液位]; pump_vm27_wait5.InletWaterLevel = zy_scada_list_dict_wiat5[GlobalHelper.二输27泵_泵井液位]; pump_vm21_wait5.OutletPressure = zy_scada_list_dict_wiat5[GlobalHelper.二输21泵_出水压力]; pump_vm22_wait5.OutletPressure = zy_scada_list_dict_wiat5[GlobalHelper.二输22泵_出水压力]; pump_vm23_wait5.OutletPressure = zy_scada_list_dict_wiat5[GlobalHelper.二输23泵_出水压力]; pump_vm24_wait5.OutletPressure = zy_scada_list_dict_wiat5[GlobalHelper.二输24泵_出水压力]; pump_vm25_wait5.OutletPressure = zy_scada_list_dict_wiat5[GlobalHelper.二输25泵_出水压力]; pump_vm26_wait5.OutletPressure = zy_scada_list_dict_wiat5[GlobalHelper.二输26泵_出水压力]; pump_vm27_wait5.OutletPressure = zy_scada_list_dict_wiat5[GlobalHelper.二输27泵_出水压力]; pump_vm21_wait5.ActivePower = zy_scada_list_dict_wiat5[GlobalHelper.二输21泵_有功功率]; pump_vm22_wait5.ActivePower = zy_scada_list_dict_wiat5[GlobalHelper.二输22泵_有功功率]; pump_vm23_wait5.ActivePower = zy_scada_list_dict_wiat5[GlobalHelper.二输23泵_有功功率]; pump_vm24_wait5.ActivePower = zy_scada_list_dict_wiat5[GlobalHelper.二输24泵_有功功率]; pump_vm25_wait5.ActivePower = zy_scada_list_dict_wiat5[GlobalHelper.二输25泵_有功功率]; pump_vm26_wait5.ActivePower = zy_scada_list_dict_wiat5[GlobalHelper.二输26泵_有功功率]; pump_vm27_wait5.ActivePower = zy_scada_list_dict_wiat5[GlobalHelper.二输27泵_有功功率]; pump_vm21_wait5.InstantaneousFlow = zy_scada_list_dict_wiat5[GlobalHelper.二输21泵_瞬时流量]; pump_vm22_wait5.InstantaneousFlow = zy_scada_list_dict_wiat5[GlobalHelper.二输22泵_瞬时流量]; pump_vm23_wait5.InstantaneousFlow = zy_scada_list_dict_wiat5[GlobalHelper.二输23泵_瞬时流量]; pump_vm24_wait5.InstantaneousFlow = zy_scada_list_dict_wiat5[GlobalHelper.二输24泵_瞬时流量]; pump_vm25_wait5.InstantaneousFlow = zy_scada_list_dict_wiat5[GlobalHelper.二输25泵_瞬时流量]; pump_vm26_wait5.InstantaneousFlow = zy_scada_list_dict_wiat5[GlobalHelper.二输26泵_瞬时流量]; pump_vm27_wait5.InstantaneousFlow = zy_scada_list_dict_wiat5[GlobalHelper.二输27泵_瞬时流量]; pump_vm21_wait5.RotateSpeed = zy_scada_list_dict_wiat5[GlobalHelper.二输21泵_转速]; pump_vm22_wait5.RotateSpeed = zy_scada_list_dict_wiat5[GlobalHelper.二输22泵_转速]; pump_vm23_wait5.RotateSpeed = zy_scada_list_dict_wiat5[GlobalHelper.二输23泵_转速]; pump_vm24_wait5.RotateSpeed = zy_scada_list_dict_wiat5[GlobalHelper.二输24泵_转速]; pump_vm25_wait5.RotateSpeed = zy_scada_list_dict_wiat5[GlobalHelper.二输25泵_转速]; pump_vm26_wait5.RotateSpeed = zy_scada_list_dict_wiat5[GlobalHelper.二输26泵_转速]; pump_vm27_wait5.RotateSpeed = zy_scada_list_dict_wiat5[GlobalHelper.二输27泵_转速]; pump_vm21_wait5.MaintenanceState = zy_scada_list_dict_wiat5[GlobalHelper.二输21泵_检修状态]; pump_vm22_wait5.MaintenanceState = zy_scada_list_dict_wiat5[GlobalHelper.二输22泵_检修状态]; pump_vm23_wait5.MaintenanceState = zy_scada_list_dict_wiat5[GlobalHelper.二输23泵_检修状态]; pump_vm24_wait5.MaintenanceState = zy_scada_list_dict_wiat5[GlobalHelper.二输24泵_检修状态]; pump_vm25_wait5.MaintenanceState = zy_scada_list_dict_wiat5[GlobalHelper.二输25泵_检修状态]; pump_vm26_wait5.MaintenanceState = zy_scada_list_dict_wiat5[GlobalHelper.二输26泵_检修状态]; pump_vm27_wait5.MaintenanceState = zy_scada_list_dict_wiat5[GlobalHelper.二输27泵_检修状态]; real_time_pump_scada_vm_list_station2_wait5 = new List { pump_vm21_wait5, pump_vm22_wait5, pump_vm23_wait5, pump_vm24_wait5, pump_vm25_wait5, pump_vm26_wait5, pump_vm27_wait5 }; } #endregion } /// /// 获取泵站运行标志列表 /// 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.InletWaterLevel ?? 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 (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; } #endregion private void gridView4_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { if (e.Column == this.colRotateSpeedDiif || e.Column == this.colActivePowerDiff) { 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.Red; } else { e.Appearance.ForeColor = Color.Green; } } } } } private void treeList1_RowCellClick(object sender, DevExpress.XtraTreeList.RowCellClickEventArgs e) { if (e.Column == this.colSchedule) { var row = this.treeList1.GetFocusedRow() as IStation.Model.ScheduleRequest; if (row == null) return; var log_file_path = Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\log_debug.json"; var json = File.ReadAllText(log_file_path); var list = Yw.JsonHelper.Json2Object>>(json); var scada_list = list.FindAll(x => x.Item1 == row.ID); if (scada_list == null) { XtraMessageBox.Show("无日志数据"); return; } var zy_false = scada_list.Find(x => !x.Item4); var zy_true = scada_list.Find(x => x.Item4); GetRealTimeZyScadaList(zy_false?.Item3, out List zy_scada_list); GetRealTimeZyScadaList(zy_true?.Item3, out List zy_scada_list_wiat5); OutVm( zy_scada_list, zy_scada_list_wiat5, out List real_time_pump_scada_vm_list_station2, out List real_time_pump_scada_vm_list_station2_wait5); var target_flow2 = row.TargetFlow2; var target_pressure2 = row.TargetPressure2; this.txtTargetFlow2.EditValue = target_flow2; this.txtTargetPressure2.EditValue = target_pressure2; Schedule(target_flow2, target_pressure2, real_time_pump_scada_vm_list_station2, real_time_pump_scada_vm_list_station2_wait5); } } private void Schedule(double target_flow2, double target_pressure2, List real_time_pump_scada_vm_list_station2, List real_time_pump_scada_vm_list_station2_wati5) { var target_head2 = Curve.PumpCalculateHelper.Mpa2M(target_pressure2); var station_info = _service_station.Get(); if (station_info == null) { WaitHelper.HideWaitForm(); XtraMessageBox.Show("Station文件缺失!"); return; } var station2 = station_info.Station2; var station2_same_type_flag_group_first = GlobalHelper.Station2SameTypeFlagGroupFirst; var station2_schedule_config = _service_schedule_config.GetStation2(); var station2_flag_list = GlobalHelper.Station2FlagList; GetStationOpenFlagList(real_time_pump_scada_vm_list_station2, out List station2_open_flag_list); GetStationMaintenanceFlagList(real_time_pump_scada_vm_list_station2, out List station2_maintenance_flag_list); GetFlagInletWaterLevelDict(real_time_pump_scada_vm_list_station2, 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 real_time_pump_schedule_vm_list_station1 = new List(); var real_time_pump_schedule_vm_list_station2 = new List(); var helper = new Algorithm.ScheduleHelper(); 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, target_flow2, target_head2); var run_flags = Yw.Untity.IntListHelper.ToList(optimal_combine2.Remark); var analysis_deviation = new IStation.Service.AnalysisDeviation().GetByFlowAndRunFlags(target_flow2, run_flags); var a = GetCombineDeviationFactorDict(target_flow2, run_flags); foreach (var flag in GlobalHelper.Station2FlagList) { var pump_schedule_vm = new RealTimePumpScheduleViewModel(); pump_schedule_vm.Flag = flag; var ana_fre_pump = optimal_combine2?.AnaFrePumps?.Find(x => x.Flag == flag); if (ana_fre_pump != null) { pump_schedule_vm.RunStatus = 1; pump_schedule_vm.InstantaneousFlow = ana_fre_pump.Flow; pump_schedule_vm.OutletPressure = Curve.PumpCalculateHelper.M2Mpa(ana_fre_pump.Head); pump_schedule_vm.RotateSpeed = ana_fre_pump.Speed; pump_schedule_vm.ActivePower = ana_fre_pump.Power; 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; } pump_schedule_vm.ScadaCorrectionFactor = Math.Round(Curve.PumpCalculateHelper.M2Mpa(scada_correction_factor), 5); pump_schedule_vm.ModelCorrectionFactor = Math.Round(Curve.PumpCalculateHelper.M2Mpa(model_correction_factor_use), 5); } } if (real_time_pump_scada_vm_list_station2_wati5 != null && real_time_pump_scada_vm_list_station2_wati5.Any()) { var vm = real_time_pump_scada_vm_list_station2_wati5.Find(x => x.Flag == flag); pump_schedule_vm.Set(vm); pump_schedule_vm.Round(); } else { var vm = real_time_pump_scada_vm_list_station2.Find(x => x.Flag == flag); pump_schedule_vm.Set(vm); pump_schedule_vm.Round(); } real_time_pump_schedule_vm_list_station2.Add(pump_schedule_vm); } this.txtTotalFlowSrc.EditValue = target_flow2.ToString("N2"); this.txtTotalFlowSchedule.EditValue = optimal_combine2.TotalFlow.ToString("N2"); ; this.txtTotalFlowDiff.EditValue = (optimal_combine2.TotalFlow - target_flow2).ToString("N2"); double total_power = 0; if (real_time_pump_scada_vm_list_station2_wati5 != null && real_time_pump_scada_vm_list_station2_wati5.Any()) { total_power = real_time_pump_scada_vm_list_station2_wati5.Sum(x => x.ActivePower) ?? 0; } else { total_power = real_time_pump_scada_vm_list_station2.Sum(x => x.ActivePower) ?? 0; } this.txtTotalPowerSrc.EditValue = total_power.ToString("N2"); this.txtTotalPowerSchedule.EditValue = optimal_combine2.TotalPower.ToString("N2"); this.txtTotalPowerDiff.EditValue = (optimal_combine2.TotalPower - total_power).ToString("N2"); this.realTimePumpScheduleViewModelBindingSource1.DataSource = real_time_pump_schedule_vm_list_station2; this.realTimePumpScheduleViewModelBindingSource1.ResetBindings(false); this.gridView4.BestFitColumns(); } } }