using IStation.Model;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace IStation.EtaCalculation
|
{
|
/// <summary>
|
/// 所有泵, 都有独立的流量计 , 独立的功率表, 有独立的进出口压力计, 有独立的开机状态测点
|
/// </summary>
|
public abstract class EtaAnalyCalculator泵站4都是独立流量计_有运行状态 : EtaAnalyCalculatorBase4Station
|
{
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="context"></param>
|
/// <param name="error_info"></param>
|
/// <returns></returns>
|
public override bool Calculate(IStation.Model.EtaStationAnalyContextItem context, out string error_info)
|
{
|
error_info = null;
|
return false;
|
}
|
|
/// <summary>
|
/// 分析核心(继承类调用)
|
/// </summary>
|
/// <param name="context"></param>
|
/// <param name="error_info"></param>
|
/// <returns></returns>
|
protected bool CalculateCore(IStation.Model.EtaStationAnalyContextItem context, out string error_info)
|
{
|
error_info = null;
|
if (context == null)
|
{
|
error_info = "上下文参数为空";
|
return false;
|
}
|
|
if (this._stationID == 0)
|
{//目的: 保证此方法不能独立调用, 只能继承类才能调用(继承类赋值)
|
error_info = "还未初始化";
|
return false;
|
}
|
if (_machineCount < 1)
|
{
|
error_info = "机泵数量不合理";
|
return false;
|
}
|
if (_allMachineList == null || _allMachineList.Count != _machineCount)
|
{
|
error_info = "机泵数量不合理!Error:62";
|
return false;
|
}
|
|
|
|
|
if (!InitialMonitorList(context, out error_info))
|
{
|
IStation.LogHelper.Error(error_info);
|
return false;
|
}
|
if (!AnaPumpResultList())
|
{
|
|
}
|
if (!AnaStationResultList())
|
{
|
|
}
|
|
return true ;
|
}
|
|
|
|
/// <summary>
|
/// 单泵分析
|
/// </summary>
|
/// <returns></returns>
|
protected bool AnaPumpResultList()
|
{
|
for (int i = 0; i < _machineCount; i++)
|
{
|
var pump_context = _allMachineList[i];
|
|
string error_info;
|
if ( AnaPumpRunStatus(pump_context, out error_info))
|
{
|
if (pump_context.AnaResult.RSa == IStation.RunStatus.Shut )
|
{
|
pump_context.AnaResult.Qa = 0;
|
pump_context.AnaResult.Ha = 0;
|
pump_context.AnaResult.Pa = 0;
|
pump_context.AnaResult.Ea = 0;
|
pump_context.AnaResult.UWPa = 0;
|
pump_context.AnaResult.WPa = 0;
|
if (pump_context.AnaResult.AnalyStatus == Model.Eta.eAnalyStatus.Unkonw)
|
pump_context.AnaResult.AnalyStatus = Model.Eta.eAnalyStatus.Normal;
|
}
|
else
|
{
|
if (pump_context.IsFrequency)
|
{
|
Analy_有单泵流量计_运行状态已分析_变频泵(ref pump_context);
|
}
|
else
|
{
|
Analy_有单泵流量计_运行状态已分析_工频泵(ref pump_context);
|
}
|
}
|
}
|
|
|
}
|
|
return true;
|
}
|
|
|
/// <summary>
|
/// 泵站分析
|
/// </summary>
|
/// <returns></returns>
|
protected bool AnaStationResultList()
|
{
|
if (_stationAnaResult == null)
|
_stationAnaResult = new EtaMultiRealRecordPure();
|
|
_stationAnaResult.InitialRunList(this._machineCount);
|
_stationAnaResult.ObjectType = IStation.ObjectType.Station;
|
_stationAnaResult.ObjectID = _stationID;
|
_stationAnaResult.RunningCount = 0;
|
_stationAnaResult.AnalyStatus = Model.Eta.eAnalyStatus.Unkonw;
|
|
BuildConnectResult(null, _stationAnaResult, this._allMachineList);
|
|
|
return true;
|
}
|
|
|
/// <summary>
|
/// 计算总管数据(由于每个管都有流量计, 所以即使没有频率, 数据也是正确的, 就这点区别)
|
/// </summary>
|
/// <param name="total_flow"></param>
|
/// <param name="result_pipe"></param>
|
/// <param name="all_machine_list">子管路时只要输入相关泵即可,其余的泵,对于子管路来说就认为关机,泵站为空即可</param>
|
/// <returns></returns>
|
protected override bool BuildConnectResult(
|
double? total_flow,
|
Model.EtaMultiRealRecordPure result_pipe,
|
List<IStation.Calculation.Eta.Model.PumpAnaResult> all_machine_list = null)
|
{
|
if (_allMachineList == null)
|
return false;
|
|
if (all_machine_list == null)//为空,表示分析的是泵站, 直接给所有泵即可
|
all_machine_list = this._allMachineList;
|
|
List<double> all_flow = new List<double>(this._allMachineList.Count());
|
List<double> all_head = new List<double>(this._allMachineList.Count());
|
List<double> all_power = new List<double>(this._allMachineList.Count());
|
|
//用的是泵站的总数量,
|
result_pipe.InitialRunList(this._allMachineList.Count());
|
|
double qhTotal = 0;
|
|
#region 开机状态 和数量
|
int pump_open_count = 0;
|
bool allHeadMonitorOk = true;
|
Model.Eta.eAnalyStatus allPumpFlowStatus = Model.Eta.eAnalyStatus.Normal;
|
Model.Eta.eAnalyStatus allPumpPowerStatus = Model.Eta.eAnalyStatus.Normal;
|
|
for (int i = 0; i < this._allMachineList.Count; i++)
|
{
|
var pump = all_machine_list.Find(x => x.MachineID == this._allMachineList[i].MachineID);
|
if (pump == null)
|
{//子管路时只要输入相关泵即可,其余的泵,对于子管路来说就认为关机
|
continue;
|
}
|
|
var result_pump = pump.AnaResult;
|
if (result_pump == null)
|
{
|
allPumpFlowStatus = Model.Eta.eAnalyStatus.Abnormal;
|
allHeadMonitorOk = false;
|
allPumpPowerStatus = Model.Eta.eAnalyStatus.Abnormal;
|
continue;
|
}
|
|
if (!pump.IsRunIng)
|
{
|
result_pipe.SetPumpStatusByIndex(i, result_pump.HZa, result_pump.RSa);
|
continue;
|
}
|
|
bool validQ = false, validH = false;
|
|
result_pipe.PutStationAnalyInfo(result_pump.AnalyInfo, pump.MachineID);
|
|
pump_open_count++;
|
|
|
result_pipe.SetPumpStatusByIndex(i, result_pump.HZa, result_pump.RSa);
|
|
if (result_pump.IsHaveAnaTag(IStation.Model.EtaMultiRealRecordPure.InfoTag_RU))
|
{
|
//allHeadMonitorOk = false;
|
allPumpFlowStatus = Model.Eta.eAnalyStatus.Abnormal;
|
}
|
|
if (result_pump.IsHaveAnaTag(IStation.Model.EtaMultiRealRecordPure.InfoTag_Qa))
|
{
|
allPumpFlowStatus = result_pump.AnalyStatus;
|
}
|
else if (result_pump.Qa == null)
|
{
|
result_pipe.PutAnalyInfo(IStation.Model.EtaMultiRealRecordPure.InfoTag_Qa, result_pump.ObjectID.ToString());
|
allPumpFlowStatus = Model.Eta.eAnalyStatus.Missing;
|
}
|
else
|
{
|
all_flow.Add(result_pump.Qa.Value);
|
validQ = true;
|
}
|
|
if (result_pump.IsHaveAnaTag(IStation.Model.EtaMultiRealRecordPure.InfoTag_Ha) || result_pump.IsHaveAnaTag(IStation.Model.EtaMultiRealRecordPure.InfoTag_P2))
|
{
|
allHeadMonitorOk = false;
|
}
|
else if (result_pump.Ha == null)
|
{
|
allHeadMonitorOk = false;
|
}
|
else if (result_pump.Ha < 1)
|
{
|
allHeadMonitorOk = false;
|
}
|
else
|
{
|
all_head.Add(result_pump.Ha.Value);
|
validH = true;
|
}
|
|
if (validQ && validH)
|
{
|
qhTotal += result_pump.Qa.Value * result_pump.Ha.Value;
|
}
|
|
if (result_pump.IsHaveAnaTag(IStation.Model.EtaMultiRealRecordPure.InfoTag_Pa))
|
{
|
allPumpPowerStatus = result_pump.AnalyStatus;
|
}
|
else if (result_pump.Pa == null)
|
{
|
allPumpPowerStatus = Model.Eta.eAnalyStatus.Missing;
|
}
|
else if (result_pump.Pa < 1)
|
{
|
allPumpPowerStatus = Model.Eta.eAnalyStatus.Abnormal;
|
}
|
else
|
{
|
all_power.Add(result_pump.Pa.Value);
|
}
|
|
|
}
|
|
result_pipe.RunningCount = pump_open_count;
|
#endregion
|
|
|
if (total_flow != null)
|
result_pipe.Qa = total_flow.Value;
|
|
if (pump_open_count > 0)
|
{
|
if (result_pipe.Qa == null && all_flow.Count > 0)
|
{
|
result_pipe.Qa = Math.Round(all_flow.Sum(), 1);
|
result_pipe.AnalyStatus = allPumpFlowStatus;
|
}
|
|
|
if (allHeadMonitorOk && all_head.Count > 0)
|
result_pipe.Ha = Math.Round(all_head.Average(), 3);
|
|
if (all_power.Count > 0)
|
{
|
result_pipe.Pa = all_power.Sum();
|
result_pipe.AnalyStatus = allPumpPowerStatus;
|
}
|
|
result_pipe.CalcUnitPower();
|
|
if (allPumpPowerStatus == Model.Eta.eAnalyStatus.Normal &&
|
result_pipe.Ha != null && result_pipe.Pa != null && result_pipe.Qa != null)
|
{
|
//计算效率
|
//double eta = Math.Round(Model.EtaMultiRealRecordPure.Calc_Eta(result_pipe.Qa.Value, result_pipe.Ha.Value, result_pipe.Pa.Value, WaterDensity, g), 1);
|
|
double eta = 0;
|
foreach (var item in all_machine_list)
|
{
|
var result = item.AnaResult;
|
if (result == null)
|
continue;
|
if (result.IsHaveAnaTag(IStation.Model.EtaBasicRealRecord.InfoTag_Qa) || result.IsHaveAnaTag(IStation.Model.EtaBasicRealRecord.InfoTag_Ha))
|
continue;
|
if (result.Ea.HasValue && result.Qa.HasValue && result.Ha.HasValue)
|
{
|
eta += (result.Qa.Value * result.Ha.Value / qhTotal) * result.Ea.Value;
|
}
|
}
|
|
|
|
result_pipe.Ea = Math.Round(eta,1);
|
|
// 检查效率
|
if (eta > 98)
|
{//有时, 大流量曲线部分,是曲线不精确, 造成Q H曲线不符合实际, 造成效率计算出问题
|
result_pipe.AnalyStatus = Model.Eta.eAnalyStatus.Abnormal;
|
result_pipe.PutAnalyInfo(IStation.Model.EtaMultiRealRecordPure.InfoTag_Ea, eta.ToString());
|
}
|
else
|
{//计算
|
if (result_pipe.AnalyStatus == Model.Eta.eAnalyStatus.Unkonw)
|
result_pipe.AnalyStatus = Model.Eta.eAnalyStatus.Normal;
|
}
|
}
|
else
|
{
|
if(result_pipe.AnalyStatus == Model.Eta.eAnalyStatus.Normal)
|
result_pipe.AnalyStatus = Model.Eta.eAnalyStatus.Abnormal;
|
}
|
}
|
else
|
{//表示没有开机的
|
result_pipe.SetEmptyPipe(this._machineCount);
|
}
|
|
return true;
|
}
|
|
|
|
}
|
|
|
|
|
}
|