예제 #1
0
        /// <summary>
        /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다.
        /// </summary>
        /// <param name="msgTran">Primary Message의 Transaction</param>
        public void funPrimaryReceive(Transaction msgTran)
        {
            int    dintAck3                = (int)LOTInfoValidation.Accepted;
            int    dintLOTIndex            = 0;
            string dstrHostGLSMapping10    = "";
            string dstrProcessGLSMapping10 = "";
            string dstrGLSLoaderMapping10  = "";
            string dstrPortModuleID        = "";
            int    dintPortID              = 0;
            int    dintSlotID              = 0;
            int    dintPortType            = 0;
            string dstrHPanelID            = "";
            string dstrHOSTPPID            = "";
            string dstrProductType         = "";
            string dstrCSTID               = "";
            int    dintCSTType             = 0;
            string dstrMapStif             = "";
            string dstrCurStif             = "";
            int    dintOrder               = 0;
            string SlotArray               = "";
            string strGLSID                = "";

            //subSetLog(InfoAct.clsInfo.LogType.ReceivedPrimaryMessage, "funPrimaryReceive() S" + msgTran.Primary().Stream + "F" + msgTran.Primary().Function + "Start");   // 수신메시지추적 [6/3/2013 Hojun])

            int dintUnitID    = 0;
            int dintSubUnitID = 0;

            try
            {
                dstrPortModuleID = msgTran.Primary().Item("PORTID").Getvalue().ToString();
                for (int dintLoop = 0; dintLoop < 6; dintLoop++)
                {
                    if (pInfo.Port(dintLoop + 1).HostReportPortID == dstrPortModuleID)
                    {
                        dintPortID = dintLoop + 1;
                        switch (dintLoop + 1)
                        {
                        case 1:
                            dintUnitID    = 1;
                            dintSubUnitID = 1;
                            break;

                        case 2:
                            dintUnitID    = 1;
                            dintSubUnitID = 2;
                            break;

                        case 3:
                            dintUnitID    = 1;
                            dintSubUnitID = 3;
                            break;

                        case 4:
                            dintUnitID    = 1;
                            dintSubUnitID = 4;
                            break;

                        case 5:
                            dintUnitID    = 2;
                            dintSubUnitID = 1;
                            break;

                        case 6:
                            dintUnitID    = 2;
                            dintSubUnitID = 2;
                            break;
                        }
                        break;
                    }
                }


                dstrCSTID    = msgTran.Primary().Item("CSTID").Getvalue().ToString();
                dintPortType = Convert.ToInt32(msgTran.Primary().Item("PORT_TYPE").Getvalue());

                if (dintPortID == 0 || dintPortID > 6)
                {
                    dintAck3 = (int)LOTInfoValidation.ParameterError;
                }
                else
                {
                    if (pInfo.Port(dintPortID).S3F115Received)
                    {
                        dintAck3 = (int)LOTInfoValidation.AlreadyReceived;
                    }
                    else if (0 != dintPortType)
                    {
                        dintAck3 = (int)LOTInfoValidation.ParameterError;
                    }
                }



                if (dintAck3 == 0)
                {
                    //if (dintPortType == 0)
                    //{
                    //    dintAck3 = (int)LOTInfoValidation.ParameterError;
                    //}
                    //else
                    if (pInfo.Port(dintPortID).PortState == "4")
                    {
                        dintAck3 = (int)LOTInfoValidation.Busy;
                    }
                    else if ((pInfo.Port(dintPortID).PortState == "0") || (string.IsNullOrEmpty(pInfo.Port(dintPortID).CSTID)))
                    {
                        if (dintPortID == 2)
                        {
                            dintAck3 = (int)LOTInfoValidation.NoCST;
                        }
                    }
                    else if (pInfo.Port(dintPortID).PortState != "2")
                    {
                        dintAck3 = (int)LOTInfoValidation.PortStateNotWaiting;
                    }
                    else if (string.IsNullOrEmpty(pInfo.Port(dintPortID).CSTID) == false)
                    {
                        if (pInfo.Port(dintPortID).CSTID != dstrCSTID.Trim())
                        {
                            dintAck3 = (int)LOTInfoValidation.CSTIDMismatch;
                        }
                        else
                        {
                            //[2015/05/20]FI01에서도 저장되게 조건식 추가(Add by HS)
                            if (dintUnitID == 1 && dintSubUnitID == 2 || dintUnitID == 1 && dintSubUnitID == 1)
                            {
                                dstrHostGLSMapping10    = FunStringH.funPaddingStringData("0", 56, '0');
                                dstrProcessGLSMapping10 = FunStringH.funPaddingStringData("0", 56, '0');
                                dstrGLSLoaderMapping10  = FunStringH.funPaddingStringData("0", 56, '0');

                                dstrCSTID   = msgTran.Primary().Item("CSTID").Getvalue().ToString();
                                dintCSTType = Convert.ToInt32(msgTran.Primary().Item("CST_TYPE").Getvalue());
                                dstrMapStif = msgTran.Primary().Item("MAP_STIF").Getvalue().ToString();
                                dstrCurStif = msgTran.Primary().Item("CUR_STIF").Getvalue().ToString();

                                int dintGlassCount = Convert.ToInt32(msgTran.Primary().Item("M_COUNT").Getvalue());

                                //pInfo.Port(dintPortID).SlotCount = dintGlassCount;
                                pInfo.Port(dintPortID).GLSHostMapping10         = dstrMapStif;
                                pInfo.Port(dintPortID).GLSLoaderMapping10       = dstrMapStif;
                                pInfo.Port(dintPortID).GLSProcessMapping10_HOST = dstrCurStif;
                                pInfo.Port(dintPortID).GLSRealMapping10         = dstrCurStif;
                                pInfo.Port(dintPortID).CSTType = dintCSTType.ToString();
                                pInfo.Port(dintPortID).arrSlotNo.Clear();
                                //SlotArray += dstrCSTID + ",";
                                for (int dintIndex = 0; dintIndex < dintGlassCount; dintIndex++)
                                {
                                    int.TryParse(msgTran.Primary().Item("USE_COUNT" + dintIndex).Getvalue().ToString(), out dintSlotID);

                                    SlotArray += dintSlotID + ",";
                                    if (pInfo.Port(dintPortID).arrSlotNo.Contains(dintSlotID) == false)
                                    {
                                        pInfo.Port(dintPortID).arrSlotNo.Add(dintSlotID);
                                    }

                                    for (int dintLoop2 = 1; dintLoop2 <= dintSlotID; dintLoop2++)
                                    {
                                        if (pInfo.Port(dintPortID).Slot(dintLoop2) == null)
                                        {
                                            if (pInfo.Port(dintPortID).AddSlot(dintLoop2) == false)
                                            {
                                                pInfo.subLog_Set(clsInfo.LogType.CIM, "Port Slot Add Error!!");
                                                //continue;
                                            }
                                        }
                                    }

                                    clsSlot dpSlot = pInfo.Port(dintPortID).Slot(1);
                                    if (dpSlot == null)
                                    {
                                        pInfo.Port(dintPortID).AddSlot(1);
                                        dpSlot = pInfo.Port(dintPortID).Slot(1);
                                    }


                                    //dpSlot.H_PANELID = msgTran.Primary().Item("H_GLASSID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.GlassID      = msgTran.Primary().Item("MATERIALID" + dintIndex).Getvalue().ToString().Trim();
                                    strGLSID            = dpSlot.GlassID; //150122 고석현
                                    dpSlot.E_PANELID    = msgTran.Primary().Item("M_SETID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.LOTID        = msgTran.Primary().Item("LOTID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.BATCHID      = msgTran.Primary().Item("BATCHID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.JOBID        = msgTran.Primary().Item("JOBID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PORTID       = msgTran.Primary().Item("PORTID1" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.SLOTNO       = msgTran.Primary().Item("SLOTNO" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PRODUCT_TYPE = msgTran.Primary().Item("PROD_TYPE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PRODUCT_KIND = msgTran.Primary().Item("PROD_KIND" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PRODUCTID    = msgTran.Primary().Item("PRODUCTID" + dintIndex).Getvalue().ToString().Trim();
                                    //strGLSID = dpSlot.PRODUCTID; //150122 고석현
                                    dpSlot.RUNSPECID = msgTran.Primary().Item("RUNSPECID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.LAYERID   = msgTran.Primary().Item("LAYERID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.STEPID    = msgTran.Primary().Item("STEPID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.HOSTPPID  = msgTran.Primary().Item("PPID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.FLOWID    = msgTran.Primary().Item("FLOWID" + dintIndex).Getvalue().ToString().Trim();
                                    int[] arrSIZE = { 0, 0 };
                                    arrSIZE = (int[])msgTran.Primary().Item("M_SIZE" + dintIndex).Getvalue();
                                    //dpSlot.SIZE = msgTran.Primary().Item("SIZE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.SIZE1           = arrSIZE[0];
                                    dpSlot.SIZE2           = arrSIZE[1];
                                    dpSlot.THICKNESS       = Convert.ToInt32(msgTran.Primary().Item("M_THICKNESS" + dintIndex).Getvalue().ToString().Trim());
                                    dpSlot.GLASS_STATE     = Convert.ToInt32(msgTran.Primary().Item("M_STATE" + dintIndex).Getvalue().ToString().Trim());
                                    dpSlot.GLASS_ORDER     = msgTran.Primary().Item("M_ORDER" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.COMMENT         = msgTran.Primary().Item("COMMENT" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.USE_COUNT       = msgTran.Primary().Item("USE_COUNT" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.JUDGEMENT       = msgTran.Primary().Item("JUDGEMENT" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.REASON_CODE     = msgTran.Primary().Item("REASON_CODE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.INS_FLAG        = msgTran.Primary().Item("INS_FLAG" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.ENC_FLAG        = msgTran.Primary().Item("LIBRARYID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PRERUN_FLAG     = msgTran.Primary().Item("PRERUN_FLAG" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.TURN_DIR        = msgTran.Primary().Item("TURN_DIR" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.FLIP_STATE      = msgTran.Primary().Item("FLIP_STATE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.WORK_STATE      = msgTran.Primary().Item("WORK_STATE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.MULTI_USE       = msgTran.Primary().Item("MULTI_USE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PAIR_GLASSID    = msgTran.Primary().Item("STAGE_STATE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PAIR_PPID       = msgTran.Primary().Item("LOCATION" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[0]  = msgTran.Primary().Item("OPTION_NAME1" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[0] = msgTran.Primary().Item("OPTION_VALUE1" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[1]  = msgTran.Primary().Item("OPTION_NAME2" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[1] = msgTran.Primary().Item("OPTION_VALUE2" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[2]  = msgTran.Primary().Item("OPTION_NAME3" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[2] = msgTran.Primary().Item("OPTION_VALUE3" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[3]  = msgTran.Primary().Item("OPTION_NAME4" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[3] = msgTran.Primary().Item("OPTION_VALUE4" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[4]  = msgTran.Primary().Item("OPTION_NAME5" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[4] = msgTran.Primary().Item("OPTION_VALUE5" + dintIndex).Getvalue().ToString().Trim();
                                }

                                if (dintAck3 == (int)LOTInfoValidation.Accepted)
                                {
                                    pInfo.Port(dintPortID).HostPPID = dstrHOSTPPID;
                                }
                            }
                        }
                    }
                }

                msgTran.Secondary().Item("ACKC3").Putvalue(dintAck3);
                funSendReply(msgTran);


                //pInfo.subPLCCommand_Set(clsInfo.PLCCommand.LotInfoSet, dintPortID, dintSlotID);

                if (dintAck3 == (int)LOTInfoValidation.Accepted)
                {
                    //[2015/05/20]FI01에서도 저장되게 조건식 추가(Add by HS)
                    if (dintUnitID == 1 && dintSubUnitID == 2 || dintUnitID == 1 && dintSubUnitID == 1)
                    {
                        pInfo.Port(dintPortID).S3F115Received = true;

                        clsSlot dpSlot = pInfo.Port(dintPortID).Slot(1);

                        if (dpSlot != null)
                        {
                            int dintFilmCount = Convert.ToInt32(dpSlot.USE_COUNT);

                            //[2015/06/23]FI02에서만 저장되게 조건식 추가(Add by HS)
                            if (dintUnitID == 1 && dintSubUnitID == 2)
                            {
                                pInfo.subPLCCommand_Set(clsInfo.PLCCommand.LotinformationSend, strGLSID, dintFilmCount, dpSlot.PRODUCTID);
                            }

                            if (pInfo.LOTID(pInfo.Port(dintPortID).CSTID) == null)
                            {
                                pInfo.AddLOT(pInfo.Port(dintPortID).CSTID);
                            }

                            for (int dintLoop = 1; dintLoop <= dintFilmCount; dintLoop++)
                            {
                                if (pInfo.LOTID(pInfo.Port(dintPortID).CSTID).Slot(dintLoop) == null)
                                {
                                    pInfo.LOTID(pInfo.Port(dintPortID).CSTID).AddSlot(dintLoop);
                                }
                                //pInfo.LOTID(strGLSID).Slot(dintLoop).GlassID = strGLSID + dintLoop.ToString().PadLeft(3, '0');
                                pInfo.LOTID(pInfo.Port(dintPortID).CSTID).Slot(dintLoop).GlassID   = strGLSID;
                                pInfo.LOTID(pInfo.Port(dintPortID).CSTID).Slot(dintLoop).USE_COUNT = dintLoop.ToString();
                                pInfo.LOTID(pInfo.Port(dintPortID).CSTID).Slot(dintLoop).PRODUCTID = dpSlot.PRODUCTID;
                            }
                        }
                        if (dintPortID == 2)
                        {
                            //this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.FilmJobCommand, 1001, dintPortID);     //Lot Start 지시
                        }
                    }
                    //150122 고석현
                    if (dintUnitID == 1 && dintSubUnitID == 1)
                    {
                        pInfo.subPLCCommand_Set(clsInfo.PLCCommand.FI01_Check, "1");
                    }
                }
                else
                {
                    pInfo.Port(dintPortID).S3F115Received = false;
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(clsInfo.LogType.CIM, ex.ToString());
                return;
            }
            finally
            {
            }
        }
예제 #2
0
        /// <summary>
        /// 설비에서 CIM으로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : strCompBit
        /// parameters[1] : dstrACTVal
        /// parameters[2] : dintActFrom
        /// parameters[3] : dstrACTFromSub
        /// parameters[4] : intBitVal
        /// parameters[5] : Special Parameter
        /// </remarks>
        public void funProcessEQPEvent(string[] parameters)
        {
            string        strCompBit      = parameters[0];
            string        dstrWordAddress = "";
            StringBuilder dstrLog         = new StringBuilder();
            int           dintLength      = 0;
            string        dstrTemp        = "";
            int           dintBodyIndex   = 3; //PPID Body Index


            string dstrAfterHOSTPPID = "";
            string dstrAfterEQPPPID  = "";
            string dstrBeforeEQPPPID = "";
            int    dintAfterPPIDType = 0;

            string[] dstrAfterValue;

            try
            {
                dstrWordAddress = "W2040";
                //m_pEqpAct.subWordReadSave(dstrWordAddress, 10, EnuEQP.PLCRWType.ASCII_Data);        //HOST PPID
                m_pEqpAct.subWordReadSave(dstrWordAddress, 1, EnuEQP.PLCRWType.Int_Data);           //EQP PPID
                m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.Int_Data);                       //Spare
                m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                        //PPID Type
                //for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                //{
                //    dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                //    m_pEqpAct.subWordReadSave("", dintLength, EnuEQP.PLCRWType.Int_Data);                 //Body
                //}

                dstrAfterValue = m_pEqpAct.funWordReadAction(true);

                //PLC Req에 대한 CIM의 Confirm Bit를 준다.5
                m_pEqpAct.subSetConfirmBit(strCompBit);

                dstrAfterHOSTPPID = dstrAfterValue[0];
                dstrAfterEQPPPID  = dstrAfterValue[1];
                dintAfterPPIDType = Convert.ToInt32(dstrAfterValue[3]);

                if (pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrAfterHOSTPPID) == null)
                {
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("존재하지 않는 HostPPID: {0} 에 대한 Mapping 변경 보고됨.", dstrAfterHOSTPPID));
                    return;
                }

                if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrAfterEQPPPID) == null)
                {
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("HostPPID: {0} 에 존재하지 않는 EQPPPID: {1} Mapping 변경 보고됨.", dstrAfterHOSTPPID, dstrAfterEQPPPID));
                    return;
                }



                dstrBeforeEQPPPID = pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrAfterHOSTPPID).EQPPPID;

                pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrAfterHOSTPPID).EQPPPID = dstrAfterEQPPPID;

                //로그를 출력한다.
                dstrLog.Append(FunStringH.funPaddingStringData("-", 30, '-') + "\r\n");
                dstrLog.Append("HOST PPID Mapping 수정(After Data)" + "\r\n");
                dstrLog.Append("AfterHOSTPPID:" + dstrAfterHOSTPPID + ",");
                dstrLog.Append("AfterEQPPPID:" + dstrAfterEQPPPID + ",");
                dstrLog.Append("AfterPPIDType:" + dintAfterPPIDType.ToString() + "\r\n");

                //for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                //{
                //    dstrTemp = FunStringH.funPoint(dstrAfterValue[dintBodyIndex + dintLoop - 1], pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                //    dstrLog.Append(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name + ":" + dstrTemp + "\r\n");
                //}
                dstrLog.Append(FunStringH.funPaddingStringData("-", 30, '-') + "\r\n");
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, dstrLog.ToString());


                //HOST로 HOST Mapping 변경 보고
                //인자:변경(3), PPIDTYPE, HOSTPPID, EQPPPID
                pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, "3", dintAfterPPIDType, dstrAfterHOSTPPID, dstrAfterEQPPPID);

                m_pEqpAct.subSetParameterLog("HOST PPID Mapping 수정", dstrAfterHOSTPPID, null, dstrBeforeEQPPPID, dstrAfterEQPPPID);

                //최종 수정된 날짜 Ini에 변경
                FunINIMethod.subINIWriteValue("ETCInfo", "RECIPELastModified", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), pInfo.All.SystemINIFilePath);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }