using Aitex.Core.RT.Log;
using Aitex.Core.RT.OperationCenter;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Util;
using MECF.Framework.Common.Beckhoff.ModuleIO;
using MECF.Framework.Common.CommonData.Reservoir;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.TwinCat;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PunkHPX8_RT.Devices.Reservoir
{
public class DMReservoirDevice : ReservoirDevice
{
#region 常量
private const string AN_PUMP = "ANPump";
#endregion
#region 内部变量
///
/// 默认泵速
///
private double _anPumpSpeed = 5000;
#endregion
#region Trigger
///
/// low WaterLevel trigger
///
private R_TRIG _anWaterLevelLowerTrigger = new R_TRIG();
///
/// low WaterLevel trigger
///
private R_TRIG _anWaterLevelHighTrigger = new R_TRIG();
#endregion
///
/// 构造函数
///
///
public DMReservoirDevice(string moduleName) : base(moduleName)
{
}
///
/// 订阅变量
///
protected override void SubscribeValueAction()
{
base.SubscribeValueAction();
IoSubscribeUpdateVariable(AN_DI_REPLEN);
IoSubscribeUpdateVariable(AN_FLOW);
IoSubscribeUpdateVariable(AN_PUMP_ENABLE);
IoSubscribeUpdateVariable(AN_PUMP_SPEED);
IoSubscribeUpdateVariable(DEGAS_ENABLE);
}
///
/// 订阅Operation
///
protected override void InitializeOperation()
{
base.InitializeOperation();
OP.Subscribe($"{Module}.ANPumpEnable", AnPumpOnOperation);
OP.Subscribe($"{Module}.ANPumpSpeed", ANPumpSpeedOperation);
OP.Subscribe($"{Module}.ANPumpDisable", AnPumpOffOperation);
}
#region AnPump
///
/// AN Pump调速
///
///
///
///
private bool ANPumpSpeedOperation(string cmd, object[] args)
{
double anMaxPumpSpeed = 0;
if (SC.ContainsItem("Reservoir.ANMaxPumpSpeed"))
{
anMaxPumpSpeed = SC.GetValue("Reservoir.ANMaxPumpSpeed");
}
if (double.TryParse(args[0].ToString(), out double speed))
{
_anPumpSpeed = speed;
if (_anPumpSpeed > anMaxPumpSpeed)
{
LOG.WriteLog(eEvent.WARN_RESERVOIR, Module, $"AN pump speed:{_anPumpSpeed} is over AN max pump speed {anMaxPumpSpeed}!");
return false;
}
return AnPumpSpeed(_anPumpSpeed);
}
else
{
LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, $"{args[0]} is nor invalid speed");
return false;
}
}
///
/// 设置AN泵速
///
///
///
public bool AnPumpSpeed(double anPumpSpeed)
{
string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{AN_PUMP_SPEED}");
return BeckhoffIOManager.Instance.WriteIoValue(ioName, anPumpSpeed);
}
///
/// 阳极Pump On
///
///
///
///
private bool AnPumpOnOperation(string cmd, object[] args)
{
double caPumpSpeed = SC.GetValue("Reservoir.ANDefaultPumpSpeed");
bool result = AnPumpSpeed(caPumpSpeed);
if (result)
{
string enableIOName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{AN_PUMP_ENABLE}");
return BeckhoffIOManager.Instance.WriteIoValue(enableIOName, true);
}
else
{
return false;
}
}
///
/// 阳极Pump Off
///
///
///
///
private bool AnPumpOffOperation(string cmd, object[] args)
{
return AnPumpOff();
}
///
/// 关闭阳极Pump
///
///
public bool AnPumpOff()
{
string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{AN_PUMP_ENABLE}");
return BeckhoffIOManager.Instance.WriteIoValue(ioName, false);
}
#endregion
///
/// 水位监控
///
protected override void WaterLevelMonitor()
{
base.WaterLevelMonitor();
}
///
/// 补水监控
///
protected override void AutoDireplenMonitor()
{
base.AutoDireplenMonitor();
}
///
/// 阳极补水
///
private void AnDireplenMonitor()
{
}
}
}