WaferRobotModuleDevice.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using Aitex.Core.RT.DataCenter;
  5. using Aitex.Core.RT.Device;
  6. using Aitex.Core.RT.Device.Unit;
  7. using Aitex.Core.RT.Event;
  8. using Aitex.Core.RT.Fsm;
  9. using Aitex.Core.RT.OperationCenter;
  10. using Aitex.Core.RT.Routine;
  11. using Aitex.Core.RT.SCCore;
  12. using Aitex.Core.Util;
  13. using Aitex.Core.Utilities;
  14. using Aitex.Sorter.Common;
  15. using MECF.Framework.Common.Alarms;
  16. using MECF.Framework.Common.Equipment;
  17. using MECF.Framework.Common.Event;
  18. using MECF.Framework.Common.Schedulers;
  19. using MECF.Framework.Common.SubstrateTrackings;
  20. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
  21. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot;
  22. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
  23. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
  24. namespace FurnaceRT.Equipments.WaferRobots
  25. {
  26. public partial class WaferRobotModule
  27. {
  28. public RobotBaseDevice WaferRobotDevice { get; set; }
  29. private List<AlarmEventItem> _triggeredAlarmList = new List<AlarmEventItem>();
  30. private int _alarmNumber;
  31. public IoAlarmSignal AlarmSignaRobotTPStatusWarning { get; set; }
  32. private IoTrigger _trigAlarmReset;
  33. private IoAlarmSignal _alarmSignaRobotAlarm;
  34. private R_TRIG _alarmSignaRobotAlarmTrig = new R_TRIG();
  35. public void InitDevice()
  36. {
  37. WaferRobotDevice = DEVICE.GetDevice<RobotBaseDevice>($"{ModuleName.WaferRobot}");
  38. AlarmSignaRobotTPStatusWarning = DEVICE.GetDevice<IoAlarmSignal>($"PM1.AlarmSignaWaferRobotTPStatusWarning");
  39. _alarmSignaRobotAlarm = DEVICE.GetDevice<IoAlarmSignal>($"PM1.AlarmSignaWaferRobotAlarm");
  40. _trigAlarmReset = DEVICE.GetDevice<IoTrigger>($"PM1.TrigWaferRobotAlarmReset");
  41. WaferManager.Instance.SubscribeLocation($"{ModuleName.WaferRobot}", 5);
  42. this.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;
  43. WaferRobotDevice.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;
  44. }
  45. public void OnModuleDeviceAlarmStateChanged(string deviceId, AlarmEventItem alarmItem)
  46. {
  47. if (alarmItem.IsTriggered)
  48. {
  49. EventLevel level = alarmItem.Level;
  50. _triggeredAlarmList.Add(alarmItem);
  51. if (level == EventLevel.Alarm)
  52. {
  53. try
  54. {
  55. EV.PostAlarmLog(Module, alarmItem);
  56. }
  57. catch (Exception ex)
  58. {
  59. EV.WriteEvent(ex.Message.ToString());
  60. }
  61. int count = 0;
  62. var alarms = EV.GetAlarmEvent();
  63. foreach (var alarm in alarms)
  64. {
  65. if (alarm.Level == EventLevel.Alarm && alarm.Source == Name)
  66. count++;
  67. }
  68. if (_alarmNumber != count && count != 0)
  69. {
  70. PostMsg(MSG.Error);
  71. }
  72. _alarmNumber = count;
  73. }
  74. else
  75. {
  76. EV.PostWarningLog(Module, alarmItem);
  77. }
  78. }
  79. else
  80. {
  81. }
  82. }
  83. public void SetCassetteRobotReset()
  84. {
  85. WaferRobotDevice.RobotReset();
  86. }
  87. public bool SetWaferRobotHome(out string reason)
  88. {
  89. reason = string.Empty;
  90. return WaferRobotDevice.HomeModule(null);
  91. }
  92. public bool SetSpeed(int speed, out string reason)
  93. {
  94. reason = string.Empty;
  95. return WaferRobotDevice.SetSpeed("SetSpeed", speed);
  96. }
  97. public bool RequestWaferPresent(Hand hand, out string reason)
  98. {
  99. reason = string.Empty;
  100. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Blade2;
  101. List<object> paras = new List<object>() { "CurrentStatus", arm };
  102. return WaferRobotDevice.ReadParameter(paras.ToArray());
  103. }
  104. public bool RobotPick(ModuleName target, int targetSlot, Hand hand, out string reason)
  105. {
  106. reason = string.Empty;
  107. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Both;
  108. return WaferRobotDevice.Pick(arm, target.ToString(), targetSlot);
  109. }
  110. public bool RobotPlace(ModuleName target, int targetSlot, Hand hand, out string reason)
  111. {
  112. reason = string.Empty;
  113. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Both;
  114. return WaferRobotDevice.Place(arm, target.ToString(), targetSlot);
  115. }
  116. public bool RobotMap(ModuleName target, Hand hand, out string reason)
  117. {
  118. reason = string.Empty;
  119. return WaferRobotDevice.WaferMapping(target, out reason);
  120. }
  121. public void Stop()
  122. {
  123. WaferRobotDevice.Stop();
  124. }
  125. }
  126. }