| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | using Aitex.Core.RT.Device;using Aitex.Core.RT.Device.Unit;using Aitex.Core.RT.Event;using Aitex.Core.Utilities;using FurnaceRT.Devices;using MECF.Framework.Common.Event;using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using static Aitex.Core.RT.Device.Unit.IoBoat;namespace FurnaceRT.Equipments.Boats{    public partial class BoatModule    {        [Tag("AlarmSignalStepperMotorAlarm")]        public IoAlarmSignal SensorStepperMotorAlarm { get; set; }        private List<AlarmEventItem> _triggeredAlarmList = new List<AlarmEventItem>();        private int _alarmNumber;        public IoShutter ShutterDevice { get; set; }        public IoAPC APCDevice { get; set; }        public IoFurnaceMotor ZAxisDevice { get; set; }        public IoFurnaceMotor RAxisDevice { get; set; }        [Tag("SensorVAC1")]        public IoSensor SensorVAC1 { get; set; }        [Tag("SensorVAC2")]        public IoSensor SensorVAC2 { get; set; }        [Tag("SensorVAC3")]        public IoSensor SensorVAC3 { get; set; }        [Tag("SensorVAC4")]        public IoSensor SensorVAC4 { get; set; }        [Tag("SensorVAC5")]        public IoSensor SensorVAC5 { get; set; }        [Tag("SensorVAC6")]        public IoSensor SensorVAC6 { get; set; }        [Tag("SensorWaferRobotEX1AxisHomePosition")]        public IoSensor SensorWaferRobotEX1AxisHomePosition { get; set; }        [Tag("SensorWaferRobotEX2AxisHomePosition")]        public IoSensor SensorWaferRobotEX2AxisHomePosition { get; set; }        [Tag("SensorPS13LStatus")]        public IoSensor SensorPS13LStatus { get; set; }        [Tag("SensorBoatUnloadInterlock")]        public IoSensor SensorBoatUnloadInterlock { get; set; }        public void InitDevice()        {            Func<object, bool> _isTagAttribute = attribute => attribute is TagAttribute;            Func<MemberInfo, bool> _hasTagAttribute = mi => mi.GetCustomAttributes(false).Any(_isTagAttribute);            var properties = this.GetType().GetProperties().Where(_hasTagAttribute);            foreach (var field in properties)            {                TagAttribute tag = field.GetCustomAttributes(false).First(_isTagAttribute) as TagAttribute;                IDevice device = DEVICE.GetDevice<IDevice>($"{Module}.{tag.Tag}");                if (device == null)                    device = DEVICE.GetDevice<IDevice>($"PM1.{tag.Tag}");                if (device != null)                {                    device.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;                    PropertyInfo pi = (PropertyInfo)field;                    var convertedValue = Convert.ChangeType(device, pi.PropertyType);                    System.Diagnostics.Debug.Assert(convertedValue != null);                    pi.SetValue(this, convertedValue);                }            }            ShutterDevice = DEVICE.GetDevice<IoShutter>($"PM1.Shutter");            this.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;            if (ShutterDevice != null)                ShutterDevice.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;            APCDevice = DEVICE.GetDevice<IoAPC>($"PM1.APC");            ZAxisDevice = DEVICE.GetDevice<IoFurnaceMotor>($"PM1.BoatElevatorServo");            RAxisDevice = DEVICE.GetDevice<IoFurnaceMotor>($"PM1.BoatRotationServo");            System.Diagnostics.Debug.Assert(ZAxisDevice != null);            System.Diagnostics.Debug.Assert(RAxisDevice != null);            System.Diagnostics.Debug.Assert(ShutterDevice != null);            System.Diagnostics.Debug.Assert(SensorVAC1 != null);            System.Diagnostics.Debug.Assert(SensorVAC2 != null);            System.Diagnostics.Debug.Assert(SensorVAC3 != null);            System.Diagnostics.Debug.Assert(SensorPS13LStatus != null);            System.Diagnostics.Debug.Assert(SensorBoatUnloadInterlock != null);        }        public void OnModuleDeviceAlarmStateChanged(string deviceId, AlarmEventItem alarmItem)        {            if (alarmItem.IsTriggered)            {                EventLevel level = alarmItem.Level;                _triggeredAlarmList.Add(alarmItem);                if (level == EventLevel.Alarm)                {                    try                    {                        EV.PostAlarmLog(Module, alarmItem);                    }                    catch (Exception ex)                    {                        EV.WriteEvent(ex.Message.ToString());                    }                }                else                {                    EV.PostWarningLog(Module, alarmItem);                }            }            else            {            }        }        public void SetZAxisSpeed(float speed)        {            //BoatDevice.SetZAxisSpeed(speed);        }        public void SetRAxisSpeed(float speed)        {            //BoatDevice.SetRAxisSpeed(speed);        }        public void SetRAxisIntervalPosition(float position)        {            //BoatDevice.SetRAxisIntervalPosition(position);        }        public void BoatZAxisStop()        {            ZAxisDevice.ServoStop();        }        public void BoatRAxisStop()        {            RAxisDevice.ServoStop();        }        private bool SetBoatZAxisSpeed(out string reason, int time, object[] param)        {            reason = string.Empty;            SetZAxisSpeed(Convert.ToSingle(param[0].ToString()));            return true;        }        private bool SetBoatRAxisSpeed(out string reason, int time, object[] param)        {            reason = string.Empty;            SetRAxisSpeed(Convert.ToSingle(param[0].ToString()));            return true;        }        private bool SetBoatRAxisAngle(out string reason, int time, object[] param)        {            reason = string.Empty;            SetRAxisIntervalPosition(Convert.ToSingle(param[0].ToString()));            return true;        }        private bool SetBoatZAxisStop(out string reason, int time, object[] param)        {            reason = string.Empty;            BoatZAxisStop();            return true;        }        private bool SetBoatRAxisStop(out string reason, int time, object[] param)        {            reason = string.Empty;            BoatRAxisStop();            return true;        }    }}
 |