using System; using System.Collections.Generic; using System.Diagnostics; using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.Device; using Aitex.Core.RT.Device.Unit; using Aitex.Core.RT.Event; using Aitex.Core.RT.Fsm; using Aitex.Core.RT.OperationCenter; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using Aitex.Core.Utilities; using Aitex.Sorter.Common; using MECF.Framework.Common.Alarms; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Event; using MECF.Framework.Common.Schedulers; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot; namespace FurnaceRT.Equipments.Stockers { public partial class StockerModule { #region fields private IoSensor _diStationCassettePresent; private IoTrigger _foupPurge; private int _alarmNumber; #endregion private List _triggeredAlarmList = new List(); public void InitDevice() { _diStationCassettePresent = DEVICE.GetDevice($"PM1.Sensor{Module}"); _foupPurge = DEVICE.GetDevice($"PM1.TrigStockerPurge{Module}"); this.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged; } 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 { } } private void SetDisplayName() { if (!SC.ContainsItem($"System.Stocker.{Module}WaferType")) return; var type = SC.GetStringValue($"System.Stocker.{Module}WaferType"); if (type.Contains("P")) type = "P"; else if (type.Contains("M")) type = "M"; else if (type.Contains("SD")) type = "SD"; else if (type.Contains("ED")) type = "ED"; int display = 0; for(int i = 1; i < 30; i++) { if (!SC.ContainsItem($"System.Stocker.Stocker{i}WaferType")) continue; if (SC.GetStringValue($"System.Stocker.Stocker{i}WaferType").Contains(type)) display++; if (Module == $"Stocker{i}") break; } SC.SetItemValue($"System.StockerDisplayName.{Module}", $"{display}"); } public override void Monitor() { if(_foupPurge != null && _diStationCassettePresent != null && _foupPurge.Value != _diStationCassettePresent.Value) { _foupPurge.SetTrigger(_diStationCassettePresent.Value, out _); } } } }