using DevExpress.XtraEditors;
|
using IStation.Win.View.ViewModel;
|
using System.IO;
|
using System.Text;
|
|
namespace IStation.Win.View
|
{
|
public partial class ScheduleLogVerifyView2 : DevExpress.XtraEditors.XtraUserControl
|
{
|
public ScheduleLogVerifyView2()
|
{
|
InitializeComponent();
|
this.treeList1.InitialMultiColSettings();
|
this.gridView2.SetNormalView();
|
this.gridView4.SetNormalView();
|
|
}
|
|
|
private List<Tuple<long, DateTime, string, bool>> _log_list = null;
|
private List<ScheduleFlowVerifyViewModel> _scheduleFlowVerifyViewModles = null;
|
private static readonly Service.Station _service_station = new();
|
private static readonly Service.ScheduleConfig _service_schedule_config = new();
|
private static readonly Service.ScheduleRequest _service_schedule_request = new();
|
private static readonly Service.ScheduleConclusion _service_schedule_conclusion = new();
|
private static readonly Service.SchedulePump _service_schedule_pump = new();
|
|
private bool _use_temp = true;
|
public void Init()
|
{
|
var log_file_path = Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\log_debug.json";
|
var json = File.ReadAllText(log_file_path);
|
_log_list = Yw.JsonHelper.Json2Object<List<Tuple<long, DateTime, string, bool>>>(json);
|
if (_log_list == null || !_log_list.Any())
|
{
|
Clear();
|
return;
|
}
|
|
_scheduleFlowVerifyViewModles = new List<ScheduleFlowVerifyViewModel>();
|
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 == eDockingStation.Ch2s);
|
if (conclusion == null)
|
continue;
|
|
var vm = new ScheduleFlowVerifyViewModel();
|
vm.Time = rhs.ReceptionTime;
|
vm.TargetFlow = rhs.TargetFlow2;
|
vm.TargetPressure = 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<Model.ZyScada> zy_scada_list);
|
|
OutValue(
|
zy_scada_list,
|
out double? DN2400Flow,
|
out double? DN2400Pressure,
|
out double? DN2700Flow,
|
out double? DN2700Pressure);
|
|
total_flow = (DN2400Flow + DN2700Flow) ?? 0;
|
vm.PumpScadaList = GetPumpScadaList(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<Model.ZyScada> zy_scada_list);
|
vm.RealPumpScadaList = GetPumpScadaList(zy_scada_list);
|
OutValue(
|
zy_scada_list,
|
out double? DN2400Flow,
|
out double? DN2400Pressure,
|
out double? DN2700Flow,
|
out double? DN2700Pressure);
|
vm.RealFlow = (DN2400Flow + DN2700Flow) ?? 0;
|
vm.RealPower = vm.RealPumpScadaList?.Sum(x => x.ActivePower) ?? 0;
|
vm.RealND2400P = DN2400Pressure ?? 0;
|
vm.RealND2700P = DN2700Pressure ?? 0;
|
}
|
|
if (_use_temp)
|
{
|
var temp_file_path = Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\0822_1510.txt";
|
var temp_json = File.ReadAllText(temp_file_path);
|
var temp_scada_list = Yw.JsonHelper.Json2Object<List<IStation.Model.ZyScada>>(temp_json);
|
vm.RealPumpScadaList = GetPumpScadaList(temp_scada_list);
|
}
|
|
|
var total_flow_diff = total_flow - vm.RealFlow;
|
|
vm.ScheduleFlowDiff = vm.ScheduleFlow - vm.TargetFlow;
|
vm.RealFlowDiff = vm.RealFlow - vm.TargetFlow;
|
vm.RealAndScheduleFlowDiff = vm.RealFlow - vm.ScheduleFlow;
|
vm.Round();
|
_scheduleFlowVerifyViewModles.Add(vm);
|
}
|
}
|
|
this.scheduleFlowVerifyViewModleBindingSource.DataSource = _scheduleFlowVerifyViewModles;
|
this.scheduleFlowVerifyViewModleBindingSource.ResetBindings(false);
|
this.treeList1.BestFitColumns();
|
Clear();
|
}
|
|
private void Clear()
|
{
|
this.memoExpand.Text = "";
|
this.realTimePumpScadaViewModelBindingSource1.DataSource = new List<RealTimePumpScadaViewModel>();
|
this.realTimePumpScheduleViewModelBindingSource1.DataSource = new List<RealTimePumpScheduleViewModel>();
|
}
|
|
|
#region config
|
|
private void OutValue(List<Model.ZyScada> zy_scada_list,
|
out double? DN2400Flow,
|
out double? DN2400Pressure,
|
out double? DN2700Flow,
|
out double? DN2700Pressure)
|
{
|
DN2400Flow = null;
|
DN2400Pressure = null;
|
DN2700Flow = null;
|
DN2700Pressure = 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[GlobalHelper.DN2400总管_瞬时流量_长江管网图];
|
DN2400Pressure = zy_scada_dict[GlobalHelper.DN2400_出厂压力_长江管网图];
|
DN2700Flow = zy_scada_dict[GlobalHelper.DN2700总管_瞬时流量_长江管网图];
|
DN2700Pressure = zy_scada_dict[GlobalHelper.DN2700_出厂压力_长江管网图];
|
}
|
|
private List<RealTimePumpScadaViewModel> GetPumpScadaList(
|
List<Model.ZyScada> 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[GlobalHelper.DN2400总管_瞬时流量_长江管网图];
|
var DN2400Pressure = zy_scada_dict[GlobalHelper.DN2400_出厂压力_长江管网图];
|
var DN2700Flow = zy_scada_dict[GlobalHelper.DN2700总管_瞬时流量_长江管网图];
|
var DN2700Pressure = zy_scada_dict[GlobalHelper.DN2700_出厂压力_长江管网图];
|
|
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泵_检修状态];
|
|
|
|
pump_vm21.PumpPressure = Math.Round(pump_vm21.OutletPressure - Curve.PumpCalculateHelper.M2Mpa(pump_vm21.InletWaterLevel ?? 0) ?? 0, 3);
|
pump_vm22.PumpPressure = Math.Round(pump_vm22.OutletPressure - Curve.PumpCalculateHelper.M2Mpa(pump_vm22.InletWaterLevel ?? 0) ?? 0, 3);
|
pump_vm23.PumpPressure = Math.Round(pump_vm23.OutletPressure - Curve.PumpCalculateHelper.M2Mpa(pump_vm23.InletWaterLevel ?? 0) ?? 0, 3);
|
pump_vm24.PumpPressure = Math.Round(pump_vm24.OutletPressure - Curve.PumpCalculateHelper.M2Mpa(pump_vm24.InletWaterLevel ?? 0) ?? 0, 3);
|
pump_vm25.PumpPressure = Math.Round(pump_vm25.OutletPressure - Curve.PumpCalculateHelper.M2Mpa(pump_vm25.InletWaterLevel ?? 0) ?? 0, 3);
|
pump_vm26.PumpPressure = Math.Round(pump_vm26.OutletPressure - Curve.PumpCalculateHelper.M2Mpa(pump_vm26.InletWaterLevel ?? 0) ?? 0, 3);
|
pump_vm27.PumpPressure = Math.Round(pump_vm27.OutletPressure - Curve.PumpCalculateHelper.M2Mpa(pump_vm27.InletWaterLevel ?? 0) ?? 0, 3);
|
|
var pump_scada_list = new List<RealTimePumpScadaViewModel>
|
{
|
pump_vm21,
|
pump_vm22,
|
pump_vm23,
|
pump_vm24,
|
pump_vm25,
|
pump_vm26,
|
pump_vm27
|
};
|
|
return pump_scada_list;
|
}
|
|
|
|
/// <summary>
|
/// 获取泵站运行标志列表
|
/// </summary>
|
private void GetStationOpenFlagList(List<RealTimePumpScadaViewModel> list2, out List<int> station2_open_flag_list)
|
{
|
station2_open_flag_list = list2?.Where(x => x.RunStatus == 1).Select(x => x.Flag).ToList();
|
}
|
|
/// <summary>
|
/// 获取泵进口水位字典
|
/// </summary>
|
private void GetFlagInletWaterLevelDict(List<RealTimePumpScadaViewModel> list2, out Dictionary<int, double> station2_flag_inlet_water_level_dict)
|
{
|
station2_flag_inlet_water_level_dict = list2?.ToDictionary(x => x.Flag, x => x.InletWaterLevel ?? 0);
|
}
|
|
/// <summary>
|
/// 获取泵站检修标志列表(0是正常,1是检修)
|
/// </summary>
|
private void GetStationMaintenanceFlagList(List<RealTimePumpScadaViewModel> list2, out List<int> station2_maintenance_flag_list)
|
{
|
station2_maintenance_flag_list = list2?.Where(x => x.MaintenanceState == 1).Select(x => x.Flag).ToList();
|
|
}
|
|
/// <summary>
|
/// 获取组合偏差系数字典
|
/// </summary>
|
/// <param name="flow">总流量</param>
|
/// <param name="flags">组合标志</param>
|
/// <returns></returns>
|
private Dictionary<int, double> GetCombineDeviationFactorDict(double flow, IEnumerable<int> flags)
|
{
|
var deviation_factor_dict = new Dictionary<int, double>();
|
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;
|
}
|
|
|
/// <summary>
|
/// 获取实时众毅Scada数据列表
|
/// </summary>
|
public static string GetRealTimeZyScadaList(string json, out List<Model.ZyScada> zy_scada_list, bool use_debug = false)
|
{
|
zy_scada_list = new List<Model.ZyScada>();
|
try
|
{
|
zy_scada_list = Yw.JsonHelper.Json2Object<List<IStation.Model.ZyScada>>(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.colSimulation1)
|
{
|
var vm = this.treeList1.GetFocusedRow() as ScheduleFlowVerifyViewModel;
|
if (vm == null) return;
|
Schedule(vm);
|
}
|
}
|
|
private void Schedule(ScheduleFlowVerifyViewModel vm)
|
{
|
if (vm == null)
|
{
|
Clear();
|
return;
|
}
|
var station_info = _service_station.Get();
|
if (station_info == null)
|
{
|
WaitHelper.HideWaitForm();
|
XtraMessageBox.Show("Station文件缺失!");
|
return;
|
}
|
|
var station2 = station_info.Station2;
|
var helper = new Algorithm.ScheduleHelper();
|
var rpm_dict = vm.RealPumpScadaList.ToDictionary(x => x.Flag, x => x.RotateSpeed ?? 0);
|
var inlet_water_level_dict = vm.RealPumpScadaList.ToDictionary(x => x.Flag, x => x.InletWaterLevel ?? 0);
|
var head_dict = vm.RealPumpScadaList.ToDictionary(x => x.Flag, x => Curve.PumpCalculateHelper.Mpa2M(x.OutletPressure ?? 0));
|
var working_ana_pump_list = helper.GetAnaFrePumpListByWorking(station2, rpm_dict, inlet_water_level_dict, head_dict, vm.RealFlow, true);
|
|
|
var pump_schedule_vm_list = new List<RealTimePumpScheduleViewModel>();
|
var run_flags = vm.SchedulePumpList.Select(x => x.Flag).OrderBy(x => x).ToList();
|
var analysis_deviation = new IStation.Service.AnalysisDeviation().GetByFlowAndRunFlags(vm.TargetFlow, run_flags);
|
|
var str = new StringBuilder();
|
|
var dn24_head_diff = Curve.PumpCalculateHelper.Mpa2M(vm.RealND2400P - vm.TargetPressure);
|
var dn27_head_diff = Curve.PumpCalculateHelper.Mpa2M(vm.RealND2700P - vm.TargetPressure);
|
str.AppendLine($"目标压力:{vm.TargetPressure}\r\n实际压力:DN2400:{vm.RealND2400P:N3} (差:{dn24_head_diff:N3}米) DN2700:{vm.RealND2700P:N3} (差:{dn27_head_diff:N3}米)");
|
|
foreach (var flag in GlobalHelper.Station2FlagList)
|
{
|
|
var pump = station2.Find(x => x.Flag == flag);
|
if (pump == null)
|
continue;
|
|
var scada_vm = vm.RealPumpScadaList.Find(x => x.Flag == flag);
|
var schedule_pump_vm = new RealTimePumpScheduleViewModel();
|
schedule_pump_vm.Flag = flag;
|
schedule_pump_vm.InletWaterLevel = scada_vm.InletWaterLevel;
|
var ana_pump = vm.SchedulePumpList.Find(x => x.Flag == flag);
|
if (ana_pump != null)
|
{
|
schedule_pump_vm.RunStatus = 1;
|
schedule_pump_vm.InstantaneousFlow = ana_pump.Flow;
|
schedule_pump_vm.OutletPressure = Curve.PumpCalculateHelper.M2Mpa(ana_pump.Head);
|
schedule_pump_vm.RotateSpeed = ana_pump.Rpm;
|
schedule_pump_vm.ActivePower = ana_pump.Power;
|
schedule_pump_vm.OutletPressureAddWL = Curve.PumpCalculateHelper.M2Mpa(ana_pump.Head + scada_vm.InletWaterLevel ?? 0);
|
|
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_pump_vm.ScadaCorrectionFactor = Math.Round(Curve.PumpCalculateHelper.M2Mpa(scada_correction_factor), 5);
|
schedule_pump_vm.ModelCorrectionFactor = Math.Round(Curve.PumpCalculateHelper.M2Mpa(model_correction_factor_use), 5);
|
}
|
}
|
|
schedule_pump_vm.ActivePowerDiff = schedule_pump_vm.ActivePower - scada_vm.ActivePower;
|
schedule_pump_vm.RotateSpeedDiif = schedule_pump_vm.RotateSpeed - scada_vm.RotateSpeed;
|
schedule_pump_vm.InstantaneousFlowDiif = schedule_pump_vm.InstantaneousFlow - scada_vm.InstantaneousFlow;
|
if (ana_pump != null)
|
{
|
var outlet_pressure_diff = schedule_pump_vm.OutletPressure - scada_vm.PumpPressure ?? 0;
|
var hz_diff = schedule_pump_vm.RotateSpeedDiif / pump.Nr * 50;
|
//str.AppendLine($"{flag}# 扬程:{ana_pump.Head} 频率差:{hz_diff:N3} 压力差:{outlet_pressure_diff:N3}({Curve.PumpCalculateHelper.Mpa2M(outlet_pressure_diff):N3}米)");
|
str.AppendLine($"{flag}# 频率差:{hz_diff:N3} 压力差:{outlet_pressure_diff:N3}({Curve.PumpCalculateHelper.Mpa2M(outlet_pressure_diff):N3}米)");
|
}
|
var working_ana_pump = working_ana_pump_list?.Find(x => x.Flag == flag);
|
if (working_ana_pump != null)
|
{
|
var wokring_flow_diff = working_ana_pump.Flow - scada_vm.InstantaneousFlow;
|
//str.AppendLine($"{flag}# 工况流量:{scada_vm.InstantaneousFlow:N2} 工况曲线流量:{working_ana_pump.Flow:N2} 偏差:{wokring_flow_diff:N2} 修正流量偏差:{schedule_pump_vm.InstantaneousFlowDiif + wokring_flow_diff:N2} ");
|
str.AppendLine($"{flag}# 工况流量:{scada_vm.InstantaneousFlow:N2} 工况曲线流量:{working_ana_pump.Flow:N2} 偏差:{wokring_flow_diff:N2} ");
|
}
|
|
schedule_pump_vm.Round();
|
pump_schedule_vm_list.Add(schedule_pump_vm);
|
|
}
|
|
|
|
|
// str.AppendLine($"总站 工况流量偏差:{vm.RealFlowDiff:N2} 调度流量偏差:{vm.ScheduleFlowDiff:N2}");
|
// str.AppendLine($"原总功率:{vm.RealPower:N2} 调度总功率{vm.SchedulePower:N2} 偏差:{vm.SchedulePower - vm.RealPower:N2}");
|
|
this.memoExpand.Text = str.ToString();
|
|
var real_list = vm.RealPumpScadaList.Select(x => x).ToList();
|
real_list.ForEach(x => x.Set());
|
this.realTimePumpScadaViewModelBindingSource1.DataSource = real_list;
|
this.realTimePumpScadaViewModelBindingSource1.ResetBindings(false);
|
|
|
this.realTimePumpScheduleViewModelBindingSource1.DataSource = pump_schedule_vm_list;
|
this.realTimePumpScheduleViewModelBindingSource1.ResetBindings(false);
|
this.gridView4.BestFitColumns();
|
}
|
|
|
|
|
}
|
}
|