using IStation.Model;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
namespace IStation.EtaCalculation.SHYS.Station
|
{
|
/// <summary>
|
/// 所有泵,都是变频泵,有进出口压力计, 有开机状态测点, 没有独立的流量计 , 只有管路的流量计
|
/// </summary>
|
public class EtaAnalyCalculator4长兴岛输水泵房 : EtaAnalyCalculatorBase4Station, IEtaStationAnalyCalculator
|
{
|
|
IStation.Model.EtaMonitorPointAnalyContextitem _monitor_flow_pipe1 = null;//一号管路流量计测点
|
IStation.Model.EtaMonitorPointAnalyContextitem _monitor_flow_pipe2 = null;//一号管路流量计测点
|
|
//
|
|
EtaMultiRealRecordPure result_pipe_1 = new EtaMultiRealRecordPure();//一号管 分析结果
|
EtaMultiRealRecordPure result_pipe_2 = new EtaMultiRealRecordPure();//二号管 分析结果
|
|
|
|
|
//测点ID(测点ID)
|
private long[] _monitor_id_pipe_flow = new long[] { 73, 77 };//两个管路流量计
|
|
private long _minitor_id_连接阀状态 = 71;//没有值
|
//private long _minitor_id_连接阀_1号管 = 75;//没有值
|
//private long _minitor_id_连接阀_2号管 = 79;//没有值
|
|
|
private long[] _sub_pipe_id = new long[] { 56, 57 };//子管路ID
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="context"></param>
|
/// <param name="error_info"></param>
|
/// <returns></returns>
|
public override bool Calculate(EtaStationAnalyContextItem context, out string error_info)
|
{
|
error_info = null;
|
if (context == null)
|
{
|
error_info = "上下文参数为空";
|
return false ;
|
}
|
this._stationID = context.ID;
|
|
_threshold_flow = 100;//高于此值, 认为对应阀门开启, 防止零点飘流
|
|
//初始化机泵
|
if (!InitialPumpList(context, out error_info))
|
{
|
return false ;
|
}
|
|
//初始化测点
|
if (!InitialMonitorList(context, out error_info))
|
{
|
IStation.LogHelper.Error(error_info);
|
return false;
|
}
|
|
//开停机分析
|
if (!AnaAllPumpRunStatus(out error_info))
|
{
|
IStation.LogHelper.Error(error_info);
|
return false;
|
}
|
|
if (!AnaPipeResultList())
|
{
|
|
}
|
|
|
|
|
_pipeAnaResultList = new List<EtaMultiRealRecordPure>();
|
_pipeAnaResultList.Add(result_pipe_1);
|
_pipeAnaResultList.Add(result_pipe_2);
|
|
|
|
|
|
|
return true ;
|
}
|
|
|
#region 初始化机泵
|
/// <summary>
|
/// 初始化机泵
|
/// </summary>
|
/// <param name="context"></param>
|
/// <param name="error_info"></param>
|
/// <returns></returns>
|
protected override bool InitialPumpList(Model.EtaStationAnalyContextItem context, out string error_info)
|
{
|
long[] monitor_id_pump_flow_array = new long[] { 0, 0, 0, 0 };//单泵流量计
|
long[] monitor_id_inlet_press_array = new long[] { 82, 92, 102, 112 };// 泵的进口压力计
|
long[] monitor_id_outlet_press_array = new long[] { 83, 93, 103, 113 };//出口压力
|
long[] monitor_id_run_status_array = new long[] { 80, 90, 100, 110 };//运行状态
|
long[] monitor_id_motor_frequence_array = new long[] { 84, 94, 104, 114 };//频率
|
long[] monitor_id_motor_power_array = new long[] { 88, 98, 108, 118 };//瞬间功率
|
long[] monitor_id_motor_zhuansu_array = new long[] { 0, 0, 0, 0 };//转速
|
long[] machine_id_array = new long[] { 19, 22, 25, 28 };
|
|
this._machineCount = 4;
|
|
this._allMachineList = InitialPumpMachineList(
|
context,
|
machine_id_array,//机泵ID
|
monitor_id_run_status_array,//运行状态
|
monitor_id_pump_flow_array,// 流量计
|
false,
|
monitor_id_inlet_press_array,//进口压力计
|
monitor_id_outlet_press_array,//出口压力
|
monitor_id_motor_power_array,//瞬间功率
|
monitor_id_motor_frequence_array,//频率
|
monitor_id_motor_zhuansu_array,//转速
|
null,//电流
|
out error_info);
|
if (_allMachineList == null)
|
{
|
IStation.LogHelper.Error(error_info);
|
return false ;
|
}
|
|
|
error_info = null;
|
return true;
|
}
|
#endregion
|
|
|
|
|
|
|
/// <summary>
|
/// 总分析
|
/// </summary>
|
/// <returns></returns>
|
private bool AnaPipeResultList()
|
{
|
//泵站
|
_stationAnaResult = new EtaMultiRealRecordPure();
|
_stationAnaResult.ObjectType = IStation.ObjectType.Station ;
|
_stationAnaResult.ObjectID = _stationID;
|
_stationAnaResult.RunningCount = 0;
|
_stationAnaResult.AnalyStatus = Model.Eta.eAnalyStatus.Unkonw;
|
_stationAnaResult.InitialRunList(this._machineCount);
|
|
//一号管路
|
result_pipe_1 = new EtaMultiRealRecordPure();
|
result_pipe_1.ObjectType = IStation.ObjectType.PipeLine ;
|
result_pipe_1.ObjectID = _sub_pipe_id[0];
|
result_pipe_1.RunningCount = 0;
|
result_pipe_1.AnalyStatus = Model.Eta.eAnalyStatus.Unkonw;
|
result_pipe_1.InitialRunList(this._machineCount);//按泵总数赋值
|
|
//二号管路
|
result_pipe_2 = new EtaMultiRealRecordPure();
|
result_pipe_2.ObjectType = IStation.ObjectType.PipeLine;
|
result_pipe_2.ObjectID = _sub_pipe_id[1];
|
result_pipe_2.RunningCount = 0;
|
result_pipe_2.AnalyStatus = Model.Eta.eAnalyStatus.Unkonw;
|
result_pipe_2.InitialRunList(this._machineCount);//按泵总数赋值
|
|
|
|
_monitor_flow_pipe1 = _allMonitorList.Find(x => x.ObjectID == _monitor_id_pipe_flow[0]);//一号管流量
|
_monitor_flow_pipe2 = _allMonitorList.Find(x => x.ObjectID == _monitor_id_pipe_flow[1]);//2号管流量
|
if (_monitor_flow_pipe1 == null)
|
{
|
BuildConnectResult(null, _stationAnaResult, this._allMachineList);
|
_stationAnaResult.AnalyStatus = Model.Eta.eAnalyStatus.Missing;
|
_stationAnaResult.PutAnalyInfo(IStation.Model.EtaMultiRealRecordPure.InfoTag_Qa, "P1");
|
return false;
|
}
|
if (_monitor_flow_pipe2 == null)
|
{
|
BuildConnectResult(null, _stationAnaResult, this._allMachineList);
|
_stationAnaResult.AnalyStatus = Model.Eta.eAnalyStatus.Missing;
|
_stationAnaResult.PutAnalyInfo(IStation.Model.EtaMultiRealRecordPure.InfoTag_Qa, "P2");
|
return false;
|
}
|
|
var flow_meter_1_record_value = _monitor_flow_pipe1.DataValue;
|
var flow_meter_2_record_value = _monitor_flow_pipe2.DataValue;
|
|
//中间阀门状态
|
bool isClose_中间阀门状态 = true;
|
var minitor_中间阀门状态 = _allMonitorList.Find(x => x.ObjectID == _minitor_id_连接阀状态);
|
if (minitor_中间阀门状态 != null)
|
{
|
isClose_中间阀门状态 = minitor_中间阀门状态.DataValue > 0.5 ? false : true;
|
}
|
else
|
{
|
if (flow_meter_1_record_value > this._threshold_flow && flow_meter_2_record_value > this._threshold_flow)
|
{
|
isClose_中间阀门状态 = true;
|
}
|
else
|
{
|
isClose_中间阀门状态 = false;
|
}
|
}
|
|
|
if (isClose_中间阀门状态)
|
{
|
Calc_中间断开_两管供水();
|
}
|
|
else if (flow_meter_1_record_value > this._threshold_flow && flow_meter_2_record_value < this._threshold_flow)
|
{//一号管开通
|
int pump_open_count = GetOpenPumpCount();
|
if (pump_open_count == 0)
|
{
|
|
}
|
else if (pump_open_count == 1)
|
{
|
Calc_单管单独供水_单泵运行();
|
}
|
else
|
{
|
Calc_单管单独供水_多泵运行();
|
}
|
}
|
|
else if (flow_meter_1_record_value < this._threshold_flow && flow_meter_2_record_value > this._threshold_flow)
|
{
|
int pump_open_count = GetOpenPumpCount();
|
if (pump_open_count == 0)
|
{
|
|
}
|
else if (pump_open_count == 1)
|
{
|
Calc_单管单独供水_单泵运行();
|
}
|
else
|
{
|
Calc_单管单独供水_多泵运行();
|
}
|
}
|
else
|
{
|
|
}
|
|
|
|
BuildConnectResult(null, _stationAnaResult, this._allMachineList);
|
|
|
return true;
|
}
|
|
private void Calc_中间断开_两管供水()
|
{
|
double tota_flow = 0;
|
var result_pump1 = this._allMachineList[0];
|
var result_pump2 = this._allMachineList[1];
|
var result_pump3 = this._allMachineList[2];
|
var result_pump4 = this._allMachineList[3];
|
|
#region 1,2号泵
|
double pipe_flow_1 = 0;
|
if (this._monitor_flow_pipe1 != null && this._monitor_flow_pipe1.DataValue > 0)
|
{
|
pipe_flow_1 = this._monitor_flow_pipe1.DataValue;
|
}
|
|
if (pipe_flow_1 > this._threshold_flow)
|
{
|
tota_flow += pipe_flow_1;
|
|
if (this._allMachineList[0].IsRunIng && !this._allMachineList[1].IsRunIng)
|
{//只有一号泵开着
|
Analy_有单泵流量计_运行状态已分析_变频泵(
|
pipe_flow_1,
|
ref result_pump1);
|
|
result_pipe_1.CopyAnaPara(result_pump1.AnaResult);
|
|
result_pipe_1.Qa = pipe_flow_1;
|
result_pipe_1.Ha = result_pump1.AnaResult.Ha;
|
result_pipe_1.Pa = result_pump1.AnaResult.Pa;
|
result_pipe_1.RunningCount = 1;
|
result_pipe_1.SetPumpStatusByIndex(0, result_pump1.AnaResult.HZa, result_pump1.AnaResult.RSa);
|
|
result_pipe_1.AnalyStatus = result_pump1.AnaResult.AnalyStatus;
|
|
result_pump2.AnaResult.SetShutDownStatus();//1号泵 没开
|
}
|
else if (!this._allMachineList[0].IsRunIng && this._allMachineList[1].IsRunIng)
|
{//只有二号泵开着
|
Analy_有单泵流量计_运行状态已分析_变频泵(
|
pipe_flow_1,
|
ref result_pump2);
|
|
result_pipe_1.CopyAnaPara(result_pump2.AnaResult);
|
result_pipe_1.Qa = pipe_flow_1;
|
result_pipe_1.Ha = result_pump2.AnaResult.Ha;
|
result_pipe_1.Pa = result_pump2.AnaResult.Pa;
|
|
result_pipe_1.RunningCount = 1;
|
result_pipe_1.SetPumpStatusByIndex(1, result_pump2.AnaResult.HZa, result_pump2.AnaResult.RSa);
|
|
|
result_pipe_1.AnalyStatus = result_pump2.AnaResult.AnalyStatus;
|
|
|
result_pump1.AnaResult.SetShutDownStatus();//1号泵 没开
|
}
|
else if (this._allMachineList[0].IsRunIng && this._allMachineList[1].IsRunIng)
|
{//都开着
|
Analy_多泵并联运行_单管出口(pipe_flow_1, new List<IStation.Calculation.Eta.Model.PumpAnaResult>() { result_pump1, result_pump2 });
|
|
BuildConnectResult(pipe_flow_1, result_pipe_1, new List<IStation.Calculation.Eta.Model.PumpAnaResult>() { result_pump1, result_pump2 });
|
|
}
|
|
}
|
else
|
{
|
result_pipe_1.SetEmptyPipe(this._machineCount);//空管路
|
}
|
|
#endregion
|
|
|
#region 3,4号泵
|
double pipe_flow_2 = 0;
|
if (this._monitor_flow_pipe2 != null && this._monitor_flow_pipe2.DataValue > 0)
|
{
|
pipe_flow_2 = this._monitor_flow_pipe2.DataValue;
|
}
|
|
if (pipe_flow_2 > this._threshold_flow)
|
{
|
tota_flow += pipe_flow_2;
|
if (this._allMachineList[2].IsRunIng && !this._allMachineList[3].IsRunIng)
|
{//3号泵开着
|
Analy_有单泵流量计_运行状态已分析_变频泵(
|
pipe_flow_2,
|
ref result_pump3);
|
|
result_pipe_2.CopyAnaPara(result_pump3.AnaResult);
|
result_pipe_2.Qa = pipe_flow_2;
|
result_pipe_2.Ha = result_pump3.AnaResult.Ha;
|
result_pipe_2.RunningCount = 1;
|
result_pipe_2.Pa = result_pump3.AnaResult.Pa;
|
result_pipe_2.AnalyStatus = result_pump3.AnaResult.AnalyStatus;
|
|
result_pipe_2.SetPumpStatusByIndex(2, result_pump3.AnaResult.HZa, result_pump3.AnaResult.RSa);
|
|
|
result_pump4.AnaResult.SetShutDownStatus();//1号泵 没开
|
}
|
else if (!this._allMachineList[2].IsRunIng && this._allMachineList[3].IsRunIng)
|
{//4号泵开着
|
Analy_有单泵流量计_运行状态已分析_变频泵(
|
pipe_flow_2,
|
ref result_pump4);
|
|
result_pipe_2.CopyAnaPara(result_pump4.AnaResult);
|
result_pipe_2.Qa = pipe_flow_2;
|
result_pipe_2.Ha = result_pump4.AnaResult.Ha;
|
result_pipe_2.RunningCount = 1;
|
result_pipe_2.Pa = result_pump4.AnaResult.Pa;
|
result_pipe_2.AnalyStatus = result_pump4.AnaResult.AnalyStatus;
|
|
result_pipe_2.SetPumpStatusByIndex(3, result_pump4.AnaResult.HZa, result_pump4.AnaResult.RSa);
|
|
|
result_pump3.AnaResult.SetShutDownStatus();//1号泵 没开
|
}
|
else if (this._allMachineList[2].IsRunIng && this._allMachineList[3].IsRunIng)
|
{//都开着
|
Analy_多泵并联运行_单管出口(pipe_flow_2, new List<IStation.Calculation.Eta.Model.PumpAnaResult>() { result_pump3, result_pump4 });
|
|
BuildConnectResult(pipe_flow_2, result_pipe_2, new List<IStation.Calculation.Eta.Model.PumpAnaResult>() { result_pump3, result_pump4 });
|
|
}
|
|
}
|
else
|
{
|
result_pipe_2.SetEmptyPipe(this._machineCount);//空管路
|
}
|
|
#endregion
|
|
|
|
}
|
|
private void Calc_单管单独供水_单泵运行()
|
{
|
double total_flow = 0;
|
bool isPipe1 = true;
|
|
if (_monitor_flow_pipe1.DataValue > this._threshold_flow)
|
{
|
total_flow += _monitor_flow_pipe1.DataValue;
|
isPipe1 = true;
|
}
|
|
if (_monitor_flow_pipe2.DataValue > this._threshold_flow)
|
{
|
total_flow += _monitor_flow_pipe2.DataValue;
|
isPipe1 = false;
|
}
|
//var result_pump1 = this._allMachineList[0];
|
//var result_pump2 = this._allMachineList[1];
|
//var result_pump3 = this._allMachineList[2];
|
//var result_pump4 = this._allMachineList[3];
|
|
Model.EtaSingleRealRecordPure result_pump = null;
|
for (int i = 0; i < this._allMachineList.Count; i++)
|
{
|
var context_pump = this._allMachineList[i];
|
if (context_pump.IsRunIng)
|
{//泵开着
|
Analy_有单泵流量计_运行状态已分析_变频泵(
|
total_flow,
|
ref context_pump);
|
result_pump = context_pump.AnaResult;
|
break;
|
}
|
}
|
|
if (result_pump == null)
|
{
|
result_pipe_2.AnalyStatus = Model.Eta.eAnalyStatus.Abnormal;
|
result_pipe_1.AnalyStatus = Model.Eta.eAnalyStatus.Abnormal;
|
return;
|
}
|
|
if (isPipe1)
|
{
|
result_pipe_1.CopyAnaPara(result_pump);
|
result_pipe_1.AnalyInfo = result_pump.AnalyInfo;
|
result_pipe_1.AnalyStatus = result_pump.AnalyStatus;
|
|
BuildConnectResult(total_flow, result_pipe_1, null);
|
result_pipe_1.RunningCount = 1;
|
|
result_pipe_2.SetEmptyPipe(this._machineCount);//空管路
|
|
_stationAnaResult.CopyAnaPara(result_pipe_1);
|
}
|
else
|
{
|
result_pipe_2.CopyAnaPara(result_pump);
|
result_pipe_2.AnalyInfo = result_pump.AnalyInfo;
|
result_pipe_2.AnalyStatus = result_pump.AnalyStatus;
|
|
BuildConnectResult(total_flow, result_pipe_2);
|
|
result_pipe_2.RunningCount = 1;
|
|
result_pipe_1.SetEmptyPipe(this._machineCount);//空管路
|
|
_stationAnaResult.CopyAnaPara(result_pipe_2);
|
}
|
}
|
|
private void Calc_单管单独供水_多泵运行()
|
{
|
double total_flow = 0;
|
bool isPipe1 = true;
|
|
if (_monitor_flow_pipe1.DataValue > this._threshold_flow)
|
{
|
total_flow += _monitor_flow_pipe1.DataValue;
|
isPipe1 = true;
|
}
|
|
if (_monitor_flow_pipe2.DataValue > this._threshold_flow)
|
{
|
total_flow += _monitor_flow_pipe2.DataValue;
|
isPipe1 = false;
|
}
|
|
|
|
|
|
if (isPipe1)
|
{
|
Analy_多泵并联运行_单管出口(total_flow, this._allMachineList);
|
|
BuildConnectResult(total_flow, result_pipe_1 );
|
result_pipe_1.Qa = total_flow;
|
|
result_pipe_2.SetEmptyPipe(this._machineCount);//空管路
|
|
_stationAnaResult.CopyAnaPara(result_pipe_1);
|
}
|
else
|
{
|
Analy_多泵并联运行_单管出口(total_flow, this._allMachineList);
|
|
BuildConnectResult(total_flow, result_pipe_2 );
|
result_pipe_2.Qa = total_flow;
|
|
result_pipe_1.SetEmptyPipe(this._machineCount);//空管路
|
|
_stationAnaResult.CopyAnaPara(result_pipe_2);
|
}
|
}
|
|
private int GetOpenPumpCount()
|
{
|
int pump_open_count = 0;
|
if (this._allMachineList[0].IsRunIng)
|
pump_open_count++;
|
if (this._allMachineList[1].IsRunIng)
|
pump_open_count++;
|
if (this._allMachineList[2].IsRunIng)
|
pump_open_count++;
|
if (this._allMachineList[3].IsRunIng)
|
pump_open_count++;
|
|
return pump_open_count;
|
}
|
|
|
|
|
|
}
|
|
|
|
|
}
|