| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 | using Aitex.Core.RT.Log;using Aitex.Core.Util;using MECF.Framework.Common.Device.Bases;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;using System.Runtime.InteropServices;using MECF.Framework.Common.Beckhoff.ModuleIO;using static Mono.Security.X509.X520;namespace CyberX8_RT.Devices.SignalLight{    public class SunWaySignalLight : SignalLightBase    {        #region 常量         private const string LIGHTER_TOWER = "LightTower";        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        public MECF.Framework.Common.Device.Bases.LightType Type { get; set; }        private F_TRIG _trigError = new F_TRIG();        private bool _isInit;        private TowerLightStatus _preState = TowerLightStatus.Unknown;        //IoSignalTower _SignalTower;        public SunWaySignalLight(string module, string name, EfemBase _efem) : base(module, name)        {            _isInit = true;            //EfemController = _efem;        }        protected override void SetOn()        {            SetLight(TowerLightStatus.On);        }        protected override void SetOff()        {            SetLight(TowerLightStatus.Off);        }        protected override void SetBlinking(bool token)        {            SetLight(token?TowerLightStatus.On:TowerLightStatus.Off);        }        private bool SetSignalLight(MECF.Framework.Common.Device.Bases.LightType type, TowerLightStatus setpoint)        {            LightType lightType;            switch (type)            {                case MECF.Framework.Common.Device.Bases.LightType.Red:                    lightType = LightType.RED;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Yellow:                    lightType = LightType.YELLOW;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Green:                    lightType = LightType.GREEN;                    break;                case MECF.Framework.Common.Device.Bases.LightType.White:                    lightType = LightType.WHITE;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Blue:                    lightType = LightType.BLUE;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Buzzer:                case MECF.Framework.Common.Device.Bases.LightType.Buzzer1:                    lightType = LightType.BUZZER1;                    break;                default:                    lightType = LightType.BUZZER1;                    break;            }            LightStatus lightSetpoint;            switch (setpoint)            {                case TowerLightStatus.Blinking:                    lightSetpoint = LightStatus.BLINK;                    //lightState = LightState.Blink;                    break;                case TowerLightStatus.On:                    lightSetpoint = LightStatus.ON;                    break;                case TowerLightStatus.Off:                    lightSetpoint = LightStatus.OFF;                    break;                default:                    lightSetpoint = LightStatus.OFF;                    break;            }            bool lightValue=lightSetpoint==LightStatus.ON?true:false;            string ioLight = GetIOLight(lightType);            string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName(ioLight);            if (!string.IsNullOrEmpty(ioName))            {                return IOModuleManager.Instance.WriteIoValue(ioName, lightValue);            }            return false;        }        private string GetIOLight(LightType lightType)        {            switch (lightType)            {                case LightType.RED:                    return $"{LIGHTER_TOWER}.{RED_LIGHT}";                case LightType.GREEN:                    return $"{LIGHTER_TOWER}.{GREEN_LIGHT}";                case LightType.BLUE:                    return $"{LIGHTER_TOWER}.{BLUE_LIGHT}";                case LightType.YELLOW:                    return $"{LIGHTER_TOWER}.{YELLOW_LIGHT}";                case LightType.BUZZER1:                    return $"{LIGHTER_TOWER}.{BUZZER}";                default:                    return $"{LIGHTER_TOWER}.{BUZZER}";            }        }        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();        }    }}
 |