using DevExpress.XtraEditors; using IStation.Win.View.ViewModel; namespace IStation.Win.View { public partial class RealTimeZyScadaView : DevExpress.XtraEditors.XtraUserControl { public RealTimeZyScadaView() { InitializeComponent(); this.gridView1.SetNormalView(); this.gridView2.SetNormalView(); this.gridView3.SetNormalView(); this.gridView4.SetNormalView(); } private static readonly Service.Station _service_station = new(); private static readonly Service.ScheduleConfig _service_schedule_config = new(); private void btnGetScada_Click(object sender, EventArgs e) { this.txtDN2400Flow.EditValue = null; this.txtDN2400Pressure.EditValue = null; this.txtDN2700Flow.EditValue = null; this.txtDN2700Pressure.EditValue = null; this.txtJD1Flow.EditValue = null; this.txtJD1Pressure.EditValue = null; this.txtJD2Flow.EditValue = null; this.txtJD2Pressure.EditValue = null; this.txtJD3Flow.EditValue = null; this.txtJD3Pressure.EditValue = null; this.realTimePumpScadaViewModelBindingSource.DataSource = new List(); this.realTimePumpScadaViewModelBindingSource1.DataSource = new List(); this.realTimePumpScheduleViewModelBindingSource.DataSource = new List(); this.realTimePumpScheduleViewModelBindingSource1.DataSource = new List(); GlobalHelper.GetRealTimeZyScadaList(out List zy_scada_list, true); 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 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_出厂压力_长江管网图]; var JD1Flow = zy_scada_dict[GlobalHelper.嘉定1线_瞬时流量_长江管网图]; var JD1Pressure = zy_scada_dict[GlobalHelper.嘉定1线_压力_长江管网图]; var JD2Flow = zy_scada_dict[GlobalHelper.嘉定2线_瞬时流量_长江管网图]; var JD2Pressure = zy_scada_dict[GlobalHelper.嘉定2线_压力_长江管网图]; var JD3Flow = zy_scada_dict[GlobalHelper.嘉定3线_瞬时流量_长江管网图]; var JD3Pressure = zy_scada_dict[GlobalHelper.嘉定3线_压力_长江管网图]; #region RealScada this.txtDN2400Flow.EditValue = DN2400Flow; this.txtDN2400Pressure.EditValue = DN2400Pressure; this.txtDN2700Flow.EditValue = DN2700Flow; this.txtDN2700Pressure.EditValue = DN2700Pressure; this.txtJD1Flow.EditValue = JD1Flow; this.txtJD1Pressure.EditValue = JD1Pressure; this.txtJD2Flow.EditValue = JD2Flow; this.txtJD2Pressure.EditValue = JD2Pressure; this.txtJD3Flow.EditValue = JD3Flow; this.txtJD3Pressure.EditValue = JD3Pressure; var pump_vm11 = new RealTimePumpScadaViewModel(); var pump_vm12 = new RealTimePumpScadaViewModel(); var pump_vm13 = new RealTimePumpScadaViewModel(); var pump_vm14 = new RealTimePumpScadaViewModel(); var pump_vm15 = new RealTimePumpScadaViewModel(); var pump_vm16 = new RealTimePumpScadaViewModel(); var pump_vm17 = new RealTimePumpScadaViewModel(); var pump_vm18 = new RealTimePumpScadaViewModel(); 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_vm11.Flag = GlobalHelper.Flag11; pump_vm12.Flag = GlobalHelper.Flag12; pump_vm13.Flag = GlobalHelper.Flag13; pump_vm14.Flag = GlobalHelper.Flag14; pump_vm15.Flag = GlobalHelper.Flag15; pump_vm16.Flag = GlobalHelper.Flag16; pump_vm17.Flag = GlobalHelper.Flag17; pump_vm18.Flag = GlobalHelper.Flag18; 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_vm11.RunStatus = zy_scada_dict[GlobalHelper.一输11泵_运行状态]; pump_vm12.RunStatus = zy_scada_dict[GlobalHelper.一输12泵_运行状态]; pump_vm13.RunStatus = zy_scada_dict[GlobalHelper.一输13泵_运行状态]; pump_vm14.RunStatus = zy_scada_dict[GlobalHelper.一输14泵_运行状态]; pump_vm15.RunStatus = zy_scada_dict[GlobalHelper.一输15泵_运行状态]; pump_vm16.RunStatus = zy_scada_dict[GlobalHelper.一输16泵_运行状态]; pump_vm17.RunStatus = zy_scada_dict[GlobalHelper.一输17泵_运行状态]; pump_vm18.RunStatus = zy_scada_dict[GlobalHelper.一输18泵_运行状态]; 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_vm11.InletWaterLevel = zy_scada_dict[GlobalHelper.一输_老前池南侧液位]; pump_vm12.InletWaterLevel = zy_scada_dict[GlobalHelper.一输_老前池南侧液位]; pump_vm13.InletWaterLevel = zy_scada_dict[GlobalHelper.一输_老前池南侧液位]; pump_vm14.InletWaterLevel = zy_scada_dict[GlobalHelper.一输_老前池北侧液位]; pump_vm15.InletWaterLevel = zy_scada_dict[GlobalHelper.一输_老前池北侧液位]; pump_vm16.InletWaterLevel = zy_scada_dict[GlobalHelper.一输_新前池液位]; pump_vm17.InletWaterLevel = zy_scada_dict[GlobalHelper.一输_新前池液位]; pump_vm18.InletWaterLevel = zy_scada_dict[GlobalHelper.一输_新前池液位]; 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_vm11.OutletPressure = zy_scada_dict[GlobalHelper.一输11泵_出口压力]; pump_vm12.OutletPressure = zy_scada_dict[GlobalHelper.一输12泵_出口压力]; pump_vm13.OutletPressure = zy_scada_dict[GlobalHelper.一输13泵_出口压力]; pump_vm14.OutletPressure = zy_scada_dict[GlobalHelper.一输14泵_出口压力]; pump_vm15.OutletPressure = zy_scada_dict[GlobalHelper.一输15泵_出口压力]; pump_vm16.OutletPressure = zy_scada_dict[GlobalHelper.一输16泵_出口压力]; pump_vm17.OutletPressure = zy_scada_dict[GlobalHelper.一输17泵_出口压力]; pump_vm18.OutletPressure = zy_scada_dict[GlobalHelper.一输18泵_出口压力]; 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_vm11.ActivePower = zy_scada_dict[GlobalHelper.一输11泵_有功功率]; pump_vm12.ActivePower = zy_scada_dict[GlobalHelper.一输12泵_有功功率]; pump_vm13.ActivePower = zy_scada_dict[GlobalHelper.一输13泵_有功功率]; pump_vm14.ActivePower = zy_scada_dict[GlobalHelper.一输14泵_有功功率]; pump_vm15.ActivePower = zy_scada_dict[GlobalHelper.一输15泵_有功功率]; pump_vm16.ActivePower = zy_scada_dict[GlobalHelper.一输16泵_有功功率]; pump_vm17.ActivePower = zy_scada_dict[GlobalHelper.一输17泵_有功功率]; pump_vm18.ActivePower = zy_scada_dict[GlobalHelper.一输18泵_有功功率]; 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_vm11.RotateSpeed = zy_scada_dict[GlobalHelper.一输11泵_转速]; pump_vm12.RotateSpeed = zy_scada_dict[GlobalHelper.一输12泵_转速]; pump_vm13.RotateSpeed = zy_scada_dict[GlobalHelper.一输13泵_转速]; pump_vm14.RotateSpeed = zy_scada_dict[GlobalHelper.一输14泵_转速]; pump_vm15.RotateSpeed = pump_vm15.RunStatus == 1 ? 590 : 0; pump_vm16.RotateSpeed = pump_vm16.RunStatus == 1 ? 590 : 0; pump_vm17.RotateSpeed = zy_scada_dict[GlobalHelper.一输17泵_转速]; pump_vm18.RotateSpeed = zy_scada_dict[GlobalHelper.一输18泵_转速]; 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_vm11.MaintenanceState = null; pump_vm12.MaintenanceState = null; pump_vm13.MaintenanceState = null; pump_vm14.MaintenanceState = null; pump_vm15.MaintenanceState = null; pump_vm16.MaintenanceState = null; pump_vm17.MaintenanceState = null; pump_vm18.MaintenanceState = null; 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泵_检修状态]; var real_time_pump_scada_vm_list_station1 = new List { pump_vm11, pump_vm12, pump_vm13, pump_vm14, pump_vm15, pump_vm16, pump_vm17, pump_vm18 }; var real_time_pump_scada_vm_list_station2 = new List { pump_vm21, pump_vm22, pump_vm23, pump_vm24, pump_vm25, pump_vm26, pump_vm27 }; real_time_pump_scada_vm_list_station1.ForEach(x => x.Set()); this.realTimePumpScadaViewModelBindingSource.DataSource = real_time_pump_scada_vm_list_station1; this.realTimePumpScadaViewModelBindingSource.ResetBindings(false); this.gridView1.BestFitColumns(); real_time_pump_scada_vm_list_station2.ForEach(x => x.Set()); this.realTimePumpScadaViewModelBindingSource1.DataSource = real_time_pump_scada_vm_list_station2; this.realTimePumpScadaViewModelBindingSource.ResetBindings(false); this.gridView2.BestFitColumns(); #endregion WaitHelper.ShowWaitForm("调度..."); var flow_list1 = new List() { JD1Flow, JD2Flow, JD3Flow }; var flow_list2 = new List() { DN2400Flow, DN2700Flow }; var pressure_list1 = new List() { JD1Pressure, JD2Pressure, JD3Pressure }; var pressure_list2 = new List() { DN2400Pressure, DN2700Pressure }; var real_target_flow1 = flow_list1.Sum(); var real_target_flow2 = flow_list2.Sum(); var real_target_pressure1 = pressure_list1.Max() / 1000; var real_target_pressure2 = pressure_list2.Max(); this.txtTargetFlow1.EditValue = Math.Round(real_target_flow1 ?? 0, 2); this.txtTargetPressure1.EditValue = Math.Round(real_target_pressure1 ?? 0, 2); this.txtTargetFlow2.EditValue = Math.Round(real_target_flow2 ?? 0, 2); this.txtTargetPressure2.EditValue = Math.Round(real_target_pressure2 ?? 0, 2); var target_flow1 = real_target_flow1 ?? 0; var target_flow2 = real_target_flow2 ?? 0; var target_pressure1 = real_target_pressure1 ?? 0; var target_pressure2 = real_target_pressure2 ?? 0; if (double.TryParse(this.txtTargetFlow1.Text, out double flow1)) target_flow1 = flow1; if (double.TryParse(this.txtTargetFlow2.Text, out double flow2)) target_flow2 = flow2; if (double.TryParse(this.txtTargetPressure1.Text, out double pressure1)) target_pressure1 = pressure1; if (double.TryParse(this.txtTargetPressure2.Text, out double pressure2)) target_pressure2 = pressure2; var target_head1 = Curve.PumpCalculateHelper.Mpa2M(target_pressure1); 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 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; GlobalHelper.GetStationOpenFlagList(zy_scada_list, out List station1_open_flag_list, out List station2_open_flag_list); GlobalHelper.GetStationMaintenanceFlagList(zy_scada_list, out List station1_maintenance_flag_list, out List station2_maintenance_flag_list); GlobalHelper.GetFlagInletWaterLevelDict(zy_scada_list, out Dictionary station1_flag_inlet_water_level_dict, out Dictionary station2_flag_inlet_water_level_dict); 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 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(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, target_flow1, target_head1); foreach (var flag in GlobalHelper.Station1FlagList) { var pump_schedule_vm = new RealTimePumpScheduleViewModel(); pump_schedule_vm.Flag = flag; var ana_fre_pump = optimal_combine1?.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; } var vm = real_time_pump_scada_vm_list_station1.Find(x => x.Flag == flag); pump_schedule_vm.Set(vm); pump_schedule_vm.Round(); real_time_pump_schedule_vm_list_station1.Add(pump_schedule_vm); } 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); 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; } 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.realTimePumpScheduleViewModelBindingSource.DataSource = real_time_pump_schedule_vm_list_station1; this.realTimePumpScheduleViewModelBindingSource.ResetBindings(false); this.gridView3.BestFitColumns(); this.realTimePumpScheduleViewModelBindingSource1.DataSource = real_time_pump_schedule_vm_list_station2; this.realTimePumpScheduleViewModelBindingSource1.ResetBindings(false); this.gridView4.BestFitColumns(); WaitHelper.HideWaitForm(); } private void gridView3_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { if (e.Column == this.colRotateSpeedDiif) { if (e.CellValue != null) { var cell_value = e.CellValue.ToString() ?? string.Empty; if (double.TryParse(cell_value, out double value)) { if (Math.Abs(value) < 0) { e.Appearance.ForeColor = Color.Red; } else { e.Appearance.ForeColor = Color.Green; } } } } } private void gridView4_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { if (e.Column == this.colRotateSpeedDiif1) { if (e.CellValue != null) { var cell_value = e.CellValue.ToString() ?? string.Empty; if (double.TryParse(cell_value, out double value)) { if (Math.Abs(value) < 0) { e.Appearance.ForeColor = Color.Red; } else { e.Appearance.ForeColor = Color.Green; } } } } } } }