/// <summary> /// CIM에서 설비로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : cmdName /// parameters[1] : 1st parameter /// parameters[2] : 2nd parameter /// parameters[3] : 3rd parameter /// parameters[4] : 4th parameter /// parameters[5] : 5th Parameter /// </remarks> public void funProcessCIMEvent(object[] parameters) { string dstrBitAddress = "B0020"; string dstrWordAddress = "W0100"; string dstrLOTID = ""; string dstrGLSID = ""; int dintUnitID = 0; try { dstrLOTID = parameters[0].ToString().Trim(); dstrGLSID = parameters[1].ToString().Trim(); dintUnitID = Convert.ToInt32(parameters[2].ToString()); InfoAct.clsLOT CurrentLot = pInfo.LOTID(dstrLOTID); if (CurrentLot == null) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("Scrap Index Report Error!! Current Lot Error!! LOTID : {0}, GLSID : {1}, UnitNo : {2}", dstrLOTID, dstrGLSID, dintUnitID)); return; } InfoAct.clsGLS CurrentGLS = CurrentLot.GLSID(dstrGLSID); if (CurrentGLS == null) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("Scrap Index Report Error!! Current GLS Error!! LOTID : {0}, GLSID : {1}, UnitNo : {2}", dstrLOTID, dstrGLSID, dintUnitID)); return; } dstrWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrWordAddress, 16 * (dintUnitID - 2)); pEqpAct.funWordWrite(dstrWordAddress, pInfo.Port(CurrentLot.InPortID).HostReportPortID, EnuEQP.PLCRWType.ASCII_Data); dstrWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrWordAddress, 2); pEqpAct.funWordWrite(dstrWordAddress, CurrentGLS.SlotID.ToString(), EnuEQP.PLCRWType.Int_Data); dstrWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrWordAddress, 1); pEqpAct.funWordWrite(dstrWordAddress, dstrGLSID.PadRight(20), EnuEQP.PLCRWType.ASCII_Data); //LotStartFlag 처리 dstrWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrWordAddress, 10); //pEqpAct.funWordWrite(dstrWordAddress, , EnuEQP.PLCRWType.Int_Data); //LotEndFlag 처리 dstrWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrWordAddress, 10); //pEqpAct.funWordWrite(dstrWordAddress, , EnuEQP.PLCRWType.Int_Data); dstrBitAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrBitAddress, dintUnitID - 2); pEqpAct.funBitWrite(dstrBitAddress, "1"); } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } }
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를 Biuld하여 Transaction을 Return한다. /// </summary> /// <param name="strParameters">Parameter 문자열</param> public Transaction funPrimarySend(string strParameters) { string[] arrayEvent; string dstrLotID = ""; int dintPortID = 0; int dintIndex = 0; string dstrSLOTMAP = ""; string dstrGLSID = ""; try { arrayEvent = strParameters.Split(','); pMsgTran = pSecsDrv.MakeTransaction(this.StrPrimaryMsgName); dstrLotID = arrayEvent[1].Trim(); InfoAct.clsLOT CurrentLot = pInfo.LOTID(dstrLotID); pMsgTran.Primary().Item("PTID").Putvalue("P0" + CurrentLot.InPortID); pMsgTran.Primary().Item("LOTID").Putvalue(dstrLotID); pMsgTran.Primary().Item("CSTID").Putvalue(CurrentLot.CSTID); pMsgTran.Primary().Item("LOTJUDGE").Putvalue(CurrentLot.LOTJudge); pMsgTran.Primary().Item("LSORTTYPE").Putvalue(CurrentLot.LSORTTYPE); pMsgTran.Primary().Item("OPERID").Putvalue(CurrentLot.OPERID); pMsgTran.Primary().Item("PRODID").Putvalue(CurrentLot.PRODID); StringBuilder sb; dintPortID = pInfo.LOTID(dstrLotID).InPortID; #region 수정 for (int dintSlotNo = 0; dintSlotNo < pInfo.Port(dintPortID).SlotCount; dintSlotNo++) { if (pInfo.Port(dintPortID).Slot(dintSlotNo + 1).SLOTINFO != "E") { dintIndex++; } } pMsgTran.Primary().Item("QTY").Putvalue(dintIndex); pMsgTran.Primary().Item("L2").Putvalue(25); dintIndex = 0; for (int dintSlotNo = 0; dintSlotNo < pInfo.Port(dintPortID).SlotCount; dintSlotNo++) { InfoAct.clsLOT CurrentLOT = pInfo.LOTID(dstrLotID); dstrGLSID = pInfo.Port(dintPortID).Slot(dintSlotNo + 1).GLSID; if (string.IsNullOrEmpty(dstrGLSID) == false && CurrentLOT.GLSID(dstrGLSID) != null && pInfo.Port(dintPortID).Slot(dintSlotNo + 1).SLOTINFO != "E") { InfoAct.clsGLS CurrentGLS = CurrentLOT.GLSID(dstrGLSID); if (CurrentGLS.ScrapFlag) { pMsgTran.Primary().Item("SLOTNO" + dintIndex).Putvalue((dintSlotNo + 1).ToString()); pMsgTran.Primary().Item("GLSID" + dintIndex).Putvalue(""); pMsgTran.Primary().Item("PPID" + dintIndex).Putvalue(""); pMsgTran.Primary().Item("GLSJUDGE" + dintIndex).Putvalue(""); pMsgTran.Primary().Item("GSORTTYPE" + dintIndex).Putvalue(0); pMsgTran.Primary().Item("SMPLFLAG" + dintIndex).Putvalue(0); pMsgTran.Primary().Item("RWKCNT" + dintIndex).Putvalue(0); pMsgTran.Primary().Item("L4" + dintIndex).Putvalue(0); dstrSLOTMAP += "X"; } else { pMsgTran.Primary().Item("SLOTNO" + dintIndex).Putvalue(CurrentGLS.SlotID); pMsgTran.Primary().Item("GLSID" + dintIndex).Putvalue(CurrentGLS.GLSID); pMsgTran.Primary().Item("PPID" + dintIndex).Putvalue(CurrentGLS.HostPPID); pMsgTran.Primary().Item("GLSJUDGE" + dintIndex).Putvalue(CurrentGLS.GLSJudge); pMsgTran.Primary().Item("GSORTTYPE" + dintIndex).Putvalue(CurrentGLS.GSORTTYPE); pMsgTran.Primary().Item("SMPLFLAG" + dintIndex).Putvalue(CurrentGLS.SMPLFLAG); pMsgTran.Primary().Item("RWKCNT" + dintIndex).Putvalue(CurrentGLS.RWKCNT); pMsgTran.Primary().Item("L4" + dintIndex).Putvalue(0); if (pInfo.Port(dintPortID).Slot(dintSlotNo + 1).SLOTINFO == "P")// || pInfo.Port(dintPortID).Slot(dintSlotNo + 1).SLOTINFO == "F" || pInfo.Port(dintPortID).Slot(dintSlotNo + 1).SLOTINFO == "S") { dstrSLOTMAP += "O"; } else { dstrSLOTMAP += "X"; } } } else { pMsgTran.Primary().Item("SLOTNO" + dintIndex).Putvalue((dintSlotNo + 1).ToString()); pMsgTran.Primary().Item("GLSID" + dintIndex).Putvalue(""); pMsgTran.Primary().Item("PPID" + dintIndex).Putvalue(""); pMsgTran.Primary().Item("GLSJUDGE" + dintIndex).Putvalue(""); pMsgTran.Primary().Item("GSORTTYPE" + dintIndex).Putvalue(0); pMsgTran.Primary().Item("SMPLFLAG" + dintIndex).Putvalue(0); pMsgTran.Primary().Item("RWKCNT" + dintIndex).Putvalue(0); pMsgTran.Primary().Item("L4" + dintIndex).Putvalue(0); dstrSLOTMAP += "X"; } dintIndex++; } pMsgTran.Primary().Item("SLOTSEL").Putvalue(dstrSLOTMAP); #endregion #region 이전 소스 //if (pInfo.Port(pInfo.LOTID(dstrLotID).InPortID).AbortFlag) //{ // int GLSRunCnt = 0; // foreach (string str in pInfo.LOTID(dstrLotID).GLS()) // { // InfoAct.clsGLS CurrentGLS = pInfo.LOTID(dstrLotID).GLSID(str); // if (CurrentGLS.RunState == "E") // { // GLSRunCnt++; // } // } // pMsgTran.Primary().Item("QTY").Putvalue(GLSRunCnt); // pMsgTran.Primary().Item("L2").Putvalue(GLSRunCnt); // sb = new StringBuilder("X".PadRight(25, 'X')); // foreach (string strGLSID in CurrentLot.GLS()) // { // InfoAct.clsGLS CurrentGLS = CurrentLot.GLSID(strGLSID); // if (CurrentGLS.RunState == "E") // { // sb[CurrentGLS.SlotID - 1] = 'O'; // pMsgTran.Primary().Item("SLOTNO" + dintIndex).Putvalue(CurrentGLS.SlotID); // pMsgTran.Primary().Item("GLSID" + dintIndex).Putvalue(CurrentGLS.GLSID); // pMsgTran.Primary().Item("PPID" + dintIndex).Putvalue(CurrentGLS.HostPPID); // pMsgTran.Primary().Item("GLSJUDGE" + dintIndex).Putvalue(CurrentGLS.GLSJudge); // pMsgTran.Primary().Item("GSORTTYPE" + dintIndex).Putvalue(CurrentGLS.GSORTTYPE); // pMsgTran.Primary().Item("SMPLFLAG" + dintIndex).Putvalue(CurrentGLS.SMPLFLAG); // pMsgTran.Primary().Item("RWKCNT" + dintIndex).Putvalue(CurrentGLS.RWKCNT); // pMsgTran.Primary().Item("L4" + dintIndex).Putvalue(0); // pMsgTran.Primary().Item("PNLJUDGE" + dintIndex + 0).Putvalue(""); // pMsgTran.Primary().Item("PNLGRADE" + dintIndex + 0).Putvalue(""); // dintIndex++; // } // } //} //else //{ // pMsgTran.Primary().Item("L2").Putvalue(CurrentLot.GLSCount); // sb = new StringBuilder("X".PadRight(25, 'X')); // foreach (string strGLSID in CurrentLot.GLS()) // { // InfoAct.clsGLS CurrentGLS = CurrentLot.GLSID(strGLSID); // sb[CurrentGLS.SlotID - 1] = 'O'; // pMsgTran.Primary().Item("SLOTNO" + dintIndex).Putvalue(CurrentGLS.SlotID); // pMsgTran.Primary().Item("GLSID" + dintIndex).Putvalue(CurrentGLS.GLSID); // pMsgTran.Primary().Item("PPID" + dintIndex).Putvalue(CurrentGLS.HostPPID); // pMsgTran.Primary().Item("GLSJUDGE" + dintIndex).Putvalue(CurrentGLS.GLSJudge); // pMsgTran.Primary().Item("GSORTTYPE" + dintIndex).Putvalue(CurrentGLS.GSORTTYPE); // pMsgTran.Primary().Item("SMPLFLAG" + dintIndex).Putvalue(CurrentGLS.SMPLFLAG); // pMsgTran.Primary().Item("RWKCNT" + dintIndex).Putvalue(CurrentGLS.RWKCNT); // pMsgTran.Primary().Item("L4" + dintIndex).Putvalue(0); // pMsgTran.Primary().Item("PNLJUDGE" + dintIndex + 0).Putvalue(""); // pMsgTran.Primary().Item("PNLGRADE" + dintIndex + 0).Putvalue(""); // dintIndex++; // } // pMsgTran.Primary().Item("QTY").Putvalue(dintIndex); //} //pMsgTran.Primary().Item("SLOTSEL").Putvalue(sb.ToString()); #endregion return(pMsgTran); } catch (Exception error) { funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString()); return(null); } }