using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.Device;
using Aitex.Core.RT.OperationCenter;
using Aitex.Core.Util;
using MECF.Framework.Common.Beckhoff.ModuleIO;
using MECF.Framework.Common.CommonData.Prewet;
using MECF.Framework.Common.CommonData.Vpw;
using MECF.Framework.Common.IOCore;
using MECF.Framework.Common.Persistent.SRD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace PunkHPX8_RT.Devices.VpwCell
{
public class VpwCellDevice : BaseDevice, IDevice
{
#region 常量
private const string COMMON_DATA = "CommonData";
private const string DIW_FLOW = "DiwFlow";
private const string VACUUM_PRESSURE = "VacuumPressure";
private const string FLOW_DRIP = "FlowDrip";
private const string FLOW_SMALL = "FlowSmall";
private const string FLOW_LARGE = "FlowLarge";
private const string VACUUM_VALVE = "VacuumValve";
private const string VENT_VALVE = "VentValve";
private const string DIW_DRAIN = "DiwDrain";
#endregion
#region 内部变量
///
/// 变量是否初始化字典
///
private Dictionary _variableInitializeDic = new Dictionary();
///
/// 数据
///
private VpwCellCommonData _commonData;
#endregion
#region 属性
///
/// 数据
///
public VpwCellCommonData CommonData { get { return _commonData; } }
#endregion
///
/// 构造函数
///
///
public VpwCellDevice(string moduleName) : base(moduleName, moduleName, moduleName, moduleName)
{
}
#region 初始化
///
/// 初始化
///
///
public bool Initialize()
{
InitializeParameter();
InitializeRoutine();
SubscribeData();
SubscribeValueAction();
InitializeOperation();
return true;
}
///
/// 初始化参数
///
private void InitializeParameter()
{
}
///
/// 初始化Routine
///
private void InitializeRoutine()
{
}
///
/// 订阅
///
private void SubscribeData()
{
DATA.Subscribe($"{Module}.{COMMON_DATA}", () => CommonData, SubscriptionAttribute.FLAG.IgnoreSaveDB);
}
///
/// 订阅数据
///
private void SubscribeValueAction()
{
IoSubscribeUpdateVariable(DIW_FLOW);
IoSubscribeUpdateVariable(DIW_DRAIN);
IoSubscribeUpdateVariable(VACUUM_PRESSURE);
IoSubscribeUpdateVariable(VACUUM_VALVE);
IoSubscribeUpdateVariable(VENT_VALVE);
IoSubscribeUpdateVariable(FLOW_DRIP);
IoSubscribeUpdateVariable(FLOW_LARGE);
IoSubscribeUpdateVariable(FLOW_SMALL);
}
///
/// 初始化变量
///
///
private void IoSubscribeUpdateVariable(string variable)
{
_variableInitializeDic[variable] = false;
IOModuleManager.Instance.SubscribeModuleVariable(Module, variable, UpdateVariableValue);
}
///
/// 更新变量数值
///
///
///
private void UpdateVariableValue(string variable, object value)
{
PropertyInfo property = _commonData.GetType().GetProperty(variable);
if (property != null)
{
property.SetValue(_commonData, value);
}
if (_variableInitializeDic.ContainsKey(variable) && !_variableInitializeDic[variable])
{
_variableInitializeDic[variable] = true;
}
}
///
/// 初始化OP
///
private void InitializeOperation()
{
OP.Subscribe($"{Module}.FlowDripOn", (cmd,para)=> { return FlowDripOn(); });
OP.Subscribe($"{Module}.FlowDripOff", (cmd, para) => { return FlowDripOff(); });
OP.Subscribe($"{Module}.FlowSmallOn", (cmd, para) => { return FlowSmallOn(); });
OP.Subscribe($"{Module}.FlowSmallOff", (cmd, para) => { return FlowSmallOff(); });
OP.Subscribe($"{Module}.FlowLargeOn", (cmd, para) => { return FlowLargeOn(); });
OP.Subscribe($"{Module}.FlowLargeOff", (cmd, para) => { return FlowLargeOff(); });
OP.Subscribe($"{Module}.VentValveOn", (cmd, para) => { return VentValveOn(); });
OP.Subscribe($"{Module}.VentValveOff", (cmd, para) => { return VentValveOff(); });
OP.Subscribe($"{Module}.DrainValveOn", (cmd, para) => { return DrainValveOn(); });
OP.Subscribe($"{Module}.DrainValveOff", (cmd, para) => { return DrainValveOff(); });
OP.Subscribe($"{Module}.VacuumValveOn", (cmd, para) => { return VacuumValveOn(); });
OP.Subscribe($"{Module}.VacuumValveOff", (cmd, para) => { return VacuumValveOff(); });
}
#endregion
#region Action
#region Flow
///
/// Flow Drip on
///
///
public bool FlowDripOn()
{
return WriteVariableValue(FLOW_DRIP, true);
}
///
/// Flow Drip Off
///
///
public bool FlowDripOff()
{
return WriteVariableValue(FLOW_DRIP, false);
}
///
/// Flow Small On
///
///
public bool FlowSmallOn()
{
return WriteVariableValue(FLOW_SMALL, true);
}
///
/// Flow Small Off
///
///
public bool FlowSmallOff()
{
return WriteVariableValue(FLOW_SMALL, false);
}
///
/// Flow Large On
///
///
public bool FlowLargeOn()
{
return WriteVariableValue(FLOW_LARGE, true);
}
///
/// Flow Large Off
///
///
public bool FlowLargeOff()
{
return WriteVariableValue(FLOW_LARGE, false);
}
#endregion
///
/// Vent Valve On
///
///
private bool VentValveOn()
{
return WriteVariableValue(VENT_VALVE, true);
}
///
/// Vent Valve Off
///
///
private bool VentValveOff()
{
return WriteVariableValue(VENT_VALVE, false);
}
///
/// Vent Valve On
///
///
private bool DrainValveOn()
{
return WriteVariableValue(DIW_DRAIN, true);
}
///
/// Vent Valve Off
///
///
private bool DrainValveOff()
{
return WriteVariableValue(DIW_DRAIN, false);
}
///
/// Vacuum valve on
///
///
private bool VacuumValveOn()
{
return WriteVariableValue(VACUUM_VALVE, true);
}
///
/// Vacuum valve off
///
///
private bool VacuumValveOff()
{
return WriteVariableValue(VACUUM_VALVE, false);
}
///
/// 写变量
///
///
///
///
private bool WriteVariableValue(string variable, object value)
{
string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{variable}");
return IOModuleManager.Instance.WriteIoValue(ioName, value);
}
#endregion
///
/// 监控
///
public void Monitor()
{
}
public void Reset()
{
}
public void Terminate()
{
}
}
}