CarrierRobotModuleDevice.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using Aitex.Core.Common;
  5. using Aitex.Core.RT.DataCenter;
  6. using Aitex.Core.RT.Device;
  7. using Aitex.Core.RT.Device.Unit;
  8. using Aitex.Core.RT.Event;
  9. using Aitex.Core.RT.Fsm;
  10. using Aitex.Core.RT.OperationCenter;
  11. using Aitex.Core.RT.Routine;
  12. using Aitex.Core.RT.SCCore;
  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. using FurnaceRT.Equipments.Systems;
  25. using FurnaceRT.Devices;
  26. using IoDoor = FurnaceRT.Devices.IoDoor;
  27. using Aitex.Core.Util;
  28. namespace FurnaceRT.Equipments.CarrierRobots
  29. {
  30. public partial class CarrierRobotModule
  31. {
  32. private List<AlarmEventItem> _triggeredAlarmList = new List<AlarmEventItem>();
  33. private int _alarmNumber;
  34. public RobotBaseDevice CarrierRobotDevice { get; set; }
  35. public IoBufferMotor BufferDevice { get; set; }
  36. private IoTrigger _trigAlarmReset;
  37. private IoAlarmSignal _alarmSignaRobotAlarm;
  38. private R_TRIG _alarmSignaRobotAlarmTrig = new R_TRIG();
  39. public IoDoor DoorDevice { get; set; }
  40. public IoAlarmSignal AlarmSignaFOUPRobotTPStatusWarning { get; set; }
  41. public void InitDevice()
  42. {
  43. CarrierRobotDevice = DEVICE.GetDevice<RobotBaseDevice>($"{Module}");
  44. BufferDevice = DEVICE.GetDevice<IoBufferMotor>($"PM1.BufferServo");
  45. DoorDevice = DEVICE.GetDevice<IoDoor>($"PM1.AGVDoor");
  46. AlarmSignaFOUPRobotTPStatusWarning = DEVICE.GetDevice<IoAlarmSignal>($"PM1.AlarmSignaFOUPRobotTPStatusWarning");
  47. _alarmSignaRobotAlarm = DEVICE.GetDevice<IoAlarmSignal>($"PM1.AlarmSignaFOUPRobotAlarm");
  48. _trigAlarmReset = DEVICE.GetDevice<IoTrigger>($"PM1.TrigFOUPRobotAlarmReset");
  49. CarrierManager.Instance.SubscribeLocation(Module, 1, SC.GetValue<int>("System.CassetteSlotCount"));
  50. WaferManager.Instance.SubscribeLocation(Module, SC.GetValue<int>("System.CassetteSlotCount"));
  51. this.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;
  52. CarrierRobotDevice.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;
  53. }
  54. public void OnModuleDeviceAlarmStateChanged(string deviceId, AlarmEventItem alarmItem)
  55. {
  56. if (alarmItem.IsTriggered)
  57. {
  58. EventLevel level = alarmItem.Level;
  59. _triggeredAlarmList.Add(alarmItem);
  60. if (level == EventLevel.Alarm)
  61. {
  62. try
  63. {
  64. EV.PostAlarmLog(Module, alarmItem);
  65. }
  66. catch (Exception ex)
  67. {
  68. EV.WriteEvent(ex.Message.ToString());
  69. }
  70. }
  71. else
  72. {
  73. EV.PostWarningLog(Module, alarmItem);
  74. }
  75. }
  76. else
  77. {
  78. }
  79. }
  80. public void SetCassetteRobotReset()
  81. {
  82. CarrierRobotDevice.RobotReset();
  83. }
  84. public bool SetCassetteRobotHome(out string reason)
  85. {
  86. reason = string.Empty;
  87. return CarrierRobotDevice.HomeModule(null);
  88. }
  89. public bool SetSpeed(int speed, out string reason)
  90. {
  91. reason = string.Empty;
  92. return CarrierRobotDevice.SetSpeed("SetSpeed", speed);
  93. }
  94. public bool RequestCassettePresent(Hand hand, out string reason)
  95. {
  96. reason = string.Empty;
  97. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Blade2;
  98. List<object> paras = new List<object>() { "CurrentStatus", arm };
  99. return CarrierRobotDevice.ReadParameter(paras.ToArray());
  100. }
  101. public bool RobotPick(ModuleName target, int targetSlot, Hand hand, out string reason)
  102. {
  103. reason = string.Empty;
  104. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Both;
  105. return CarrierRobotDevice.Pick(arm, target.ToString(), targetSlot);
  106. }
  107. public bool RobotPlace(ModuleName target, int targetSlot, Hand hand, out string reason)
  108. {
  109. reason = string.Empty;
  110. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Both;
  111. return CarrierRobotDevice.Place(arm, target.ToString(), targetSlot);
  112. }
  113. public bool RobotGoto(ModuleName target, int targetSlot, Hand hand, bool isPickReady, out string reason)
  114. {
  115. reason = string.Empty;
  116. RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Blade2;
  117. List<object> paras = new List<object>() { arm, target, targetSlot, isPickReady ? "PickReady" : "PlaceReady" };
  118. return CarrierRobotDevice.GoTo(paras.ToArray());
  119. }
  120. public void Stop()
  121. {
  122. CarrierRobotDevice.Stop();
  123. }
  124. public void SetBufferTargetPosition(string module)
  125. {
  126. int.TryParse(module.Replace("Stocker", ""), out int target);
  127. BufferDevice.SetServoTargetPosition(target);
  128. }
  129. public bool SetBufferMoveTo()
  130. {
  131. return BufferDevice.SetServoMoveTo();
  132. }
  133. public bool CheckBufferTargetPosition(string module)
  134. {
  135. int.TryParse(module.Replace("Stocker", ""), out int target);
  136. return (int)(BufferDevice.ServoMovePositionSet + 0.00001) == target && BufferDevice.TargetPositionFb == target;
  137. }
  138. }
  139. }