Beispiel #1
0
        /// <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();
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        ///// <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);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        /// <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);
        }