WaferRobotModuleDevice.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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 IoTrigger TrigActionCommand => _trigActionCommand;
  32. public IoAlarmSignal AlarmSignaRobotTPStatusWarning { get; set; }
  33. private IoTrigger _trigAlarmReset;
  34. private IoTrigger _trigActionCommand;
  35. private IoAlarmSignal _alarmSignaRobotAlarm;
  36. private R_TRIG _alarmSignaRobotAlarmTrig = new R_TRIG();
  37. private Dictionary<string, int> _actionCommand;
  38. public void InitDevice()
  39. {
  40. WaferRobotDevice = DEVICE.GetDevice<RobotBaseDevice>($"{ModuleName.WaferRobot}");
  41. AlarmSignaRobotTPStatusWarning = DEVICE.GetDevice<IoAlarmSignal>($"PM1.AlarmSignaWaferRobotTPStatusWarning");
  42. _alarmSignaRobotAlarm = DEVICE.GetDevice<IoAlarmSignal>($"PM1.AlarmSignaWaferRobotAlarm");
  43. _trigAlarmReset = DEVICE.GetDevice<IoTrigger>($"PM1.TrigWaferRobotAlarmReset");
  44. _trigActionCommand = DEVICE.GetDevice<IoTrigger>($"PM1.TrigWaferRobotActionCommand");
  45. WaferManager.Instance.SubscribeLocation($"{ModuleName.WaferRobot}", 5);
  46. this.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;
  47. WaferRobotDevice.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;
  48. _actionCommand = new Dictionary<string, int>()
  49. {
  50. {"C01.Pick",1 },
  51. {"C01.Place",2 },
  52. {"C02.Pick",3 },
  53. {"C02.Place",4 },
  54. {"C03.Pick",5 },
  55. {"C03.Place",6 },
  56. };
  57. }
  58. public void OnModuleDeviceAlarmStateChanged(string deviceId, AlarmEventItem alarmItem)
  59. {
  60. if (alarmItem.IsTriggered)
  61. {
  62. EventLevel level = alarmItem.Level;
  63. _triggeredAlarmList.Add(alarmItem);
  64. if (level == EventLevel.Alarm)
  65. {
  66. try
  67. {
  68. EV.PostAlarmLog(Module, alarmItem);
  69. }
  70. catch (Exception ex)
  71. {
  72. EV.WriteEvent(ex.Message.ToString());
  73. }
  74. int count = 0;
  75. var alarms = EV.GetAlarmEvent();
  76. foreach (var alarm in alarms)
  77. {
  78. if (alarm.Level == EventLevel.Alarm && alarm.Source == Name)
  79. count++;
  80. }
  81. if (_alarmNumber != count && count != 0)
  82. {
  83. PostMsg(MSG.Error);
  84. }
  85. _alarmNumber = count;
  86. }
  87. else
  88. {
  89. EV.PostWarningLog(Module, alarmItem);
  90. }
  91. }
  92. else
  93. {
  94. }
  95. }
  96. public void SetCassetteRobotReset()
  97. {
  98. WaferRobotDevice.RobotReset();
  99. }
  100. public bool SetWaferRobotHome(out string reason)
  101. {
  102. reason = string.Empty;
  103. return WaferRobotDevice.HomeModule(null);
  104. }
  105. public bool SetSpeed(int speed, out string reason)
  106. {
  107. reason = string.Empty;
  108. return WaferRobotDevice.SetSpeed("SetSpeed", speed);
  109. }
  110. public bool RequestWaferPresent(Hand hand, out string reason)
  111. {
  112. reason = string.Empty;
  113. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Blade2;
  114. List<object> paras = new List<object>() { "CurrentStatus", arm };
  115. return WaferRobotDevice.ReadParameter(paras.ToArray());
  116. }
  117. public bool RobotPick(ModuleName target, int targetSlot, Hand hand, out string reason)
  118. {
  119. reason = string.Empty;
  120. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Both;
  121. return WaferRobotDevice.Pick(arm, target.ToString(), targetSlot);
  122. }
  123. public bool RobotPlace(ModuleName target, int targetSlot, Hand hand, out string reason)
  124. {
  125. reason = string.Empty;
  126. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Both;
  127. return WaferRobotDevice.Place(arm, target.ToString(), targetSlot);
  128. }
  129. public bool RobotMap(ModuleName target, Hand hand, out string reason)
  130. {
  131. reason = string.Empty;
  132. return WaferRobotDevice.WaferMapping(target, out reason);
  133. }
  134. public void Stop()
  135. {
  136. WaferRobotDevice.Stop();
  137. }
  138. public void SetRobotActionCommand(ModuleName traget, EnumTransferType transferType)
  139. {
  140. if (!WaferRobotDevice.ModuleAssociateStationDic.ContainsKey(traget.ToString()))
  141. return;
  142. var station = WaferRobotDevice.ModuleAssociateStationDic[traget.ToString()];
  143. if (!_actionCommand.ContainsKey($"{station}.{transferType}"))
  144. return;
  145. _trigActionCommand.SetAOTrigger(_actionCommand[$"{station}.{transferType}"], out _);
  146. }
  147. public bool CheckRobotActionCommand(ModuleName traget, EnumTransferType transferType)
  148. {
  149. if (!WaferRobotDevice.ModuleAssociateStationDic.ContainsKey(traget.ToString()))
  150. return false;
  151. var station = WaferRobotDevice.ModuleAssociateStationDic[traget.ToString()];
  152. if (!_actionCommand.ContainsKey($"{station}.{transferType}"))
  153. return false;
  154. return Math.Abs(_trigActionCommand.AIValue - _actionCommand[$"{station}.{transferType}"]) < 0.001;
  155. }
  156. public void ResetRobotActionCommand()
  157. {
  158. _trigActionCommand?.SetAOTrigger(0, out _);
  159. }
  160. }
  161. }