/// <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 /// (int intPPIDTYPE, string dstrPPID) /// </remarks> public void funProcessCIMEvent(object[] parameters) { int intPPIDTYPE = Convert.ToInt32(parameters[0].ToString()); string dstrPPID = parameters[1].ToString(); string dstrWordAddress = ""; string dstrBitAddress = "B1036"; try { dstrWordAddress = "W1210"; if (intPPIDTYPE == 1) { pEqpAct.funWordWrite(dstrWordAddress, dstrPPID, EnuEQP.PLCRWType.Int_Data); dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 11); pEqpAct.funWordWrite(dstrWordAddress, "1", EnuEQP.PLCRWType.Int_Data); dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 1); } else { //dstrPPID = FunStringH.funStringData(dstrPPID, 20); //20자로 맞춘다. //pEqpAct.funWordWrite(dstrWordAddress, dstrPPID, EnuEQP.PLCRWType.ASCII_Data); //dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 21); //pEqpAct.funWordWrite(dstrWordAddress, intPPIDTYPE.ToString(), EnuEQP.PLCRWType.Int_Data); } pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("OnePPIDRead 조회!! PPID = {0}", dstrPPID)); //시물레이션 Test시 사용 if (pInfo.EQP("Main").DummyPLC == true) { pInfo.All.SimulReadPPIDType = intPPIDTYPE; pInfo.All.SimulReadPPID = dstrPPID; pInfo.All.simulB1036_Flag = true; pInfo.All.simul_EQPPPID = dstrPPID; pInfo.All.simulB1036_Data = 1; } else { pEqpAct.funBitWrite(dstrBitAddress, "1"); } } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } }
/// <summary> /// 설비에서 CIM으로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : strCompBit /// parameters[1] : dstrACTVal /// parameters[2] : dintActFrom /// parameters[3] : dstrACTFromSub /// parameters[4] : intBitVal /// parameters[5] : Special Parameter /// </remarks> public void funProcessEQPEvent(string[] parameters) { string strCompBit = parameters[0]; try { int intUnitID = Convert.ToInt32(parameters[2]); int intSubUnitID = 0; int.TryParse(parameters[3].ToString(), out intSubUnitID); int dintACTVal = 0; int.TryParse(parameters[1], out dintACTVal); int intBitVal = 0; int.TryParse(parameters[4].ToString(), out intBitVal); int intPortID = 0; int intSlotNo = 0; string strAddress = ""; string strLOTID = ""; string strGLSID = ""; string strJudgeID = ""; int Arr_dintSlotNo = 0; int Dep_dintSlotNo = 0; bool Arrive_CheckFlag = false; bool Dep_CheckFlag = false; string strLogMSG = ""; DateTime dtNow = DateTime.Now; string strPortID = ""; string strLotStartFlag = ""; string strLotEndFlag = ""; DateTime dtDVTime = new DateTime(); string strDVValue = ""; switch (intUnitID) { case 1: switch (dintACTVal) { case 1: //Port In - Port에 Glass가 들어옴. strPortID = m_pEqpAct.funWordRead("W3040", 2, EnuEQP.PLCRWType.ASCII_Data); intPortID = Convert.ToInt32(strPortID.Substring(1)); intSlotNo = Convert.ToInt32(m_pEqpAct.funWordRead("W3042", 1, EnuEQP.PLCRWType.Int_Data)); strGLSID = m_pEqpAct.funWordRead("W3043", 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strLOTID = pInfo.Port(intPortID).LOTID.Trim(); strLotStartFlag = m_pEqpAct.funWordRead("W304D", 1, EnuEQP.PLCRWType.Int_Data); strLotEndFlag = m_pEqpAct.funWordRead("W304E", 1, EnuEQP.PLCRWType.Int_Data); pInfo.LOTID(strLOTID).GLSID(strGLSID).RunState = "E"; pInfo.LOTID(strLOTID).EndGLSCount++; //Component in by Indexer 보고 pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 322, intUnitID, pInfo.LOTID(strLOTID).InPortID, strLOTID, strGLSID); pInfo.Port(intPortID).Slot(intSlotNo).SLOTINFO = "P"; bool dbolWaitGLSCheck = false; for (int dintLoop = 0; dintLoop < pInfo.Port(intPortID).SlotCount; dintLoop++) { if (pInfo.Port(intPortID).Slot(dintLoop + 1).SLOTINFO == "W" || pInfo.Port(intPortID).Slot(dintLoop + 1).SLOTINFO == "R") { dbolWaitGLSCheck = true; break; } } if (dbolWaitGLSCheck == false) { pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F3_DVReport, 501, 0, 0, strLOTID, strGLSID); pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F103, strLOTID); if (pInfo.Port(intPortID).AbortFlag == true) { pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ProcessReport, 303, intUnitID, pInfo.LOTID(strLOTID).InPortID, strLOTID, strGLSID); } else if (pInfo.Port(intPortID).OffineChangeFlag == true) { pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ProcessReport, 303, intUnitID, pInfo.LOTID(strLOTID).InPortID, strLOTID, strGLSID); } else { pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ProcessReport, 302, intUnitID, pInfo.LOTID(strLOTID).InPortID, strLOTID, strGLSID); } pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.UnloadReqCMD, intPortID); if (pInfo.Port(intPortID).LOTST == "3") { pInfo.Port(intPortID).LOTST = "4"; } } //bool dbolGLSCheckFlag = false; //if (pInfo.Port(intPortID).AbortFlag == true) //{ // foreach (string str in pInfo.LOTID(strLOTID).GLS()) // { // InfoAct.clsGLS CurrentGLS = pInfo.LOTID(strLOTID).GLSID(str); // if (CurrentGLS.RunState == "S") // { // dbolGLSCheckFlag = true; // break; // } // } // if (dbolGLSCheckFlag == false) // { // pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F103, strLOTID); // pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F3_DVReport, 501, 0, 0, strLOTID, strGLSID); // pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ProcessReport, 303, intUnitID, pInfo.LOTID(strLOTID).InPortID, strLOTID, strGLSID); // } //} //else if (pInfo.LOTID(strLOTID).EndGLSCount == pInfo.LOTID(strLOTID).StartGLSCount + pInfo.LOTID(strLOTID).ScrapCount) //Lot의 마지막 Glass일때 //{ // pInfo.LOTID(strLOTID).EndFlag = true; // //Lot Summary DV Data // pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F3_DVReport, 501, 0, 0, strLOTID, strGLSID); // //Lot Information Upload // pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F103, strLOTID); // //Process END 보고 // pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ProcessReport, 302, intUnitID, pInfo.LOTID(strLOTID).InPortID, strLOTID, strGLSID); //} //for (int dintLoop = 0; dintLoop < pInfo.PortCount(); dintLoop++) //{ // for (int dintLoop2 = 0; dintLoop2 < pInfo.Port(dintLoop + 1).SlotCount; dintLoop2++) // { // if (pInfo.Port(dintLoop + 1).Slot(dintLoop2 + 1).GLSID.Trim() == strGLSID.Trim()) // { // Dep_CheckFlag = true; // Dep_dintSlotNo = dintLoop2 + 1; // break; // } // } // if (Dep_CheckFlag) // { // break; // } //} strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "Out", "Index -> P0" + intPortID); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); break; case 2: //Port Out - Port에서 Glass를 꺼냄. strPortID = m_pEqpAct.funWordRead("W3050", 2, EnuEQP.PLCRWType.ASCII_Data); intPortID = Convert.ToInt32(strPortID.Substring(1)); intSlotNo = Convert.ToInt32(m_pEqpAct.funWordRead("W3052", 1, EnuEQP.PLCRWType.Int_Data)); strGLSID = m_pEqpAct.funWordRead("W3053", 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strLOTID = pInfo.Port(intPortID).LOTID.Trim(); pInfo.Port(intPortID).Slot(intSlotNo).SLOTINFO = "R"; strLotStartFlag = m_pEqpAct.funWordRead("W305D", 1, EnuEQP.PLCRWType.Int_Data); strLotEndFlag = m_pEqpAct.funWordRead("W305E", 1, EnuEQP.PLCRWType.Int_Data); if (strLotStartFlag == "1" || pInfo.LOTID(strLOTID).StartFlag) { pInfo.LOTID(strLOTID).StartFlag = false; //Process Start 보고 pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ProcessReport, 301, intUnitID, intPortID, strLOTID, strGLSID); //Process Start } //Component Out by Indexer 보고 pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 321, intPortID, 0, strLOTID, strGLSID); pInfo.LOTID(strLOTID).GLSID(strGLSID).RunState = "S"; strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "In", "P0" + intPortID + " -> Index"); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); break; case 3: //index in - sky C/V에서 Glass를 받음. strPortID = m_pEqpAct.funWordRead("W3060", 2, EnuEQP.PLCRWType.ASCII_Data); intPortID = Convert.ToInt32(strPortID.Substring(1)); intSlotNo = Convert.ToInt32(m_pEqpAct.funWordRead("W3062", 1, EnuEQP.PLCRWType.Int_Data)); strLOTID = pInfo.Port(intPortID).LOTID.Trim(); strGLSID = m_pEqpAct.funWordRead("W3063", 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "In", "Sky C/V -> Index"); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); break; case 4: //index out - Index가 Cleaner에게 Glass를 줌. strPortID = m_pEqpAct.funWordRead("W3070", 2, EnuEQP.PLCRWType.ASCII_Data); intPortID = Convert.ToInt32(strPortID.Substring(1)); intSlotNo = Convert.ToInt32(m_pEqpAct.funWordRead("W3072", 1, EnuEQP.PLCRWType.Int_Data)); strLOTID = pInfo.Port(intPortID).LOTID.Trim(); strGLSID = m_pEqpAct.funWordRead("W3073", 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "Out", "Index -> Cleaner"); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); break; default: //다른 이벤트는 보고하지 않음. break; } break; case 2: // Cleaner string strCleanerWordAddress = "W4400"; strCleanerWordAddress = FunTypeConversion.funAddressAdd(strCleanerWordAddress, 32 * (intSubUnitID - 1)); strLOTID = m_pEqpAct.funWordRead(strCleanerWordAddress, 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strCleanerWordAddress = FunTypeConversion.funAddressAdd(strCleanerWordAddress, 10); strGLSID = m_pEqpAct.funWordRead(strCleanerWordAddress, 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strCleanerWordAddress = FunTypeConversion.funAddressAdd(strCleanerWordAddress, 10); strJudgeID = m_pEqpAct.funWordRead(strCleanerWordAddress, 1, EnuEQP.PLCRWType.Int_Data); if (intBitVal == 1) { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSID = strGLSID; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).LOTID = strLOTID; if (pInfo.Unit(intUnitID).SubUnit(0).CurrGLS(strGLSID) == null) { pInfo.Unit(intUnitID).SubUnit(0).AddCurrGLS(strGLSID); pInfo.Unit(intUnitID).SubUnit(0).CurrGLS(strGLSID).LOTID = strLOTID; } if (pInfo.Unit(intUnitID).SubUnit(intSubUnitID).CurrGLS(strGLSID) == null) { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).AddCurrGLS(strGLSID); pInfo.Unit(intUnitID).SubUnit(intSubUnitID).CurrGLS(strGLSID).LOTID = strLOTID; } if (intSubUnitID == 1) { //Component In By Cleaner pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 324, intUnitID, 0, strLOTID, strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "In", ""); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); } } else { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSID = ""; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).LOTID = ""; if (intSubUnitID == 10) { string address = "W4200"; string strCleanerDVData = ""; try { dtDVTime = DateTime.Now; strDVValue = dtDVTime.ToString("yyyy-MM-dd HH:mm:ss") + ","; strDVValue += strGLSID + ","; strDVValue += "U01,"; //DVReport for (int dintLoop = 0; dintLoop < pInfo.Unit(2).SubUnit(0).GLSAPDCount; dintLoop++) { if (dintLoop != 0) { address = CommonAct.FunTypeConversion.funAddressAdd(address, 2); } //if (pInfo.Unit(2).SubUnit(0).GLSAPD(dintLoop + 1).Length == 1 || pInfo.Unit(2).SubUnit(0).GLSAPD(dintLoop + 1).Length == 2) //{ strCleanerDVData = m_pEqpAct.funWordRead(address, 2, EnuEQP.PLCRWType.Int_Data); strCleanerDVData = CommonAct.FunStringH.funPoint(strCleanerDVData, pInfo.Unit(2).SubUnit(0).GLSAPD(dintLoop + 1).Format); pInfo.Unit(2).SubUnit(0).GLSAPD(dintLoop + 1).Value = Convert.ToSingle(strCleanerDVData); pInfo.LOTID(strLOTID).LOTAPD(dintLoop + 1).Value += pInfo.Unit(2).SubUnit(0).GLSAPD(dintLoop + 1).Value; strDVValue += pInfo.Unit(2).SubUnit(0).GLSAPD(dintLoop + 1).Value + ","; //} } strDVValue = strDVValue.Substring(0, strDVValue.Length - 1); pInfo.subLog_Set(InfoAct.clsInfo.LogType.Clenaer_DV, strDVValue); } catch (Exception ex) { try { for (int dintLoop = 0; dintLoop < pInfo.Unit(2).SubUnit(0).GLSAPDCount; dintLoop++) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("Cleaner DV Data List {0} : {1}", dintLoop + 1, m_pEqpAct.funWordRead("W4200", pInfo.Unit(2).SubUnit(0).GLSAPD(dintLoop + 1).Length, EnuEQP.PLCRWType.Int_Data))); } } catch (Exception ex2) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "Cleaner DVData Read Error!!"); pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex2.ToString()); } pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F3_DVReport, 500, intUnitID, 0, strLOTID, strGLSID); //Component Out By Clenaer pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 323, intUnitID, 0, strLOTID, strGLSID); pInfo.Unit(intUnitID).SubUnit(0).RemoveCurrGLS(strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "Out", ""); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); } pInfo.Unit(intUnitID).SubUnit(intSubUnitID).RemoveCurrGLS(strGLSID); } break; case 3: //Sky C/V intBitVal = Convert.ToInt32(parameters[4]); string strOvenWordAddress = "W5400"; strOvenWordAddress = FunTypeConversion.funAddressAdd(strOvenWordAddress, 32 * (intSubUnitID - 1)); strLOTID = m_pEqpAct.funWordRead(strOvenWordAddress, 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strOvenWordAddress = FunTypeConversion.funAddressAdd(strOvenWordAddress, 10); strGLSID = m_pEqpAct.funWordRead(strOvenWordAddress, 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strOvenWordAddress = FunTypeConversion.funAddressAdd(strOvenWordAddress, 10); strJudgeID = m_pEqpAct.funWordRead(strOvenWordAddress, 1, EnuEQP.PLCRWType.Int_Data); if (intBitVal == 1) { //strLOTID = m_pEqpAct.funWordRead("W5400", 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); //strGLSID = m_pEqpAct.funWordRead("W540A", 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); //strJudgeID = m_pEqpAct.funWordRead("W5414", 1, EnuEQP.PLCRWType.Int_Data); pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSID = strGLSID; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).LOTID = strLOTID; if (pInfo.Unit(intUnitID).SubUnit(0).CurrGLS(strGLSID) == null) { pInfo.Unit(intUnitID).SubUnit(0).AddCurrGLS(strGLSID); pInfo.Unit(intUnitID).SubUnit(0).CurrGLS(strGLSID).LOTID = strLOTID; } if (pInfo.Unit(intUnitID).SubUnit(intSubUnitID).CurrGLS(strGLSID) == null) { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).AddCurrGLS(strGLSID); pInfo.Unit(intUnitID).SubUnit(intSubUnitID).CurrGLS(strGLSID).LOTID = strLOTID; } if (intSubUnitID == 1) { //pInfo.Unit(intUnitID).SubUnit(intSubUnitID).AddCurrGLS(strGLSID); //pInfo.Unit(intUnitID).SubUnit(0).AddCurrGLS(strGLSID); //Component In By Cleaner pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 324, intUnitID, 0, strLOTID, strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "In", ""); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); } } else { //strLOTID = m_pEqpAct.funWordRead("W5460", 10, EnuEQP.PLCRWType.ASCII_Data); //strGLSID = m_pEqpAct.funWordRead("W546A", 10, EnuEQP.PLCRWType.ASCII_Data); //strJudgeID = m_pEqpAct.funWordRead("W5474", 1, EnuEQP.PLCRWType.Int_Data); pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSID = ""; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).LOTID = ""; if (intSubUnitID == 4) { //Component Out By Clenaer pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 323, intUnitID, 0, strLOTID, strGLSID); pInfo.Unit(intUnitID).SubUnit(0).RemoveCurrGLS(strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "Out", ""); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); } pInfo.Unit(intUnitID).SubUnit(intSubUnitID).RemoveCurrGLS(strGLSID); } break; case 4: //Robot strAddress = "W6200"; strAddress = CommonAct.FunTypeConversion.funAddressAdd(strAddress, 32 * (dintACTVal - 1)); strLOTID = m_pEqpAct.funWordRead(strAddress, 10, EnuEQP.PLCRWType.ASCII_Data); strAddress = CommonAct.FunTypeConversion.funAddressAdd(strAddress, 10); strGLSID = m_pEqpAct.funWordRead(strAddress, 10, EnuEQP.PLCRWType.ASCII_Data); InfoAct.clsGLS CurrentGLS = null; if (pInfo.Unit(4).SubUnit(0).CurrGLS(strGLSID) == null) { pInfo.Unit(4).SubUnit(0).AddCurrGLS(strGLSID); } switch (dintACTVal) { case 1: CurrentGLS = pInfo.Unit(4).SubUnit(0).CurrGLS(strGLSID); CurrentGLS.LOTID = strLOTID; strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, "Oven Robot", "In", "Cleaner -> Oven Robot"); break; case 2: pInfo.Unit(4).SubUnit(0).RemoveCurrGLS(strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, "Oven Robot", "Out", "Oven Robot -> Sky C/V"); break; case 3: pInfo.Unit(4).SubUnit(0).RemoveCurrGLS(strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, "Oven Robot", "Out", "Oven Robot -> Oven1"); break; case 4: CurrentGLS = pInfo.Unit(4).SubUnit(0).CurrGLS(strGLSID); CurrentGLS.LOTID = strLOTID; strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, "Oven Robot", "In", "Oven1 -> Oven Robot"); break; case 5: pInfo.Unit(4).SubUnit(0).RemoveCurrGLS(strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, "Oven Robot", "Out", "Oven Robot -> Oven2"); break; case 6: CurrentGLS = pInfo.Unit(4).SubUnit(0).CurrGLS(strGLSID); CurrentGLS.LOTID = strLOTID; strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, "Oven Robot", "In", "Oven2 -> Oven Robot"); break; } pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); break; case 5: //OVEN#01 intBitVal = Convert.ToInt32(parameters[4]); strAddress = CommonAct.FunTypeConversion.funAddressAdd("W7500", (intSubUnitID - 1) * 32); strLOTID = m_pEqpAct.funWordRead(strAddress, 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strAddress = CommonAct.FunTypeConversion.funAddressAdd(strAddress, 10); strGLSID = m_pEqpAct.funWordRead(strAddress, 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strAddress = CommonAct.FunTypeConversion.funAddressAdd(strAddress, 10); strJudgeID = m_pEqpAct.funWordRead(strAddress, 1, EnuEQP.PLCRWType.Int_Data); if (intBitVal == 1) { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSID = strGLSID; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).LOTID = strLOTID; if (pInfo.Unit(intUnitID).SubUnit(0).CurrGLS(strGLSID) == null) { pInfo.Unit(intUnitID).SubUnit(0).AddCurrGLS(strGLSID); pInfo.Unit(intUnitID).SubUnit(0).CurrGLS(strGLSID).LOTID = strLOTID; } if (pInfo.Unit(intUnitID).SubUnit(intSubUnitID).CurrGLS(strGLSID) == null) { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).AddCurrGLS(strGLSID); pInfo.Unit(intUnitID).SubUnit(intSubUnitID).CurrGLS(strGLSID).LOTID = strLOTID; } //Component In By Cleaner pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 324, intUnitID, 0, strLOTID, strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "In", ""); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); } else { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSID = ""; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).LOTID = ""; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).RemoveCurrGLS(strGLSID); pInfo.Unit(intUnitID).SubUnit(0).RemoveCurrGLS(strGLSID); try { string address = "W7300"; string strOvenDVData = ""; dtDVTime = DateTime.Now; strDVValue = dtDVTime.ToString("yyyy-MM-dd HH:mm:ss") + ","; strDVValue += strGLSID + ","; strDVValue += "U02,"; int dintOven01UnitID = 5; //DVReport for (int dintLoop = 0; dintLoop < pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPDCount; dintLoop++) { if (dintLoop != 0) { address = CommonAct.FunTypeConversion.funAddressAdd(address, pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPD(dintLoop).Length); } if (pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Length == 1) { strOvenDVData = m_pEqpAct.funWordRead(address, pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Length, EnuEQP.PLCRWType.Int_Data); strOvenDVData = CommonAct.FunStringH.funPoint(strOvenDVData, pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Format); pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Value = Convert.ToSingle(strOvenDVData); strDVValue += strOvenDVData + ","; pInfo.LOTID(strLOTID.Trim()).LOTAPD(pInfo.Unit(2).SubUnit(0).GLSAPDCount + dintLoop).Value += pInfo.Unit(intUnitID).SubUnit(0).GLSAPD(dintLoop + 1).Value; } else if (pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Length == 6) { string Oven01_DateTime = ""; Oven01_DateTime += m_pEqpAct.funWordRead(address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); address = CommonAct.FunTypeConversion.funAddressAdd(address, 1); Oven01_DateTime += m_pEqpAct.funWordRead(address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); address = CommonAct.FunTypeConversion.funAddressAdd(address, 1); Oven01_DateTime += m_pEqpAct.funWordRead(address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); address = CommonAct.FunTypeConversion.funAddressAdd(address, 1); Oven01_DateTime += m_pEqpAct.funWordRead(address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); address = CommonAct.FunTypeConversion.funAddressAdd(address, 1); Oven01_DateTime += m_pEqpAct.funWordRead(address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); address = CommonAct.FunTypeConversion.funAddressAdd(address, 1); Oven01_DateTime += m_pEqpAct.funWordRead(address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); address = CommonAct.FunTypeConversion.funAddressAdd(address, 1); //Oven01_DateTime += m_pEqpAct.funWordRead(address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); //address = CommonAct.FunTypeConversion.funAddressAdd(address, 1); if (pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Name == "Oven01_LOADING_TIME") { pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPD(dintLoop + 1).LoadingTIME = Oven01_DateTime; strDVValue += Oven01_DateTime + ","; } else { pInfo.Unit(dintOven01UnitID).SubUnit(0).GLSAPD(dintLoop + 1).UnloadingTIME = Oven01_DateTime; strDVValue += Oven01_DateTime + ","; } address = CommonAct.FunTypeConversion.funAddressAdd(address, -6); } } strDVValue = strDVValue.Substring(0, strDVValue.Length - 1); pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F3_DVReport, 500, intUnitID, 0, strLOTID, strGLSID); pInfo.subLog_Set(InfoAct.clsInfo.LogType.Oven_DV, strDVValue); } catch (Exception ex) { try { for (int dintLoop = 0; dintLoop < pInfo.Unit(intUnitID).SubUnit(0).GLSAPDCount; dintLoop++) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("Oven01 DVData List {0} : {1}", dintLoop + 1, m_pEqpAct.funWordRead("W7300", pInfo.Unit(intUnitID).SubUnit(0).GLSAPD(dintLoop + 1).Length, EnuEQP.PLCRWType.Int_Data))); } } catch (Exception ex2) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "Oven01 DVData Read Error!!"); pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex2.ToString()); } pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } //Component In By Cleaner pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 323, intUnitID, 0, strLOTID, strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "Out", ""); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); } break; case 6: //OVEN#02 intBitVal = Convert.ToInt32(parameters[4]); strAddress = CommonAct.FunTypeConversion.funAddressAdd("W8500", (intSubUnitID - 1) * 32); strLOTID = m_pEqpAct.funWordRead(strAddress, 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strAddress = CommonAct.FunTypeConversion.funAddressAdd(strAddress, 10); strGLSID = m_pEqpAct.funWordRead(strAddress, 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strAddress = CommonAct.FunTypeConversion.funAddressAdd(strAddress, 10); strJudgeID = m_pEqpAct.funWordRead(strAddress, 1, EnuEQP.PLCRWType.Int_Data); if (intBitVal == 1) { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSID = strGLSID; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).LOTID = strLOTID; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).AddCurrGLS(strGLSID); pInfo.Unit(intUnitID).SubUnit(0).AddCurrGLS(strGLSID); //Component In By Cleaner pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 324, intUnitID, 0, strLOTID, strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "In", ""); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); } else { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSID = ""; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).LOTID = ""; pInfo.Unit(intUnitID).SubUnit(intSubUnitID).RemoveCurrGLS(strGLSID); pInfo.Unit(intUnitID).SubUnit(0).RemoveCurrGLS(strGLSID); string Oven02_address = "W8300"; string strOven2DVData = ""; dtDVTime = DateTime.Now; strDVValue = dtDVTime.ToString("yyyy-MM-dd HH:mm:ss") + ","; strDVValue += strGLSID + ","; strDVValue += "U03,"; try { int dintOven02UnitID = 5; //DVReport for (int dintLoop = 0; dintLoop < pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPDCount; dintLoop++) { if (dintLoop != 0) { Oven02_address = CommonAct.FunTypeConversion.funAddressAdd(Oven02_address, pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop).Length); } if (pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Length == 1) { strOven2DVData = m_pEqpAct.funWordRead(Oven02_address, pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Length, EnuEQP.PLCRWType.Int_Data); strOven2DVData = CommonAct.FunStringH.funPoint(strOven2DVData, pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Format); pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Value = Convert.ToSingle(strOven2DVData); strDVValue += strOven2DVData + ","; //pInfo.LOTID(strLOTID.Trim()).LOTAPD(pInfo.Unit(2).SubUnit(0).GLSAPDCount + pInfo.Unit(5).SubUnit(0).GLSAPDCount + dintLoop).Value += pInfo.Unit(intUnitID).SubUnit(0).GLSAPD(dintLoop + 1).Value; pInfo.LOTID(strLOTID.Trim()).LOTAPD(pInfo.Unit(2).SubUnit(0).GLSAPDCount + dintLoop).Value += pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Value; } else if (pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Length == 6) { string Oven02_DateTime = ""; Oven02_DateTime += m_pEqpAct.funWordRead(Oven02_address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); Oven02_address = CommonAct.FunTypeConversion.funAddressAdd(Oven02_address, 1); Oven02_DateTime += m_pEqpAct.funWordRead(Oven02_address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); Oven02_address = CommonAct.FunTypeConversion.funAddressAdd(Oven02_address, 1); Oven02_DateTime += m_pEqpAct.funWordRead(Oven02_address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); Oven02_address = CommonAct.FunTypeConversion.funAddressAdd(Oven02_address, 1); Oven02_DateTime += m_pEqpAct.funWordRead(Oven02_address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); Oven02_address = CommonAct.FunTypeConversion.funAddressAdd(Oven02_address, 1); Oven02_DateTime += m_pEqpAct.funWordRead(Oven02_address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); Oven02_address = CommonAct.FunTypeConversion.funAddressAdd(Oven02_address, 1); Oven02_DateTime += m_pEqpAct.funWordRead(Oven02_address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); Oven02_address = CommonAct.FunTypeConversion.funAddressAdd(Oven02_address, 1); //Oven02_DateTime += m_pEqpAct.funWordRead(Oven02_address, 1, EnuEQP.PLCRWType.Int_Data).PadLeft(2, '0'); //Oven02_address = CommonAct.FunTypeConversion.funAddressAdd(Oven02_address, 1); if (pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop + 1).Name == "Oven02_LOADING_TIME") { pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop + 1).LoadingTIME = Oven02_DateTime; strDVValue += Oven02_DateTime + ","; } else { pInfo.Unit(dintOven02UnitID).SubUnit(0).GLSAPD(dintLoop + 1).UnloadingTIME = Oven02_DateTime; strDVValue += Oven02_DateTime + ","; } Oven02_address = CommonAct.FunTypeConversion.funAddressAdd(Oven02_address, -6); } } strDVValue = strDVValue.Substring(0, strDVValue.Length - 1); pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F3_DVReport, 500, intUnitID, 0, strLOTID, strGLSID); pInfo.subLog_Set(InfoAct.clsInfo.LogType.Oven_DV, strDVValue); } catch (Exception ex) { try { for (int dintLoop = 0; dintLoop < pInfo.Unit(5).SubUnit(0).GLSAPDCount; dintLoop++) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("Oven02 DVData List {0} : {1}", dintLoop + 1, m_pEqpAct.funWordRead("W8300", pInfo.Unit(5).SubUnit(0).GLSAPD(dintLoop + 1).Length, EnuEQP.PLCRWType.Int_Data))); } } catch (Exception ex2) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "Oven02 DVData Read Error!!"); pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex2.ToString()); } pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } //Component In By Cleaner pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_ComponentReport, 323, intUnitID, 0, strLOTID, strGLSID); strLogMSG = string.Format("{0},{1},{2},{3},{4},{5}", dtNow.ToString("HH:mm:ss.ff"), strLOTID, strGLSID, pInfo.Unit(intUnitID).SubUnit(0).ReportUnitID, "Out", ""); pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, strLogMSG); } break; } if (intUnitID == 1 || intUnitID == 4) { intSubUnitID = 0; } if (intBitVal == 1) { try { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSExist = true; } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("IntUnitID : {0}, intSubUnitID : {1}", intUnitID, intSubUnitID)); pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } //pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSID = ""; //pInfo.Unit(intUnitID).SubUnit(intSubUnitID).LOTID = ""; } else { pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSExist = false; } //if(strCompBit != null) m_pEqpAct.subSetConfirmBit(strCompBit); } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); //m_pEqpAct.subSetConfirmBit(strCompBit); } }
/// <summary> /// 설비에서 CIM으로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : strCompBit /// parameters[1] : dstrACTVal /// parameters[2] : dintActFrom /// parameters[3] : dstrACTFromSub /// parameters[4] : intBitVal /// parameters[5] : Special Parameter /// </remarks> public void funProcessEQPEvent(string[] parameters) { string dstrHGLSID = ""; string dstrWordAddress = "W1440"; string dstrBitAddress = ""; bool dbolItemCheck = false; string strAPCEQPPPID = ""; string dstrValue = ""; int APCItemIndex = 0; string JobRecipe = ""; string strWordWriteData = ""; try { #region 임시 dstrHGLSID = "TEST"; dstrWordAddress = "W1440"; dstrBitAddress = "B1018"; for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBodyCount; dintLoop++) { dbolItemCheck = false; for (int dintLoop2 = 0; dintLoop2 < pInfo.APC(dstrHGLSID).ParameterName.Length; dintLoop2++) { if (pInfo.APC(dstrHGLSID).ParameterName[dintLoop2] == pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Name) { APCItemIndex = dintLoop2; dbolItemCheck = true; break; } } if (dbolItemCheck) { dstrValue = Convert.ToInt32(FunStringH.funMakePLCData(pInfo.APC(dstrHGLSID).ParameterValue[APCItemIndex].ToString())).ToString(); } else { dstrValue = FunStringH.funMakePLCData(pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Value); } //if (pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Length > 1) //{ // pEqpAct.funDoubleWordWrite(dstrWordAddress, dstrValue, EnuEQP.PLCRWType.Int_Data); //} //else //{ // pEqpAct.funWordWrite(dstrWordAddress, dstrValue, EnuEQP.PLCRWType.Int_Data); //} //dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2) { if (dstrValue.Contains("-")) { strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue.ToString(), EnuEQP.PLCRWType.Int_Data); //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData, EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 } else { strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue.ToString(), EnuEQP.PLCRWType.Int_Data).Substring(4, 4) + m_pEqpAct.funWordWriteString(2, dstrValue.ToString(), EnuEQP.PLCRWType.Int_Data).Substring(0, 4); } m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(4, 4), EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 1); m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(0, 4), EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData, EnuEQP.PLCRWType.Hex_Data); dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length - 1); } else { strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue, EnuEQP.PLCRWType.ASCII_Data); dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); } } //pEqpAct.funBitWrite(dstrBitAddress, "1"); //pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S16F111APCStart, dstrHGLSID); #endregion //int dintTest = 124; //for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++) //{ // if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2) // { // dintTest -= 1; // if (dintTest < 0) // { // strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dintTest.ToString(), EnuEQP.PLCRWType.Int_Data); // //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData, EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 // } // else // { // strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dintTest.ToString(), EnuEQP.PLCRWType.Int_Data).Substring(4, 4) + m_pEqpAct.funWordWriteString(2, dintTest.ToString(), EnuEQP.PLCRWType.Int_Data).Substring(0, 4); // } // m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(4, 4), EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 // dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 1); // m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(0, 4), EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 // //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData, EnuEQP.PLCRWType.Hex_Data); // dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length - 1); // } // else // { // strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dintTest.ToString(), EnuEQP.PLCRWType.ASCII_Data); // dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); // } // //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(4, 4), EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 // //dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 1); // //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(0, 4), EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 // //dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length - 1); //} } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } }
/// <summary> /// 설비에서 CIM으로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : strCompBit /// parameters[1] : dstrACTVal /// parameters[2] : dintActFrom /// parameters[3] : dstrACTFromSub /// parameters[4] : intBitVal /// parameters[5] : Special Parameter /// </remarks> public void funProcessEQPEvent(string[] parameters) { string strCompBit = parameters[0]; string[] dstrValue; int dintPPID = 0; ArrayList arrCon = new ArrayList(); string dstrAddress = ""; try { m_pEqpAct.subWordReadSave("W2040", 1, EnuEQP.PLCRWType.Int_Data); //EQP PPID m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.Int_Data); //Spare m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data); //PPID Type //for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++) //{ // dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; // m_pEqpAct.subWordReadSave("", dintLength, EnuEQP.PLCRWType.Int_Data); //Body //} dstrValue = m_pEqpAct.funWordReadAction(true); //PLC Req에 대한 CIM의 Confirm Bit를 준다. dintPPID = Convert.ToInt32(dstrValue[0]); foreach (string strEQPPPID in pInfo.Unit(0).SubUnit(0).MappingEQPPPID()) { InfoAct.clsMappingEQPPPID CurrentPPID = pInfo.Unit(0).SubUnit(0).MappingEQPPPID(strEQPPPID); if (CurrentPPID.LOW_EQPPPID == dstrValue[0] || CurrentPPID.UP_EQPPPID == dstrValue[0]) { if (arrCon.Contains(CurrentPPID) == false) { arrCon.Add(CurrentPPID); } } } dstrAddress = "W1800"; m_pEqpAct.funWordWrite(dstrAddress, arrCon.Count.ToString(), EnuEQP.PLCRWType.Int_Data); InfoAct.clsMappingEQPPPID CurrentMappingPPID; dstrAddress = FunTypeConversion.funAddressAdd(dstrAddress, 1); for (int dintLoop = 0; dintLoop < arrCon.Count; dintLoop++) { CurrentMappingPPID = (InfoAct.clsMappingEQPPPID)arrCon[dintLoop]; m_pEqpAct.funWordWrite(dstrAddress, CurrentMappingPPID.EQPPPID.PadRight(16), EnuEQP.PLCRWType.ASCII_Data); dstrAddress = FunTypeConversion.funAddressAdd(dstrAddress, 8); m_pEqpAct.funWordWrite(dstrAddress, CurrentMappingPPID.UP_EQPPPID, EnuEQP.PLCRWType.Int_Data); dstrAddress = FunTypeConversion.funAddressAdd(dstrAddress, 1); m_pEqpAct.funWordWrite(dstrAddress, CurrentMappingPPID.LOW_EQPPPID, EnuEQP.PLCRWType.Int_Data); dstrAddress = FunTypeConversion.funAddressAdd(dstrAddress, 1); } m_pEqpAct.subSetConfirmBit(strCompBit); } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } }
/// <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 dstrHGLSID = ""; string dstrWordAddress = ""; string dstrBitAddress = ""; bool dbolItemCheck = false; string strAPCEQPPPID = ""; string dstrValue = ""; int APCItemIndex = 0; string JobRecipe = ""; string strWordWriteData = ""; try { //dstrHGLSID = parameters[0].ToString(); dstrHGLSID = parameters[0].ToString(); //Test dstrWordAddress = "W1440"; dstrBitAddress = "B1018"; strAPCEQPPPID = pInfo.APC(dstrHGLSID).EQPPPID; //if (pInfo.All.GlassUpperJobFlag) //{ // JobRecipe = pInfo.Unit(0).SubUnit(0).MappingEQPPPID(strAPCEQPPPID).UP_EQPPPID; //} //else //{ // JobRecipe = pInfo.Unit(0).SubUnit(0).MappingEQPPPID(strAPCEQPPPID).LOW_EQPPPID; //} for (int dintLoop = 0; dintLoop < 574; dintLoop++) { pEqpAct.funWordWrite(dstrWordAddress, "0", EnuEQP.PLCRWType.Int_Data); dstrWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrWordAddress, 1); } dstrWordAddress = "W1440"; for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBodyCount; dintLoop++) { dbolItemCheck = false; for (int dintLoop2 = 0; dintLoop2 < pInfo.APC(dstrHGLSID).ParameterName.Length; dintLoop2++) { if (pInfo.APC(dstrHGLSID).ParameterName[dintLoop2] == pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Name) { APCItemIndex = dintLoop2; dbolItemCheck = true; break; } } if (dbolItemCheck) { dstrValue = Convert.ToInt32(FunStringH.funMakePLCData(pInfo.APC(dstrHGLSID).ParameterValue[APCItemIndex].ToString())).ToString(); } else { dstrValue = FunStringH.funMakePLCData(pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Value); } //if (pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Length > 1) //{ // pEqpAct.funDoubleWordWrite(dstrWordAddress, dstrValue, EnuEQP.PLCRWType.Int_Data); //} //else //{ // pEqpAct.funWordWrite(dstrWordAddress, dstrValue, EnuEQP.PLCRWType.Int_Data); //} //dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2) { if (dstrValue.Contains("-")) { strWordWriteData = pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue, EnuEQP.PLCRWType.Int_Data); } else { strWordWriteData = pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue, EnuEQP.PLCRWType.Int_Data).Substring(4, 4) + pEqpAct.funWordWriteString(2, dstrValue, EnuEQP.PLCRWType.Int_Data).Substring(0, 4); } pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(4, 4), EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 1); pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(0, 4), EnuEQP.PLCRWType.Hex_Data); //변경할 ECID 데이터 dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length - 1); } else { pEqpAct.funWordWrite(dstrWordAddress, dstrValue.PadRight(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length), EnuEQP.PLCRWType.ASCII_Data); dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); } } pEqpAct.funWordWrite("W167E", strAPCEQPPPID, EnuEQP.PLCRWType.Int_Data); pEqpAct.funBitWrite(dstrBitAddress, "1"); //pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S16F111APCStart, dstrHGLSID); } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } }
/// <summary> /// 설비에서 CIM으로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : strCompBit /// parameters[1] : dstrACTVal /// parameters[2] : dintActFrom /// parameters[3] : dstrACTFromSub /// parameters[4] : intBitVal /// parameters[5] : Special Parameter /// </remarks> public void funProcessEQPEvent(string[] parameters) { string strCompBit = parameters[0]; StringBuilder dstrLog = new StringBuilder(); string dstrEQPPPID = ""; int dintPPIDType = 0; string dstrTemp = ""; string strWordAddress = ""; try { dstrEQPPPID = m_pEqpAct.funWordRead("W2540", 1, EnuEQP.PLCRWType.Int_Data); dintPPIDType = 1; pInfo.Unit(0).SubUnit(0).RemoveEQPPPID(dstrEQPPPID); #region 수정 전 //strWordAddress = "W254C"; //if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true) //{ // for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++) // { // //EQPPPID에 Body 저장 // if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true) // { // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; // if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2) // { // dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; // } // else // { // dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; // } // strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); // } // } //} #endregion #region 수정 후 int dintReadcount = (pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5) * 2; string dstrReadData = ""; int dintLength = 0; string strValue = ""; int dintStartIndex = 0; strWordAddress = "W254C"; if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true) { //if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBodyCount == 0) //{ //[2015/04/20] PPID Body 값 Block으로 한번에(Add by HS) dstrReadData = m_pEqpAct.funWordRead("W254C", dintReadcount, EnuEQP.PLCRWType.Hex_Data, false).Trim(); #region EQPPPID에 Body 저장 for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5; dintLoop++) { if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true) { pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 4; //Length에 맞게 자를 문자열 개수를 가져온다. dstrTemp = dstrReadData.Substring(dintStartIndex, dintLength); if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length > 1) { string dstrTemp1 = dstrTemp.Substring(0, 4); string dstrTemp2 = dstrTemp.Substring(4, 4); dstrTemp = dstrTemp2 + dstrTemp1; strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal); dstrTemp = FunStringH.funPoint(strValue, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; } else { strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.ASCString); pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = strValue; } dintStartIndex += dintLength; #region 변경전 [2015.04.20] Modify by HS //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; //if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2) //{ // dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; //} //else //{ // dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; //} //strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); #endregion } } #endregion strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, dintReadcount); dstrReadData = m_pEqpAct.funWordRead(strWordAddress, 80, EnuEQP.PLCRWType.ASCII_Data, false); dintStartIndex = 0; #region EQPPPID에 Film Code 저장 for (int dintLoop = 251; dintLoop <= 255; dintLoop++) { if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true) { pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 2; //Length에 맞게 자를 문자열 개수를 가져온다. dstrTemp = dstrReadData.Substring(dintStartIndex, dintLength); pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp.Trim(); } dintStartIndex += dintLength; } #endregion //} } #endregion //PLC Req에 대한 CIM의 Confirm Bit를 준다. m_pEqpAct.subSetConfirmBit(strCompBit); switch (dintPPIDType) { case 1: //EQP PPID //Parameter.log에 로그 출력 m_pEqpAct.subSetParameterLog("EQP PPID 생성", "", null, dstrEQPPPID, dstrEQPPPID); int[] arrData = new int[16]; string strData = ""; if (pInfo.EQP("Main").DummyPLC) { foreach (string strEQPPID in pInfo.Unit(0).SubUnit(0).EQPPPID()) { arrData[Convert.ToInt32(strEQPPID) - 1] = 1; } for (int dintLoop = 16; dintLoop > 0; dintLoop--) { strData += arrData[dintLoop - 1].ToString(); } strData = CommonAct.FunTypeConversion.funBinConvert(strData, EnuEQP.StringType.Hex); m_pEqpAct.funWordWrite("W2A00", strData, EnuEQP.PLCRWType.Hex_Data); } pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, "1", "1", "", dstrEQPPPID); break; } //최종 수정된 날짜 Ini에 변경 FunINIMethod.subINIWriteValue("ETCInfo", "RECIPELastModified", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), pInfo.All.SystemINIFilePath); } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } }
/// <summary> /// 설비에서 CIM으로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : strCompBit /// parameters[1] : dstrACTVal /// parameters[2] : dintActFrom /// parameters[3] : dstrACTFromSub /// parameters[4] : intBitVal /// parameters[5] : Special Parameter /// </remarks> public void funProcessEQPEvent(string[] parameters) { string strCompBit = parameters[0]; StringBuilder dstrLog = new StringBuilder(); string dstrEQPPPID = ""; int dintPPIDType = 0; string dstrTemp = ""; string strWordAddress = ""; try { //m_pEqpAct.subWordReadSave("W2040", 10, EnuEQP.PLCRWType.ASCII_Data); //HOST PPID dstrEQPPPID = m_pEqpAct.funWordRead("W2540", 1, EnuEQP.PLCRWType.Int_Data); dintPPIDType = 1; #region 수정 전 //pInfo.Unit(0).SubUnit(0).RemoveEQPPPID(dstrEQPPPID); //strWordAddress = "W254C"; //if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true) //{ // for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++) // { // //EQPPPID에 Body 저장 // if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true) // { // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; // if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2) // { // dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; // } // else // { // dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; // } // strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); // } // } //} # endregion #region 수정 후 int dintReadcount = (pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5) * 2; string dstrReadData = ""; int dintLength = 0; string strValue = ""; int dintStartIndex = 0; strWordAddress = "W254C"; if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true) { //if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBodyCount == 0) //{ //[2015/04/20] PPID Body 값 Block으로 한번에(Add by HS) dstrReadData = m_pEqpAct.funWordRead("W254C", dintReadcount, EnuEQP.PLCRWType.Hex_Data, false).Trim(); #region EQPPPID에 Body 저장 for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5; dintLoop++) { if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true) { pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 4; //Length에 맞게 자를 문자열 개수를 가져온다. dstrTemp = dstrReadData.Substring(dintStartIndex, dintLength); if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length > 1) { string dstrTemp1 = dstrTemp.Substring(0, 4); string dstrTemp2 = dstrTemp.Substring(4, 4); dstrTemp = dstrTemp2 + dstrTemp1; strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal); dstrTemp = FunStringH.funPoint(strValue, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; } else { strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.ASCString); pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = strValue; } dintStartIndex += dintLength; #region 변경전 [2015.04.20] Modify by HS //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; //if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2) //{ // dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; //} //else //{ // dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; //} //strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); #endregion } } #endregion strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, dintReadcount); dstrReadData = m_pEqpAct.funWordRead(strWordAddress, 80, EnuEQP.PLCRWType.ASCII_Data, false); dintStartIndex = 0; #region EQPPPID에 Film Code 저장 for (int dintLoop = 251; dintLoop <= 255; dintLoop++) { if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true) { pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 2; //Length에 맞게 자를 문자열 개수를 가져온다. dstrTemp = dstrReadData.Substring(dintStartIndex, dintLength); pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp.Trim(); } dintStartIndex += dintLength; } #endregion //} } #endregion //PLC Req에 대한 CIM의 Confirm Bit를 준다. m_pEqpAct.subSetConfirmBit(strCompBit); switch (dintPPIDType) { case 1: //EQP PPID { pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, "3", "1", "", dstrEQPPPID); ArrayList arrCon = new ArrayList(); InfoAct.clsHOSTPPID CurrentPPID; foreach (string strPPID in pInfo.Unit(0).SubUnit(0).HOSTPPID()) { CurrentPPID = pInfo.Unit(0).SubUnit(0).HOSTPPID(strPPID); if (CurrentPPID.EQPPPID == dstrEQPPPID) { arrCon.Add(strPPID); } } string dstrSQL = ""; for (int dintLoop = 0; dintLoop < arrCon.Count; dintLoop++) { pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, "3", "2", arrCon[dintLoop].ToString(), dstrEQPPPID); //pInfo.Unit(0).SubUnit(0).RemoveHOSTPPID(arrCon[dintLoop].ToString()); dstrSQL = string.Format("Update `tbHOSTPPID` set EQPPPID='{0}', DTime='{1}' Where HOSTPPID='{2}';", dstrEQPPPID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), arrCon[dintLoop].ToString()); DBAct.clsDBAct.funExecuteQuery(dstrSQL); } } break; } //최종 수정된 날짜 Ini에 변경 FunINIMethod.subINIWriteValue("ETCInfo", "RECIPELastModified", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), pInfo.All.SystemINIFilePath); }
/// <summary> /// Glass APD를 읽어서 파일/구조체에 저장 /// </summary> /// <param name="strLOTID"></param> /// <param name="intSlotID"></param> private void subGLSAPDRead(string strGLSID, int intSlotID) { string dstrWriteData = ""; string dstrTemp = ""; string dstrWordAddress = "W2780"; string dstrValue = ""; string dstrDateTime = ""; string dstrReadData = ""; int dintLength = 0; int dintStartIndex = 0; try { //LOT이 존재하지 않거나 SlotID가 0이면 에러 로그를 출력하고 빠져나간다. if (pInfo.GLSID(strGLSID) == null || intSlotID == 0) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "subGLSAPDRead: strGlassID:" + strGLSID + ", intSlotID:" + intSlotID.ToString()); return; } ////기본 Data를 구성한다.(6개) //dstrTemp = strGLSID; //LOTID //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(1).Value = dstrTemp; //dstrWriteData = dstrWriteData + dstrTemp + ","; //파일로 쓰기 위해 결합 //dstrTemp = pInfo.LOTID(strLOTID).Slot(intSlotID).HOSTPPID; //PPID //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(2).Value = dstrTemp; //dstrWriteData = dstrWriteData + dstrTemp + ","; //파일로 쓰기 위해 결합 //dstrTemp = pInfo.LOTID(strLOTID).Slot(intSlotID).H_PANELID; //H_PANELID //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(3).Value = dstrTemp; //dstrWriteData = dstrWriteData + dstrTemp + ","; //파일로 쓰기 위해 결합 //dstrTemp = FunStringH.funMakeLengthStringFirst(intSlotID.ToString(), 2); //SLOTNO //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(4).Value = dstrTemp; //dstrWriteData = dstrWriteData + dstrTemp + ","; //파일로 쓰기 위해 결합 //dstrTemp = pInfo.LOTID(strLOTID).Slot(intSlotID).STEPID; //STEPID //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(5).Value = dstrTemp; //dstrWriteData = dstrWriteData + dstrTemp + ","; //파일로 쓰기 위해 결합 //dstrTemp = pInfo.Unit(0).SubUnit(0).EQPState; //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(6).Value = dstrTemp; //dstrWriteData = dstrWriteData + dstrTemp + ","; //파일로 쓰기 위해 결합 //Word를 Block으로 한번에 읽는다. dstrReadData = m_pEqpAct.funWordRead(dstrWordAddress, pInfo.All.GLSAPDPLCReadLength * 4, EnuEQP.PLCRWType.Hex_Data).Trim(); for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).GLSAPDCount; dintLoop++) { try { dintLength = pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Length * 4; //Length에 맞게 자를 문자열 개수를 가져온다. dstrTemp = dstrReadData.Substring(dintStartIndex, dintLength); //문자열을 자른다. //if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).HaveMinusValue == false) //{ //날짜 데이터일 경우 읽은 값을 4자리로 끊어서 구조체에 저장 if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Format.ToUpper() == "YY/MM/DD/HH/MM/SS") { dstrValue = dstrTemp; for (int dintStep = 1; dintStep <= dintLength / 4; dintStep++) { dstrTemp = dstrValue.Substring((dintStep - 1) * 4, 4); //문자열을 잘라온다. dstrTemp = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal); //PLC로 읽은 Hex를 10진수(Int)로 변환한다. if (dintStep != 1) { dstrTemp = FunStringH.funMakeLengthStringFirst(dstrTemp, 2); //월, 일, 시, 분, 초를 2자리로 맞춘다. } dstrDateTime = dstrDateTime + dstrTemp + "/"; } dstrDateTime = dstrDateTime.Substring(0, dstrDateTime.Length - 1); dstrValue = dstrDateTime; //최종 변환한 값 dstrDateTime = ""; //초기화 } else { //2 Word일때 처리 if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Length > 1) { if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Length == 8) { string strTemp = ""; for (int dintLoop2 = 0; dintLoop2 < 7; dintLoop2++) { string strTemp2 = dstrTemp.Substring(dintLoop2 * 4, 4); strTemp2 = strTemp2.Substring(2, 2) + strTemp2.Substring(0, 2); strTemp += FunTypeConversion.funHexConvert(strTemp2, EnuEQP.StringType.ASCString); } dstrTemp = strTemp; //dstrTemp = FunTypeConversion.funHexConvert(strTemp, EnuEQP.StringType.ASCString); } else { dstrTemp = dstrTemp.Substring(4, 4) + dstrTemp.Substring(0, 4); dstrTemp = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal); } dstrValue = dstrTemp; //최종 변환된 값 } else { //1 Word임. dstrValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal); //PLC로 읽은 Hex를 10진수(Int)로 변환한다. } } //} //else //{ // //항목의 값에 음수값이 있는 경우 음수 값 처리 // dstrValue = FunTypeConversion.funPlusMinusAPDCalc(dstrTemp); //} //소수점을 붙인다. dstrValue = CommonAct.FunStringH.funPoint(dstrValue, pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Format); } catch { dstrValue = "0"; } finally { pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Value = dstrValue; //구조체에 저장 dstrWriteData = dstrWriteData + dstrValue + ","; //파일로 쓰기 위해 결합 //읽을 Index 증가 dintStartIndex = dintStartIndex + dintLength; #region LOTAPD //LOT APD에 data를 저장한다.(후에 LOT APD 보고시 사용) //switch (pInfo.Unit(0).SubUnit(0).LOTAPD(dintLoop).Type) //{ // case "DateTime": // break; // case "Other": //Overwrite함. // pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue; // break; // case "Boolean": //하나라도 1인 값이 있으면 1로 설정한다.(0 혹은 1의 값 경우) // if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "1") // { // } // else // { // pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue; // } // break; // case "Numeric": //값을 누적한다. // dstrTemp = pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Name.Substring(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Name.LastIndexOf("_") + 1).ToUpper(); // if (dstrTemp == "MIN") // { // if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") //첫번째 값이 들어올때는 그 값을 Min으로 한다. // { // pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue; // } // else // { // //기존의 값 > 새로 들어온값 ---> 새로들오온 값을 Min으로 저장 // if (Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) > Convert.ToSingle(dstrValue)) // { // pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue; // } // } // } // else if (dstrTemp == "MAX") // { // if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") //첫번째 값이 들어올때는 그 값을 Max으로 한다. // { // pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue; // } // else // { // //기존의 값 < 새로 들어온값 ---> 새로들오온 값을 Max으로 저장 // if (Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) < Convert.ToSingle(dstrValue)) // { // pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue; // } // } // } // else if (dstrTemp == "AVG") // { // if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = "0"; // //기존의 값 + 새로 들어온 값을 계속 더한다.(평균은 subLOTAPDRead()에서 한다.) // pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = Convert.ToString(Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) + Convert.ToSingle(dstrValue)); // } // else // { // if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = "0"; // //기존의 값 + 새로 들어온 값을 계속 더한다.(평균은 subLOTAPDRead()에서 한다.) // pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = Convert.ToString(Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) + Convert.ToSingle(dstrValue)); // } // break; // //case "Numeric": //값을 누적한다. // // if (m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = "0"; // // m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = Convert.ToString(Convert.ToSingle(m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) + Convert.ToSingle(dstrValue)); // // break; //} #endregion } } //마지막의 콤마는 제거 dstrWriteData = dstrWriteData.Remove(dstrWriteData.Length - 1); //파일에 저장 pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSPDC, dstrWriteData); //HOST로 보고(S6F11, CEID=81, Process Data(GLS)) pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F13GLSAPD, strGLSID, intSlotID, strGLSID); } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString() + ", strGLSID:" + strGLSID + ", intSlotID:" + intSlotID.ToString()); } }
/// <summary> /// 설비에서 CIM으로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : strCompBit /// parameters[1] : dstrACTVal /// parameters[2] : dintActFrom /// parameters[3] : dstrACTFromSub /// parameters[4] : intBitVal /// parameters[5] : Special Parameter /// </remarks> public void funProcessEQPEvent(string[] parameters) { string strCompBit = parameters[0]; string strAddress = "W3100"; int dintCEID = 0; try { int intUnitID = Convert.ToInt32(parameters[2]); int intPortNo = Convert.ToInt32(parameters[3]); int intBitVal = Convert.ToInt32(parameters[4]); int intACTVal = Convert.ToInt32(parameters[1]); strAddress = FunTypeConversion.funAddressAdd(strAddress, (intPortNo - 1) * 16); if (intBitVal != 1) { return; } string strMappingData1 = ""; string strMappingData2 = ""; string strMappingData = ""; pInfo.Port(intPortNo).CSTID = m_pEqpAct.funWordRead(strAddress, 10, EnuEQP.PLCRWType.ASCII_Data).Trim(); strAddress = FunTypeConversion.funAddressAdd(strAddress, 10); strMappingData1 = m_pEqpAct.funWordRead(strAddress, 1, EnuEQP.PLCRWType.Binary_Data); strAddress = FunTypeConversion.funAddressAdd(strAddress, 1); strMappingData2 = m_pEqpAct.funWordRead(strAddress, 1, EnuEQP.PLCRWType.Binary_Data); strMappingData = strMappingData2 + strMappingData1; string strReversMappingData = ""; for (int dintLoop = strMappingData.Length; dintLoop > 0; dintLoop--) { strReversMappingData += strMappingData.Substring(dintLoop - 1, 1); } if (intACTVal != 4 && intACTVal != 5) { pInfo.Port(intPortNo).PTST = intACTVal.ToString(); } switch (intACTVal) { case 0: //Port Load Request ArrayList arrCon = new ArrayList(); foreach (string strLotID in pInfo.LOT()) { if (pInfo.LOTID(strLotID).InPortID == intPortNo) { arrCon.Add(strLotID); } } for (int dintLoop = 0; dintLoop < arrCon.Count; dintLoop++) { pInfo.RemoveLotID(arrCon[dintLoop].ToString()); } pInfo.Port(intPortNo).PortMapping = "E".PadRight(25, 'E'); pInfo.Port(intPortNo).LCTime = ""; dintCEID = 200; pInfo.Port(intPortNo).SLOTINFO = "E".PadLeft(25, 'E'); pInfo.Port(intPortNo).SLOTMAP = "X".PadLeft(25, 'X'); pInfo.Port(intPortNo).S9F13MSGSendFlag = false; break; case 1: //Port Load Complete //Pre Load 보고 //pInfo.Port(intPortNo).PortStatus = ""; pInfo.Port(intPortNo).S9F13MSGSendFlag = false; pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_PortOccupationStatusChange, 201, intPortNo); pInfo.Port(intPortNo).PortMapping = strReversMappingData.Substring(0, 25); for (int dintLoop = 0; dintLoop < pInfo.Port(intPortNo).PortMapping.Length; dintLoop++) { if (pInfo.Port(intPortNo).PortMapping.Substring(dintLoop, 1) == "1") { pInfo.Port(intPortNo).Slot(dintLoop + 1).SLOTMAP = "O"; pInfo.Port(intPortNo).Slot(dintLoop + 1).SLOTINFO = "W"; } else { pInfo.Port(intPortNo).Slot(dintLoop + 1).SLOTMAP = "X"; pInfo.Port(intPortNo).Slot(dintLoop + 1).SLOTINFO = "E"; } } pInfo.Port(intPortNo).LCTime = DateTime.Now.ToString("yyyyMMddHHmmss"); dintCEID = 202; if (pInfo.All.ControlState == "0") { //Lot Information 창을 띄운다. pInfo.subOPCall_Set(InfoAct.clsInfo.OPCall.LOTInformation, intPortNo, "", ""); } else { pInfo.Port(intPortNo).bolLotInfoDownloadCheck = true; } break; case 2: //Port Unload Requset pInfo.Port(intPortNo).PortMapping = strReversMappingData.Substring(0, 25); dintCEID = 203; pInfo.RemoveLotID(pInfo.Port(intPortNo).LOTID); break; case 3: //Port Unload Complete dintCEID = 204; pInfo.Port(intPortNo).PortMapping = "E".PadRight(25, '0'); pInfo.Port(intPortNo).UCTime = DateTime.Now.ToString("yyyyMMddHHmmss"); break; case 4: //pInfo.Port(intPortNo).PTST = "4"; //pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_PortStatusChange, 213, intPortNo); break; case 5: //pInfo.Port(intPortNo).PTST = "5"; //pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_PortStatusChange, 213, intPortNo); break; } if (intACTVal != 4 && intACTVal != 5) { pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11_PortOccupationStatusChange, dintCEID, intPortNo); } //pInfo.subPortDataRecovery(); } 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> /// 설비에서 CIM으로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : strCompBit /// parameters[1] : dstrACTVal /// parameters[2] : dintActFrom /// parameters[3] : dstrACTFromSub /// parameters[4] : intBitVal /// parameters[5] : Special Parameter /// </remarks> public void funProcessEQPEvent(string[] parameters) { string[] dstrValue; string dstrWordAddress = "W2540"; StringBuilder dstrLog = new StringBuilder(); string dstrHOSTPPID = ""; string dstrEQPPPID = ""; int dintPPIDType = 0; string dstrTemp = ""; int dintLength = 0; int dintBodyIndex = 3; //PPID Body Index string APCType = ""; string strWordAddress = ""; //[2015/04/20](Add by HS) string dstrReadData = ""; int dintStartIndex = 0; string strValue = ""; int dintReadcount = 0; try { //[2015/04/20]임시add by HS) pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("actOnePPIDInfoRequest Start. Time = {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"))); dstrEQPPPID = m_pEqpAct.funWordRead("W2540", 1, EnuEQP.PLCRWType.Int_Data); dintPPIDType = 1; //150429 고석현 수정 //매번 읽으면 늦어지므로 EQPPPID가 존재하면 그대로 보고 EQPPPID가 //pInfo.Unit(0).SubUnit(0).RemoveEQPPPID(dstrEQPPPID); dintReadcount = (pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5) * 2; strWordAddress = "W254C"; if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true) { if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBodyCount == 0) { //[2015/04/20] PPID Body 값 Block으로 한번에(Add by HS) dstrReadData = m_pEqpAct.funWordRead("W254C", dintReadcount, EnuEQP.PLCRWType.Hex_Data, false).Trim(); #region EQPPPID에 Body 저장 for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5; dintLoop++) { if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true) { pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 4; //Length에 맞게 자를 문자열 개수를 가져온다. dstrTemp = dstrReadData.Substring(dintStartIndex, dintLength); if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length > 1) { string dstrTemp1 = dstrTemp.Substring(0, 4); string dstrTemp2 = dstrTemp.Substring(4, 4); dstrTemp = dstrTemp2 + dstrTemp1; strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal); dstrTemp = FunStringH.funPoint(strValue, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; } else { strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.ASCString); pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = strValue; } dintStartIndex += dintLength; #region 변경전 [2015.04.20] Modify by HS //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; //if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2) //{ // dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; //} //else //{ // dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; //} //strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length); #endregion } } #endregion strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, dintReadcount); dstrReadData = m_pEqpAct.funWordRead(strWordAddress, 80, EnuEQP.PLCRWType.ASCII_Data, false); dintStartIndex = 0; #region EQPPPID에 Film Code 저장 for (int dintLoop = 251; dintLoop <= 255; dintLoop++) { if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true) { pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode; dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 2; //Length에 맞게 자를 문자열 개수를 가져온다. dstrTemp = dstrReadData.Substring(dintStartIndex, dintLength); pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp.Trim(); } dintStartIndex += dintLength; } #endregion } } ////dstrHOSTPPID = dstrValue[0]; //dstrEQPPPID = dstrValue[0]; //dintPPIDType = Convert.ToInt32(dstrValue[2]); ////로그를 남긴다. //switch (dintPPIDType) //{ // case 1: // dstrTemp = "EQP PPID 정보 요청(One)"; // break; // case 2: // dstrTemp = "HOST PPID 정보 요청(One)"; // break; // default: //여기로 들어오면 Error임. // dstrTemp = "PPID 정보 요청(One)"; // break; //} //dstrLog.Append(FunStringH.funPaddingStringData("-", 30, '-') + "\r\n"); //dstrLog.Append(dstrTemp + "\r\n"); //dstrLog.Append("HOSTPPID:" + dstrHOSTPPID + ","); //dstrLog.Append("EQPPPID:" + dstrEQPPPID + ","); //dstrLog.Append("PPIDType:" + dintPPIDType.ToString() + "\r\n"); //for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++) //{ // dstrTemp = FunStringH.funPoint(dstrValue[dintBodyIndex + dintLoop - 1], pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); // dstrLog.Append(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name + ":" + dstrTemp + "\r\n"); //} //dstrLog.Append(FunStringH.funPaddingStringData("-", 30, '-')); //pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, dstrLog.ToString()); switch (dintPPIDType) { case 1: //EQP PPID //기존에 EQPPPID가 존재하면 지운다. //pInfo.Unit(0).SubUnit(0).RemoveEQPPPID(dstrEQPPPID); //if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true) //{ // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).EQPPPID = dstrEQPPPID; // for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++) // { // //EQPPPID에 Body 저장 // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range; // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit; // dstrTemp = FunStringH.funPoint(dstrValue[dintBodyIndex + dintLoop - 1], pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format); // pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp; // } //} //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBodyCheck = true; break; case 2: //HOST PPID if (pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrHOSTPPID) == null) { //기존에 HOSTPPID가 존재하지 않으면 새로 생성한다. pInfo.Unit(0).SubUnit(0).AddHOSTPPID(dstrHOSTPPID); } pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrHOSTPPID).EQPPPID = dstrEQPPPID; pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrHOSTPPID).HostPPID = dstrHOSTPPID; break; default: break; } //if (pInfo.All.APCStartEQPPPIDCheck) //{ // pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.APCStart, pInfo.All.DataCheckGLSID); //} } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); } finally { pInfo.All.isReceivedFromHOST = false; //초기화 pInfo.All.PLCActionEnd = true; //PLC로 부터 값을 읽었음을 저장 pInfo.All.PLCActionEnd2 = true; pInfo.All.APCPPIDReadFlag = true; //[2015/04/20]임시add by HS) pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("actOnePPIDInfoRequest End. Time = {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"))); } }
/// <summary> /// 설비에서 CIM으로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : strCompBit /// parameters[1] : dstrACTVal /// parameters[2] : dintActFrom /// parameters[3] : dstrACTFromSub /// parameters[4] : intBitVal /// parameters[5] : Special Parameter /// </remarks> public void funProcessEQPEvent(string[] parameters) { string strCompBit = parameters[0]; int dintIndex = 0; //int dintIndex2 = 0; string dstrWordAddress = ""; string dstrECIDReport = ""; string dstrECSLL = ""; string dstrECWLL = ""; string dstrECDEF = ""; string dstrECWUL = ""; string dstrECSUL = ""; string dstrLog = ""; string dstrSQL = ""; string[] dstrValue = null; int dintECID = 0; string dstrECIDReadData = ""; string strData = ""; string dstrECID = ""; try { dstrWordAddress = "W2A00"; dstrECIDReadData = m_pEqpAct.funWordRead(dstrWordAddress, pInfo.Unit(0).SubUnit(0).ECIDCount * 7, EnuEQP.PLCRWType.Hex_Data); //PLC Req에 대한 CIM의 Confirm Bit를 준다. m_pEqpAct.subSetConfirmBit(strCompBit); // 디비트랜젝션... 해야지.. if (DBAct.clsDBAct.funOleDbTransaction() == null) { DBAct.clsDBAct.funBeginTransaction(); } OleDbTransaction odbTransaction = DBAct.clsDBAct.funOleDbTransaction(); for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).ECIDCount; dintLoop++) { strData = dstrECIDReadData.Substring((dintLoop - 1) * 28, 28); dstrECID = strData.Substring(0, 4); dintECID = Convert.ToInt32(FunTypeConversion.funHexConvert(dstrECID, EnuEQP.StringType.Decimal)); //ECID //dstrECSLL = strData.Substring(4, 8); // ECSLL dstrECWLL = strData.Substring(4, 8); dstrECWLL = dstrECWLL.Substring(4, 4) + dstrECWLL.Substring(0, 4); dstrECDEF = strData.Substring(12, 8); // ECDEF dstrECDEF = dstrECDEF.Substring(4, 4) + dstrECDEF.Substring(0, 4); //dstrECSUL = strData.Substring(20, 8); // ECSUL dstrECWUL = strData.Substring(20, 8); dstrECWUL = dstrECWUL.Substring(4, 4) + dstrECWUL.Substring(0, 4); //dstrECSLL = FunTypeConversion.funDecimalConvert(dstrECSLL, EnuEQP.StringType.Hex); //dstrECDEF = FunTypeConversion.funDecimalConvert(dstrECDEF, EnuEQP.StringType.Hex); //dstrECSUL = FunTypeConversion.funDecimalConvert(dstrECSUL, EnuEQP.StringType.Hex); dstrECWLL = FunTypeConversion.funHexConvert(dstrECWLL, EnuEQP.StringType.Decimal); dstrECDEF = FunTypeConversion.funHexConvert(dstrECDEF, EnuEQP.StringType.Decimal); dstrECWUL = FunTypeConversion.funHexConvert(dstrECWUL, EnuEQP.StringType.Decimal); ////dstrECSLL = FunTypeConversion.funPlusMinusAPDCalc(dstrECSLL); //dstrECWLL = FunTypeConversion.funPlusMinusAPDCalc(dstrECWLL); //dstrECDEF = FunTypeConversion.funPlusMinusAPDCalc(dstrECDEF); ////dstrECSUL = FunTypeConversion.funPlusMinusAPDCalc(dstrECSUL); //dstrECWUL = FunTypeConversion.funPlusMinusAPDCalc(dstrECWUL); //dstrECSLL = FunStringH.funPoint(dstrECSLL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format); dstrECWLL = FunStringH.funPoint(dstrECWLL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format); dstrECDEF = FunStringH.funPoint(dstrECDEF, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format); //dstrECSUL = FunStringH.funPoint(dstrECSUL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format); dstrECWUL = FunStringH.funPoint(dstrECWUL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format); if (pInfo.Unit(0).SubUnit(0).ECID(dintECID) != null) { if (pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECDEF != dstrECDEF || pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWLL != dstrECWLL || pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWUL != dstrECWUL) // pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL != dstrECSLL || //pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL != dstrECSUL) { dstrECIDReport += dintLoop.ToString() + ";"; //로그 출력 //dstrLog = dstrLog + "ECID" + ","; //dstrLog = dstrLog + DateTime.Now.ToString("yyyyMMddHHmmss") + ","; //dstrLog = dstrLog + "변경" + ","; //dstrLog = dstrLog + pInfo.All.UserID + ","; //dstrLog = dstrLog + "ECID(" + dintLoop.ToString() + "): " + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).DESC + ","; //dstrLog = dstrLog + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSLL + ","; //dstrLog = dstrLog + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECDEF + ","; //dstrLog = dstrLog + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSUL + ","; //dstrLog = dstrLog + dstrECSLL + ","; //dstrLog = dstrLog + dstrECWLL + ","; //dstrLog = dstrLog + dstrECDEF + ","; //dstrLog = dstrLog + dstrECWUL + ","; //dstrLog = dstrLog + dstrECSUL; dstrLog = string.Format("ECID,{0},변경,{1},ECID({2}): {3},{4} -> {5}, {6} -> {7}, {8} -> {9}", DateTime.Now.ToString("yyyyMMddHHmmss"), pInfo.All.UserID, dintLoop.ToString(), pInfo.Unit(0).SubUnit(0).ECID(dintLoop).DESC, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWLL, dstrECWLL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECDEF, dstrECDEF, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWUL, dstrECWUL ); pInfo.subLog_Set(InfoAct.clsInfo.LogType.Parameter, dstrLog); //로그 출력 dstrLog = ""; //초기화 //구조체 업데이트 pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSLL = dstrECWLL; pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWLL = dstrECWLL; pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECDEF = dstrECDEF; pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWUL = dstrECWUL; pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSUL = dstrECWUL; dstrSQL = "Update tbECID set ECSLL=" + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSLL + ", ECWLL=" + dstrECWLL + ", ECDEF=" + dstrECDEF + ", ECWUL=" + dstrECWUL + ", ECSUL=" + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSUL + " Where ECID=" + dintLoop.ToString(); if (DBAct.clsDBAct.funExecuteNonQuery(dstrSQL) == false) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "DB Update Fail(subLoadECID): ECID: " + dintLoop.ToString()); } } } } if (DBAct.clsDBAct.funOleDbTransaction() != null) { DBAct.clsDBAct.funCommitTransaction(); } // 디비내용 업데이트는 한번만 하면 되지.. 이게 뭐니... pInfo.DeleteTable("ECID"); dstrSQL = "SELECT * FROM tbECID order by ECID"; DataTable dt = DBAct.clsDBAct.funSelectQuery(dstrSQL); pInfo.AddDataTable("ECID", dt); pInfo.AddViewEvent(InfoAct.clsInfo.ViewEvent.ECIDUpdate); if (pInfo.All.ECIDChangeBYWHO == "1" || pInfo.All.ECIDChangeBYWHO == "2") { //HOST나 OP에서 발생한것임 dstrECIDReport = pInfo.All.ECIDChangeFromHost; pInfo.All.ECIDChangeFromHost = ""; //m_pInfo.All.ECIDChangeBYWHO = ""; } else { pInfo.All.ECIDChangeBYWHO = "2"; //By Equipment } pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedEquipmentParameterEvent, 102, dstrECIDReport); //마지막 인자는 ECID임 pInfo.All.ECIDChangeBYWHO = ""; //최종 수정된 날짜 Ini에 변경 FunINIMethod.subINIWriteValue("ETCInfo", "ECIDLastModified", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), pInfo.All.SystemINIFilePath); } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString()); if (!DBAct.clsDBAct.funIsNullTransaction()) { DBAct.clsDBAct.funCommitTransaction(); } } }