| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 | using Aitex.Core.Util;using MECF.Framework.Common.Device.Bases;using MECF.Framework.Common.Equipment;using System;using System.Collections.Generic;using Aitex.Core.RT.Log;using Venus_RT.Devices.EFEM;namespace Venus_RT.Devices{    class VenusSignalLight : SignalLightBase    {        public MECF.Framework.Common.Device.Bases.LightType Type { get; set; }        public EfemBase EfemController { get; set; }        private F_TRIG _trigError = new F_TRIG();        private bool _isInit;        private TowerLightStatus _preState = TowerLightStatus.Unknown;        IoSignalTower _SignalTower;        public VenusSignalLight(string module, string name) : base(module, name)        {            _isInit = true;            _SignalTower= Aitex.Core.RT.Device.DEVICE.GetDevice<IoSignalTower>($"PMA.SignalTower");        }        protected override void SetOn()        {            SetLight(TowerLightStatus.On);            //_SignalTower.SetLight();        }        protected override void SetOff()        {            SetLight(TowerLightStatus.Off);        }        protected override void SetBlinking(bool token)        {            SetLight(TowerLightStatus.Blinking);        }        private bool SetSignalLight(MECF.Framework.Common.Device.Bases.LightType type, TowerLightStatus setpoint)        {            Venus_RT.LightType venusType;            switch (type)            {                case MECF.Framework.Common.Device.Bases.LightType.Red:                    venusType = LightType.RED;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Yellow:                    venusType = LightType.YELLOW;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Green:                    venusType = LightType.GREEN;                    break;                case MECF.Framework.Common.Device.Bases.LightType.White:                    venusType = LightType.WHITE;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Blue:                    venusType = LightType.BLUE;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Buzzer:                case MECF.Framework.Common.Device.Bases.LightType.Buzzer1:                    venusType = LightType.BUZZER1;                    break;                default:                    venusType = LightType.BUZZER1;                    break;            }            Venus_RT.LightStatus venusSetpoint;            LightState lightState;            switch (setpoint)            {                case TowerLightStatus.Blinking:                    venusSetpoint = LightStatus.BLINK;                    lightState = LightState.Blink;                    break;                case TowerLightStatus.On:                    venusSetpoint = LightStatus.ON;                    lightState = LightState.On;                    break;                case TowerLightStatus.Off:                    venusSetpoint = LightStatus.OFF;                    lightState = LightState.Off;                    break;                default:                    venusSetpoint = LightStatus.OFF;                    lightState = LightState.Off;                    break;            }            //EfemController?.SetLamp(venusType, venusSetpoint);            //_SignalTower.SetLight(venusType, lightState);            return true;        }        private void SetLight(TowerLightStatus setpoint)        {            try            {                if (setpoint != _preState || _isInit)                {                    _trigError.CLK = SetSignalLight(Type, setpoint);                    if (_trigError.Q)                    {                        //EV.PostWarningLog(Module, $"Set {Type} signal light {setpoint} error, {reason}");                    }                    if (_trigError.M)                    {                        _isInit = false;                        _preState = setpoint;                    }                }            }            catch (Exception ex)            {                LOG.WriteExeption(ex);            }        }        public void ResetData()        {            _isInit = true;        }        public override void Reset()        {            _trigError.RST = true;            base.Reset();        }    }    public class VenusSignalTower : SignalTowerBase    {        //private Efem _efem;        private List<VenusSignalLight> _lights = new List<VenusSignalLight>();        public VenusSignalTower(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)            //{            //    _efem = Singleton<RouteManager>.Instance.EFEM.EfemDevice;            //}            CustomSignalTower();            return true;        }        //重新连接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 VenusSignalLight(ModuleName.System.ToString(), $"SignalLight{type}")            { Type = type};            _lights.Add(light);            return light;        }    }}
 |