|
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, IEtaStationAnalyCalculator
|
{
|
|
/// <summary>
|
///
|
/// </summary>
|
protected List<IStation.Calculation.Eta.Model.PipeLineAnaResult> _sub_pipe_bundle_list = null;// 总管流量计
|
|
|
/// <summary>
|
/// 构建流量管路数组
|
/// </summary>
|
/// <param name="pipe_id_total_flow_list"></param>
|
/// <param name="monitor_id_total_flow_list"></param>
|
/// <param name="context"></param>
|
/// <param name="error_info"></param>
|
/// <returns></returns>
|
protected bool InitialPipeList(
|
long[] pipe_id_total_flow_list,
|
long[] monitor_id_total_flow_list,
|
Model.EtaStationAnalyContextItem context, out string error_info)
|
{
|
_sub_pipe_bundle_list = new List<IStation.Calculation.Eta.Model.PipeLineAnaResult>();
|
int pipe_count = pipe_id_total_flow_list.Count();
|
if(monitor_id_total_flow_list == null || monitor_id_total_flow_list.Count() != pipe_count)
|
{
|
error_info = "流量管路数量无法匹配!Error:40";
|
return false ;
|
}
|
|
|
for (int i = 0; i < pipe_count; i++)
|
{
|
var pipe_id = pipe_id_total_flow_list[i];
|
|
foreach (var item in context.PipeLineContextItems)
|
{
|
if (item.ID != pipe_id)
|
continue;
|
|
var series_no = 0;
|
if (item.SerialNO.HasValue)
|
{
|
series_no = item.SerialNO.Value;
|
}
|
|
|
IStation.Calculation.Eta.Model.PipeLineAnaResult bundle = new IStation.Calculation.Eta.Model.PipeLineAnaResult( )
|
{
|
SerialNO = series_no,
|
PipeLineID = item.ID
|
};
|
var result_ana = new Model.EtaMultiRealRecordPure();
|
result_ana.ObjectType = IStation.ObjectType.PipeLine;
|
result_ana.ObjectID = item.ID;
|
result_ana.RunningCount = 0;//默认不开机
|
result_ana.AnalyStatus = Model.Eta.eAnalyStatus.Unkonw;
|
|
bundle.MonitorID_PumpFlow = monitor_id_total_flow_list[i];
|
bundle.AnaResult = result_ana;
|
_sub_pipe_bundle_list.Add(bundle);
|
|
break;
|
}
|
}
|
if (_sub_pipe_bundle_list.Count() != pipe_count)
|
{
|
error_info = string.Format("错误代码Error:230, 能效实时分析任务中,流量管路无法全部获取!stationID={0}", this._stationID);
|
|
return false;
|
}
|
error_info = null;
|
return true;
|
}
|
|
/// <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)
|
{
|
if (context == null)
|
{
|
error_info = "上下文参数为空";
|
return false ;
|
}
|
|
this._stationID = context.ID;
|
if (_machineCount < 1)
|
{
|
error_info = "机泵数量不合理";
|
return false;
|
}
|
if (_allMachineList == null || _allMachineList.Count != _machineCount)
|
{
|
error_info = "机泵数量不合理!Error:62";
|
return false;
|
}
|
|
if (_sub_pipe_bundle_list == null|| _sub_pipe_bundle_list.Count()<=1)
|
{
|
error_info = "管路测点 设置不正确!Error:76";
|
return false;
|
}
|
|
|
|
if (!InitialMonitorList(context, out error_info))
|
{
|
IStation.LogHelper.Error(error_info);
|
return false;
|
}
|
if (!AnaPumpRunStatus())
|
{
|
|
}
|
if (!AnaStationResultList())
|
{
|
|
}
|
|
//List<IStation.Model.EtaMultiRealRecordPure> ana_result_list = new List<IStation.Model.EtaMultiRealRecordPure>();
|
//foreach (var item in this._allMachineList)
|
//{
|
// ana_result_list.Add(item.AnaResult);
|
//}
|
|
//ana_result_list.Add(_stationAnaResult);
|
|
|
|
|
return true ;
|
}
|
|
|
|
/// <summary>
|
/// 单泵分析(只分析开停机和频率)
|
/// </summary>
|
/// <returns></returns>
|
protected bool AnaPumpRunStatus()
|
{
|
for (int i = 0; i < _machineCount; i++)
|
{
|
var pump_context = _allMachineList[i];
|
|
string error_info;
|
base.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;
|
}
|
|
}
|
|
return true;
|
}
|
|
|
/// <summary>
|
/// 泵站分析
|
/// </summary>
|
/// <returns></returns>
|
protected bool AnaStationResultList()
|
{
|
if (_stationAnaResult == null)
|
_stationAnaResult = new IStation.Model.EtaMultiRealRecordPure();
|
|
_stationAnaResult.ObjectType = IStation.ObjectType.Station;
|
_stationAnaResult.ObjectID = _stationID;
|
_stationAnaResult.RunningCount = 0;
|
_stationAnaResult.InitialRunList(this._machineCount);
|
_stationAnaResult.AnalyStatus = Model.Eta.eAnalyStatus.Unkonw;
|
|
bool isMinitorFrequenceOK = true;//开机状态测点数据是否正确
|
bool isMinitorRunStatusOK = true;//开机状态测点数据是否正确
|
for (int i = 0; i < _machineCount; i++)
|
{
|
var context_pump = _allMachineList[i];
|
if (context_pump.AnaResult.IsHaveAnaTag(IStation.Model.EtaMultiRealRecordPure.InfoTag_RU))
|
{
|
isMinitorRunStatusOK = false ;
|
}
|
if (context_pump.AnaResult.IsHaveAnaTag(IStation.Model.EtaMultiRealRecordPure.InfoTag_HZ))
|
{
|
isMinitorFrequenceOK = false;
|
}
|
}
|
// if (!_isMinitorRunStatusOK)
|
// {
|
// result_station.RSa = 0;
|
// result_station.AnalyStatus = Model.Eta.eAnalyStatus.Abnormal;
|
// result_station.PutAnalyInfo(EtaMultiRealRecordPure.InfoTag_RU, null);
|
// return true;
|
// }
|
|
double monitor_value_total_flow = 0;
|
foreach (var pipe_bundle in _sub_pipe_bundle_list)
|
{
|
var monitor = _allMonitorList.Find(x => x.ObjectID == pipe_bundle.MonitorID_PumpFlow);
|
if (monitor == null)
|
{
|
_stationAnaResult.AnalyStatus = Model.Eta.eAnalyStatus.Missing;
|
_stationAnaResult.PutAnalyInfo(IStation.Model.EtaMultiRealRecordPure.InfoTag_Qa, null);
|
return true;
|
}
|
if (monitor.DataValue > 1)
|
monitor_value_total_flow += monitor.DataValue;
|
}
|
|
|
|
int open_pump_count = 0;
|
for (int i = 0; i < _machineCount; i++)
|
{
|
if (this._allMachineList[i].IsRunIng)
|
{
|
open_pump_count++;
|
}
|
}
|
if (open_pump_count == 0)
|
{
|
_stationAnaResult.AnalyStatus = Model.Eta.eAnalyStatus.Normal;
|
_stationAnaResult.RunningCount = 0;
|
_stationAnaResult.Qa = 0;
|
_stationAnaResult.Ha = 0;
|
_stationAnaResult.Pa = 0;
|
_stationAnaResult.Ea = 0;
|
_stationAnaResult.WPa = 0;
|
_stationAnaResult.UWPa = 0;
|
return true;
|
}
|
double ana_total_flow = 0;//分析的总流量
|
bool isAllOk_flow = true;
|
//获取所有开机的
|
for (int i = 0; i < _machineCount; i++)
|
{
|
if (!this._allMachineList[i].IsRunIng)
|
{
|
continue;
|
}
|
|
var pump_context = this._allMachineList[i];
|
|
if (pump_context.IsFrequency)
|
{
|
Analy_无单泵流量计_运行状态已分析_变频泵(
|
monitor_value_total_flow / open_pump_count,
|
ref pump_context);
|
}
|
else
|
{
|
Analy_无单泵流量计_运行状态已分析_工频泵(
|
monitor_value_total_flow / open_pump_count,
|
ref pump_context);
|
}
|
|
|
|
if (!pump_context.Ana_flow_ok)
|
isAllOk_flow = false;
|
|
var resut_ana = pump_context.AnaResult;
|
if (resut_ana.Qa == null)
|
{
|
isAllOk_flow = false;
|
}
|
else
|
{
|
ana_total_flow += resut_ana.Qa.Value;
|
}
|
}
|
|
#region 按总流量进行等比分
|
if (isAllOk_flow && isMinitorFrequenceOK && isMinitorRunStatusOK)
|
{
|
for (int i = 0; i < _machineCount; i++)
|
{
|
if (!this._allMachineList[i].IsRunIng)
|
{
|
continue;
|
}
|
var result_pump = _allMachineList[i].AnaResult;
|
|
result_pump.Qa = Math.Round(result_pump.Qa.Value * monitor_value_total_flow / ana_total_flow, 1);
|
|
result_pump.CalcUnitPower();
|
|
if (result_pump.Pa != null && result_pump.Pa > 1)
|
{
|
double eta = Math.Round(Model.EtaMultiRealRecordPure.Calc_Eta(result_pump.Qa.Value, result_pump.Ha.Value, result_pump.Pa.Value, WaterDensity, g), 1);
|
result_pump.Ea = eta;
|
|
// 检查效率
|
if (eta > 98 || eta < 1)
|
{//有时, 大流量曲线部分,是曲线不精确, 造成Q H曲线不符合实际, 造成效率计算出问题
|
result_pump.PutAnalyInfo(IStation.Model.EtaMultiRealRecordPure.InfoTag_Ea, eta.ToString());
|
result_pump.AnalyStatus = Model.Eta.eAnalyStatus.Abnormal;
|
}
|
else
|
{//计算
|
if (result_pump.AnalyStatus == Model.Eta.eAnalyStatus.Unkonw)
|
result_pump.AnalyStatus = Model.Eta.eAnalyStatus.Normal;
|
|
}
|
}
|
}
|
}
|
|
#endregion
|
|
|
|
BuildConnectResult(monitor_value_total_flow, _stationAnaResult, this._allMachineList);
|
|
|
return true;
|
}
|
|
|
|
}
|
|
|
|
|
}
|