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() { } } }