/// <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; } }
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()); } }
/// <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; } }
/// <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); } }