/// <summary> /// 처음 시작할 때 EFME에 전부 로딩 (기타 위치에 있는 데이터 언로딩) /// 자재를 수동으로 먼저 뺀 후 부르는게 좋다 /// 쓰레드가 접근 중인 런 상태에서는 부르면 안됨 /// </summary> /// <param name="nMaxSlot"></param> public void Init(int nMaxSlot) { for (int nSlot = 0; nSlot < MCDF.MAX_SLOT_COUNT; nSlot++) { if (nSlot < nMaxSlot) { carrierArray1[nSlot] = new WaferData(EFEM_TYPE.A_CARRIER, WaferType.CARRIER, nSlot); deviceArray1[nSlot] = new WaferData(EFEM_TYPE.C_DEVICE, WaferType.DEVICE, nSlot); carrierArray2[nSlot] = new WaferData(EFEM_TYPE.B_CARRIER, WaferType.CARRIER, nSlot); deviceArray2[nSlot] = new WaferData(EFEM_TYPE.D_DEVICE, WaferType.DEVICE, nSlot); } else { carrierArray1[nSlot] = null; deviceArray1[nSlot] = null; carrierArray2[nSlot] = null; deviceArray2[nSlot] = null; } } aligner = null; lami[0] = null; lami[1] = null; bonder = null; hp = null; for (int nSlot = 0; nSlot < MCDF.MAX_ARM_COUNT; nSlot++) { robotFM[nSlot] = null; robotATM[nSlot] = null; robotVTM[nSlot] = null; } for (int nSlot = 0; nSlot < MCDF.MAX_SLOT_CP; nSlot++) { CP[nSlot] = null; } for (int nSlot = 0; nSlot < MCDF.MAX_SLOT_LOADLOCK; nSlot++) { loadlock[nSlot] = null; } //TactTime Check용 Stopwatch 생성 for (int i = 0; i < (int)UNIT.MAX; i++) { stopWatch[i] = new Stopwatch(); } Save(); }
/// <summary> /// Bonder에서 VTM으로 이동 /// </summary> /// <returns></returns> public bool LoadingBonderToVtm(HAND arm) { if (bonder == null || robotVTM[(int)arm] != null) { return(false); } robotVTM[(int)arm] = bonder; bonder = null; Save(); return(true); }
///// <summary> ///// Loadlock에서 VTM으로 이동 ///// </summary> ///// <param name="nSlot">Loadlock 슬롯</param> ///// <returns></returns> //public bool LoadingLoadLockToVtm(int nSlot, HAND arm) //{ // if (loadlock[nSlot] == null || robotVTM[(int)arm] != null) // return false; // robotVTM[(int)arm] = loadlock[nSlot]; // loadlock[nSlot] = null; // Save(); // return true; //} ///// <summary> ///// Loadlock에서 VTM으로 이동 ///// </summary> ///// <param name="wType">로드락 슬롯</param> ///// <returns></returns> //public bool LoadingLoadLockToVtm(WaferType wType, HAND arm) //{ // int nSlot = GetLoadlockSlot(wType); // if (loadlock[nSlot] == null || robotVTM[(int)arm] != null) // return false; // robotVTM[(int)arm] = loadlock[nSlot]; // loadlock[nSlot] = null; // Save(); // return true; //} /// <summary> /// VTM에서 Bonder로 이동 /// </summary> /// <returns></returns> public bool LoadingVtmToBonder(HAND arm) { if (robotVTM[(int)arm] == null || bonder != null) { return(false); } bonder = robotVTM[(int)arm]; robotVTM[(int)arm] = null; Save(); return(true); }
/// <summary> /// Aligner에서 ATM으로 이동 /// </summary> /// <returns></returns> public bool LoadingAlignerToAtm(HAND arm) { if (aligner == null || robotATM[(int)arm] != null) { return(false); } robotATM[(int)arm] = aligner; aligner = null; Save(); return(true); }
/// <summary> /// FM Robot에서 Aligner로 이동 /// </summary> /// <returns></returns> public bool LoadingFmToAligner(HAND arm) { if (robotFM[(int)arm] == null || aligner != null) { return(false); } aligner = robotFM[(int)arm]; robotFM[(int)arm] = null; Save(); return(true); }
/// <summary> /// HP에서 VTM으로 이동 /// </summary> /// <returns></returns> public bool LoadingHpToVtm(HAND arm) { if (hp == null || robotVTM[(int)arm] != null) { return(false); } robotVTM[(int)arm] = hp; hp = null; Save(); return(true); }
/// <summary> /// VTM에서 HP로 이동 /// </summary> /// <returns></returns> public bool LoadingVtmToHp(HAND arm) { if (robotVTM[(int)arm] == null || hp != null) { return(false); } hp = robotVTM[(int)arm]; robotVTM[(int)arm] = null; Save(); return(true); }