| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 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<SunWaySignalLight> _lights = new List<SunWaySignalLight>();        /// <summary>        /// 变量是否初始化字典        /// </summary>        private Dictionary<string, bool> _variableInitializeDic = new Dictionary<string, bool>();        private Dictionary<string, bool> _lightValueDic = new Dictionary<string, bool>();        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<RouteManager>.Instance.EFEM != null)            {                _efem = Singleton<RouteManager>.Instance.EFEM.EfemDevice;            }            CustomSignalTower();            SubscriptionAction();            return true;        }        private void SubscriptionAction()        {            IOSubscribeUpdateVariable(BUZZER);            IOSubscribeUpdateVariable(RED_LIGHT);            IOSubscribeUpdateVariable(YELLOW_LIGHT);            IOSubscribeUpdateVariable(GREEN_LIGHT);            IOSubscribeUpdateVariable(BLUE_LIGHT);        }        /// <summary>        /// 订阅IO变量        /// </summary>        /// <param name="variable"></param>        private void IOSubscribeUpdateVariable(string variable)        {            _variableInitializeDic[variable] = false;            _lightValueDic[variable] = false;            IOModuleManager.Instance.SubscribeModuleVariable("LightTower", variable, UpdateVariableValue);        }        /// 更新变量数值        /// </summary>        /// <param name="variable"></param>        /// <param name="value"></param>        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;        }    }}
 |