using Aitex.Core.Util; using MECF.Framework.Common.Device.Bases; using MECF.Framework.Common.Equipment; using CyberX8_RT.Devices.EFEM; using CyberX8_RT.Modules; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MECF.Framework.Common.IOCore; namespace CyberX8_RT.Devices.SignalLight { public class SunWaySignalTower : SignalTowerBase { #region 常量 private const string BUZZER = "Buzzer"; private const string RED_LIGHT = "RedLight"; private const string YELLOW_LIGHT = "YellowLight"; private const string GREEN_LIGHT = "GreenLight"; private const string BLUE_LIGHT = "BlueLight"; #endregion private EfemBase _efem; private List _lights = new List(); /// /// 变量是否初始化字典 /// private Dictionary _variableInitializeDic = new Dictionary(); private Dictionary _lightValueDic = new Dictionary(); public SunWaySignalTower(string module, string name) : base("", "") { base.Module = module; base.Name = name; base.Display = name; base.DeviceID = ""; } public override bool Initialize() { base.Initialize(); if (_efem == null && Singleton.Instance.EFEM != null) { _efem = Singleton.Instance.EFEM.EfemDevice; } CustomSignalTower(); SubscriptionAction(); return true; } private void SubscriptionAction() { IOSubscribeUpdateVariable(BUZZER); IOSubscribeUpdateVariable(RED_LIGHT); IOSubscribeUpdateVariable(YELLOW_LIGHT); IOSubscribeUpdateVariable(GREEN_LIGHT); IOSubscribeUpdateVariable(BLUE_LIGHT); } /// /// 订阅IO变量 /// /// private void IOSubscribeUpdateVariable(string variable) { _variableInitializeDic[variable] = false; _lightValueDic[variable] = false; IOModuleManager.Instance.SubscribeModuleVariable("LightTower", variable, UpdateVariableValue); } /// 更新变量数值 /// /// /// private void UpdateVariableValue(string variable, object value) { if (_lightValueDic.ContainsKey(variable)) { _lightValueDic[variable] = (bool)value; } } //重新连接EFEM之后,需要重置灯塔 public void ResetData() { foreach (var rorzeSingalLight in _lights) { rorzeSingalLight.ResetData(); } } public override SignalLightBase CreateLight(MECF.Framework.Common.Device.Bases.LightType type) { var light = new SunWaySignalLight(ModuleName.System.ToString(), $"SignalLight{type}", _efem) { Type = type }; _lights.Add(light); return light; } } }