using DevExpress.PivotGrid.PivotTable;
|
using DevExpress.Xpo.Helpers;
|
using DevExpress.XtraEditors;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Drawing;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
using Yw.Geometry;
|
using Yw.Pump;
|
using Yw.Vmo;
|
using Yw.WinFrmUI.Phart;
|
|
namespace HStation.WinFrmUI
|
{
|
public partial class SimulationSinglePumpFeatCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public SimulationSinglePumpFeatCtrl()
|
{
|
InitializeComponent();
|
this.layoutControl1.SetupLayoutControl();
|
this.pumpOperationChart1.DesignPointChangedEvent += PumpParallelChart1_DesignPointChangedEvent;
|
this.pumpOperationChart1.QueryPointChangedEvent += PumpParallelChart1_QueryPointChangedEvent;
|
this.hydroSinglePumpListExtendGridCtrl1.StateChangedEvent += HydroSinglePumpListExtendGridCtrl1_StateChangedEvent;
|
}
|
|
|
/// <summary>
|
/// 保存事件
|
/// </summary>
|
public event Action<HydroWorkingPumpViewModel> SaveEvent;
|
|
private Yw.Model.HydroModelInfo _hydroInfo = null;
|
private Yw.Model.HydroPumpInfo _pumpInfo = null;
|
private HydroCalcuResult _calcuResult = null;
|
private double _head = 0;//
|
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
Yw.Model.HydroPumpInfo pumpInfo,
|
HydroCalcuResult calcuResult
|
)
|
{
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
if (pumpInfo == null)
|
{
|
return;
|
}
|
_hydroInfo = hydroInfo;
|
_pumpInfo = pumpInfo;
|
_calcuResult = calcuResult;
|
_head = _hydroInfo.GetHead();
|
this.hydroSinglePumpListExtendGridCtrl1.SetBindingData(pumpInfo);
|
var allStateList = this.hydroSinglePumpListExtendGridCtrl1.GetStateList();
|
var vm = CreateViewModel(allStateList);
|
this.pumpOperationChart1.SetBindingData(vm);
|
if (calcuResult != null)
|
{
|
var allCalcuVisualDict = calcuResult.GetVisualDict();
|
var calcuVisualResult = allCalcuVisualDict?.GetValue(pumpInfo.Code) as HydroCalcuPumpResult;
|
if (calcuVisualResult != null)
|
{
|
if (calcuVisualResult.CalcuQ.HasValue)
|
{
|
this.txtDesignQ.EditValue = Math.Round(calcuVisualResult.CalcuQ.Value, 1);
|
}
|
if (calcuVisualResult.CalcuH.HasValue)
|
{
|
this.txtDesignH.EditValue = Math.Round(calcuVisualResult.CalcuH.Value, 2);
|
}
|
if (calcuVisualResult.CalcuQ.HasValue && calcuVisualResult.CalcuH.HasValue)
|
{
|
Design();
|
}
|
}
|
}
|
}
|
|
//状态改变事件
|
private void HydroSinglePumpListExtendGridCtrl1_StateChangedEvent(List<HydroSinglePumpListItemExtendViewModel> allStateList)
|
{
|
if (_hydroInfo == null)
|
{
|
return;
|
}
|
if (_pumpInfo == null)
|
{
|
return;
|
}
|
var vm = CreateViewModel(allStateList);
|
this.pumpOperationChart1.SetBindingData(vm);
|
}
|
|
//保存
|
private void btnSave_Click(object sender, EventArgs e)
|
{
|
Save();
|
}
|
|
//创建
|
private PumpOperationViewModel CreateViewModel(List<HydroSinglePumpListItemExtendViewModel> allStateList)
|
{
|
if (_hydroInfo == null)
|
{
|
return default;
|
}
|
if (_pumpInfo == null)
|
{
|
return default;
|
}
|
if (allStateList == null || allStateList.Count != 2)
|
{
|
return default;
|
}
|
|
var rated = allStateList[0];
|
var current = allStateList[1];
|
|
var vm = new PumpOperationViewModel();
|
vm.Id = _pumpInfo.Code;
|
vm.Name = _pumpInfo.Name;
|
vm.RatedQ = _pumpInfo.RatedQ.HasValue ? _pumpInfo.RatedQ.Value : 0;
|
vm.RatedH = _pumpInfo.RatedH.HasValue ? _pumpInfo.RatedH.Value : 0;
|
vm.RatedP = _pumpInfo.RatedP;
|
vm.RatedN = _pumpInfo.RatedN.HasValue ? _pumpInfo.RatedN.Value : 0;
|
vm.RatedHz = _pumpInfo.RatedHz;
|
vm.CurrentHz = current.Hz;
|
vm.CurrentN = current.N;
|
vm.CurrentStatus = _pumpInfo.LinkStatus == Yw.Hydro.PumpStatus.Open;
|
|
var curveqh = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.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 = new CubicSpline2d(qh_pts);
|
var qh_current_pts = qh_pts.GetQHPointListByN(rated.Hz, current.Hz);
|
vm.CurrentCurveQH = new CubicSpline2d(qh_current_pts);
|
}
|
}
|
|
var curveqp = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQP);
|
if (curveqp != null)
|
{
|
var qppts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
|
if (qppts != null && qppts.Count > 3)
|
{
|
vm.CurveQP = new CubicSpline2d(qppts);
|
var sqppts = qppts.GetQHPointListByN(rated.Hz, current.Hz);
|
vm.CurrentCurveQP = new CubicSpline2d(sqppts);
|
}
|
}
|
|
var curveqe = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQE);
|
if (curveqe != null)
|
{
|
var qepts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
|
if (qepts != null && qepts.Count > 3)
|
{
|
vm.CurveQE = new CubicSpline2d(qepts);
|
var sqepts = qepts.GetQHPointListByN(rated.Hz, current.Hz);
|
vm.CurrentCurveQE = new CubicSpline2d(sqepts);
|
}
|
}
|
|
return vm;
|
}
|
|
//设计点改变
|
private void PumpParallelChart1_DesignPointChangedEvent(List<PumpDesignPointViewModel> obj)
|
{
|
var vmList = obj?.Select(x => new HydroSinglePumpDesignPointViewModel()
|
{
|
Name = x.Name,
|
Hz = x.Hz,
|
N = x.N,
|
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.hydroSinglePumpDesignPointListGridCtrl1.SetBindingData(vmList);
|
}
|
|
//查询点改变
|
private void PumpParallelChart1_QueryPointChangedEvent(List<PumpQueryPointViewModel> obj)
|
{
|
var vmList = obj?.Select(x => new HydroSinglePumpQueryPointViewModel()
|
{
|
Name = x.Name,
|
Hz = x.Hz,
|
N = x.N,
|
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.hydroSinglePumpQueryPointListGridCtrl1.SetBindingData(vmList);
|
}
|
|
//设计点
|
private void btnDesign_Click(object sender, EventArgs e)
|
{
|
Design();
|
}
|
|
//设计
|
private void Design()
|
{
|
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.pumpOperationChart1.SetDesignPoint(q, h, _head);
|
}
|
|
/// <summary>
|
/// 保存
|
/// </summary>
|
public void Save()
|
{
|
if (this.hydroSinglePumpListExtendGridCtrl1.HasChanged)
|
{
|
this.hydroSinglePumpListExtendGridCtrl1.HasChanged = false;
|
var result = XtraMessageBox.Show("是否使用现有状态更新模型?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes;
|
if (!result)
|
{
|
return;
|
}
|
var allStateList = this.hydroSinglePumpListExtendGridCtrl1.GetStateList();
|
if (allStateList == null || allStateList.Count != 2)
|
{
|
return;
|
}
|
var working = new HydroWorkingPumpViewModel()
|
{
|
LinkStatus = _pumpInfo.LinkStatus,
|
CurrentHz = allStateList[1].Hz
|
};
|
|
this.SaveEvent?.Invoke(working);
|
}
|
}
|
|
|
}
|
}
|