123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- using Aitex.Core.RT.DataCenter;
- using Aitex.Core.RT.Device;
- using Aitex.Core.RT.Event;
- using Aitex.Core.RT.IOCore;
- using Aitex.Core.RT.SCCore;
- using MECF.Framework.Common.Device.Bases;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.SubstrateTrackings;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml;
- namespace FurnaceRT.Equipments.Systems
- {
- public class IoSmif: SMIFBase
- {
- public IoSmif(string module, XmlElement node, string ioModule = "")
- {
- base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");
- base.Name = node.GetAttribute("id");
- base.Display = node.GetAttribute("display");
- base.DeviceID = node.GetAttribute("schematicId");
- _diPodLockPosition = ParseDiNode("diPodLockPosition", node, ioModule);
- _diPodUnlockPosition = ParseDiNode("diPodUnlockPosition", node, ioModule);
- _diPodOpenPosition = ParseDiNode("diPodOpenPosition", node, ioModule);
- _diPodClosePosition = ParseDiNode("diPodClosePosition", node, ioModule);
- _diPodPresence = ParseDiNode("diPodPresence", node, ioModule);
- _diZAxisUnloadPosition = ParseDiNode("diZAxisUnloadPosition", node, ioModule);
- _diZAxisLoadPosition = ParseDiNode("diZAxisLoadPosition", node, ioModule);
- _diZAxisPosition1 = ParseDiNode("diZAxisPosition1", node, ioModule);
- _diZAxisPosition2 = ParseDiNode("diZAxisPosition2", node, ioModule);
- _diRotateAxisCheck1 = ParseDiNode("diRotateAxisCheck1", node, ioModule);
- _diRotateAxisCheck2 = ParseDiNode("diRotateAxisCheck2", node, ioModule);
- _diSlideAxisExtend = ParseDiNode("diSlideAxisExtend", node, ioModule);
- _diSlideAxisRetract = ParseDiNode("diSlideAxisRetract", node, ioModule);
- _diProtrudedWafer = ParseDiNode("diProtrudedWafer", node, ioModule);
- _diMapping = ParseDiNode("diMapping", node, ioModule);
- _diFfuOK = ParseDiNode("diFfuOK", node, ioModule);
- _diPodLockValveFB = ParseDiNode("diPodLockValveFB", node, ioModule);
- _diPodUnlockValveFB = ParseDiNode("diPodUnlockValveFB", node, ioModule);
- _diPodOpenVavleFB = ParseDiNode("diPodOpenVavleFB", node, ioModule);
- _diPodCloseVavleFB = ParseDiNode("diPodCloseVavleFB", node, ioModule);
- _diRotateArmValve1FB = ParseDiNode("diRotateArmValve1FB", node, ioModule);
- _diRotateArmValve2FB = ParseDiNode("diRotateArmValve2FB", node, ioModule);
- _diSlideArmValve1FB = ParseDiNode("diSlideArmValve1FB", node, ioModule);
- _diSlideArmValve2FB = ParseDiNode("diSlideArmValve2FB", node, ioModule);
- _diSmifCassettePresence = ParseDiNode("diSmifCassettePresence", node, ioModule);
- _diSmifReady = ParseDiNode("diSmifReady", node, ioModule);
- _diSmifHomed = ParseDiNode("diSmifHomed", node, ioModule);
- _diRobotNotExtendToSmif = ParseDiNode("diRobotNotExtendToSmif", node, ioModule);
-
- _doPodLockValve = ParseDoNode("doPodLockValve", node, ioModule);
- _doPodUnlockValve = ParseDoNode("doPodUnlockValve", node, ioModule);
- _doPodOpenVavle = ParseDoNode("doPodOpenVavle", node, ioModule);
- _doPodCloseVavle = ParseDoNode("doPodCloseVavle", node, ioModule);
- _doRotateArmValve1 = ParseDoNode("doRotateArmValve1", node, ioModule);
- _doRotateArmValve2 = ParseDoNode("doRotateArmValve2", node, ioModule);
- _doSlideArmValve1 = ParseDoNode("doSlideArmValve1", node, ioModule);
- _doSlideArmValve2 = ParseDoNode("doSlideArmValve2", node, ioModule);
- _doZAxisBK = ParseDoNode("doZAxisBK", node, ioModule);
- _doLoadSmif = ParseDoNode("doLoadSmif", node, ioModule);
- _doUnloadSmif = ParseDoNode("doUnloadSmif", node, ioModule);
- _doInitSmif = ParseDoNode("doInitSmif", node, ioModule);
- _doStopSmif = ParseDoNode("doStopSmif", node, ioModule);
- }
- #region fields
- private DIAccessor _diPodLockPosition;
- private DIAccessor _diPodUnlockPosition;
- private DIAccessor _diPodOpenPosition;
- private DIAccessor _diPodClosePosition;
- private DIAccessor _diPodPresence;
- private DIAccessor _diZAxisUnloadPosition;
- private DIAccessor _diZAxisLoadPosition;
- private DIAccessor _diZAxisPosition1;
- private DIAccessor _diZAxisPosition2;
- private DIAccessor _diRotateAxisCheck1;
- private DIAccessor _diRotateAxisCheck2;
- private DIAccessor _diSlideAxisExtend;
- private DIAccessor _diSlideAxisRetract;
- private DIAccessor _diProtrudedWafer;
- private DIAccessor _diMapping;
- private DIAccessor _diFfuOK;
- private DIAccessor _diPodLockValveFB;
- private DIAccessor _diPodUnlockValveFB;
- private DIAccessor _diPodOpenVavleFB;
- private DIAccessor _diPodCloseVavleFB;
- private DIAccessor _diRotateArmValve1FB;
- private DIAccessor _diRotateArmValve2FB;
- private DIAccessor _diSlideArmValve1FB;
- private DIAccessor _diSlideArmValve2FB;
- private DIAccessor _diSmifCassettePresence;
- private DIAccessor _diSmifReady;
- private DIAccessor _diSmifHomed;
- private DIAccessor _diRobotNotExtendToSmif;
- private DOAccessor _doPodLockValve;
- private DOAccessor _doPodUnlockValve;
- private DOAccessor _doPodOpenVavle;
- private DOAccessor _doPodCloseVavle;
- private DOAccessor _doRotateArmValve1;
- private DOAccessor _doRotateArmValve2;
- private DOAccessor _doSlideArmValve1;
- private DOAccessor _doSlideArmValve2;
- private DOAccessor _doZAxisBK;
- private DOAccessor _doLoadSmif;
- private DOAccessor _doUnloadSmif;
- private DOAccessor _doInitSmif;
- private DOAccessor _doStopSmif;
-
- #endregion
- #region properties
- //public override bool IsPodPresent => _diPodPresence.Value && _diSmifCassettePresence.Value && !_diProtrudedWafer.Value;
- public override bool IsPodPresent => _diPodPresence.Value;
- public override bool IsIdle => _diSmifReady.Value;
- public override bool IsHomed => _diSmifHomed.Value;
- public string CurrentLotId { get; set; }
- public List<string> WaitLotId { get; set; }
- public bool IsRobotNotExtendTo => _diRobotNotExtendToSmif.Value;
- public override bool IsLoaded => _diZAxisLoadPosition.Value && _diSlideAxisExtend.Value;
- public override bool IsUnloaded => _diZAxisUnloadPosition.Value && _diSlideAxisRetract.Value;
- public override bool IsExtend => _diSlideAxisExtend.Value;
- public override bool IsRetract => _diSlideAxisRetract.Value;
- #endregion
- public override bool Initialize()
- {
- CarrierManager.Instance.SubscribeLocation(Name, 1, SC.GetValue<int>("System.CassetteSlotCount"));
- WaferManager.Instance.SubscribeLocation(Name, SC.GetValue<int>("System.CassetteSlotCount"));
- //CarrierManager.Instance.CreateCarrier(Name);
- //DATA.Subscribe($"{Name}.CurrentLotId", () => CurrentLotId);
- //DATA.Subscribe($"{Name}.WaitLotId", () => WaitLotId);
- MappingResult = new List<string>();
- return true;
- }
- public override void Monitor()
- {
- base.Monitor();
- }
- public override void Reset()
- {
- base.Reset();
- }
- public override void Terminate()
- {
- base.Terminate();
- }
- public override bool HomeSmif(out string reason)
- {
- reason = string.Empty;
- if(!IsIdle)
- {
- reason = $"{Name} is busy";
- return false;
- }
- _doInitSmif.SetPulseValue(true, 2000);
- return true;
- }
- public override bool LoadCassette(out string reason)
- {
- reason = string.Empty;
- //if (!IsIdle)
- //{
- // reason = $"{Name} is busy";
- // return false;
- //}
- _doLoadSmif.SetPulseValue(true, 2000);
- return true;
- }
- public override bool UnloadCassette(out string reason)
- {
- reason = string.Empty;
- //if (!IsIdle)
- //{
- // reason = $"{Name} is busy";
- // return false;
- //}
- _doUnloadSmif.SetPulseValue(true, 2000);
- return true;
- }
- public override void Stop()
- {
- _doUnloadSmif.SetValue(false, out _);
- _doInitSmif.SetValue(false, out _);
- _doLoadSmif.SetValue(false, out _);
- _doStopSmif.SetPulseValue(true, 2000);
- return;
- }
- public void DeleteCarrier()
- {
- ModuleName chamber = ModuleHelper.Converter(Name);
- if (CarrierManager.Instance.HasCarrier(chamber.ToString()))
- {
- CarrierManager.Instance.DeleteCarrier(chamber.ToString());
- EV.PostInfoLog(Name, $"Carrier deleted from {chamber}");
- var wafers = WaferManager.Instance.GetWafers(chamber);
- for (int i = 0; i < wafers.Length; i++)
- {
- if (!wafers[i].IsEmpty)
- WaferManager.Instance.DeleteWafer(chamber, i);
- }
- }
- else
- {
- EV.PostInfoLog(Name, string.Format("No carrier at {0}, delete not valid", chamber.ToString()));
- }
- }
- }
- }
|