Esempio n. 1
0
        /// <summary>
        /// CIM에서 설비로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : cmdName
        /// parameters[1] : 1st parameter
        /// parameters[2] : 2nd parameter
        /// parameters[3] : 3rd parameter
        /// parameters[4] : 4th parameter
        /// parameters[5] : 5th Parameter
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string dstrBitAddress = "B1000";
            string dstrData       = FunStringH.funMakeLengthStringFirst("0", 256); //384개임

            try
            {
                //EventBit를 초기화한다.
                pEqpAct.funBitWrite(dstrBitAddress, dstrData);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
Esempio n. 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];
            //int intUnitID = Convert.ToInt32(parameters[2]);
            StringBuilder dstrLog = new StringBuilder();

            string[] dstrValue      = null;
            string   dstrHGLSID     = "";
            string   dstrLOTID      = "";
            int      dintSlotID     = 0;
            string   dstrGlassSize1 = "";
            string   dstrGlassSize2 = "";

            InfoAct.clsSlot dslot         = new InfoAct.clsSlot(0);
            string[]        dstrDataValue = new string[4]; //MCC Log Data

            int dintIndex = 0;

            int dintPortID = 0;     //LD/UD 작업 Port

            int dintJobStart = 0;
            int dintJobEnd   = 0;

            bool dbolXPCStart = false;

            bool dbolProcChanged = false;

            try
            {
                try
                {
                    m_pEqpAct.subWordReadSave("W2040", 8, EnuEQP.PLCRWType.ASCII_Data);               //H-Glass(=panel)-ID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //E-Glass(=panel)-ID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Lot-ID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Batch-ID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Job-ID
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Port-ID
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Slot-NO
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Prod-Type
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Prod-Kind
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //ProductID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Runspec-ID
                    m_pEqpAct.subWordReadSave("", 4, EnuEQP.PLCRWType.ASCII_Data);                    //Layer-ID
                    m_pEqpAct.subWordReadSave("", 4, EnuEQP.PLCRWType.ASCII_Data);                    //Step-ID
                    m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                   //HOST PPID
                    m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                   //Flow-ID

                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Glass(=panel)-Size(하위)         ---->U2 2임.(하위 + Space(1) + 상위)
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Glass(=panel)-Size(상위)         ---->U2 2임.(하위 + Space(1) + 상위)
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Glass-thickness(thickness)
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Glass-State(빈값)

                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Glass-Order
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Comment

                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Use-Count
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Judgement
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Reason-Code
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Inspection-Flag
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Enc-Flag
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Prerun-Flag
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Turn-Dir
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Flip-State
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Work-State
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Multi-Use
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Pair Glass-ID
                    m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                   //Pair PPID

                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name1
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value1
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name2
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value2
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name3
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value3
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name4
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value4
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name5
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value5

                    m_pEqpAct.subWordReadSave("", 168, EnuEQP.PLCRWType.Hex_Data);                    //Spare

                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Job Start
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Job End

                    //장비에서 GLS Data정보를 한꺼번에 읽는다.
                    dstrValue = m_pEqpAct.funWordReadAction(true);


                    //읽은 GLS Data를 Parsing해서 변수에 저장
                    dslot.H_PANELID    = dstrValue[0].Trim();
                    dslot.E_PANELID    = dstrValue[1].Trim();
                    dslot.LOTID        = dstrValue[2].Trim();
                    dslot.BATCHID      = dstrValue[3].Trim();
                    dslot.JOBID        = dstrValue[4].Trim();
                    dslot.PORTID       = dstrValue[5].Trim();
                    dintPortID         = Convert.ToInt32(FunStringH.funMakeLengthStringFirst(dslot.PORTID, 4).Substring(2, 2));
                    dslot.SlotID       = Convert.ToInt32(dstrValue[6]);
                    dslot.SLOTNO       = dstrValue[6];
                    dslot.PRODUCT_TYPE = dstrValue[7].Trim();
                    dslot.PRODUCT_KIND = dstrValue[8].Trim();
                    dslot.PRODUCTID    = dstrValue[9].Trim();
                    dslot.RUNSPECID    = dstrValue[10].Trim();
                    dslot.LAYERID      = dstrValue[11].Trim();
                    dslot.STEPID       = dstrValue[12].Trim();
                    dslot.HOSTPPID     = dstrValue[13].Trim();
                    dslot.FLOWID       = dstrValue[14].Trim();
                    dstrGlassSize1     = dstrValue[15].Trim();
                    dstrGlassSize2     = dstrValue[16].Trim();
                    dslot.SIZE         = dstrGlassSize1 + " " + dstrGlassSize2;
                    dslot.THICKNESS    = Convert.ToInt32(dstrValue[17]);
                    //dstrValue[18]은 Reserved임. Glass State
                    dslot.GLASS_ORDER = dstrValue[19].Trim();
                    dslot.COMMENT     = dstrValue[20].Trim();
                    dslot.USE_COUNT   = dstrValue[21].Trim();
                    dslot.JUDGEMENT   = dstrValue[22].Trim();
                    dslot.REASON_CODE = dstrValue[23].Trim();
                    dslot.INS_FLAG    = dstrValue[24].Trim();
                    dslot.ENC_FLAG    = dstrValue[25].Trim();
                    dslot.PRERUN_FLAG = dstrValue[26].Trim();
                    dslot.TURN_DIR    = dstrValue[27].Trim();
                    dslot.FLIP_STATE  = dstrValue[28].Trim();
                    dslot.WORK_STATE  = dstrValue[29].Trim();
                    dslot.MULTI_USE   = dstrValue[30].Trim();

                    dslot.PAIR_GLASSID = dstrValue[31].Trim();
                    dslot.PAIR_PPID    = dstrValue[32].Trim();

                    for (int dintLoop = 0; dintLoop <= dslot.OPTION_NAME.Length - 1; dintLoop++)
                    {
                        dslot.OPTION_NAME[dintLoop]  = dstrValue[dintIndex + 33].Trim();
                        dslot.OPTION_VALUE[dintLoop] = dstrValue[dintIndex + 34].Trim();
                        //dslot.OPTION_NAME[dintLoop] = "0";
                        //dslot.OPTION_VALUE[dintLoop] = "0";
                        dintIndex = dintIndex + 2;
                    }

                    dintIndex = 0;

                    dintJobStart = Convert.ToInt32(dstrValue[44]);
                    dintJobEnd   = Convert.ToInt32(dstrValue[45]);

                    if (dintJobStart == 1)
                    {
                        dslot.JOBStart = true;
                    }
                    else
                    {
                        dslot.JOBStart = false;
                    }

                    if (dintJobEnd == 1)
                    {
                        dslot.JOBEnd = true;
                    }
                    else
                    {
                        dslot.JOBEnd = false;
                    }

                    dstrLOTID  = dslot.LOTID;
                    dintSlotID = dslot.SlotID;
                    dstrHGLSID = dslot.H_PANELID;
                    pInfo.All.DataCheckGLSID = dstrHGLSID;
                    pInfo.All.HostPPID       = dstrValue[13].Trim();
                }
                catch (Exception ex)
                {
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
                }
                finally
                {
                    //PLC Req에 대한 CIM의 Confirm Bit를 준다.
                    m_pEqpAct.subSetConfirmBit(strCompBit);
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString() + ", dstrLOTID:" + dstrLOTID + ", dintSlotID: " + dintSlotID.ToString());
            }
        }
Esempio n. 3
0
        /// <summary>
        /// CIM에서 설비로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : cmdName
        /// parameters[1] : 1st parameter
        /// parameters[2] : 2nd parameter
        /// parameters[3] : 3rd parameter
        /// parameters[4] : 4th parameter
        /// parameters[5] : 5th Parameter
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string dstrWordAddress = "";
            string dstrWordData    = "";
            string dstrBitAddress  = "B1020";

            string[] dstrValue;
            string   dstrECID       = FunStringH.funMakeLengthStringFirst("0", 48);
            int      dintECID       = 0;
            int      dintIndex      = 0;
            string   strConvertData = "";

            try
            {
                if (pInfo.All.ECIDChange.Count > 0)
                {
                    for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).ECIDCount; dintLoop++)
                    {
                        dintIndex = pInfo.All.ECIDChange.IndexOfKey(dintLoop);         //Key 값을 가지고 SortedList의 Index값을 가져온다.

                        if (pInfo.All.ECIDChange.ContainsKey(dintLoop))
                        {
                            dintECID  = Convert.ToInt32(pInfo.All.ECIDChange.GetKey(dintIndex));                           //Index값을 가지고 Key값을 알아온다,
                            dstrValue = pInfo.All.ECIDChange.GetByIndex(dintIndex).ToString().Split(new char[] { ',' });   //Index값을 가지고 value값을 알아온다.

                            //Word영역에 변경할 ECID를 Write한다.
                            dstrWordData += pEqpAct.funWordWriteString(1, dintECID.ToString(), EnuEQP.PLCRWType.Int_Data);
                            //dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[0], EnuEQP.PLCRWType.Int_Data);

                            if (!dstrValue[1].Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[1], EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, dstrValue[1], EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            if (!dstrValue[2].Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[2], EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, dstrValue[2], EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            if (!dstrValue[3].Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[3], EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, dstrValue[2], EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            //dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[4], EnuEQP.PLCRWType.Int_Data);
                        }
                        else
                        {
                            clsECID CurrentECID = pInfo.Unit(0).SubUnit(0).ECID(dintLoop);
                            dstrWordData += pEqpAct.funWordWriteString(1, CurrentECID.Index.ToString(), EnuEQP.PLCRWType.Int_Data);
                            //dstrWordData += pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECSLL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                            if (!CurrentECID.ECWLL.Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECWLL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECWLL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            if (!CurrentECID.ECDEF.Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECDEF, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECDEF, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            if (!CurrentECID.ECWUL.Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECWUL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECWUL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }
                        }
                    }

                    //변경할 ECID 값을 써준다.
                    dstrWordAddress = "W16C0";
                    pEqpAct.funWordWrite(dstrWordAddress, dstrWordData, EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터

                    ////ECID 변경 지시를 내린다.
                    pEqpAct.funBitWrite(dstrBitAddress, "1");

                    //if (pInfo.EQP("Main").DummyPLC)
                    //{
                    //pEqpAct.funWordWrite("W2A00", dstrWordData, EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                    //pEqpAct.funBitWrite("B1121", "1");

                    //}
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Glass APD를 읽어서 파일/구조체에 저장
        /// </summary>
        /// <param name="strLOTID"></param>
        /// <param name="intSlotID"></param>
        private void subGLSAPDRead(string strGLSID, int intSlotID)
        {
            string dstrWriteData   = "";
            string dstrTemp        = "";
            string dstrWordAddress = "W2780";
            string dstrValue       = "";
            string dstrDateTime    = "";
            string dstrReadData    = "";
            int    dintLength      = 0;
            int    dintStartIndex  = 0;


            try
            {
                //LOT이 존재하지 않거나 SlotID가 0이면 에러 로그를 출력하고 빠져나간다.
                if (pInfo.GLSID(strGLSID) == null || intSlotID == 0)
                {
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "subGLSAPDRead: strGlassID:" + strGLSID + ", intSlotID:" + intSlotID.ToString());
                    return;
                }

                ////기본 Data를 구성한다.(6개)
                //dstrTemp = strGLSID;                                                           //LOTID
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(1).Value = dstrTemp;

                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = pInfo.LOTID(strLOTID).Slot(intSlotID).HOSTPPID;                    //PPID
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(2).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = pInfo.LOTID(strLOTID).Slot(intSlotID).H_PANELID;               //H_PANELID
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(3).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = FunStringH.funMakeLengthStringFirst(intSlotID.ToString(), 2);       //SLOTNO
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(4).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = pInfo.LOTID(strLOTID).Slot(intSlotID).STEPID;                  //STEPID
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(5).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = pInfo.Unit(0).SubUnit(0).EQPState;
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(6).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //Word를 Block으로 한번에 읽는다.
                dstrReadData = m_pEqpAct.funWordRead(dstrWordAddress, pInfo.All.GLSAPDPLCReadLength * 4, EnuEQP.PLCRWType.Hex_Data).Trim();

                for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).GLSAPDCount; dintLoop++)
                {
                    try
                    {
                        dintLength = pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Length * 4;   //Length에 맞게 자를 문자열 개수를 가져온다.
                        dstrTemp   = dstrReadData.Substring(dintStartIndex, dintLength);     //문자열을 자른다.

                        //if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).HaveMinusValue == false)
                        //{
                        //날짜 데이터일 경우 읽은 값을 4자리로 끊어서 구조체에 저장
                        if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Format.ToUpper() == "YY/MM/DD/HH/MM/SS")
                        {
                            dstrValue = dstrTemp;

                            for (int dintStep = 1; dintStep <= dintLength / 4; dintStep++)
                            {
                                dstrTemp = dstrValue.Substring((dintStep - 1) * 4, 4);                           //문자열을 잘라온다.
                                dstrTemp = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal); //PLC로 읽은 Hex를 10진수(Int)로 변환한다.
                                if (dintStep != 1)
                                {
                                    dstrTemp = FunStringH.funMakeLengthStringFirst(dstrTemp, 2);     //월, 일, 시, 분, 초를 2자리로 맞춘다.
                                }
                                dstrDateTime = dstrDateTime + dstrTemp + "/";
                            }
                            dstrDateTime = dstrDateTime.Substring(0, dstrDateTime.Length - 1);

                            dstrValue    = dstrDateTime;    //최종 변환한 값
                            dstrDateTime = "";              //초기화
                        }
                        else
                        {
                            //2 Word일때 처리
                            if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Length > 1)
                            {
                                if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Length == 8)
                                {
                                    string strTemp = "";

                                    for (int dintLoop2 = 0; dintLoop2 < 7; dintLoop2++)
                                    {
                                        string strTemp2 = dstrTemp.Substring(dintLoop2 * 4, 4);
                                        strTemp2 = strTemp2.Substring(2, 2) + strTemp2.Substring(0, 2);
                                        strTemp += FunTypeConversion.funHexConvert(strTemp2, EnuEQP.StringType.ASCString);
                                    }
                                    dstrTemp = strTemp;
                                    //dstrTemp = FunTypeConversion.funHexConvert(strTemp, EnuEQP.StringType.ASCString);
                                }
                                else
                                {
                                    dstrTemp = dstrTemp.Substring(4, 4) + dstrTemp.Substring(0, 4);
                                    dstrTemp = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal);
                                }

                                dstrValue = dstrTemp;           //최종 변환된 값
                            }
                            else
                            {
                                //1 Word임.
                                dstrValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal);      //PLC로 읽은 Hex를 10진수(Int)로 변환한다.
                            }
                        }
                        //}
                        //else
                        //{
                        //    //항목의 값에 음수값이 있는 경우 음수 값 처리
                        //    dstrValue = FunTypeConversion.funPlusMinusAPDCalc(dstrTemp);
                        //}

                        //소수점을 붙인다.
                        dstrValue = CommonAct.FunStringH.funPoint(dstrValue, pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Format);
                    }
                    catch
                    {
                        dstrValue = "0";
                    }
                    finally
                    {
                        pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Value = dstrValue;   //구조체에 저장
                        dstrWriteData = dstrWriteData + dstrValue + ",";               //파일로 쓰기 위해 결합

                        //읽을 Index 증가
                        dintStartIndex = dintStartIndex + dintLength;

                        #region LOTAPD
                        //LOT APD에 data를 저장한다.(후에 LOT APD 보고시 사용)
                        //switch (pInfo.Unit(0).SubUnit(0).LOTAPD(dintLoop).Type)
                        //{
                        //    case "DateTime":
                        //        break;

                        //    case "Other":       //Overwrite함.
                        //        pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //        break;

                        //    case "Boolean":     //하나라도 1인 값이 있으면 1로 설정한다.(0 혹은 1의 값 경우)
                        //        if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "1")
                        //        {
                        //        }
                        //        else
                        //        {
                        //            pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //        }
                        //        break;

                        //    case "Numeric":     //값을 누적한다.

                        //        dstrTemp = pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Name.Substring(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Name.LastIndexOf("_") + 1).ToUpper();

                        //        if (dstrTemp == "MIN")
                        //        {
                        //            if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "")        //첫번째 값이 들어올때는 그 값을 Min으로 한다.
                        //            {
                        //                pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //            }
                        //            else
                        //            {
                        //                //기존의 값 > 새로 들어온값 ---> 새로들오온 값을 Min으로 저장
                        //                if (Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) > Convert.ToSingle(dstrValue))
                        //                {
                        //                    pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //                }
                        //            }
                        //        }
                        //        else if (dstrTemp == "MAX")
                        //        {
                        //            if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "")        //첫번째 값이 들어올때는 그 값을 Max으로 한다.
                        //            {
                        //                pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //            }
                        //            else
                        //            {
                        //                //기존의 값 < 새로 들어온값 ---> 새로들오온 값을 Max으로 저장
                        //                if (Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) < Convert.ToSingle(dstrValue))
                        //                {
                        //                    pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //                }
                        //            }
                        //        }
                        //        else if (dstrTemp == "AVG")
                        //        {
                        //            if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = "0";

                        //            //기존의 값 + 새로 들어온 값을 계속 더한다.(평균은 subLOTAPDRead()에서 한다.)
                        //            pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = Convert.ToString(Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) + Convert.ToSingle(dstrValue));
                        //        }
                        //        else
                        //        {
                        //            if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = "0";

                        //            //기존의 값 + 새로 들어온 값을 계속 더한다.(평균은 subLOTAPDRead()에서 한다.)
                        //            pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = Convert.ToString(Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) + Convert.ToSingle(dstrValue));
                        //        }

                        //        break;

                        //    //case "Numeric":     //값을 누적한다.
                        //    //    if (m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = "0";

                        //    //    m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = Convert.ToString(Convert.ToSingle(m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) + Convert.ToSingle(dstrValue));

                        //    //    break;
                        //}
                        #endregion
                    }
                }

                //마지막의 콤마는 제거
                dstrWriteData = dstrWriteData.Remove(dstrWriteData.Length - 1);

                //파일에 저장
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSPDC, dstrWriteData);

                //HOST로 보고(S6F11, CEID=81, Process Data(GLS))
                pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F13GLSAPD, strGLSID, intSlotID, strGLSID);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString() + ", strGLSID:" + strGLSID + ", intSlotID:" + intSlotID.ToString());
            }
        }
Esempio n. 5
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];
            int           intUnitID    = Convert.ToInt32(parameters[2]);
            int           intSubUnitID = Convert.ToInt32(parameters[3]);
            int           intModuleNo  = Convert.ToInt32(parameters[1]);
            StringBuilder dstrLog      = new StringBuilder();

            string[] dstrValue      = null;
            string   dstrHGLSID     = "";
            string   dstrLOTID      = "";
            int      dintSlotID     = 0;
            string   dstrGlassSize1 = "";
            string   dstrGlassSize2 = "";

            InfoAct.clsSlot dslot           = new InfoAct.clsSlot(0);
            string[]        dstrDataValue   = new string[4]; //MCC Log Data
            int             dintIndex       = 0;
            int             dintPortID      = 0;             //LD/UD 작업 Port
            int             dintJobStart    = 0;
            int             dintJobEnd      = 0;
            bool            dbolXPCStart    = false;
            bool            dbolProcChanged = false;

            InfoAct.clsGLS CurrentGLS;
            string         strMCCData = "";
            //[2015/05/18](Add by HS)
            string dstrWordAddress = "";
            int    nIndex          = 0;

            try
            {
                #region Unit1

                if (intModuleNo == 13 || intModuleNo == 14 || intModuleNo == 15) //ST01
                {
                    try
                    {
                        pInfo.All.RPCPPID = "";
                        if (intModuleNo != 15)
                        {
                            m_pEqpAct.subWordReadSave("W2040", 8, EnuEQP.PLCRWType.ASCII_Data);               //H-Glass(=panel)-ID
                        }
                        else
                        {
                            m_pEqpAct.subWordReadSave("W2380", 8, EnuEQP.PLCRWType.ASCII_Data);               //H-Glass(=panel)-ID
                        }
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //E-Glass(=panel)-ID
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Lot-ID
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Batch-ID
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Job-ID
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Port-ID
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Slot-NO
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Prod-Type
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Prod-Kind
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //ProductID
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Runspec-ID
                        m_pEqpAct.subWordReadSave("", 4, EnuEQP.PLCRWType.ASCII_Data);                        //Layer-ID
                        m_pEqpAct.subWordReadSave("", 4, EnuEQP.PLCRWType.ASCII_Data);                        //Step-ID
                        m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                       //HOST PPID
                        m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                       //Flow-ID

                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                          //Glass(=panel)-Size(하위)         ---->U2 2임.(하위 + Space(1) + 상위)
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                          //Glass(=panel)-Size(상위)         ---->U2 2임.(하위 + Space(1) + 상위)
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                          //Glass-thickness(thickness)
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                          //Glass-State(빈값)

                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Glass-Order
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Comment

                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Use-Count
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Judgement
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Reason-Code
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Inspection-Flag
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Enc-Flag
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Prerun-Flag
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Turn-Dir
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Flip-State
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Work-State
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Multi-Use
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Pair Glass-ID
                        m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                       //Pair PPID

                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name1
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value1
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name2
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value2
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name3
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value3
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name4
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value4
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name5
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value5


                        //m_pEqpAct.subWordReadSave("", 11, EnuEQP.PLCRWType.Hex_Data);                              //Spare
                        //m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                              //상부 / 하부 작업 진행여부 확인
                        //m_pEqpAct.subWordReadSave("", 156, EnuEQP.PLCRWType.Hex_Data);                              //Spare

                        //m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                              //Job Start
                        //m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                              //Job End



                        //장비에서 GLS Data정보를 한꺼번에 읽는다.
                        dstrValue = m_pEqpAct.funWordReadAction(true);


                        //읽은 GLS Data를 Parsing해서 변수에 저장
                        dslot.H_PANELID    = dstrValue[0].Trim();
                        dslot.E_PANELID    = dstrValue[1].Trim();
                        dslot.LOTID        = dstrValue[2].Trim();
                        dslot.BATCHID      = dstrValue[3].Trim();
                        dslot.JOBID        = dstrValue[4].Trim();
                        dslot.PORTID       = dstrValue[5].Trim();
                        dintPortID         = Convert.ToInt32(FunStringH.funMakeLengthStringFirst(dslot.PORTID, 4).Substring(2, 2));
                        dslot.SlotID       = Convert.ToInt32(dstrValue[6]);
                        dslot.SLOTNO       = dstrValue[6];
                        dslot.PRODUCT_TYPE = dstrValue[7].Trim();
                        dslot.PRODUCT_KIND = dstrValue[8].Trim();
                        dslot.PRODUCTID    = dstrValue[9].Trim();
                        dslot.RUNSPECID    = dstrValue[10].Trim();
                        dslot.LAYERID      = dstrValue[11].Trim();
                        dslot.STEPID       = dstrValue[12].Trim();
                        dslot.HOSTPPID     = dstrValue[13].Trim();
                        dslot.FLOWID       = dstrValue[14].Trim();
                        dstrGlassSize1     = dstrValue[15].Trim();
                        dstrGlassSize2     = dstrValue[16].Trim();
                        dslot.SIZE         = dstrGlassSize1 + " " + dstrGlassSize2;
                        dslot.THICKNESS    = Convert.ToInt32(dstrValue[17]);
                        //dstrValue[18]은 Reserved임. Glass State
                        dslot.GLASS_ORDER = dstrValue[19].Trim();
                        dslot.COMMENT     = dstrValue[20].Trim();
                        dslot.USE_COUNT   = dstrValue[21].Trim();
                        dslot.JUDGEMENT   = dstrValue[22].Trim();
                        dslot.REASON_CODE = dstrValue[23].Trim();
                        dslot.INS_FLAG    = dstrValue[24].Trim();
                        dslot.ENC_FLAG    = dstrValue[25].Trim();
                        dslot.PRERUN_FLAG = dstrValue[26].Trim();
                        dslot.TURN_DIR    = dstrValue[27].Trim();
                        dslot.FLIP_STATE  = dstrValue[28].Trim();
                        dslot.WORK_STATE  = dstrValue[29].Trim();
                        dslot.MULTI_USE   = dstrValue[30].Trim();

                        dslot.PAIR_GLASSID = dstrValue[31].Trim();
                        dslot.PAIR_PPID    = dstrValue[32].Trim();

                        for (int dintLoop = 0; dintLoop <= dslot.OPTION_NAME.Length - 1; dintLoop++)
                        {
                            dslot.OPTION_NAME[dintLoop]  = dstrValue[dintIndex + 33].Trim();
                            dslot.OPTION_VALUE[dintLoop] = dstrValue[dintIndex + 34].Trim();
                            //dslot.OPTION_NAME[dintLoop] = "0";
                            //dslot.OPTION_VALUE[dintLoop] = "0";
                            dintIndex = dintIndex + 2;
                        }

                        dintIndex = 0;


                        //상부, 하부 확인 - ksh  //A3 사용안함
                        //if (dstrValue[44] == "0")
                        //{
                        //    pInfo.All.GlassUpperJobFlag = true;
                        //}
                        //else
                        //{
                        //    pInfo.All.GlassUpperJobFlag = false;
                        //}

                        //dintJobStart = Convert.ToInt32(dstrValue[46]);
                        //dintJobEnd = Convert.ToInt32(dstrValue[47]);

                        //if (dintJobStart == 1) dslot.JOBStart = true;
                        //else dslot.JOBStart = false;

                        //if (dintJobEnd == 1) dslot.JOBEnd = true;
                        //else dslot.JOBEnd = false;

                        dstrLOTID  = dslot.LOTID;
                        dintSlotID = dslot.SlotID;
                        dstrHGLSID = dslot.H_PANELID;

                        if (intModuleNo == 13)
                        {
                            m_pEqpAct.funWordWrite("W1FC0", dslot.H_PANELID.PadRight(16, ' '), EnuEQP.PLCRWType.ASCII_Data);
                        }
                        else if (intModuleNo == 14)
                        {
                            m_pEqpAct.funWordWrite("W1FD0", dslot.H_PANELID.PadRight(16, ' '), EnuEQP.PLCRWType.ASCII_Data);
                        }
                        else
                        {
                            m_pEqpAct.funWordWrite("W1FE0", dslot.H_PANELID.PadRight(16, ' '), EnuEQP.PLCRWType.ASCII_Data);
                        }
                    }
                    catch (Exception ex)
                    {
                        pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
                    }
                    finally
                    {
                        //PLC Req에 대한 CIM의 Confirm Bit를 준다.
                        m_pEqpAct.subSetConfirmBit(strCompBit);
                    }

                    //장비에 GLS In시 읽은 Data를 로그를 남긴다.
                    dstrLog.Append("LOTID:" + dslot.LOTID + ",");
                    dstrLog.Append("SlotID:" + dslot.SlotID + ",");
                    dstrLog.Append("GLS Arrive   -> UnitID:" + intUnitID.ToString() + ",");
                    dstrLog.Append(intUnitID.ToString() + ",");
                    dstrLog.Append("HGLSID:" + dslot.H_PANELID + ",");
                    dstrLog.Append("EGLSID:" + dslot.E_PANELID + ",");
                    dstrLog.Append("BatchID:" + dslot.BATCHID + ",");
                    dstrLog.Append("JobID:" + dslot.JOBID + ",");
                    dstrLog.Append("PortID:" + dslot.PORTID + ",");
                    dstrLog.Append("ProdType:" + dslot.PRODUCT_TYPE + ",");
                    dstrLog.Append("ProdKind:" + dslot.PRODUCT_KIND + ",");
                    dstrLog.Append("ProdID:" + dslot.PRODUCTID + ",");
                    dstrLog.Append("RunspecID:" + dslot.RUNSPECID + ",");
                    dstrLog.Append("LayerID:" + dslot.LAYERID + ",");
                    dstrLog.Append("StepID:" + dslot.STEPID + ",");
                    dstrLog.Append("HOSTPPID:" + dslot.HOSTPPID + ",");
                    dstrLog.Append("FlowID:" + dslot.FLOWID + ",");
                    dstrLog.Append("GlassSize1:" + dstrGlassSize1 + ",");
                    dstrLog.Append("GlassSize2:" + dstrGlassSize2 + ",");
                    dstrLog.Append("Glassthickness:" + dslot.THICKNESS.ToString() + ",");
                    dstrLog.Append("GlassOrder:" + dslot.GLASS_ORDER + ",");
                    dstrLog.Append("Comment:" + dslot.COMMENT + ",");

                    dstrLog.Append("UseCount:" + dslot.USE_COUNT + ",");
                    dstrLog.Append("Judgement:" + dslot.JUDGEMENT + ",");
                    dstrLog.Append("ReasonCode:" + dslot.REASON_CODE + ",");
                    dstrLog.Append("InspectionFlag:" + dslot.INS_FLAG + ",");
                    dstrLog.Append("EncFlag:" + dslot.ENC_FLAG + ",");
                    dstrLog.Append("PrerunFlag:" + dslot.PRERUN_FLAG + ",");
                    dstrLog.Append("TurnDir:" + dslot.TURN_DIR + ",");
                    dstrLog.Append("FlipState:" + dslot.FLIP_STATE + ",");
                    dstrLog.Append("WorkState:" + dslot.WORK_STATE + ",");
                    dstrLog.Append("MultiUse:" + dslot.MULTI_USE + ",");

                    dstrLog.Append("PairGlassID:" + dslot.PAIR_GLASSID + ",");
                    dstrLog.Append("PairPPID:" + dslot.PAIR_PPID + ",");

                    for (int dintLoop = 0; dintLoop <= dslot.OPTION_NAME.Length - 1; dintLoop++)
                    {
                        dstrLog.Append("OptionName" + Convert.ToString(dintLoop + 1) + ":" + dslot.OPTION_NAME[dintLoop] + ",");
                        dstrLog.Append("OptionValue" + Convert.ToString(dintLoop + 1) + ":" + dslot.OPTION_VALUE[dintLoop] + ",");
                    }

                    dstrLog.Append("JobStart:" + dintJobStart.ToString() + ",");
                    dstrLog.Append("JobEnd:" + dintJobEnd.ToString());

                    //pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, dstrLog.ToString());

                    dstrLog.Clear();
                    dstrLog.Append(dslot.GlassID + ",");
                    dstrLog.Append(dslot.SLOTNO + ",");

                    switch (intModuleNo)
                    {
                    case 13:
                        dstrLog.Append("ST01 Glass IN");
                        break;

                    case 14:
                        dstrLog.Append("ST02 Glass IN");
                        break;

                    case 15:
                        dstrLog.Append("GL01 Glass IN");
                        break;
                    }
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, dstrLog.ToString());

                    //LOT의 첫번째 GLS이면 LOT정보를 생성한다.
                    //if (pInfo.LOTID(dslot.LOTID) == null) subCreateLOTInfo(dslot.LOTID, dintJobStart);
                    if (pInfo.GLSID(dslot.H_PANELID) == null)
                    {
                        pInfo.AddGLS(dslot.H_PANELID);
                    }

                    pInfo.GLSID(dslot.H_PANELID).CopyFrom(dslot);

                    CurrentGLS = pInfo.GLSID(dslot.H_PANELID);

                    ////GLS Data를 구조체에 저장
                    //InfoAct.clsSlot currentSlot = pInfo.LOTID(dstrLOTID).Slot(dintSlotID);
                    //currentSlot.CopyFrom(dslot);

                    CurrentGLS.StartTime   = DateTime.Now.ToString("yyyyMMddHHmmss");
                    CurrentGLS.GLASS_STATE = 3;      //Processing

                    //pInfo.LOTID(dstrLOTID).InCount += 1;   //LOT의 GLS개수 증가

                    if (pInfo.Unit(0).SubUnit(0).AddCurrGLS(CurrentGLS.H_PANELID) == true)
                    {
                        InfoAct.clsGLS curGLS = pInfo.Unit(0).SubUnit(0).CurrGLS(CurrentGLS.H_PANELID);
                        curGLS.H_PANELID = CurrentGLS.H_PANELID;
                        curGLS.SlotID    = CurrentGLS.SlotID;
                        pInfo.Unit(0).SubUnit(0).GLSExist = true;
                    }

                    if (pInfo.Unit(intUnitID).SubUnit(0).AddCurrGLS(CurrentGLS.H_PANELID) == true)
                    {
                        InfoAct.clsGLS curGLS = pInfo.Unit(intUnitID).SubUnit(0).CurrGLS(CurrentGLS.H_PANELID);
                        curGLS.H_PANELID = CurrentGLS.H_PANELID;
                        curGLS.SlotID    = CurrentGLS.SlotID;
                        pInfo.Unit(intUnitID).SubUnit(0).GLSExist = true;
                    }

                    if (pInfo.Unit(intUnitID).SubUnit(intSubUnitID).AddCurrGLS(CurrentGLS.H_PANELID) == true)
                    {
                        InfoAct.clsGLS curGLS = pInfo.Unit(intUnitID).SubUnit(intSubUnitID).CurrGLS(CurrentGLS.H_PANELID);
                        curGLS.H_PANELID = CurrentGLS.H_PANELID;
                        curGLS.SlotID    = CurrentGLS.SlotID;
                        pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSExist = true;
                    }

                    string dstrOLDHOSTPPID = "";
                    string dstrNEWHOSTPPID = "";
                    if (pInfo.EQP("Main").DummyPLC == false)
                    {
                        if (pInfo.Unit(0).SubUnit(0).HOSTPPID(CurrentGLS.HOSTPPID) == null)
                        {
                            pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "Arrive HostPPID Null!! HostPPID : " + CurrentGLS.HOSTPPID);
                        }

                        dstrOLDHOSTPPID           = pInfo.All.CurrentHOSTPPID; //이전 PPID 백업
                        dstrNEWHOSTPPID           = CurrentGLS.HOSTPPID;
                        pInfo.All.CurrentHOSTPPID = dstrNEWHOSTPPID;           //변경된 HOSTPPID를 입력
                        pInfo.All.CurrentEQPPPID  = pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrNEWHOSTPPID).EQPPPID;
                    }

                    if (pInfo.All.EQPSpecifiedCtrlBYWHO == "1")// || pInfo.All.EQPSpecifiedCtrlBYWHO == "2")
                    {
                        //HOST나 OP에서 발생한것임
                    }
                    else
                    {
                        pInfo.All.EQPSpecifiedCtrlBYWHO = "2"; //BY EQP
                    }


                    //wordwrite시점은 MCC로 정보를 보내기전으로...
                    //MCC로 메세지 전송후 보내면 MCC에서 Data 읽을때 이전Data를 읽을 수 있음.
                    string dstrMCCWordAddress = "W1D00";
                    dstrMCCWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrMCCWordAddress, 64 * (intModuleNo - 13));
                    string strGlassData = "";
                    strGlassData += m_pEqpAct.funWordWriteString(4, CurrentGLS.STEPID.PadRight(4, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(28, CurrentGLS.H_PANELID.PadRight(28, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(8, CurrentGLS.LOTID.PadRight(8, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(10, CurrentGLS.HOSTPPID.PadRight(10, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, CurrentGLS.SLOTNO, EnuEQP.PLCRWType.Int_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, "0", EnuEQP.PLCRWType.Int_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, "1", EnuEQP.PLCRWType.Int_Data);

                    m_pEqpAct.funWordWrite(dstrMCCWordAddress, strGlassData, EnuEQP.PLCRWType.Hex_Data);



                    DateTime dt = DateTime.Now;
                    strMCCData = "";

                    if (dstrOLDHOSTPPID != dstrNEWHOSTPPID)
                    {
                        //CEID=131보고
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11EquipmentSpecifiedControlEvent, 131, dstrOLDHOSTPPID, dstrNEWHOSTPPID);

                        //[2015/04/23]MCC Event Log(Add by HS)
                        strMCCData  = "EVENT;";
                        strMCCData += "CEID_131" + ",";
                        strMCCData += pInfo.Unit(intUnitID).SubUnit(intSubUnitID).ModuleID + ",";
                        strMCCData += CurrentGLS.STEPID + ",";
                        strMCCData += CurrentGLS.H_PANELID + ",";
                        strMCCData += CurrentGLS.LOTID + ",";
                        strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ",";
                        strMCCData += dstrOLDHOSTPPID + ",";
                        strMCCData += dstrNEWHOSTPPID + ";";

                        pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData);
                    }

                    if (pInfo.EQP("Main").EQPID.Contains("A3GLM")) //하부 라미시나리오
                    {
                        if (intModuleNo == 15)
                        {
                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, 0, dslot.H_PANELID, dslot.SlotID);

                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                            //pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                        }
                        else
                        {
                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                            //[2015/04/23]MCC Event Log(Add by HS)
                            strMCCData  = "EVENT;";
                            strMCCData += "CEID_16" + ",";
                            strMCCData += pInfo.Unit(intUnitID).SubUnit(intSubUnitID).ModuleID + ",";
                            strMCCData += CurrentGLS.STEPID + ",";
                            strMCCData += CurrentGLS.H_PANELID + ",";
                            strMCCData += CurrentGLS.LOTID + ",";
                            strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ";";

                            pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData);
                        }
                    }
                    else//상부 라미 시나리오
                    {
                        //Layer1 보고(CEID=16, PANEL PROCESS START for MODULE)
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, 0, dslot.H_PANELID, dslot.SlotID);

                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                        //[2015/04/23]MCC Event Log(Add by HS)
                        strMCCData += "EVENT;";
                        strMCCData += "CEID_16" + ",";
                        strMCCData += pInfo.Unit(intUnitID).SubUnit(intSubUnitID).ModuleID + ",";
                        strMCCData += CurrentGLS.STEPID + ",";
                        strMCCData += CurrentGLS.H_PANELID + ",";
                        strMCCData += CurrentGLS.LOTID + ",";
                        strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ";";

                        pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData);
                    }


                    // 20130220 이상창.. 여기가 위치가맞나..?
                    // 상태 변경 후에 보고하도록 변경해야하나..?
                    #region "Process Step"
                    string dstrModuleID = pInfo.Unit(intUnitID).SubUnit(0).ModuleID;

                    //foreach (InfoAct.clsProcessStep tmpProcStep in this.pInfo.Unit(0).SubUnit(0).ProcessStepValues())
                    //{
                    //    if (dstrModuleID.Equals(tmpProcStep.StartModuleID) || dstrModuleID.Equals(tmpProcStep.EndModuleID))
                    //    {
                    //        if (tmpProcStep.ProcessEvent.ToUpper().Equals("START"))
                    //        {
                    //            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, 0, dslot.LOTID, dslot.SlotID);
                    //        }
                    //    }

                    //    if (!dbolProcChanged && dstrModuleID.Equals(tmpProcStep.StartModuleID))
                    //    {
                    //        if (pInfo.Unit(0).SubUnit(0).CurrGLS(currentSlot.H_PANELID) != null)
                    //        {
                    //            currentSlot.StepNo_OLD = currentSlot.StepNo;
                    //            currentSlot.StepNo = tmpProcStep.StepNO;
                    //        }

                    //        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedProcessStatusEvent, 23, 0, dslot.LOTID, dslot.SlotID);
                    //        //break;

                    //        dbolProcChanged = true;
                    //    }
                    //}

                    #endregion

                    //2012.11.06 김영식...  Normal/APC/RPC/PPC Start 여부 판정하여 CIM Event 처리
                    // 20121212 lsc
                    if (this.pInfo.Unit(0).SubUnit(0).EOID(this.pInfo.funGetEOIDNameToIndex("RPC")).EOV == 1 && pInfo.RPC(dslot.H_PANELID) != null)
                    {
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S16F131RPCStart, dstrHGLSID);
                        pInfo.All.RPCDBUpdateCheck = true;
                        CurrentGLS.IsRPCRunning    = true;
                        dbolXPCStart      = true;
                        pInfo.All.RPCPPID = pInfo.RPC(dstrHGLSID).RPC_PPID;

                        if (pInfo.APC(dslot.H_PANELID) != null)
                        {
                            pInfo.APC(dslot.H_PANELID).State = "2";
                            pInfo.subProcessDataStatusSet(InfoAct.clsInfo.ProcessDataType.APC, dstrHGLSID);
                        }
                    }

                    else if (this.pInfo.Unit(0).SubUnit(0).EOID(this.pInfo.funGetEOIDNameToIndex("APC")).EOV == 1 && pInfo.APC(dslot.H_PANELID) != null)
                    {
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S16F111APCStart, dstrHGLSID);
                        CurrentGLS.IsAPCRunning = true;
                        dbolXPCStart            = true;
                    }

                    if (dbolXPCStart == false)
                    {
                        //pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.NormalStart, dstrHGLSID);
                    }

                    //unit별로 현재 Glass ID 저장
                    pInfo.Unit(intUnitID).SubUnit(0).HGLSID            = dslot.H_PANELID;
                    pInfo.Unit(intUnitID).SubUnit(intSubUnitID).HGLSID = dslot.H_PANELID;
                    pInfo.Unit(intUnitID).SubUnit(0).GLSExist          = true;
                }
                #endregion
                #region Film구간
                else
                {
                    int dintDEPUnitID = 0;
                    switch (intModuleNo)
                    {
                    case 7:     //FT01
                        dstrWordAddress = "W22C0";
                        break;

                    case 9:     //AL01
                        dstrWordAddress = "W2300";
                        break;

                    case 10:     //LM01
                        dstrWordAddress = "W2320";
                        break;

                    case 11:     //DM01
                        dstrWordAddress = "W2340";
                        break;

                    case 12:     //IS01
                        dstrWordAddress = "W2360";
                        break;

                    case 8:     //FT02
                        dstrWordAddress = "W22E0";
                        break;
                    }

                    if (string.IsNullOrEmpty(dstrWordAddress))
                    {
                        return;
                    }

                    m_pEqpAct.subWordReadSave(dstrWordAddress, 8, EnuEQP.PLCRWType.ASCII_Data);       // LOTID
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      // SlotID

                    string dstrproIDWordAddress = "W16B3";

                    string strPROID = m_pEqpAct.funWordRead(dstrproIDWordAddress, 8, EnuEQP.PLCRWType.ASCII_Data); //20160407 KEUN

                    dstrWordAddress = "W1680";
                    string strFilmID = m_pEqpAct.funWordRead(dstrWordAddress, 50, EnuEQP.PLCRWType.ASCII_Data);//1605023 keun strLotID -> strFilmID로 수정.

                    dstrValue = m_pEqpAct.funWordReadAction(true);

                    m_pEqpAct.subSetConfirmBit(strCompBit);

                    if (dstrValue[0].Length > 13)
                    {
                        dstrValue[0] = dstrValue[0].Substring(0, 13);
                    }
                    dstrLOTID  = dstrValue[0].Trim();
                    dintSlotID = Convert.ToInt32(dstrValue[1].Trim());

                    dstrLog.Append("FilmID:" + strFilmID + ",");//1605023 keun strLotID -> strFilmID로 수정.
                    dstrLog.Append("SlotID:" + dintSlotID + ",");
                    dstrLog.Append("Film Arrive   -> UnitID:" + intUnitID.ToString() + ",");
                    dstrLog.Append(intUnitID.ToString());
                    //this.pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, dstrLog.ToString());

                    if (this.pInfo.LOTID(dstrLOTID) == null)
                    {
                        subCreateLOTInfo(dstrLOTID, 0);
                    }

                    if (pInfo.LOTID(dstrLOTID).Slot(dintSlotID) == null)
                    {
                        pInfo.LOTID(dstrLOTID).AddSlot(dintSlotID);
                        pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("Slot No Error!! AddSlot!! LotID : {0}, SlotNo : {1}", dstrLOTID, dintSlotID));
                    }
                    if (string.IsNullOrEmpty(pInfo.LOTID(dstrLOTID).Slot(dintSlotID).GlassID))
                    {
                        pInfo.LOTID(dstrLOTID).Slot(dintSlotID).GlassID   = strFilmID.Trim();
                        pInfo.LOTID(dstrLOTID).Slot(dintSlotID).USE_COUNT = dintSlotID.ToString().PadLeft(3, '0');
                        //pInfo.LOTID(dstrLOTID).Slot(dintSlotID).PRODUCTID = dstrLOTID;
                        pInfo.LOTID(dstrLOTID).Slot(dintSlotID).PRODUCTID = strPROID;  //160407 KEUN
                    }

                    //dstrHGLSID = this.pInfo.LOTID(dstrLOTID).Slot(dintSlotID).H_PANELID;
                    pInfo.Unit(intUnitID).SubUnit(0).FilmID    = strFilmID; //1605023 keun strLotID -> strFilmID로 수정.
                    pInfo.Unit(intUnitID).SubUnit(0).FilmCount = dintSlotID;
                    pInfo.LOTID(dstrLOTID).Slot(dintSlotID).FilmExistUnitID = intUnitID;
                    pInfo.Unit(intUnitID).SubUnit(0).FilmExist = true;

                    pInfo.Unit(intUnitID).SubUnit(intSubUnitID).FilmID      = strFilmID; //1605023 keun strLotID -> strFilmID로 수정.
                    pInfo.Unit(intUnitID).SubUnit(intSubUnitID).FilmCount   = dintSlotID;
                    pInfo.LOTID(dstrLOTID).Slot(dintSlotID).FilmExistUnitID = intUnitID;
                    pInfo.Unit(intUnitID).SubUnit(intSubUnitID).FilmExist   = true;

                    //wordwrite시점은 MCC로 정보를 보내기전으로...
                    //MCC로 메세지 전송후 보내면 MCC에서 Data 읽을때 이전Data를 읽을 수 있음.
                    string dstrMCCWordAddress = "W1B80";
                    dstrMCCWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrMCCWordAddress, 64 * (intModuleNo - 7));
                    string strGlassData = "";
                    strGlassData += m_pEqpAct.funWordWriteString(4, "0000", EnuEQP.PLCRWType.ASCII_Data);//임시
                    strGlassData += m_pEqpAct.funWordWriteString(28, pInfo.LOTID(dstrLOTID).Slot(dintSlotID).GlassID.PadRight(28, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(8, dstrLOTID.PadRight(8, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(10, pInfo.All.CurrentHOSTPPID.PadRight(10, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, dintSlotID.ToString(), EnuEQP.PLCRWType.Int_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, "0", EnuEQP.PLCRWType.Int_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, "1", EnuEQP.PLCRWType.Int_Data);

                    m_pEqpAct.funWordWrite(dstrMCCWordAddress, strGlassData, EnuEQP.PLCRWType.Hex_Data);

                    if (intModuleNo == 7)
                    {
                        //this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.FilmJobCommand, 1006, dintPortID);     //Lot Start 지시
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedJobProcess, 1006, 2, 1, 2, dstrLOTID, dintSlotID);
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11MaterialProcEvent, 1016, intModuleNo, dstrLOTID, dintSlotID, intUnitID, 0);
                    }
                    pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11MaterialProcEvent, 1016, intModuleNo, dstrLOTID, dintSlotID, intUnitID, intSubUnitID);

                    //[2015/05/15]MCC Event Log(Add by HS)
                    InfoAct.clsSlot CurrentSlot = pInfo.LOTID(dstrLOTID).Slot(dintSlotID);

                    strMCCData  = "EVENT;";
                    strMCCData += "CEID_1016" + ",";
                    strMCCData += pInfo.Unit(intUnitID).SubUnit(intSubUnitID).ModuleID + ",";
                    strMCCData += CurrentSlot.STEPID + ",";
                    strMCCData += CurrentSlot.H_PANELID + ",";
                    strMCCData += CurrentSlot.LOTID + ",";
                    strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ";";

                    pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData);

                    // 20130220 이상창.. 여기가 위치가맞나..?
                    // 상태 변경 후에 보고하도록 변경해야하나..?
                    #region "Process Step - 생략"
                    //string dstrModuleID = pInfo.Unit(intUnitID).SubUnit(0).ModuleID;

                    //foreach (InfoAct.clsProcessStep tmpProcStep in this.pInfo.Unit(0).SubUnit(0).ProcessStepValues())
                    //{
                    //    if(dstrModuleID.Equals(tmpProcStep.StartModuleID) || dstrModuleID.Equals(tmpProcStep.EndModuleID))
                    //    {
                    //        if (tmpProcStep.ProcessEvent.ToUpper().Equals("START"))
                    //        {
                    //            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, 0, currentSlot.LOTID, currentSlot.SlotID);
                    //        }
                    //    }

                    //    if (!dbolProcChanged && dstrModuleID.Equals(tmpProcStep.StartModuleID))
                    //    {
                    //        if (pInfo.Unit(0).SubUnit(0).CurrGLS(currentSlot.H_PANELID) != null)
                    //        {
                    //            currentSlot.StepNo_OLD = currentSlot.StepNo;
                    //            currentSlot.StepNo = tmpProcStep.StepNO;
                    //        }

                    //        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedProcessStatusEvent, 23, 0, currentSlot.LOTID, currentSlot.SlotID);
                    //        //break;

                    //        dbolProcChanged = true;
                    //    }
                    //}

                    #endregion
                }
                #endregion
            }
            catch (Exception ex)
            {
                pInfo.All.RPCPPID = "";
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }