Пример #1
0
        /// <summary>
        /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다.
        /// </summary>
        /// <param name="msgTran">Primary Message의 Transaction</param>
        public void funPrimaryReceive(Transaction msgTran)
        {
            string  dstrModuleID    = "";
            string  dstrRCMD        = "";
            int     dintHCACK       = 0;
            int     dintCPACK       = 0;
            string  dstrData        = "";
            Boolean dbolLayerExist  = false;
            int     dintModuleCount = 0;

            string dstrIPID                = "";
            string dstrICID                = "";
            string dstrOPID                = "";
            string dstrOCID                = "";
            string dstrSTIF                = "";
            string dstrTempPortID          = "";
            string dstrTempCSTID           = "";
            string dstrHostGLSMapping10    = "";
            string dstrGLSProcessMapping10 = "";
            string dstrJOBID               = ""; //A2 추가됨

            int dintCPACK1 = 0;
            int dintCPACK2 = 0;
            int dintCPACK3 = 0;
            int dintCPACK4 = 0;
            int dintCPACK5 = 0;
            int dintCPACK6 = 0;
            int dintCPACK7 = 0;
            int dintTemp   = 0;
            //int dintTempSlotNo = 0;
            int    dintLOTIndex     = 0;
            int    dintPortID       = 0;
            int    dintSlotID       = 0;
            int    dintProcGLSCount = 0;
            string strPortType      = "";
            string strSlotInfo      = "";

            try
            {
                dstrRCMD        = msgTran.Primary().Item("RCMD").Getvalue().ToString();
                dintModuleCount = Convert.ToInt32(msgTran.Primary().Item("MODULECOUNT").Getvalue());
                //dstrModuleID = msgTran.Primary().Item("MODULEID" + 0).Getvalue().ToString().Trim();

                //dstrHostGLSMapping10 = "0".PadRight(56, '0');
                //dstrGLSProcessMapping10 = "0".PadRight(56, '0');

                dstrJOBID        = msgTran.Primary().Item("JOBID").Getvalue().ToString().Trim();
                dstrIPID         = msgTran.Primary().Item("IPID").Getvalue().ToString().Trim();
                dstrICID         = msgTran.Primary().Item("ICID").Getvalue().ToString().Trim();
                dstrOPID         = msgTran.Primary().Item("OPID").Getvalue().ToString().Trim();
                dstrOCID         = msgTran.Primary().Item("OCID").Getvalue().ToString().Trim();
                strSlotInfo      = msgTran.Primary().Item("SLOTINFO").Getvalue().ToString().Trim();
                dintProcGLSCount = Convert.ToInt32(msgTran.Primary().Item("SLOTNO").Getvalue().ToString());
                msgTran.Secondary2(strSecondaryMsgName).Item("SLOTNO").Putvalue(dintProcGLSCount);

                for (int dintLoop = 1; dintLoop <= dintProcGLSCount; dintLoop++)
                {
                    dintSlotID = Convert.ToInt32(msgTran.Primary().Item("SLOT_NO1" + (dintLoop - 1)).Getvalue().ToString());
                    msgTran.Secondary2(strSecondaryMsgName).Item("SLOT_NO1" + (dintLoop - 1)).Putvalue(dintSlotID);
                }

                //RCMD가 존재하는 경우
                if (dstrRCMD == "1001" || dstrRCMD == "1002")  //|| dstrRCMD == "3" ) //|| dstrRCMD == "30")
                {
                    for (int dintLoop = 1; dintLoop <= pInfo.PortCount; dintLoop++)
                    {
                        InfoAct.clsPort CurrentPort = pInfo.Port(dintLoop);
                        if (CurrentPort.HostReportPortID == dstrIPID || CurrentPort.HostReportPortID == dstrOPID)
                        {
                            dintPortID = dintLoop;
                            break;
                        }
                    }
                    dbolLayerExist = true;

                    //ModuleID가 존재하지 않는 경우
                    if (dbolLayerExist == false)
                    {
                        dintHCACK  = 3;         //3 = At least one parameter invalid
                        dintCPACK2 = 2;         //2 = Illegal Value specified for CPVAL
                    }
                    else
                    {
                        if (dintHCACK == 0)
                        {
                            switch (dstrRCMD)
                            {
                            case "1001":       //Job Process Start
                                break;

                            case "1030":
                                //Online Local인데 Start명령이 온 경우
                                if (this.pInfo.All.ControlState == "2")
                                {
                                    dintHCACK = 7;               //7 = Control State is Online Local. Equipment rejects command.
                                }
                                //이미 Start명령을 받았으면
                                else if (dstrRCMD == "1" && this.pInfo.Port(dintPortID).S2F41StartReceived == true)
                                {
                                    dintHCACK = 5;               //5 = Rejected, Already in desired Condition
                                }
                                //S3F101(CST Info)을 받지않고 바로 Start 명령을 받았을 경우
                                else if (dstrRCMD == "1" && this.pInfo.Port(dintPortID).S3F101Received == false)
                                {
                                    dintHCACK = 13;               //13 = Rejected, Eqp doesn't receive CASSETTE INFO
                                }
                                else if (this.pInfo.Port(dintPortID).PortState == "0")
                                {
                                    if (this.pInfo.Port(dintPortID).PortType == "1")      //Both, Input
                                    {
                                        dintHCACK  = 3;                                   //3 = At least one parameter invalid
                                        dintCPACK2 = 4;                                   //4 = No cassette (input port)
                                    }
                                    else if (this.pInfo.Port(dintPortID).PortType == "2") //Output
                                    {
                                        dintHCACK  = 3;                                   //3 = At least one parameter invalid
                                        dintCPACK4 = 5;                                   //5 = No cassette (output port)
                                    }
                                    else
                                    {
                                        dintHCACK  = 3;              //3 = At least one parameter invalid
                                        dintCPACK2 = 4;              //4 = No cassette (input port)
                                    }
                                }
                                else if ((this.pInfo.Port(dintPortID).CSTID.Trim() != dstrICID.Trim()) == false && (this.pInfo.Port(dintPortID).CSTID.Trim() != dstrOCID.Trim()) == false)
                                {
                                    if (this.pInfo.Port(dintPortID).PortType == "1")      //Both, Input
                                    {
                                        dintHCACK  = 3;                                   //3 = At least one parameter invalid
                                        dintCPACK3 = 6;                                   //6 = Cassette ID not match (input port)
                                    }
                                    else if (this.pInfo.Port(dintPortID).PortType == "2") //Output
                                    {
                                        dintHCACK  = 3;                                   //3 = At least one parameter invalid
                                        dintCPACK5 = 7;                                   //7 = Cassette ID not match (output port)
                                    }
                                    else
                                    {
                                        //dintHCACK = 3;           //3 = At least one parameter invalid
                                        //dintCPACK3 = 6;          //6 = Cassette ID not match (input port)
                                    }
                                }
                                //Port가 2(Wait)가 아닐때
                                else if (this.pInfo.Port(dintPortID).PortState != "2")
                                {
                                    if (this.pInfo.Port(dintPortID).PortType == "1")      //Both, Input
                                    {
                                        dintHCACK  = 3;                                   //3 = At least one parameter invalid
                                        dintCPACK3 = 8;                                   //8 = Port state error (input port)
                                    }
                                    else if (this.pInfo.Port(dintPortID).PortType == "2") //Output
                                    {
                                        dintHCACK  = 3;                                   //3 = At least one parameter invalid
                                        dintCPACK5 = 9;                                   //9 = Port state error (output port)
                                    }
                                    else
                                    {
                                        dintHCACK  = 3;              //3 = At least one parameter invalid
                                        dintCPACK3 = 8;              //8 = Port state error (input port)
                                    }
                                }
                                //////S3F101로 내려준 작업할 정보(MAP_STIF)와 S2F41(STIF)에서 내려준 정보가 다를때
                                ////else if (this.PInfo.Port(dintPortID).GLSCIMMapping10 != dstrSTIF)
                                ////{
                                ////    dintHCACK = 3;              //3 = At least one parameter invalid
                                ////    dintCPACK5 = 2;             //2 = Illegal Value specified for CPVAL
                                ////}
                                else
                                {
                                    //dintLOTIndex = this.pInfo.Port(dintPortID).LOTIndex;

                                    //HOST에서 받은 정보를 구성
                                    //S3F101에서 받은 Slot별 정보를 초기화한다.
                                    //for (int dintLoop = 1; dintLoop <= this.pInfo.EQP("Main").SlotCount; dintLoop++)
                                    //{
                                    //    this.pInfo.Port(dintPortID).Slot(dintLoop).DExist = "0";

                                    //    this.pInfo.Port(dintPortID).Slot(dintLoop).HExist = "0";

                                    //    if (this.pInfo.Port(dintPortID).Slot(dintLoop).MExist == "1")
                                    //    {
                                    //        this.pInfo.Port(dintPortID).Slot(dintLoop).GLASS_STATE = 1;           //1(Idle)
                                    //    }
                                    //}

                                    this.pInfo.Port(dintPortID).GLSProcessTotalCnt = 0;

                                    #region 이전소스
                                    //if (strSlotInfo.Substring(0,pInfo.Port(dintPortID).GLSLoaderMapping10.Length)  != pInfo.Port(dintPortID).GLSLoaderMapping10)
                                    //{
                                    //    dintHCACK = 3;              //3 = At least one parameter invalid
                                    //    dintCPACK6 = 2;             //2 = Illegal Value specified for CPVAL
                                    //    break;
                                    //}

                                    //S2F41에서 받은 정보로 다시 구성한다.

                                    //if (dintProcGLSCount == 0)     //전수임
                                    //{
                                    //    for (int dintLoop = 1; dintLoop <= this.pInfo.EQP("Main").SlotCount; dintLoop++)
                                    //    {
                                    //        if (this.pInfo.Port(dintPortID).Slot(dintLoop).MExist == "1")      //실물이 있는 경우
                                    //        {
                                    //            if (dstrSTIF.Substring(dintLoop - 1, 1) == "1")                 //실물이 있고 작업할 Slot
                                    //            {
                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).DExist = "1";
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).DExist = "1";

                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).HExist = "1";
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).HExist = "1";

                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).GLASS_STATE = 2;     //2(Selected to Process)
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).GLASS_STATE = 2;            //2(Selected to Process)

                                    //                dstrHostGLSMapping10 = dstrHostGLSMapping10.Substring(0, dintLoop - 1) + "1" + dstrHostGLSMapping10.Substring(dintLoop);
                                    //                dstrGLSProcessMapping10 = dstrGLSProcessMapping10.Substring(0, dintLoop - 1) + "1" + dstrGLSProcessMapping10.Substring(dintLoop);
                                    //            }
                                    //            else           //실물은 있고 작업을 하지 않을 경우
                                    //            {
                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).DExist = "0";
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).DExist = "0";

                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).HExist = "0";
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).HExist = "0";

                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).GLASS_STATE = 1;   //1(Idle)
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).GLASS_STATE = 1;

                                    //                dstrHostGLSMapping10 = dstrHostGLSMapping10.Substring(0, dintLoop - 1) + "0" + dstrHostGLSMapping10.Substring(dintLoop);
                                    //                dstrGLSProcessMapping10 = dstrGLSProcessMapping10.Substring(0, dintLoop - 1) + "0" + dstrGLSProcessMapping10.Substring(dintLoop);
                                    //            }
                                    //        }
                                    //        else   //실물이 없는 경우
                                    //        {
                                    //            if (dstrSTIF.Substring(dintLoop - 1, 1) == "1")                 //실물이 없는데 작업하라는 경우
                                    //            {
                                    //                //여기는 수행하지 않음(여기로 들어오면 Validation Error임).

                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).DExist = "1";
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).DExist = "1";

                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).HExist = "1";
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).HExist = "1";

                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).GLASS_STATE = 1;     //2(Selected to Process)
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).GLASS_STATE = 1;            //2(Selected to Process)

                                    //                dstrHostGLSMapping10 = dstrHostGLSMapping10.Substring(0, dintLoop - 1) + "1" + dstrHostGLSMapping10.Substring(dintLoop);
                                    //                dstrGLSProcessMapping10 = dstrGLSProcessMapping10.Substring(0, dintLoop - 1) + "1" + dstrGLSProcessMapping10.Substring(dintLoop);

                                    //                dintHCACK = 3;              //3 = At least one parameter invalid
                                    //                dintCPACK7 = 2;             //2 = Illegal Value specified for CPVAL
                                    //            }
                                    //            else           //실물도 없고 작업을 하지 않을 경우
                                    //            {
                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).DExist = "0";
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).DExist = "0";

                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).HExist = "0";
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).HExist = "0";

                                    //                //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintLoop).GLASS_STATE = 0;   //No State
                                    //                this.pInfo.Port(dintPortID).Slot(dintLoop).GLASS_STATE = 0;          //No State

                                    //                dstrHostGLSMapping10 = dstrHostGLSMapping10.Substring(0, dintLoop - 1) + "0" + dstrHostGLSMapping10.Substring(dintLoop);
                                    //                dstrGLSProcessMapping10 = dstrGLSProcessMapping10.Substring(0, dintLoop - 1) + "0" + dstrGLSProcessMapping10.Substring(dintLoop);
                                    //            }
                                    //        }
                                    //    }
                                    //}
                                    //else    //전수가 아닌경우
                                    //{
                                    //    for (int dintLoop = 1; dintLoop <= dintProcGLSCount; dintLoop++)
                                    //    {
                                    //        dintSlotID = Convert.ToInt32(msgTran.Primary().Item("SLOT_NO" + (dintLoop - 1)).Getvalue().ToString());

                                    //        if (dintSlotID > pInfo.EQP("Main").SlotCount || dintSlotID <= 0)
                                    //        {
                                    //            dintHCACK = 3;           //3 = At least one parameter invalid
                                    //            dintCPACK7 = 2;
                                    //            break;
                                    //        }
                                    //        if (this.pInfo.Port(dintPortID).Slot(dintSlotID).MExist == "1")      //실물이 있고 작업을 하는 경우
                                    //        {
                                    //            //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintSlotID).DExist = "1";
                                    //            this.pInfo.Port(dintPortID).Slot(dintSlotID).DExist = "1";

                                    //            //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintSlotID).HExist = "1";
                                    //            this.pInfo.Port(dintPortID).Slot(dintSlotID).HExist = "1";

                                    //            //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintSlotID).GLASS_STATE = 2;     //2(Selected to Process)
                                    //            this.pInfo.Port(dintPortID).Slot(dintSlotID).GLASS_STATE = 2;            //2(Selected to Process)

                                    //            dstrHostGLSMapping10 = dstrHostGLSMapping10.Substring(0, dintSlotID - 1) + "1" + dstrHostGLSMapping10.Substring(dintSlotID);
                                    //            dstrGLSProcessMapping10 = dstrGLSProcessMapping10.Substring(0, dintSlotID - 1) + "1" + dstrGLSProcessMapping10.Substring(dintSlotID);
                                    //        }
                                    //        else   //실물이 없는데 작업을 하라는 경우
                                    //        {
                                    //            //여기는 수행하지 않음(여기로 들어오면 Validation Error임).
                                    //            //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintSlotID).DExist = "0";
                                    //            this.pInfo.Port(dintPortID).Slot(dintSlotID).DExist = "0";

                                    //            //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintSlotID).HExist = "0";
                                    //            this.pInfo.Port(dintPortID).Slot(dintSlotID).HExist = "0";

                                    //            //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintSlotID).GLASS_STATE = 0;
                                    //            this.pInfo.Port(dintPortID).Slot(dintSlotID).GLASS_STATE = 0;

                                    //            dstrHostGLSMapping10 = dstrHostGLSMapping10.Substring(0, dintSlotID - 1) + "0" + dstrHostGLSMapping10.Substring(dintSlotID);
                                    //            dstrGLSProcessMapping10 = dstrGLSProcessMapping10.Substring(0, dintSlotID - 1) + "0" + dstrGLSProcessMapping10.Substring(dintSlotID);

                                    //            dintHCACK = 3;              //3 = At least one parameter invalid
                                    //            dintCPACK7 = 2;             //2 = Illegal Value specified for CPVAL
                                    //        }
                                    //    }
                                    //}

                                    ////HOST에서 받은 정보를 재저장한다.
                                    //this.pInfo.Port(dintPortID).GLSHostMapping10 = dstrHostGLSMapping10;
                                    ////this.PInfo.LOTIndex(dintLOTIndex).GLSHostMapping10 = dstrHostGLSMapping10;

                                    //this.pInfo.Port(dintPortID).GLSProcessMapping10 = dstrGLSProcessMapping10;
                                    ////this.PInfo.LOTIndex(dintLOTIndex).GLSProcessMapping10 = dstrGLSProcessMapping10;

                                    //this.pInfo.Port(dintPortID).GLSProcessTotalCnt = FunStringH.funStringCnt(dstrGLSProcessMapping10, "1");
                                    ////this.PInfo.LOTIndex(dintLOTIndex).GLSProcessTotalCnt = FunStringH.funStringCnt(dstrGLSProcessMapping10, "1");

                                    ////this.PInfo.LOTIndex(dintLOTIndex).GLSRealMapping10 = this.PInfo.Port(dintPortID).GLSRealMapping10;
                                    ////this.PInfo.LOTIndex(dintLOTIndex).GLSRealMappingCnt = this.PInfo.Port(intPortID).GLSRealMappingCnt;

                                    ////작업할 글래스가 한장인지여부 체크
                                    ////string dstrTempMapping = "";
                                    ////for (int dintBack = 27; dintBack >= 0; dintBack--)
                                    ////{
                                    ////    dstrTempMapping += dstrGLSProcessMapping10.Substring(dintBack, 1);
                                    ////}
                                    ////dstrGLSProcessMapping10 = dstrTempMapping;

                                    //if (this.pInfo.Port(dintPortID).GLSProcessTotalCnt == 1)
                                    //{
                                    //    this.pInfo.Port(dintPortID).SingleJOB = true;
                                    //}
                                    //else
                                    //{
                                    //    this.pInfo.Port(dintPortID).SingleJOB = false;

                                    //    //작업할 첫글래스 여부저장
                                    //    int dintTempSlot = 1;
                                    //    dintTempSlot = dstrGLSProcessMapping10.IndexOf("1") + 1;
                                    //    this.pInfo.Port(dintPortID).Slot(dintTempSlot).JOBStart = true;
                                    //    //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintTempSlot).JOBStart = true;

                                    //    //작업할 마지막글래스 여부저장
                                    //    dintTempSlot = dstrGLSProcessMapping10.LastIndexOf("1") + 1;
                                    //    this.pInfo.Port(dintPortID).Slot(dintTempSlot).JOBEnd = true;
                                    //    //this.PInfo.LOTIndex(dintLOTIndex).Slot(dintTempSlot).JOBEnd = true;
                                    //}
                                    #endregion
                                }
                                break;

                            case "1002":       //Job Process End(Cancel)
                                if (!(this.pInfo.Port(dintPortID).PortState == "1" || this.pInfo.Port(dintPortID).PortState == "2" || this.pInfo.Port(dintPortID).PortState == "3"))
                                {
                                    if (this.pInfo.Port(dintPortID).PortType == "0" || this.pInfo.Port(dintPortID).PortType == "1") //Both, Input
                                    {
                                        dintHCACK  = 3;                                                                             //3 = At least one parameter invalid
                                        dintCPACK2 = 8;                                                                             //8 = Port state error (input port)
                                    }
                                    else                                                                                            //Output
                                    {
                                        dintHCACK  = 3;                                                                             //3 = At least one parameter invalid
                                        dintCPACK4 = 9;                                                                             //9 = Port state error (output port)
                                    }
                                }
                                else if (this.pInfo.Port(dintPortID).CSTID != dstrICID)                                             //CSTID가 다를때
                                {
                                    if (this.pInfo.Port(dintPortID).PortType == "0" || this.pInfo.Port(dintPortID).PortType == "1") //Both, Input
                                    {
                                        dintHCACK  = 3;                                                                             //3 = At least one parameter invalid
                                        dintCPACK3 = 6;                                                                             //6 = Cassette ID not match (input port)
                                    }
                                    else                                                                                            //Output
                                    {
                                        dintHCACK  = 3;                                                                             //3 = At least one parameter invalid
                                        dintCPACK5 = 7;                                                                             //7 = Cassette ID not match (output port)
                                    }
                                }

                                break;

                            case "3":       //Job Process Abort
                                if (this.pInfo.Port(dintPortID).PortState != "4")
                                {
                                    if (this.pInfo.Port(dintPortID).PortType == "0" || this.pInfo.Port(dintPortID).PortType == "1") //Both, Input
                                    {
                                        dintHCACK  = 3;                                                                             //3 = At least one parameter invalid
                                        dintCPACK2 = 8;                                                                             //8 = Port state error (input port)
                                    }
                                    else                                                                                            //Output
                                    {
                                        dintHCACK  = 3;                                                                             //3 = At least one parameter invalid
                                        dintCPACK4 = 9;                                                                             //9 = Port state error (output port)
                                    }
                                }
                                else if (this.pInfo.Port(dintPortID).CSTID != dstrICID)                                             //CSTID가 다를때
                                {
                                    if (this.pInfo.Port(dintPortID).PortType == "0" || this.pInfo.Port(dintPortID).PortType == "1") //Both, Input
                                    {
                                        dintHCACK  = 3;                                                                             //3 = At least one parameter invalid
                                        dintCPACK3 = 6;                                                                             //6 = Cassette ID not match (input port)
                                    }
                                    else                                                                                            //Output
                                    {
                                        dintHCACK  = 3;                                                                             //3 = At least one parameter invalid
                                        dintCPACK5 = 7;                                                                             //7 = Cassette ID not match (output port)
                                    }
                                }
                                break;
                            }
                        }
                    }
                    if (dintHCACK == 0)
                    {
                        //여기까지 오면 정상임
                        switch (dstrRCMD)
                        {
                        case "1001":                                               //Material Job Process Start
                            this.pInfo.Port(dintPortID).S2F41StartReceived = true; //HOST로 부터 S2F41(Start) 받았음을 저장
                            //[2015/06/23]FI02에서만 보고됨(Add by HS)
                            if (dintPortID == 2)
                            {
                                this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.FilmJobCommand, 1001, dintPortID);         //Lot Start 지시
                            }
                            break;

                        case "30":
                            this.pInfo.Port(dintPortID).S2F41StartReceived = true;                                     //HOST로 부터 S2F41(Start) 받았음을 저장
                            this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.FilmJobCommand, 1001, dintPortID); //Lot Start 지시
                            break;

                        case "1002":                                                             //Job Process End(Cancel)
                            this.pInfo.Port(dintPortID).RelatedJOBProcessEventChangeBYWHO = "1"; //By HOST

                            //PLC로 Cancel 명령을 써준다.
                            this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.FilmJobCommand, 1002, dintPortID);         //Lot Start 지시
                            pInfo.Port(dintPortID).CancelFlag = true;
                            break;

                        case "3":                                                                //Job Process Abort
                            this.pInfo.Port(dintPortID).RelatedJOBProcessEventChangeBYWHO = "1"; //By HOST

                            this.pInfo.Port(dintPortID).EndCode   = "3";
                            this.pInfo.Port(dintPortID).LOTStatus = "A";
                            pInfo.Port(dintPortID).AbortFlag      = true;

                            //Unload Port일경우는 바로 Cancel(Abort) 명령을 써준다.
                            this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.FilmJobCommand, 2, dintPortID);         //Lot Start 지시
                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedJobProcess, 3, 0, 0, pInfo.Port(dintPortID).CSTID, dintPortID, "");
                            break;
                        }
                    }
                }
                else                //RCMD가 존재하지 않는 경우
                {
                    dintHCACK  = 1; //1 = Command does not exist
                    dintCPACK2 = 2; //2 = Illegal Value specified for CPVAL
                }

                //HOST로 S2F42 보고
                msgTran.Secondary2(strSecondaryMsgName).Item("RCMD").Putvalue(dstrRCMD);
                msgTran.Secondary2(strSecondaryMsgName).Item("JOBID1").Putvalue("JOBID");
                msgTran.Secondary2(strSecondaryMsgName).Item("JOBID").Putvalue(dstrJOBID);
                msgTran.Secondary2(strSecondaryMsgName).Item("IPID1").Putvalue("IPID");
                msgTran.Secondary2(strSecondaryMsgName).Item("IPID").Putvalue(dstrIPID);
                msgTran.Secondary2(strSecondaryMsgName).Item("ICID1").Putvalue("ICID");
                msgTran.Secondary2(strSecondaryMsgName).Item("ICID").Putvalue(dstrICID);
                msgTran.Secondary2(strSecondaryMsgName).Item("OPID1").Putvalue("OPID");
                msgTran.Secondary2(strSecondaryMsgName).Item("OPID").Putvalue(dstrOPID);
                msgTran.Secondary2(strSecondaryMsgName).Item("OCID1").Putvalue("OCID");
                msgTran.Secondary2(strSecondaryMsgName).Item("OCID").Putvalue(dstrOCID);
                msgTran.Secondary2(strSecondaryMsgName).Item("SLOTINFO1").Putvalue("SLOTINFO");
                msgTran.Secondary2(strSecondaryMsgName).Item("SLOTINFO").Putvalue(strSlotInfo);
                msgTran.Secondary2(strSecondaryMsgName).Item("ORDER").Putvalue("ORDER");
                msgTran.Secondary2(strSecondaryMsgName).Item("SLOTNO").Putvalue(dintProcGLSCount);

                msgTran.Secondary2(strSecondaryMsgName).Item("HCACK").Putvalue(dintHCACK);
                msgTran.Secondary2(strSecondaryMsgName).Item("CPACK1").Putvalue(dintCPACK1);
                msgTran.Secondary2(strSecondaryMsgName).Item("CPACK2").Putvalue(dintCPACK2);
                msgTran.Secondary2(strSecondaryMsgName).Item("CPACK3").Putvalue(dintCPACK3);
                msgTran.Secondary2(strSecondaryMsgName).Item("CPACK4").Putvalue(dintCPACK4);
                msgTran.Secondary2(strSecondaryMsgName).Item("CPACK5").Putvalue(dintCPACK5);
                msgTran.Secondary2(strSecondaryMsgName).Item("CPACK6").Putvalue(dintCPACK6);
                msgTran.Secondary2(strSecondaryMsgName).Item("CPACK7").Putvalue(dintCPACK7);

                funSendReply2(msgTran, strSecondaryMsgName);
            }
            catch (Exception error)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, error.ToString());
                return;
            }
        }
Пример #2
0
        private void subLotInfomationData(int intPortID, string strCSTID, string strLOTID)
        {
            string strAddress = "W9000";

            try
            {
                InfoAct.clsPort CurrentPort = pInfo.Port(intPortID);
                InfoAct.clsLOT  CurrentLot  = pInfo.LOTID(strLOTID);

                strAddress = FunTypeConversion.funAddressAdd(strAddress, 1024 * (intPortID - 1));

                pEqpAct.funWordWrite(strAddress, ("P0" + intPortID).PadRight(4, ' '), EnuEQP.PLCRWType.ASCII_Data);
                strAddress = FunTypeConversion.funAddressAdd(strAddress, 2);

                pEqpAct.funWordWrite(strAddress, strLOTID.PadRight(20, ' '), EnuEQP.PLCRWType.ASCII_Data);
                strAddress = FunTypeConversion.funAddressAdd(strAddress, 10);

                pEqpAct.funWordWrite(strAddress, strCSTID.PadRight(20, ' '), EnuEQP.PLCRWType.ASCII_Data);
                strAddress = FunTypeConversion.funAddressAdd(strAddress, 10);

                pEqpAct.funWordWrite(strAddress, CurrentLot.LOTJudge.PadRight(2, ' '), EnuEQP.PLCRWType.ASCII_Data);
                strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);

                pEqpAct.funWordWrite(strAddress, CurrentLot.LSORTTYPE.PadRight(2, ' '), EnuEQP.PLCRWType.ASCII_Data);
                strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);

                pEqpAct.funWordWrite(strAddress, CurrentLot.OPERID.PadRight(10, ' '), EnuEQP.PLCRWType.ASCII_Data);
                strAddress = FunTypeConversion.funAddressAdd(strAddress, 5);

                pEqpAct.funWordWrite(strAddress, CurrentLot.PRODID.PadRight(20, ' '), EnuEQP.PLCRWType.ASCII_Data);
                strAddress = FunTypeConversion.funAddressAdd(strAddress, 10);

                pEqpAct.funWordWrite(strAddress, CurrentLot.QTY.PadRight(2, ' '), EnuEQP.PLCRWType.ASCII_Data);
                strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);
                strAddress = FunTypeConversion.funAddressAdd(strAddress, 24);

                string[] arrData = new string[25];
                for (int dintLoop = 0; dintLoop < pInfo.Port(intPortID).SlotCount; dintLoop++)
                {
                    if (string.IsNullOrEmpty(CurrentPort.Slot(dintLoop + 1).GLSID))
                    {
                        pEqpAct.funWordWrite(strAddress, "0".PadLeft(128, '0'), EnuEQP.PLCRWType.Hex_Data);
                        pEqpAct.funWordWrite(strAddress, (dintLoop + 1).ToString(), EnuEQP.PLCRWType.Int_Data);
                        strAddress = FunTypeConversion.funAddressAdd(strAddress, 32);
                    }
                    else
                    {
                        if (CurrentLot.GLSID(CurrentPort.Slot(dintLoop + 1).GLSID) == null)
                        {
                            pEqpAct.funWordWrite(strAddress, "0".PadLeft(128, '0'), EnuEQP.PLCRWType.Hex_Data);
                            pEqpAct.funWordWrite(strAddress, (dintLoop + 1).ToString(), EnuEQP.PLCRWType.Int_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 32);
                        }
                        else
                        {
                            pEqpAct.funWordWrite(strAddress, (dintLoop + 1).ToString(), EnuEQP.PLCRWType.Int_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);

                            pEqpAct.funWordWrite(strAddress, CurrentLot.GLSID(CurrentPort.Slot(dintLoop + 1).GLSID).GLSID.PadRight(20, ' '), EnuEQP.PLCRWType.ASCII_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 10);

                            pEqpAct.funWordWrite(strAddress, CurrentLot.GLSID(CurrentPort.Slot(dintLoop + 1).GLSID).HostPPID.PadRight(20, ' '), EnuEQP.PLCRWType.ASCII_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 10);

                            pEqpAct.funWordWrite(strAddress, CurrentLot.GLSID(CurrentPort.Slot(dintLoop + 1).GLSID).GLSJudge.PadRight(2, ' '), EnuEQP.PLCRWType.ASCII_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);

                            pEqpAct.funWordWrite(strAddress, CurrentLot.GLSID(CurrentPort.Slot(dintLoop + 1).GLSID).SMPLFLAG.PadRight(2, ' '), EnuEQP.PLCRWType.ASCII_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);

                            pEqpAct.funWordWrite(strAddress, CurrentLot.GLSID(CurrentPort.Slot(dintLoop + 1).GLSID).RWKCNT.PadRight(2, ' '), EnuEQP.PLCRWType.ASCII_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);

                            string strPPID = CurrentLot.GLSID(CurrentPort.Slot(dintLoop + 1).GLSID).HostPPID;
                            pEqpAct.funWordWrite(strAddress, pInfo.Unit(0).SubUnit(0).HOSTPPID(strPPID).CLEANER_EQPPPID, EnuEQP.PLCRWType.Int_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);

                            pEqpAct.funWordWrite(strAddress, pInfo.Unit(0).SubUnit(0).HOSTPPID(strPPID).Oven1_EQPPPID, EnuEQP.PLCRWType.Int_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);

                            pEqpAct.funWordWrite(strAddress, (Convert.ToSingle(pInfo.Unit(0).SubUnit(0).HOSTPPID(strPPID).Tickness) * 100).ToString(), EnuEQP.PLCRWType.Int_Data);
                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 1);

                            strAddress = FunTypeConversion.funAddressAdd(strAddress, 5);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
Пример #3
0
        /// <summary>
        /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다.
        /// </summary>
        /// <param name="msgTran">Primary Message의 Transaction</param>
        public void funPrimaryReceive(Transaction msgTran)
        {
            string    dstrModuleID     = "";
            string    dstrSFCD         = "";
            int       dintIndex        = 0;
            string    dstrLOTID        = "";
            int       dintSlotID       = 0;
            Hashtable dhtGLSID         = new Hashtable();
            int       dintSendIndex    = 0;
            Boolean   dbolLayerExist   = false;
            bool      dbolLayer1Report = false;
            bool      dbolLayer2Report = false;
            int       dintUnitID       = 0;
            int       dintSubUnitID    = 0;

            try
            {
                dstrSFCD     = msgTran.Primary().Item("SFCD").Getvalue().ToString().Trim();
                dstrModuleID = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim();

                switch (dstrSFCD)
                {
                case "1":
                    if (dstrModuleID != this.pInfo.Unit(3).SubUnit(0).ModuleID)
                    {
                        msgTran.Secondary2("S1F6WrongMODID").Item("MODULEID").Putvalue(dstrModuleID);
                        msgTran.Secondary2("S1F6WrongMODID").Item("SFCD").Putvalue(dstrSFCD);

                        funSendReply2(msgTran, "S1F6WrongMODID");

                        return;
                    }
                    break;

                case "2":

                    if (dstrModuleID == pInfo.Unit(3).SubUnit(0).ModuleID)
                    {
                        dintUnitID    = 0;
                        dintSubUnitID = 0;
                    }
                    else if (dstrModuleID == this.pInfo.Unit(1).SubUnit(0).ModuleID || dstrModuleID == this.pInfo.Unit(2).SubUnit(0).ModuleID)
                    {
                        if (dstrModuleID == this.pInfo.Unit(1).SubUnit(0).ModuleID)
                        {
                            dintUnitID    = 1;
                            dintSubUnitID = 0;
                        }
                        else
                        {
                            dintUnitID    = 2;
                            dintSubUnitID = 0;
                        }
                    }
                    else
                    {
                        for (int dintLoop = 0; dintLoop < pInfo.Unit(1).SubUnitCount; dintLoop++)
                        {
                            if (dstrModuleID == pInfo.Unit(1).SubUnit(dintLoop + 1).ModuleID)
                            {
                                dbolLayerExist = true;
                                dintUnitID     = 1;
                                dintSubUnitID  = dintLoop + 1;
                            }

                            if (dbolLayerExist)
                            {
                                break;
                            }
                        }
                        if (dbolLayerExist == false)
                        {
                            for (int dintLoop = 0; dintLoop < pInfo.Unit(2).SubUnitCount; dintLoop++)
                            {
                                if (dstrModuleID == pInfo.Unit(2).SubUnit(dintLoop + 1).ModuleID)
                                {
                                    dbolLayerExist = true;
                                    dintUnitID     = 2;
                                    dintSubUnitID  = dintLoop + 1;
                                }

                                if (dbolLayerExist)
                                {
                                    break;
                                }
                            }
                        }

                        if (!dbolLayerExist)
                        {
                            msgTran.Secondary2("S1F6WrongMODID").Item("MODULEID").Putvalue(dstrModuleID);
                            msgTran.Secondary2("S1F6WrongMODID").Item("SFCD").Putvalue(dstrSFCD);

                            funSendReply2(msgTran, "S1F6WrongMODID");
                            return;
                        }
                    }
                    break;

                case "3":
                    if (dstrModuleID != this.pInfo.Unit(3).SubUnit(0).ModuleID&& dstrModuleID != this.pInfo.Unit(3).SubUnit(7).ModuleID &&
                        dstrModuleID != this.pInfo.Unit(3).SubUnit(8).ModuleID)
                    {
                        msgTran.Secondary2("S1F6WrongMODID").Item("MODULEID").Putvalue(dstrModuleID);
                        msgTran.Secondary2("S1F6WrongMODID").Item("SFCD").Putvalue(dstrSFCD);

                        funSendReply2(msgTran, "S1F6WrongMODID");

                        return;
                    }
                    break;

                case "4":
                    if (dstrModuleID != this.pInfo.Unit(3).SubUnit(0).ModuleID)
                    {
                        msgTran.Secondary2("S1F6WrongMODID").Item("MODULEID").Putvalue(dstrModuleID);
                        msgTran.Secondary2("S1F6WrongMODID").Item("SFCD").Putvalue(dstrSFCD);

                        funSendReply2(msgTran, "S1F6WrongMODID");

                        return;
                    }
                    break;

                case "31":
                    if (dstrModuleID != this.pInfo.Unit(3).SubUnit(0).ModuleID)
                    {
                        msgTran.Secondary2("S1F6WrongMODID").Item("MODULEID").Putvalue(dstrModuleID);
                        msgTran.Secondary2("S1F6WrongMODID").Item("SFCD").Putvalue(dstrSFCD);

                        funSendReply2(msgTran, "S1F6WrongMODID");

                        return;
                    }
                    break;
                }


                //for (int dintLoop = 0; dintLoop <= pInfo.UnitCount; dintLoop++)
                //{
                //    for (int dintLoop2 = 0; dintLoop2 <= pInfo.Unit(dintLoop).SubUnitCount; dintLoop2++)
                //    {
                //        if (dstrModuleID == pInfo.Unit(dintLoop).SubUnit(dintLoop2).ModuleID)
                //        {
                //            dintUnitID = dintLoop;
                //            dintSubUnitID = dintLoop2;
                //            dbolLayerExist = true;
                //            break;
                //        }
                //    }
                //    if (dbolLayerExist)
                //    {
                //        break;
                //    }
                //}

                switch (dstrSFCD)
                {
                case "1":           //EOID별 EOV값 List 보고
                {
                    msgTran.Secondary2("S1F6SFCD1").Item("MODULEID").Putvalue(dstrModuleID);
                    msgTran.Secondary2("S1F6SFCD1").Item("SFCD").Putvalue(dstrSFCD);
                    msgTran.Secondary2("S1F6SFCD1").Item("EOIDCNT").Putvalue(this.pInfo.All.HOSTReportEOIDCount);

                    int eoidCount = pInfo.Unit(0).SubUnit(0).EOIDCount;
                    for (int dintLoop = 1; dintLoop <= eoidCount; dintLoop++)
                    {
                        InfoAct.clsEOID eoID = pInfo.Unit(0).SubUnit(0).EOID(dintLoop);
                        msgTran.Secondary2("S1F6SFCD1").Item("EOMDCNT" + dintSendIndex).Putvalue(1);
                        msgTran.Secondary2("S1F6SFCD1").Item("EOID" + dintSendIndex).Putvalue(eoID.EOID);
                        msgTran.Secondary2("S1F6SFCD1").Item("EOMD" + dintSendIndex + 0).Putvalue(eoID.EOMD);
                        msgTran.Secondary2("S1F6SFCD1").Item("EOV" + dintSendIndex + 0).Putvalue(eoID.EOV);
                        dintSendIndex += 1;
                    }

                    funSendReply2(msgTran, "S1F6SFCD1");
                }
                break;

                case "2":
                    msgTran.Secondary2("S1F6SFCD2").Item("MODULEID").Putvalue(dstrModuleID);
                    msgTran.Secondary2("S1F6SFCD2").Item("SFCD").Putvalue(dstrSFCD);

                    int dintCount = 0;
                    if (dintUnitID == 0)
                    {
                        dintCount = pInfo.Unit(1).SubUnitCount + pInfo.Unit(2).SubUnitCount;
                        msgTran.Secondary2("S1F6SFCD2").Item("PORTCNT").Putvalue(dintCount);

                        for (int dintLoop = 1; dintLoop <= dintCount; dintLoop++)
                        {
                            InfoAct.clsPort CurrentPort = pInfo.Port(dintLoop);

                            msgTran.Secondary2("S1F6SFCD2").Item("PORTID" + (dintLoop - 1)).Putvalue(CurrentPort.HostReportPortID);
                            msgTran.Secondary2("S1F6SFCD2").Item("PTSTATE" + (dintLoop - 1)).Putvalue(CurrentPort.PortState);
                            msgTran.Secondary2("S1F6SFCD2").Item("PTTYPE" + (dintLoop - 1)).Putvalue(CurrentPort.PortType);
                            msgTran.Secondary2("S1F6SFCD2").Item("PTMODE" + (dintLoop - 1)).Putvalue(CurrentPort.PortMode);
                            msgTran.Secondary2("S1F6SFCD2").Item("SORTTYPE" + (dintLoop - 1)).Putvalue(0);

                            msgTran.Secondary2("S1F6SFCD2").Item("CSTID" + (dintLoop - 1)).Putvalue(CurrentPort.CSTID);
                            msgTran.Secondary2("S1F6SFCD2").Item("CSTTYPE" + (dintLoop - 1)).Putvalue(CurrentPort.CSTType);
                            msgTran.Secondary2("S1F6SFCD2").Item("MAPSTIF" + (dintLoop - 1)).Putvalue(CurrentPort.GLSLoaderMapping10);
                            msgTran.Secondary2("S1F6SFCD2").Item("CURSTIF" + (dintLoop - 1)).Putvalue(CurrentPort.GLSRealMapping10);
                            msgTran.Secondary2("S1F6SFCD2").Item("BATORDER" + (dintLoop - 1)).Putvalue(CurrentPort.BATCH_ORDER);

                            dintSendIndex += 1;
                        }
                    }
                    else
                    {
                        if (dintSubUnitID == 0)
                        {
                            msgTran.Secondary2("S1F6SFCD2").Item("PORTCNT").Putvalue(pInfo.Unit(dintUnitID).SubUnitCount);

                            if (dintUnitID == 1)
                            {
                                dintCount = 0;
                            }
                            else
                            {
                                dintCount = 4;
                            }

                            for (int dintLoop = 1; dintLoop <= pInfo.Unit(dintUnitID).SubUnitCount; dintLoop++)
                            {
                                InfoAct.clsPort CurrentPort = pInfo.Port(dintLoop + dintCount);

                                msgTran.Secondary2("S1F6SFCD2").Item("PORTID" + (dintLoop - 1)).Putvalue(CurrentPort.HostReportPortID);
                                msgTran.Secondary2("S1F6SFCD2").Item("PTSTATE" + (dintLoop - 1)).Putvalue(CurrentPort.PortState);
                                msgTran.Secondary2("S1F6SFCD2").Item("PTTYPE" + (dintLoop - 1)).Putvalue(CurrentPort.PortType);
                                msgTran.Secondary2("S1F6SFCD2").Item("PTMODE" + (dintLoop - 1)).Putvalue(CurrentPort.PortMode);
                                msgTran.Secondary2("S1F6SFCD2").Item("SORTTYPE" + (dintLoop - 1)).Putvalue(0);

                                msgTran.Secondary2("S1F6SFCD2").Item("CSTID" + (dintLoop - 1)).Putvalue(CurrentPort.CSTID);
                                msgTran.Secondary2("S1F6SFCD2").Item("CSTTYPE" + (dintLoop - 1)).Putvalue(CurrentPort.CSTType);
                                msgTran.Secondary2("S1F6SFCD2").Item("MAPSTIF" + (dintLoop - 1)).Putvalue(CurrentPort.GLSLoaderMapping10);
                                msgTran.Secondary2("S1F6SFCD2").Item("CURSTIF" + (dintLoop - 1)).Putvalue(CurrentPort.GLSRealMapping10);
                                msgTran.Secondary2("S1F6SFCD2").Item("BATORDER" + (dintLoop - 1)).Putvalue(CurrentPort.BATCH_ORDER);

                                dintSendIndex += 1;
                            }
                        }
                        else
                        {
                            msgTran.Secondary2("S1F6SFCD2").Item("PORTCNT").Putvalue(1);

                            int dintPortNo = 0;
                            if (dintUnitID == 1)
                            {
                                dintPortNo = dintSubUnitID;
                            }
                            else
                            {
                                dintPortNo = dintSubUnitID + 4;
                            }

                            InfoAct.clsPort CurrentPort = pInfo.Port(dintPortNo);

                            msgTran.Secondary2("S1F6SFCD2").Item("PORTID" + 0).Putvalue(CurrentPort.HostReportPortID);
                            msgTran.Secondary2("S1F6SFCD2").Item("PTSTATE" + 0).Putvalue(CurrentPort.PortState);
                            msgTran.Secondary2("S1F6SFCD2").Item("PTTYPE" + 0).Putvalue(CurrentPort.PortType);
                            msgTran.Secondary2("S1F6SFCD2").Item("PTMODE" + 0).Putvalue(CurrentPort.PortMode);
                            msgTran.Secondary2("S1F6SFCD2").Item("SORTTYPE" + 0).Putvalue(0);

                            msgTran.Secondary2("S1F6SFCD2").Item("CSTID" + 0).Putvalue(CurrentPort.CSTID);
                            msgTran.Secondary2("S1F6SFCD2").Item("CSTTYPE" + 0).Putvalue(CurrentPort.CSTType);
                            msgTran.Secondary2("S1F6SFCD2").Item("MAPSTIF" + 0).Putvalue(CurrentPort.GLSLoaderMapping10);
                            msgTran.Secondary2("S1F6SFCD2").Item("CURSTIF" + 0).Putvalue(CurrentPort.GLSRealMapping10);
                            msgTran.Secondary2("S1F6SFCD2").Item("BATORDER" + 0).Putvalue(CurrentPort.BATCH_ORDER);
                        }
                    }
                    funSendReply2(msgTran, "S1F6SFCD2");

                    break;

                case "3":               //현재 장비내에 존재하는 GLS 정보 보고
                {
                    msgTran.Secondary2("S1F6SFCD3").Item("UNITCNT").Putvalue(1);
                    msgTran.Secondary2("S1F6SFCD3").Item("MODULEID" + 0).Putvalue(dstrModuleID);
                    msgTran.Secondary2("S1F6SFCD3").Item("SFCD" + 0).Putvalue(dstrSFCD);
                    int dintTemp = 0;
                    if (pInfo.Unit(3).SubUnit(0).ModuleID == dstrModuleID)
                    {
                        dintTemp = 0;
                    }
                    else if (pInfo.Unit(3).SubUnit(7).ModuleID == dstrModuleID)
                    {
                        dintTemp = 7;
                    }
                    else
                    {
                        dintTemp = 8;
                    }

                    //장비안에 GLS가 존재하지 않으면 L,0으로 보고한다.
                    if (this.pInfo.Unit(3).SubUnit(dintTemp).GLSExist == false)
                    {
                        msgTran.Secondary2("S1F6SFCD3").Item("GLSCNT" + 0).Putvalue(0);
                        funSendReply2(msgTran, "S1F6SFCD3");
                        //shtReturn = Convert.ToInt16(msgTran.Reply2("S1F6SFCD3"));
                    }
                    else
                    {
                        msgTran.Secondary2("S1F6SFCD3").Item("GLSCNT" + 0).Putvalue(this.pInfo.Unit(3).SubUnit(dintTemp).CurrGLSCount);

                        foreach (string dstrHGLSID in this.pInfo.Unit(3).SubUnit(dintTemp).CurrGLS())
                        {
                            InfoAct.clsGLS CurrentGLS = pInfo.GLSID(dstrHGLSID);

                            //혹시나 1개의 GLS가 막 나갈려는 찰나에 양쪽 Unit에 걸쳐있을떄 GLSID 중복 보고 방지
                            if (dhtGLSID.ContainsKey(dstrHGLSID) == false && CurrentGLS.Scrap == false)
                            {
                                dhtGLSID.Add(dstrHGLSID, dstrHGLSID);

                                msgTran.Secondary2("S1F6SFCD3").Item("H_PANELID" + 0 + dintIndex).Putvalue(dstrHGLSID);
                                msgTran.Secondary2("S1F6SFCD3").Item("E_PANELID" + 0 + dintIndex).Putvalue(CurrentGLS.E_PANELID);
                                msgTran.Secondary2("S1F6SFCD3").Item("LOTID" + 0 + dintIndex).Putvalue(CurrentGLS.LOTID);
                                msgTran.Secondary2("S1F6SFCD3").Item("BATCHID" + 0 + dintIndex).Putvalue(CurrentGLS.BATCHID);
                                msgTran.Secondary2("S1F6SFCD3").Item("JOBID" + 0 + dintIndex).Putvalue(CurrentGLS.JOBID);
                                msgTran.Secondary2("S1F6SFCD3").Item("PORTID" + 0 + dintIndex).Putvalue(CurrentGLS.PORTID.Trim());
                                msgTran.Secondary2("S1F6SFCD3").Item("SLOTNO" + 0 + dintIndex).Putvalue(CurrentGLS.SLOTNO);
                                msgTran.Secondary2("S1F6SFCD3").Item("PROD_TYPE" + 0 + dintIndex).Putvalue(CurrentGLS.PRODUCT_TYPE);
                                msgTran.Secondary2("S1F6SFCD3").Item("PRODID" + 0 + dintIndex).Putvalue(CurrentGLS.PRODUCTID);
                                msgTran.Secondary2("S1F6SFCD3").Item("RUNSPECID" + 0 + dintIndex).Putvalue(CurrentGLS.RUNSPECID);
                                msgTran.Secondary2("S1F6SFCD3").Item("LAYERID" + 0 + dintIndex).Putvalue(CurrentGLS.LAYERID);
                                msgTran.Secondary2("S1F6SFCD3").Item("STEPID" + 0 + dintIndex).Putvalue(CurrentGLS.STEPID);
                                msgTran.Secondary2("S1F6SFCD3").Item("PPID" + 0 + dintIndex).Putvalue(CurrentGLS.HOSTPPID);
                                msgTran.Secondary2("S1F6SFCD3").Item("FLOWID" + 0 + dintIndex).Putvalue(CurrentGLS.FLOWID);
                                msgTran.Secondary2("S1F6SFCD3").Item("SIZE" + 0 + dintIndex).Putvalue(CurrentGLS.SIZE);
                                msgTran.Secondary2("S1F6SFCD3").Item("THICKNESS" + 0 + dintIndex).Putvalue(CurrentGLS.THICKNESS);
                                msgTran.Secondary2("S1F6SFCD3").Item("STATE" + 0 + dintIndex).Putvalue(CurrentGLS.GLASS_STATE);
                                msgTran.Secondary2("S1F6SFCD3").Item("ORDER" + 0 + dintIndex).Putvalue(CurrentGLS.GLASS_ORDER);
                                msgTran.Secondary2("S1F6SFCD3").Item("COMMENT" + 0 + dintIndex).Putvalue(CurrentGLS.COMMENT);

                                msgTran.Secondary2("S1F6SFCD3").Item("USE_CNT" + 0 + dintIndex).Putvalue(CurrentGLS.USE_COUNT);
                                msgTran.Secondary2("S1F6SFCD3").Item("JUDGE" + 0 + dintIndex).Putvalue(CurrentGLS.JUDGEMENT);
                                msgTran.Secondary2("S1F6SFCD3").Item("REASONCODE" + 0 + dintIndex).Putvalue(CurrentGLS.REASON_CODE);
                                msgTran.Secondary2("S1F6SFCD3").Item("INS_FLAG" + 0 + dintIndex).Putvalue(CurrentGLS.INS_FLAG);
                                msgTran.Secondary2("S1F6SFCD3").Item("ENC_FLAG" + 0 + dintIndex).Putvalue(CurrentGLS.ENC_FLAG);
                                msgTran.Secondary2("S1F6SFCD3").Item("PRERUNFLAG" + 0 + dintIndex).Putvalue(CurrentGLS.PRERUN_FLAG);
                                msgTran.Secondary2("S1F6SFCD3").Item("TURN_DIR" + 0 + dintIndex).Putvalue(CurrentGLS.TURN_DIR);
                                msgTran.Secondary2("S1F6SFCD3").Item("FLIPSTATE" + 0 + dintIndex).Putvalue(CurrentGLS.FLIP_STATE);
                                msgTran.Secondary2("S1F6SFCD3").Item("WORKSTATE" + 0 + dintIndex).Putvalue(CurrentGLS.WORK_STATE);
                                msgTran.Secondary2("S1F6SFCD3").Item("MULTIUSE" + 0 + dintIndex).Putvalue(CurrentGLS.MULTI_USE);

                                msgTran.Secondary2("S1F6SFCD3").Item("PAIR_GLSID" + 0 + dintIndex).Putvalue(CurrentGLS.PAIR_GLASSID);
                                msgTran.Secondary2("S1F6SFCD3").Item("PAIR_PPID" + 0 + dintIndex).Putvalue(CurrentGLS.PAIR_PPID);

                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_NAME1" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_NAME[0]);
                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_VALUE1" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_VALUE[0]);
                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_NAME2" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_NAME[1]);
                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_VALUE2" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_VALUE[1]);
                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_NAME3" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_NAME[2]);
                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_VALUE3" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_VALUE[2]);
                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_NAME4" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_NAME[3]);
                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_VALUE4" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_VALUE[3]);
                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_NAME5" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_NAME[4]);
                                msgTran.Secondary2("S1F6SFCD3").Item("OPT_VALUE5" + 0 + dintIndex).Putvalue(CurrentGLS.OPTION_VALUE[4]);

                                dintIndex++;
                            }
                        }



                        if (dintIndex == 0)
                        {
                            msgTran.Secondary2("S1F6SFCD3").Item("GLSCNT").Putvalue(0);
                        }

                        funSendReply2(msgTran, "S1F6SFCD3");
                    }
                }
                break;

                case "4":           //각 Unit(Module) 상태 보고
                {
                    msgTran.Secondary2("S1F6SFCD4").Item("MODULEID").Putvalue(dstrModuleID);
                    msgTran.Secondary2("S1F6SFCD4").Item("MODULE_STATE").Putvalue(this.pInfo.Unit(3).SubUnit(0).EQPState);
                    msgTran.Secondary2("S1F6SFCD4").Item("PROC_STATE").Putvalue(this.pInfo.Unit(3).SubUnit(0).EQPProcessState);
                    msgTran.Secondary2("S1F6SFCD4").Item("MCMD").Putvalue(this.pInfo.All.ControlState);
                    //msgTran.Secondary2("S1F6SFCD4").Item("LAYER1CNT").Putvalue(this.pInfo.UnitCount);
                    msgTran.Secondary2("S1F6SFCD4").Item("LAYER1CNT").Putvalue(pInfo.Unit(3).SubUnitCount + 2);
                    msgTran.Secondary2("S1F6SFCD4").Item("SFCD").Putvalue(dstrSFCD);

                    for (int dintLoop = 1; dintLoop <= this.pInfo.Unit(3).SubUnitCount; dintLoop++)
                    {
                        msgTran.Secondary2("S1F6SFCD4").Item("MODULEID1" + (dintLoop - 1)).Putvalue(this.pInfo.Unit(3).SubUnit(dintLoop).ModuleID);
                        msgTran.Secondary2("S1F6SFCD4").Item("MODULE_STATE1" + (dintLoop - 1)).Putvalue(this.pInfo.Unit(3).SubUnit(dintLoop).EQPState);
                        msgTran.Secondary2("S1F6SFCD4").Item("PROC_STATE1" + (dintLoop - 1)).Putvalue(this.pInfo.Unit(3).SubUnit(dintLoop).EQPProcessState);
                        msgTran.Secondary2("S1F6SFCD4").Item("LAYER2CNT" + (dintLoop - 1)).Putvalue(0);
                    }

                    //[2015/01/22] Port단 상태 보고(Add by HS)
                    for (int dintLoop = 1; dintLoop <= 2; dintLoop++)
                    {
                        msgTran.Secondary2("S1F6SFCD4").Item("MODULEID1" + (this.pInfo.Unit(3).SubUnitCount - 1 + dintLoop)).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).ModuleID);
                        msgTran.Secondary2("S1F6SFCD4").Item("MODULE_STATE1" + (this.pInfo.Unit(3).SubUnitCount - 1 + dintLoop)).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).EQPState);
                        msgTran.Secondary2("S1F6SFCD4").Item("PROC_STATE1" + (this.pInfo.Unit(3).SubUnitCount - 1 + dintLoop)).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).EQPProcessState);
                        msgTran.Secondary2("S1F6SFCD4").Item("LAYER2CNT" + (this.pInfo.Unit(3).SubUnitCount - 1 + dintLoop)).Putvalue(0);
                    }

                    funSendReply2(msgTran, "S1F6SFCD4");
                }
                break;

                case "31":
                {
                    msgTran.Secondary2("S1F6SFCD31").Item("MODULEID").Putvalue(dstrModuleID);
                    msgTran.Secondary2("S1F6SFCD31").Item("SFCD").Putvalue(dstrSFCD);
                    msgTran.Secondary2("S1F6SFCD31").Item("MODULE_STATE").Putvalue(this.pInfo.Unit(0).SubUnit(0).EQPState);
                    msgTran.Secondary2("S1F6SFCD31").Item("PROC_STATE").Putvalue(this.pInfo.Unit(0).SubUnit(0).EQPProcessState);
                    msgTran.Secondary2("S1F6SFCD31").Item("CUR_STEPNO").Putvalue(0);           // 협의 필요


                    msgTran.Secondary2("S1F6SFCD31").Item("CUR_STEPCNT").Putvalue(this.pInfo.Unit(0).SubUnit(0).CurrGLSCount);
                    msgTran.Secondary2("S1F6SFCD31").Item("CUR_GLSCNT").Putvalue(this.pInfo.Unit(0).SubUnit(0).CurrGLSCount);
                    msgTran.Secondary2("S1F6SFCD31").Item("CUR_M_CNT").Putvalue(this.pInfo.Unit(0).SubUnit(0).CurrGLSCount);

                    int dintStepNoIndex = 0;
                    foreach (InfoAct.clsGLS tmpGLS in this.pInfo.Unit(0).SubUnit(0).CurrGLSValues())
                    {
                        InfoAct.clsSlot currentSlot = pInfo.LOTID(tmpGLS.LOTID).Slot(tmpGLS.SlotID);

                        msgTran.Secondary2("S1F6SFCD31").Item("STEPNO" + dintStepNoIndex).Putvalue(currentSlot.StepNo);
                        msgTran.Secondary2("S1F6SFCD31").Item("STEP_DESC" + dintStepNoIndex).Putvalue(this.pInfo.Unit(0).SubUnit(0).ProcessStep(currentSlot.StepNo).StepDesc);

                        msgTran.Secondary2("S1F6SFCD31").Item("H_GLASSID" + dintStepNoIndex).Putvalue(currentSlot.H_PANELID);
                        msgTran.Secondary2("S1F6SFCD31").Item("MATERIAL_ID" + dintStepNoIndex).Putvalue(currentSlot.H_PANELID);

                        dintStepNoIndex++;
                    }



                    msgTran.Secondary2("S1F6SFCD31").Item("LAYER1CNT").Putvalue(this.pInfo.UnitCount);

                    for (int dintLoop = 1; dintLoop <= this.pInfo.UnitCount; dintLoop++)
                    {
                        msgTran.Secondary2("S1F6SFCD31").Item("MODULEID1" + (dintLoop - 1)).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).ModuleID);
                        msgTran.Secondary2("S1F6SFCD31").Item("MODULE_STATE1" + (dintLoop - 1)).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).EQPState);
                        msgTran.Secondary2("S1F6SFCD31").Item("PROC_STATE1" + (dintLoop - 1)).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).EQPProcessState);


                        InfoAct.clsSlot currentSlot = null;

                        if (!string.IsNullOrWhiteSpace(this.pInfo.Unit(dintLoop).SubUnit(0).HGLSID))        //this.pInfo.Unit(dintLoop).SubUnit(0).GLSExist)
                        {
                            InfoAct.clsGLS tmpGLS = this.pInfo.Unit(0).SubUnit(0).CurrGLS(this.pInfo.Unit(dintLoop).SubUnit(0).HGLSID);

                            currentSlot = pInfo.LOTID(tmpGLS.LOTID).Slot(tmpGLS.SlotID);
                        }

                        msgTran.Secondary2("S1F6SFCD31").Item("CUR_STEPCNT1" + (dintLoop - 1)).Putvalue((currentSlot != null) ? 1 : 0);
                        msgTran.Secondary2("S1F6SFCD31").Item("CUR_GLSCNT1" + (dintLoop - 1)).Putvalue((currentSlot != null) ? 1 : 0);
                        msgTran.Secondary2("S1F6SFCD31").Item("CUR_M_CNT1" + (dintLoop - 1)).Putvalue((currentSlot != null) ? 1 : 0);

                        int dintStepNo = (currentSlot != null) ? currentSlot.StepNo : 0;

                        msgTran.Secondary2("S1F6SFCD31").Item("CUR_STEPNO1" + (dintLoop - 1)).Putvalue(dintStepNo);

                        if (dintStepNo != 0)
                        {
                            msgTran.Secondary2("S1F6SFCD31").Item("STEPNO1" + (dintLoop - 1) + 0).Putvalue(dintStepNo);
                            msgTran.Secondary2("S1F6SFCD31").Item("STEP_DESC1" + (dintLoop - 1) + 0).Putvalue(this.pInfo.Unit(0).SubUnit(0).ProcessStep(dintStepNo).StepDesc);
                            msgTran.Secondary2("S1F6SFCD31").Item("H_GLASSID1" + (dintLoop - 1) + 0).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).HGLSID);
                            msgTran.Secondary2("S1F6SFCD31").Item("MATERIAL_ID1" + (dintLoop - 1) + 0).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).HGLSID);
                            //msgTran.Secondary2("S1F6SFCD31").Item("STEP_DESC1" /*+ (dintLoop - 1)*/).Putvalue(this.pInfo.Unit(0).SubUnit(0).ProcessStep(dintStepNo).StepDesc);
                            //msgTran.Secondary2("S1F6SFCD31").Item("H_GLASSID1" /*+ (dintLoop - 1)*/).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).HGLSID);
                            //msgTran.Secondary2("S1F6SFCD31").Item("MATERIAL_ID1" /*+ (dintLoop - 1)*/).Putvalue(this.pInfo.Unit(dintLoop).SubUnit(0).HGLSID);
                        }

                        msgTran.Secondary2("S1F6SFCD31").Item("LAYER2CNT" + (dintLoop - 1)).Putvalue(0);
                    }

                    funSendReply2(msgTran, "S1F6SFCD31");
                }
                break;

                default:       //잘못된 SFCD가 내려올 경우
                {
                    msgTran.Secondary2("S1F6WrongMODID").Item("MODULEID").Putvalue(dstrModuleID);
                    msgTran.Secondary2("S1F6WrongMODID").Item("SFCD").Putvalue(dstrSFCD);

                    funSendReply2(msgTran, "S1F6WrongMODID");
                }
                break;
                }
            }
            catch (Exception error)
            {
                funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString());
                return;
            }
        }
Пример #4
0
        /// <summary>
        /// Primary Message를 Biuld하여 Transaction을 Return한다.
        /// </summary>
        /// <param name="strParameters">Parameter 문자열</param>
        public Transaction funPrimarySend(string strParameters)
        {
            string[] arrayEvent;
            string   dstrLOTID  = "";
            int      dintSlotID = 0;

            try
            {
                arrayEvent = strParameters.Split(',');

                int dintBYWHO = 0;

                int dintCEID      = Convert.ToInt32(arrayEvent[1]);                  //CEID
                int dintPortID    = Convert.ToInt32(arrayEvent[2]);
                int dintUnitID    = Convert.ToInt32(arrayEvent[3]);
                int dintSubUnitID = Convert.ToInt32(arrayEvent[4]);
                if (dintCEID == 1006 || dintCEID == 1007 || dintCEID == 1001 || dintCEID == 1004)
                {
                    //if (arrayEvent.Length == 6)
                    //{
                    dstrLOTID  = arrayEvent[5].ToString();
                    dintSlotID = Convert.ToInt32(arrayEvent[6].ToString());
                    //}
                }

                InfoAct.clsPort CurrentPort = pInfo.Port(dintPortID);

                pMsgTran = pSecsDrv.MakeTransaction(this.StrPrimaryMsgName);

                pMsgTran.Primary().Item("DATAID").Putvalue(0);      //Fixed Value
                pMsgTran.Primary().Item("CEID").Putvalue(dintCEID);

                pMsgTran.Primary().Item("RPTID").Putvalue(1);       //Fixed Value
                pMsgTran.Primary().Item("MODULEID").Putvalue(pInfo.Unit(dintUnitID).SubUnit(0).ModuleID);
                pMsgTran.Primary().Item("MODULE_STATE").Putvalue(pInfo.Unit(0).SubUnit(0).EQPState);
                pMsgTran.Primary().Item("MCMD").Putvalue(pInfo.All.ControlState);
                pMsgTran.Primary().Item("PROC_STATE").Putvalue(pInfo.Unit(0).SubUnit(0).EQPProcessState);

                //각 CEID별로 BYWHO값을 설정한다.
                switch (dintCEID)
                {
                case 111:
                    dintBYWHO = 3;
                    break;

                case 113:
                    dintBYWHO = 3;
                    break;

                case 114:
                    dintBYWHO = 4;
                    break;

                default:
                    dintBYWHO = 3;
                    break;
                }

                //InfoAct.clsSlot currentSlot = pInfo.LOTID(dstrLOTID).Slot(dintSlotID);

                pMsgTran.Primary().Item("BYWHO").Putvalue(dintBYWHO);
                pMsgTran.Primary().Item("OPERID").Putvalue(pInfo.All.UserID);

                //면취기는 자체 PORT가 없어 PORTID 이외의 정보를 가지고 있지 않으므로, 협의후 확정될때 까지 무시한다. 20101018 어우수
                pMsgTran.Primary().Item("RPTID1").Putvalue(2);       //Fixed Value
                pMsgTran.Primary().Item("PORTID").Putvalue(CurrentPort.HostReportPortID);
                pMsgTran.Primary().Item("PORT_STATE").Putvalue(CurrentPort.PortState);
                pMsgTran.Primary().Item("PORT_TYPE").Putvalue(CurrentPort.PortType);
                pMsgTran.Primary().Item("PORT_MODE").Putvalue("OK");
                pMsgTran.Primary().Item("SORT_TYPE").Putvalue("0");

                //면취기는 자체 PORT가 없어 CST 정보를 가지고 있지 않으므로, 협의후 확정될때까지 무시한다. 20101018 어우수
                pMsgTran.Primary().Item("RPTID2").Putvalue(3);      //Fixed Value
                pMsgTran.Primary().Item("CSTID").Putvalue(CurrentPort.CSTID);
                if (dintUnitID == 1)
                {
                    pMsgTran.Primary().Item("CST_TYPE").Putvalue("12");
                }
                else
                {
                    pMsgTran.Primary().Item("CST_TYPE").Putvalue("13");
                }
                pMsgTran.Primary().Item("MAP_STIF").Putvalue(CurrentPort.GLSHostMapping10);
                pMsgTran.Primary().Item("CUR_STIF").Putvalue(CurrentPort.GLSRealMapping10);
                pMsgTran.Primary().Item("BATCH_ORDER").Putvalue(CurrentPort.BATCH_ORDER);

                pMsgTran.Primary().Item("RPTID3").Putvalue(10);     //Fixed Value
                pMsgTran.Primary().Item("GLASSCOUNT").Putvalue(1);  //임시 20101018 어우수
                if (dintCEID == 1006 || dintCEID == 1007)
                {
                    //InfoAct.clsSlot currentSlot = new InfoAct.clsSlot(1);
                    InfoAct.clsSlot currentSlot = pInfo.LOTID(dstrLOTID).Slot(dintSlotID);

                    pMsgTran.Primary().Item("H_GLASSID" + 0).Putvalue(currentSlot.GlassID);
                    pMsgTran.Primary().Item("E_GLASSID" + 0).Putvalue(currentSlot.E_PANELID);
                    pMsgTran.Primary().Item("LOTID" + 0).Putvalue(currentSlot.LOTID);
                    pMsgTran.Primary().Item("BATCHID" + 0).Putvalue(currentSlot.BATCHID);
                    pMsgTran.Primary().Item("JOBID" + 0).Putvalue(currentSlot.JOBID);
                    pMsgTran.Primary().Item("PORTID1" + 0).Putvalue(currentSlot.PORTID.Trim());
                    pMsgTran.Primary().Item("SLOTNO" + 0).Putvalue(currentSlot.SLOTNO);
                    pMsgTran.Primary().Item("PROD_TYPE" + 0).Putvalue(currentSlot.PRODUCT_TYPE);
                    pMsgTran.Primary().Item("PROD_KIND" + 0).Putvalue(currentSlot.PRODUCT_KIND);
                    pMsgTran.Primary().Item("PRODUCTID" + 0).Putvalue(currentSlot.PRODUCTID);
                    pMsgTran.Primary().Item("RUNSPECID" + 0).Putvalue(currentSlot.RUNSPECID);
                    pMsgTran.Primary().Item("LAYERID" + 0).Putvalue(currentSlot.LAYERID);
                    pMsgTran.Primary().Item("STEPID" + 0).Putvalue(currentSlot.STEPID);
                    pMsgTran.Primary().Item("PPID" + 0).Putvalue(currentSlot.HOSTPPID);
                    pMsgTran.Primary().Item("FLOWID" + 0).Putvalue(currentSlot.FLOWID);
                    pMsgTran.Primary().Item("SIZE" + 0).Putvalue(currentSlot.SIZE);
                    pMsgTran.Primary().Item("THICKNESS" + 0).Putvalue(currentSlot.THICKNESS);
                    pMsgTran.Primary().Item("STATE" + 0).Putvalue(currentSlot.GLASS_STATE);
                    pMsgTran.Primary().Item("ORDER" + 0).Putvalue(currentSlot.GLASS_ORDER);
                    pMsgTran.Primary().Item("COMMENT" + 0).Putvalue(currentSlot.COMMENT);

                    pMsgTran.Primary().Item("USE_COUNT" + 0).Putvalue(currentSlot.USE_COUNT);
                    pMsgTran.Primary().Item("JUDGEMENT" + 0).Putvalue(currentSlot.JUDGEMENT);
                    pMsgTran.Primary().Item("REASON_CODE" + 0).Putvalue(currentSlot.REASON_CODE);
                    pMsgTran.Primary().Item("INS_FLAG" + 0).Putvalue(currentSlot.INS_FLAG);
                    pMsgTran.Primary().Item("ENC_FALG" + 0).Putvalue(currentSlot.ENC_FLAG);
                    pMsgTran.Primary().Item("PRERUN_FLAG" + 0).Putvalue(currentSlot.PRERUN_FLAG);
                    pMsgTran.Primary().Item("TURN_DIR" + 0).Putvalue(currentSlot.TURN_DIR);
                    pMsgTran.Primary().Item("FLIP_STATE" + 0).Putvalue(currentSlot.FLIP_STATE);
                    pMsgTran.Primary().Item("WORK_STATE" + 0).Putvalue(currentSlot.WORK_STATE);
                    pMsgTran.Primary().Item("MULTI_USE" + 0).Putvalue(currentSlot.MULTI_USE);

                    pMsgTran.Primary().Item("PAIR_GLASSID" + 0).Putvalue(currentSlot.PAIR_GLASSID);
                    pMsgTran.Primary().Item("PAIR_PPID" + 0).Putvalue(currentSlot.PAIR_PPID);

                    pMsgTran.Primary().Item("OPTION_NAME1" + 0).Putvalue(currentSlot.OPTION_NAME[0]);
                    pMsgTran.Primary().Item("OPTION_VALUE1" + 0).Putvalue(currentSlot.OPTION_VALUE[0]);
                    pMsgTran.Primary().Item("OPTION_NAME2" + 0).Putvalue(currentSlot.OPTION_NAME[1]);
                    pMsgTran.Primary().Item("OPTION_VALUE2" + 0).Putvalue(currentSlot.OPTION_VALUE[1]);
                    pMsgTran.Primary().Item("OPTION_NAME3" + 0).Putvalue(currentSlot.OPTION_NAME[2]);
                    pMsgTran.Primary().Item("OPTION_VALUE3" + 0).Putvalue(currentSlot.OPTION_VALUE[2]);
                    pMsgTran.Primary().Item("OPTION_NAME4" + 0).Putvalue(currentSlot.OPTION_NAME[3]);
                    pMsgTran.Primary().Item("OPTION_VALUE4" + 0).Putvalue(currentSlot.OPTION_VALUE[3]);
                    pMsgTran.Primary().Item("OPTION_NAME5" + 0).Putvalue(currentSlot.OPTION_NAME[4]);
                    pMsgTran.Primary().Item("OPTION_VALUE5" + 0).Putvalue(currentSlot.OPTION_VALUE[4]);

                    pMsgTran.Primary().Item("SUBMATERIALCOUNT" + 0).Putvalue(0);
                }
                else if (dintCEID == 1001 || dintCEID == 1004)
                {
                    InfoAct.clsSlot currentSlot = pInfo.LOTID(dstrLOTID).Slot(dintSlotID);


                    if (currentSlot == null)
                    {
                        pInfo.LOTID(dstrLOTID).AddSlot(dintSlotID);
                        currentSlot           = pInfo.LOTID(dstrLOTID).Slot(dintSlotID);
                        currentSlot.USE_COUNT = dintSlotID.ToString();
                    }

                    pMsgTran.Primary().Item("H_GLASSID" + 0).Putvalue(currentSlot.GlassID);
                    pMsgTran.Primary().Item("E_GLASSID" + 0).Putvalue(currentSlot.E_PANELID);
                    pMsgTran.Primary().Item("LOTID" + 0).Putvalue(currentSlot.LOTID);
                    pMsgTran.Primary().Item("BATCHID" + 0).Putvalue(currentSlot.BATCHID);
                    pMsgTran.Primary().Item("JOBID" + 0).Putvalue(currentSlot.JOBID);
                    pMsgTran.Primary().Item("PORTID1" + 0).Putvalue(currentSlot.PORTID.Trim());
                    pMsgTran.Primary().Item("SLOTNO" + 0).Putvalue(currentSlot.SLOTNO);
                    pMsgTran.Primary().Item("PROD_TYPE" + 0).Putvalue(currentSlot.PRODUCT_TYPE);
                    pMsgTran.Primary().Item("PROD_KIND" + 0).Putvalue(currentSlot.PRODUCT_KIND);
                    pMsgTran.Primary().Item("PRODUCTID" + 0).Putvalue(currentSlot.PRODUCTID);
                    pMsgTran.Primary().Item("RUNSPECID" + 0).Putvalue(currentSlot.RUNSPECID);
                    pMsgTran.Primary().Item("LAYERID" + 0).Putvalue(currentSlot.LAYERID);
                    pMsgTran.Primary().Item("STEPID" + 0).Putvalue(currentSlot.STEPID);
                    pMsgTran.Primary().Item("PPID" + 0).Putvalue(currentSlot.HOSTPPID);
                    pMsgTran.Primary().Item("FLOWID" + 0).Putvalue(currentSlot.FLOWID);
                    pMsgTran.Primary().Item("SIZE" + 0).Putvalue(currentSlot.SIZE);
                    pMsgTran.Primary().Item("THICKNESS" + 0).Putvalue(currentSlot.THICKNESS);
                    pMsgTran.Primary().Item("STATE" + 0).Putvalue(currentSlot.GLASS_STATE);
                    pMsgTran.Primary().Item("ORDER" + 0).Putvalue(currentSlot.GLASS_ORDER);
                    pMsgTran.Primary().Item("COMMENT" + 0).Putvalue(currentSlot.COMMENT);

                    pMsgTran.Primary().Item("USE_COUNT" + 0).Putvalue(currentSlot.USE_COUNT);
                    pMsgTran.Primary().Item("JUDGEMENT" + 0).Putvalue(currentSlot.JUDGEMENT);
                    pMsgTran.Primary().Item("REASON_CODE" + 0).Putvalue(currentSlot.REASON_CODE);
                    pMsgTran.Primary().Item("INS_FLAG" + 0).Putvalue(currentSlot.INS_FLAG);
                    pMsgTran.Primary().Item("ENC_FALG" + 0).Putvalue(currentSlot.ENC_FLAG);
                    pMsgTran.Primary().Item("PRERUN_FLAG" + 0).Putvalue(currentSlot.PRERUN_FLAG);
                    pMsgTran.Primary().Item("TURN_DIR" + 0).Putvalue(currentSlot.TURN_DIR);
                    pMsgTran.Primary().Item("FLIP_STATE" + 0).Putvalue(currentSlot.FLIP_STATE);
                    pMsgTran.Primary().Item("WORK_STATE" + 0).Putvalue(currentSlot.WORK_STATE);
                    pMsgTran.Primary().Item("MULTI_USE" + 0).Putvalue(currentSlot.MULTI_USE);

                    pMsgTran.Primary().Item("PAIR_GLASSID" + 0).Putvalue(currentSlot.PAIR_GLASSID);
                    pMsgTran.Primary().Item("PAIR_PPID" + 0).Putvalue(currentSlot.PAIR_PPID);

                    pMsgTran.Primary().Item("OPTION_NAME1" + 0).Putvalue(currentSlot.OPTION_NAME[0]);
                    pMsgTran.Primary().Item("OPTION_VALUE1" + 0).Putvalue(currentSlot.OPTION_VALUE[0]);
                    pMsgTran.Primary().Item("OPTION_NAME2" + 0).Putvalue(currentSlot.OPTION_NAME[1]);
                    pMsgTran.Primary().Item("OPTION_VALUE2" + 0).Putvalue(currentSlot.OPTION_VALUE[1]);
                    pMsgTran.Primary().Item("OPTION_NAME3" + 0).Putvalue(currentSlot.OPTION_NAME[2]);
                    pMsgTran.Primary().Item("OPTION_VALUE3" + 0).Putvalue(currentSlot.OPTION_VALUE[2]);
                    pMsgTran.Primary().Item("OPTION_NAME4" + 0).Putvalue(currentSlot.OPTION_NAME[3]);
                    pMsgTran.Primary().Item("OPTION_VALUE4" + 0).Putvalue(currentSlot.OPTION_VALUE[3]);
                    pMsgTran.Primary().Item("OPTION_NAME5" + 0).Putvalue(currentSlot.OPTION_NAME[4]);
                    pMsgTran.Primary().Item("OPTION_VALUE5" + 0).Putvalue(currentSlot.OPTION_VALUE[4]);

                    pMsgTran.Primary().Item("SUBMATERIALCOUNT" + 0).Putvalue(0);
                }
                else
                {
                    InfoAct.clsSlot currentSlot = CurrentPort.Slot(1);

                    pMsgTran.Primary().Item("H_GLASSID" + 0).Putvalue(currentSlot.GlassID);
                    pMsgTran.Primary().Item("E_GLASSID" + 0).Putvalue(currentSlot.E_PANELID);
                    pMsgTran.Primary().Item("LOTID" + 0).Putvalue(currentSlot.LOTID);
                    pMsgTran.Primary().Item("BATCHID" + 0).Putvalue(currentSlot.BATCHID);
                    pMsgTran.Primary().Item("JOBID" + 0).Putvalue(currentSlot.JOBID);
                    pMsgTran.Primary().Item("PORTID1" + 0).Putvalue(currentSlot.PORTID.Trim());
                    pMsgTran.Primary().Item("SLOTNO" + 0).Putvalue(currentSlot.SLOTNO);
                    pMsgTran.Primary().Item("PROD_TYPE" + 0).Putvalue(currentSlot.PRODUCT_TYPE);
                    pMsgTran.Primary().Item("PROD_KIND" + 0).Putvalue(currentSlot.PRODUCT_KIND);
                    pMsgTran.Primary().Item("PRODUCTID" + 0).Putvalue(currentSlot.PRODUCTID);
                    pMsgTran.Primary().Item("RUNSPECID" + 0).Putvalue(currentSlot.RUNSPECID);
                    pMsgTran.Primary().Item("LAYERID" + 0).Putvalue(currentSlot.LAYERID);
                    pMsgTran.Primary().Item("STEPID" + 0).Putvalue(currentSlot.STEPID);
                    pMsgTran.Primary().Item("PPID" + 0).Putvalue(currentSlot.HOSTPPID);
                    pMsgTran.Primary().Item("FLOWID" + 0).Putvalue(currentSlot.FLOWID);
                    pMsgTran.Primary().Item("SIZE" + 0).Putvalue(currentSlot.SIZE);
                    pMsgTran.Primary().Item("THICKNESS" + 0).Putvalue(currentSlot.THICKNESS);
                    pMsgTran.Primary().Item("STATE" + 0).Putvalue(currentSlot.GLASS_STATE);
                    pMsgTran.Primary().Item("ORDER" + 0).Putvalue(currentSlot.GLASS_ORDER);
                    pMsgTran.Primary().Item("COMMENT" + 0).Putvalue(currentSlot.COMMENT);

                    pMsgTran.Primary().Item("USE_COUNT" + 0).Putvalue(currentSlot.USE_COUNT);
                    pMsgTran.Primary().Item("JUDGEMENT" + 0).Putvalue(currentSlot.JUDGEMENT);
                    pMsgTran.Primary().Item("REASON_CODE" + 0).Putvalue(currentSlot.REASON_CODE);
                    pMsgTran.Primary().Item("INS_FLAG" + 0).Putvalue(currentSlot.INS_FLAG);
                    pMsgTran.Primary().Item("ENC_FALG" + 0).Putvalue(currentSlot.ENC_FLAG);
                    pMsgTran.Primary().Item("PRERUN_FLAG" + 0).Putvalue(currentSlot.PRERUN_FLAG);
                    pMsgTran.Primary().Item("TURN_DIR" + 0).Putvalue(currentSlot.TURN_DIR);
                    pMsgTran.Primary().Item("FLIP_STATE" + 0).Putvalue(currentSlot.FLIP_STATE);
                    pMsgTran.Primary().Item("WORK_STATE" + 0).Putvalue(currentSlot.WORK_STATE);
                    pMsgTran.Primary().Item("MULTI_USE" + 0).Putvalue(currentSlot.MULTI_USE);

                    pMsgTran.Primary().Item("PAIR_GLASSID" + 0).Putvalue(currentSlot.PAIR_GLASSID);
                    pMsgTran.Primary().Item("PAIR_PPID" + 0).Putvalue(currentSlot.PAIR_PPID);

                    pMsgTran.Primary().Item("OPTION_NAME1" + 0).Putvalue(currentSlot.OPTION_NAME[0]);
                    pMsgTran.Primary().Item("OPTION_VALUE1" + 0).Putvalue(currentSlot.OPTION_VALUE[0]);
                    pMsgTran.Primary().Item("OPTION_NAME2" + 0).Putvalue(currentSlot.OPTION_NAME[1]);
                    pMsgTran.Primary().Item("OPTION_VALUE2" + 0).Putvalue(currentSlot.OPTION_VALUE[1]);
                    pMsgTran.Primary().Item("OPTION_NAME3" + 0).Putvalue(currentSlot.OPTION_NAME[2]);
                    pMsgTran.Primary().Item("OPTION_VALUE3" + 0).Putvalue(currentSlot.OPTION_VALUE[2]);
                    pMsgTran.Primary().Item("OPTION_NAME4" + 0).Putvalue(currentSlot.OPTION_NAME[3]);
                    pMsgTran.Primary().Item("OPTION_VALUE4" + 0).Putvalue(currentSlot.OPTION_VALUE[3]);
                    pMsgTran.Primary().Item("OPTION_NAME5" + 0).Putvalue(currentSlot.OPTION_NAME[4]);
                    pMsgTran.Primary().Item("OPTION_VALUE5" + 0).Putvalue(currentSlot.OPTION_VALUE[4]);

                    pMsgTran.Primary().Item("SUBMATERIALCOUNT" + 0).Putvalue(0);
                }


                return(pMsgTran);
            }
            catch (Exception error)
            {
                funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString());
                return(null);
            }
        }