using System.Data;
|
using Yw.Pump;
|
using Yw.WinFrmUI.Phart;
|
|
namespace HStation.WinFrmUI
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public partial class SimulationPumpParallelCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public SimulationPumpParallelCtrl()
|
{
|
InitializeComponent();
|
this.layoutControl1.SetupLayoutControl();
|
this.hydroPumpListExtendGridCtrl1.StateChangedEvent += HydroPumpListExtendGridCtrl1_StateChangedEvent;
|
this.pumpParallelChart1.DesignPointChangedEvent += PumpParallelChart1_DesignPointChangedEvent;
|
this.pumpParallelChart1.QueryPointChangedEvent += PumpParallelChart1_QueryPointChangedEvent;
|
this.pumpParallelChart1.ParallelStatusChangedEvent += PumpParallelChart1_ParallelStatusChangedEvent;
|
}
|
|
|
/// <summary>
|
/// 保存事件
|
/// </summary>
|
public event Action<List<SimulationPumpParallelSaveItemViewModel>> SaveEvent;
|
/// <summary>
|
/// 并联状态改变事件
|
/// </summary>
|
public event Action<bool, string> ParallelStatusChangedEvent;
|
|
private List<HydroPumpListItemExtendViewModel> _allPumpList = null;//所有水泵列表
|
|
|
/// <summary>
|
/// 绑定列表
|
/// </summary>
|
public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
|
{
|
var allPumpList = hydroInfo?.Pumps?.Select(x => new HydroPumpListItemExtendViewModel(x, hydroInfo.Pumps, hydroInfo)).ToList();
|
InitialGroups(allPumpList);
|
}
|
|
//状态改变事件
|
private void HydroPumpListExtendGridCtrl1_StateChangedEvent(List<HydroPumpListItemExtendViewModel> allStateList)
|
{
|
var allVmList = CreateParallelViewModels(allStateList);
|
this.pumpParallelChart1.SetBindingData(allVmList);
|
}
|
|
//初始化所有分组
|
private void InitialGroups(List<HydroPumpListItemExtendViewModel> allStateList)
|
{
|
_allPumpList = allStateList?.ToList();
|
var groups = _allPumpList?.Select(x => x.BeginGroup).Distinct().ToList();
|
this.itemForPumpGroup.Visibility = groups != null && groups.Count > 1 ? DevExpress.XtraLayout.Utils.LayoutVisibility.Always
|
: DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
|
this.imageComboBoxEdit1.Properties.BeginUpdate();
|
this.imageComboBoxEdit1.Properties.Items.Clear();
|
groups?.ForEach(x =>
|
{
|
this.imageComboBoxEdit1.Properties.Items.Add(x, x, -1);
|
});
|
this.imageComboBoxEdit1.SelectedIndex = groups != null && groups.Count > 0 ? 0 : -1;
|
this.imageComboBoxEdit1.Properties.EndUpdate();
|
}
|
|
//分组选择改变
|
private void imageComboBoxEdit1_SelectedValueChanged(object sender, EventArgs e)
|
{
|
var item = this.imageComboBoxEdit1.SelectedItem as ImageComboBoxItem;
|
if (item == null)
|
{
|
return;
|
}
|
var allBindingList = _allPumpList?.Where(x => x.BeginGroup == item.Value?.ToString()).ToList();
|
if (allBindingList == null)
|
{
|
allBindingList = new List<HydroPumpListItemExtendViewModel>();
|
}
|
this.hydroPumpListExtendGridCtrl1.SetBindingData(allBindingList);
|
}
|
|
//保存
|
private void btnSave_Click(object sender, EventArgs e)
|
{
|
var result = XtraMessageBox.Show("是否使用现有水泵状态更新模型?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes;
|
if (!result)
|
{
|
return;
|
}
|
if (_allPumpList == null || _allPumpList.Count < 1)
|
{
|
return;
|
}
|
var allSaveList = _allPumpList.Select(x => new SimulationPumpParallelSaveItemViewModel()
|
{
|
Code = x.Code,
|
LinkStatus = x.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed,
|
SpeedRatio = Math.Round(x.Hz / x.Vmo.RatedHz, 2)
|
}).ToList();
|
this.SaveEvent?.Invoke(allSaveList);
|
}
|
|
//创建
|
private List<PumpParallelViewModel> CreateParallelViewModels(List<HydroPumpListItemExtendViewModel> allStateList)
|
{
|
var allRunList = allStateList?.Where(x => x.RunStatus).ToList();
|
if (allRunList == null || allRunList.Count < 1)
|
{
|
return default;
|
}
|
var vmList = new List<PumpParallelViewModel>();
|
foreach (var item in allRunList)
|
{
|
var vm = new PumpParallelViewModel();
|
vm.Id = item.Code;
|
vm.Name = item.Name;
|
vm.RatedQ = item.Vmo.RatedQ;
|
vm.RatedH = item.Vmo.RatedH;
|
vm.RatedP = item.Vmo.RatedP;
|
vm.RatedN = item.Vmo.RatedN;
|
vm.RatedHz = item.Vmo.RatedHz;
|
vm.CurrentHz = item.Hz;
|
vm.CurrentN = Math.Round(item.Hz / item.Vmo.RatedHz * vm.RatedN, 1);
|
vm.CurrentColor = item.Color;
|
|
double extend = 1;
|
|
var curveqh = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQH);
|
if (curveqh != null)
|
{
|
var qh_pts = curveqh.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
|
if (qh_pts != null && qh_pts.Count > 3)
|
{
|
vm.CurveQH = qh_pts;
|
var qh_current_pts = qh_pts.GetQHPointListByN(item.Vmo.RatedHz, item.Hz);
|
vm.CurrentCurveQH = qh_current_pts;
|
if (item.Extend > 100)
|
{
|
vm.CurrentExtendFlow = vm.CurrentCurveQH.Max(x => x.X);
|
extend = item.Extend / 100;
|
var qh_current_extend_pts = vm.CurrentCurveQH.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20);
|
vm.CurrentCurveQH = qh_current_extend_pts;
|
}
|
}
|
}
|
|
var curveqp = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQP);
|
if (curveqp != null)
|
{
|
var qp_pts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
|
if (qp_pts != null && qp_pts.Count > 3)
|
{
|
vm.CurveQP = qp_pts;
|
var qp_current_pts = qp_pts.GetQPPointListByN(item.Vmo.RatedHz, item.Hz);
|
vm.CurrentCurveQP = qp_current_pts;
|
if (extend > 1)
|
{
|
var qp_current_extend_pts = vm.CurrentCurveQP.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20);
|
vm.CurrentCurveQP = qp_current_extend_pts;
|
}
|
}
|
}
|
|
var curveqe = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQE);
|
if (curveqe != null)
|
{
|
var qe_pts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
|
if (qe_pts != null && qe_pts.Count > 3)
|
{
|
vm.CurveQE = qe_pts;
|
var qe_current_pts = qe_pts.GetQEPointListByN(item.Vmo.RatedHz, item.Hz);
|
vm.CurrentCurveQE = qe_current_pts;
|
if (extend > 1)
|
{
|
var qe_current_extend_pts = vm.CurrentCurveQE.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20);
|
vm.CurrentCurveQE = qe_current_extend_pts;
|
}
|
}
|
}
|
|
vmList.Add(vm);
|
}
|
|
return vmList;
|
}
|
|
//设计点改变
|
private void PumpParallelChart1_DesignPointChangedEvent(List<PumpDesignPointViewModel> obj)
|
{
|
var vmList = obj?.Select(x => new HydroPumpDesignPointViewModel()
|
{
|
Code = x.Id,
|
Name = x.Name,
|
DesignQ = Math.Round(x.Q, 1),
|
DesignH = Math.Round(x.H, 2),
|
DesignP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null,
|
DesignE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null,
|
}).ToList();
|
this.hydroPumpDesignPointListGridCtrl1.SetBindingData(vmList);
|
}
|
|
//查询点改变
|
private void PumpParallelChart1_QueryPointChangedEvent(List<PumpQueryPointViewModel> obj)
|
{
|
var vmList = obj?.Select(x => new HydroPumpQueryPointViewModel()
|
{
|
Code = x.Id,
|
Name = x.Name,
|
QueryQ = Math.Round(x.Q, 1),
|
QueryH = Math.Round(x.H, 2),
|
QueryP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null,
|
QueryE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null,
|
}).ToList();
|
this.hydroPumpQueryPointListGridCtrl1.SetBindingData(vmList);
|
}
|
|
//并联状态改变事件
|
private void PumpParallelChart1_ParallelStatusChangedEvent(bool status, string msg)
|
{
|
this.ParallelStatusChangedEvent?.Invoke(status, msg);
|
}
|
|
//设计点
|
private void btnDesign_Click(object sender, EventArgs e)
|
{
|
var qtext = this.txtDesignQ.Text.Trim();
|
if (string.IsNullOrEmpty(qtext))
|
{
|
TipFormHelper.ShowWarn("请输入设计点流量!");
|
return;
|
}
|
var htext = this.txtDesignH.Text.Trim();
|
if (string.IsNullOrEmpty(htext))
|
{
|
TipFormHelper.ShowWarn("请输入设计点扬程!");
|
return;
|
}
|
var q = double.Parse(qtext);
|
var h = double.Parse(htext);
|
this.pumpParallelChart1.SetDesignPoint(q, h);
|
}
|
|
|
}
|
}
|