/// <summary> /// Primary Message를 Biuld하여 Transaction을 Return한다. /// </summary> /// <param name="strParameters">Parameter 문자열</param> public Transaction funPrimarySend(string strParameters) { string[] arrayEvent; try { arrayEvent = strParameters.Split(','); pMsgTran = pSecsDrv.MakeTransaction(this.StrPrimaryMsgName); int dintAlarmID = Convert.ToInt32(arrayEvent[1]); InfoAct.clsAlarm currentAlarm = pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID); pMsgTran.Primary().Item("SETCODE").Putvalue(currentAlarm.SETCODE); pMsgTran.Primary().Item("ALCD").Putvalue(currentAlarm.AlarmCode); pMsgTran.Primary().Item("ALID").Putvalue(dintAlarmID); pMsgTran.Primary().Item("ALTX").Putvalue(currentAlarm.AlarmDesc); pMsgTran.Primary().Item("MODULEID").Putvalue(currentAlarm.ModuleID); return(pMsgTran); } catch (Exception error) { funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString()); return(null); } }
/// <summary> /// 설비에서 CIM으로 발생하는 Event에 대한 처리 /// </summary> /// <param name="parameters">Parameter Array</param> /// <remarks> /// parameters[0] : strCompBit /// parameters[1] : dstrACTVal /// parameters[2] : dintActFrom AlarmID /// parameters[3] : dstrACTFromSub /// parameters[4] : intBitVal Set/Reset /// parameters[5] : Special Parameter /// </remarks> public void funProcessEQPEvent(string[] parameters) { int dintAlarmID = -1; string dstrStatus = string.Empty; int dintUnitID = 0; int dintUnitID_TEMP = 0; int dintSubUnitID_TEMP = 0; bool dbolCheckFlag = false; string strMCCData = ""; try { dintAlarmID = Convert.ToInt32(parameters[2]); dstrStatus = (parameters[4] == "1") ? "SET" : "RESET"; if (pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID) == null || string.IsNullOrEmpty(pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmDesc) || pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmDesc == "Spare") { return; } if (dstrStatus.Equals("SET")) // 알람 발생 { pInfo.Unit(0).SubUnit(0).AddCurrAlarm(dintAlarmID); pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmEventType = "S"; // Set pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmType = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmType; pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmReport = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmReport; pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).SETCODE = 1; // Set pInfo.Unit(3).SubUnit(0).AddCurrAlarm(dintAlarmID); pInfo.Unit(3).SubUnit(0).CurrAlarm(dintAlarmID).AlarmEventType = "S"; // Set pInfo.Unit(3).SubUnit(0).CurrAlarm(dintAlarmID).AlarmType = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmType; pInfo.Unit(3).SubUnit(0).CurrAlarm(dintAlarmID).AlarmReport = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmReport; pInfo.Unit(3).SubUnit(0).CurrAlarm(dintAlarmID).SETCODE = 1; // Set //pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).ModuleID = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).ModuleID; //Heavy Alarm이 발생하면 Alarm정보를 누적 저장한다. if (pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmType == "H") { pInfo.All.OccurHeavyAlarmID = dintAlarmID; //발생한 모든 Alarm을 연속해서 저장한다. if (pInfo.Unit(0).SetAlarmID == "") { pInfo.Unit(0).SetAlarmID = dintAlarmID.ToString(); } else { pInfo.Unit(0).SetAlarmID = pInfo.Unit(0).SetAlarmID + "," + dintAlarmID.ToString(); } } //int.TryParse(pInfo.ModuleIDToUnitID(pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).ModuleID), out dintUnitID); for (int dintLoop = 0; dintLoop <= pInfo.UnitCount; dintLoop++) { for (int dintLoop2 = 0; dintLoop2 < pInfo.Unit(dintLoop).SubUnitCount; dintLoop2++) { if (pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).ModuleID == pInfo.Unit(dintLoop).SubUnit(dintLoop2).ModuleID) { dintUnitID_TEMP = dintLoop; dintSubUnitID_TEMP = dintLoop2; dbolCheckFlag = true; break; } } if (dbolCheckFlag) { break; } } if (dintUnitID_TEMP != 0) { pInfo.Unit(dintUnitID_TEMP).SubUnit(0).AddCurrAlarm(dintAlarmID); pInfo.Unit(dintUnitID_TEMP).SubUnit(0).CurrAlarm(dintAlarmID).AlarmEventType = "S"; // Set pInfo.Unit(dintUnitID_TEMP).SubUnit(0).CurrAlarm(dintAlarmID).AlarmType = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmType; pInfo.Unit(dintUnitID_TEMP).SubUnit(0).CurrAlarm(dintAlarmID).AlarmReport = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmReport; pInfo.Unit(dintUnitID_TEMP).SubUnit(0).CurrAlarm(dintAlarmID).SETCODE = 1; // Set pInfo.Unit(dintUnitID_TEMP).SubUnit(dintSubUnitID_TEMP).AddCurrAlarm(dintAlarmID); pInfo.Unit(dintUnitID_TEMP).SubUnit(dintSubUnitID_TEMP).CurrAlarm(dintAlarmID).AlarmEventType = "S"; // Set pInfo.Unit(dintUnitID_TEMP).SubUnit(dintSubUnitID_TEMP).CurrAlarm(dintAlarmID).AlarmType = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmType; pInfo.Unit(dintUnitID_TEMP).SubUnit(dintSubUnitID_TEMP).CurrAlarm(dintAlarmID).AlarmReport = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmReport; pInfo.Unit(dintUnitID_TEMP).SubUnit(dintSubUnitID_TEMP).CurrAlarm(dintAlarmID).SETCODE = 1; // Set if (pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmType == "H") { pInfo.Unit(dintUnitID_TEMP).SubUnit(0).AlarmID = dintAlarmID; pInfo.Unit(dintUnitID_TEMP).SubUnit(dintSubUnitID_TEMP).AlarmID = dintAlarmID; } } } else // 알람 해제 { pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmEventType = "R"; // ReSet pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).SETCODE = 0; // Set //Heavy Alarm이 해제되면 Alarm정보를 누적 저장한다. if (pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmType == "H") { pInfo.All.ClearHeavyAlarmID = dintAlarmID; } for (int dintLoop = 0; dintLoop <= pInfo.UnitCount; dintLoop++) { for (int dintLoop2 = 0; dintLoop2 < pInfo.Unit(dintLoop).SubUnitCount; dintLoop2++) { if (pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).ModuleID == pInfo.Unit(dintLoop).SubUnit(dintLoop2).ModuleID) { dintUnitID_TEMP = dintLoop; dintSubUnitID_TEMP = dintLoop2; dbolCheckFlag = true; break; } } if (dbolCheckFlag) { break; } } if (dintUnitID != 0) { pInfo.Unit(dintUnitID_TEMP).SubUnit(0).RemoveCurrAlarm(dintAlarmID); pInfo.Unit(dintUnitID_TEMP).SubUnit(dintSubUnitID_TEMP).RemoveCurrAlarm(dintAlarmID); if (pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmType == "H") { pInfo.Unit(dintUnitID_TEMP).SubUnit(0).AlarmID = 0; pInfo.Unit(dintUnitID_TEMP).SubUnit(dintSubUnitID_TEMP).AlarmID = 0; } } } InfoAct.clsAlarm CurrentAlram = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID); //현재 발생 혹은 해제한 AlarmID를 가지고 기준정보에서 Alarm 정보를 가져온다. string dstrAlarmTime = DateTime.Now.ToString("yyyyMMddHHmmss"); // Alarm 발생, 해제시간 설정 pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmType = CurrentAlram.AlarmType; pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmCode = CurrentAlram.AlarmCode; pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmDesc = CurrentAlram.AlarmDesc; pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmOCCTime = dstrAlarmTime; pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).ModuleID = CurrentAlram.ModuleID; pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmReport = CurrentAlram.AlarmReport; //S5F1 Alarm Host 보고 if (pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).AlarmReport == true) { pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S5F1AlarmReportsend, dintAlarmID); } if (dstrStatus == "RESET") // Alarm Reset 이면 발생알람을 구조체에서 삭제한다. { pInfo.Unit(0).SubUnit(0).RemoveCurrAlarm(dintAlarmID); } // Alarm 로그 Write string dstrAlarmMsg = dstrAlarmTime + "," + CurrentAlram.ModuleID + "," + dstrStatus + "," + dintAlarmID.ToString() + "," + CurrentAlram.AlarmCode + "," + CurrentAlram.AlarmType + "," + CurrentAlram.AlarmDesc; pInfo.subLog_Set(InfoAct.clsInfo.LogType.Alarm, dstrAlarmMsg); if (dstrStatus == "SET") { //알람발생시 장비내 Glass정보 저장 //subGLSPosLogWrite(dstrAlarmTime, pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarmID).UnitID, dintAlarmID); } // Alarm Message를 MainView ComboBox에 추가 (Message에 발생시간은 제외 Combo에 시간이 이중으로 Display 되어서) dstrAlarmMsg = CurrentAlram.ModuleID + "," + dstrStatus + "," + dintAlarmID.ToString() + "," + CurrentAlram.AlarmCode + "," + CurrentAlram.AlarmType + "," + CurrentAlram.AlarmDesc; pInfo.subMessage_Set(InfoAct.clsInfo.MsgType.AlarmMsg, dstrAlarmMsg); int dintSubUnitID = 0; bool CheckFlag = false; for (int dintLoop = 0; dintLoop <= pInfo.UnitCount; dintLoop++) { for (int dintLoop2 = 0; dintLoop2 <= pInfo.Unit(dintLoop).SubUnitCount; dintLoop2++) { if (pInfo.Unit(dintLoop).SubUnit(dintLoop2).ModuleID == CurrentAlram.ModuleID) { dintUnitID = dintLoop; dintSubUnitID = dintLoop2; CheckFlag = true; break; } } if (CheckFlag) { break; } } //[2015/04/26]MCC Log(Add by HS) if (this.pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmType == "H") { strMCCData = "ERROR;"; } else { strMCCData = "WARNING;"; } InfoAct.clsGLS CurrentGLS = pInfo.GLSID(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).HGLSID); strMCCData += pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).ModuleID.Substring(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).ModuleID.Length - 4, 4) + ","; if (CurrentGLS != null) { strMCCData += CurrentGLS.STEPID + ","; strMCCData += CurrentGLS.H_PANELID + ","; strMCCData += CurrentGLS.LOTID + ","; strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ","; } else { strMCCData += ",,,,"; } strMCCData += dstrStatus + ","; strMCCData += dintAlarmID.ToString() + ","; strMCCData += pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmDesc + ";"; pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData); //if (dstrStatus == "SET") //{ //strMCCData = ","; //strMCCData += DateTime.Now.ToString("MMdd_HHmm_ss.fff") + ","; //strMCCData += pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).ModuleID.Substring(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).ModuleID.Length - 4, 4) + ","; //strMCCData +=( (CurrentAlram.AlarmType == "H")? "E":"W") + ","; //if (pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).GLSExist) //{ // InfoAct.clsGLS CurrentGLS = pInfo.GLSID(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).HGLSID); // strMCCData += CurrentGLS.STEPID + ","; // strMCCData += CurrentGLS.H_PANELID + ","; // strMCCData += CurrentGLS.LOTID + ","; //} //else //{ // strMCCData += ",,,"; //} //strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ","; //strMCCData += string.Format("SET={0}={1}", dintAlarmID, pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmDesc); //pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData); //} //else //{ //strMCCData = ","; //strMCCData += DateTime.Now.ToString("MMdd_HHmm_ss.fff") + ","; //strMCCData += pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).ModuleID.Substring(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).ModuleID.Length - 4, 4) + ","; //strMCCData += ((CurrentAlram.AlarmType == "H")? "E":"W") + ","; //if (pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).GLSExist) //{ // InfoAct.clsGLS CurrentGLS = pInfo.GLSID(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).HGLSID); // strMCCData += CurrentGLS.STEPID + ","; // strMCCData += CurrentGLS.H_PANELID + ","; // strMCCData += CurrentGLS.LOTID + ","; //} //else //{ // strMCCData += ",,,"; //} //strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ","; //strMCCData += string.Format("RESET={0}={1}", dintAlarmID, pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmDesc); //pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData); //} } catch (Exception ex) { pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString() + ", strStatus:" + dstrStatus + ", dintAlarmID:" + dintAlarmID); } }
/// <summary> /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다. /// </summary> /// <param name="msgTran">Primary Message의 Transaction</param> public void funPrimaryReceive(Transaction msgTran) { int dintAlarmCount = 0; int dintIndex = 0; int dintTemp = 0; string dstrModuleID = ""; try { dstrModuleID = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim(); //ModuleID가 존재하지 않는 경우 if (dstrModuleID != pInfo.Unit(0).SubUnit(0).ModuleID&& dstrModuleID != pInfo.Unit(3).SubUnit(0).ModuleID) { msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID); msgTran.Secondary().Item("ALARMCOUNT").Putvalue(0); funSendReply(msgTran); return; } msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID); dintAlarmCount = Convert.ToInt32(msgTran.Primary().Item("ALARMCOUNT").Getvalue()); if (dintAlarmCount == 0) { msgTran.Secondary().Item("ALARMCOUNT").Putvalue(pInfo.Unit(0).SubUnit(0).AlarmCount); //DateTime testTime = DateTime.Now; //test foreach (int dintAlarmID in pInfo.Unit(0).SubUnit(0).Alarm()) { InfoAct.clsAlarm currentAlarm = pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID); if (currentAlarm.AlarmReport) { msgTran.Secondary().Item2("ALARMCOUNT", "L2", "ALCD", dintIndex).Putvalue(currentAlarm.AlarmCode); // 20130314 NSECS 버전업에 따른 변경 msgTran.Secondary().Item2("ALARMCOUNT", "L2", "ALID", dintIndex).Putvalue(dintAlarmID); msgTran.Secondary().Item2("ALARMCOUNT", "L2", "ALTX", dintIndex).Putvalue(currentAlarm.AlarmDesc); msgTran.Secondary().Item2("ALARMCOUNT", "L2", "MODULEID1", dintIndex).Putvalue(currentAlarm.ModuleID); dintIndex++; } } } else { for (int dintLoop = 1; dintLoop <= dintAlarmCount; dintLoop++) { dintTemp = Convert.ToInt32(msgTran.Primary().Item("ALID" + (dintLoop - 1)).Getvalue()); if (pInfo.Unit(0).SubUnit(0).Alarm(dintTemp) == null || pInfo.Unit(0).SubUnit(0).Alarm(dintTemp).AlarmReport == false) { msgTran.Secondary().Item("ALARMCOUNT").Putvalue(0); funSendReply(msgTran); return; } } msgTran.Secondary().Item("ALARMCOUNT").Putvalue(dintAlarmCount); for (int dintLoop = 1; dintLoop <= dintAlarmCount; dintLoop++) { dintTemp = Convert.ToInt32(msgTran.Primary().Item("ALID" + (dintLoop - 1)).Getvalue()); InfoAct.clsAlarm currentAlarm = pInfo.Unit(0).SubUnit(0).Alarm(dintTemp); msgTran.Secondary().Item2("ALARMCOUNT", "L2", "ALCD", dintIndex).Putvalue(currentAlarm.AlarmCode); msgTran.Secondary().Item2("ALARMCOUNT", "L2", "ALID", dintIndex).Putvalue(dintTemp); msgTran.Secondary().Item2("ALARMCOUNT", "L2", "ALTX", dintIndex).Putvalue(currentAlarm.AlarmDesc); msgTran.Secondary().Item2("ALARMCOUNT", "L2", "MODULEID1", dintIndex).Putvalue(currentAlarm.ModuleID); dintIndex++; } } //HOST로 응답 funSendReply(msgTran); } catch (Exception error) { funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString()); funSendReply(msgTran); return; } }
/// <summary> /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다. /// </summary> /// <param name="msgTran">Primary Message의 Transaction</param> public void funPrimaryReceive(Transaction msgTran) { string dstrModuleID = ""; int dintIndex = 0; try { dstrModuleID = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim(); msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID); //ModuleID가 존재하지 않는 경우 if (dstrModuleID != pInfo.Unit(0).SubUnit(0).ModuleID&& dstrModuleID != pInfo.Unit(3).SubUnit(0).ModuleID) { msgTran.Secondary().Item("ALARMCOUNT").Putvalue(0); funSendReply(msgTran); return; } int alarmCount = pInfo.Unit(0).SubUnit(0).CurrAlarm().Count; msgTran.Secondary().Item("ALARMCOUNT").Putvalue(alarmCount); List <int> arrCon2 = new List <int>(); foreach (int dintAlarm in pInfo.Unit(0).SubUnit(0).CurrAlarm()) { arrCon2.Add(dintAlarm); } arrCon2.Sort(); for (int dintLoop = 0; dintLoop < arrCon2.Count; dintLoop++) { InfoAct.clsAlarm currentAlarm = pInfo.Unit(0).SubUnit(0).CurrAlarm(arrCon2[dintLoop]); msgTran.Secondary().Item("ALCD" + dintLoop).Putvalue(Convert.ToByte(currentAlarm.AlarmCode)); msgTran.Secondary().Item("ALID" + dintLoop).Putvalue(arrCon2[dintLoop]); msgTran.Secondary().Item("ALTX" + dintLoop).Putvalue(currentAlarm.AlarmDesc); msgTran.Secondary().Item("MODULEID" + dintLoop).Putvalue(currentAlarm.ModuleID); } //foreach (int dintAlarm in pInfo.Unit(0).SubUnit(0).CurrAlarm()) //{ // dintIndex = dintIndex + 1; // InfoAct.clsAlarm currentAlarm = pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarm); // msgTran.Secondary().Item("ALCD" + (dintIndex - 1)).Putvalue(Convert.ToByte(currentAlarm.AlarmCode)); // msgTran.Secondary().Item("ALID" + (dintIndex - 1)).Putvalue(dintAlarm); // msgTran.Secondary().Item("ALTX" + (dintIndex - 1)).Putvalue(currentAlarm.AlarmDesc); // msgTran.Secondary().Item("MODULEID" + (dintIndex - 1)).Putvalue(currentAlarm.ModuleID); //} //} funSendReply(msgTran); } catch (Exception error) { funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString()); return; } }
/// <summary> /// Primary Message를 Biuld하여 Transaction을 Return한다. /// </summary> /// <param name="strParameters">Parameter 문자열</param> public Transaction funPrimarySend(string strParameters) { string[] arrayEvent; bool dbolHeavyAlarm = false; int dintAlarmID = 0; string strMCCData = ""; try { arrayEvent = strParameters.Split(','); int dintCEID = Convert.ToInt32(arrayEvent[1]); //CEID int dintUnitID = Convert.ToInt32(arrayEvent[2]); //UnitID int dintSubUnitID = Convert.ToInt32(arrayEvent[3]); pMsgTran = pSecsDrv.MakeTransaction(this.StrPrimaryMsgName); InfoAct.clsSubUnit subUnit = pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID); pMsgTran.Primary().Item("DATAID").Putvalue(0); pMsgTran.Primary().Item("CEID").Putvalue(dintCEID); pMsgTran.Primary().Item("RPTID").Putvalue(1); pMsgTran.Primary().Item("MODULEID").Putvalue(subUnit.ModuleID); pMsgTran.Primary().Item("MCMD").Putvalue(pInfo.All.ControlState); pMsgTran.Primary().Item("MODULE_STATE").Putvalue(subUnit.EQPState); pMsgTran.Primary().Item("PROC_STATE").Putvalue(subUnit.EQPProcessState); //각 CEID별로값을 설정한다. if (dintCEID == 51) { pMsgTran.Primary().Item("BYWHO").Putvalue(subUnit.EQPProcessStateChangeBYWHO); pMsgTran.Primary().Item("OLD_STATE").Putvalue(subUnit.EQPProcessStateOLD); pMsgTran.Primary().Item("NEW_STATE").Putvalue(subUnit.EQPProcessState); } else if (dintCEID == 53) { pMsgTran.Primary().Item("BYWHO").Putvalue(subUnit.EQPStateChangeBYWHO); pMsgTran.Primary().Item("OLD_STATE").Putvalue(subUnit.EQPStateOLD); pMsgTran.Primary().Item("NEW_STATE").Putvalue(subUnit.EQPState); } else if (dintCEID == 71 || dintCEID == 72 || dintCEID == 73) { pMsgTran.Primary().Item("BYWHO").Putvalue(pInfo.All.ControlstateChangeBYWHO); pMsgTran.Primary().Item("OLD_STATE").Putvalue(pInfo.All.ControlStateOLD); pMsgTran.Primary().Item("NEW_STATE").Putvalue(pInfo.All.ControlState); this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.ControlState, dintCEID - 70); } pMsgTran.Primary().Item("OPERID").Putvalue(this.pInfo.All.UserID); pMsgTran.Primary().Item("RPTID1").Putvalue(4); //Fixed Value pMsgTran.Primary().Item("RPTID2").Putvalue(8); //Fixed Value switch (dintCEID) { case 51: ///////////////발생 체크//////////////////////////// //이전 상태가 정상상태(Pause가 아닌상태)이고 현재 상태가 Pause이면 현재 발생한 Alarm정보를 입력한다. if (this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPProcessStateOLD != "4" && this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPProcessState == "4") { if (dintUnitID == 0 || dintUnitID == 3) //160510 KEUN 조건식 변경 (dintUnitID == 0) { //현재 Unit에서 Heavy Alarm이 발생해있는지 여부 foreach (int dintAlarm in this.pInfo.Unit(0).SubUnit(0).CurrAlarm()) { if (this.pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarm).AlarmType == "H") { dbolHeavyAlarm = true; break; } } if (dbolHeavyAlarm == true && this.pInfo.All.OccurHeavyAlarmID != 0) { InfoAct.clsAlarm currentAlarm = pInfo.Unit(0).SubUnit(0).Alarm(pInfo.All.OccurHeavyAlarmID); pMsgTran.Primary().Item("ALCD").Putvalue(currentAlarm.AlarmCode); pMsgTran.Primary().Item("ALID").Putvalue(pInfo.All.OccurHeavyAlarmID); pMsgTran.Primary().Item("ALTX").Putvalue(currentAlarm.AlarmDesc); pMsgTran.Primary().Item("MODULEID1").Putvalue(currentAlarm.ModuleID); dintAlarmID = pInfo.All.OccurHeavyAlarmID; } else { pMsgTran.Primary().Item("ALCD").Putvalue(0); pMsgTran.Primary().Item("ALID").Putvalue(0); pMsgTran.Primary().Item("ALTX").Putvalue(""); pMsgTran.Primary().Item("MODULEID1").Putvalue(""); } } else { if (pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPState == "2") { int intAlarmID = this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).AlarmID; if (intAlarmID == 0) { intAlarmID = this.pInfo.Unit(dintUnitID).SubUnit(0).AlarmID; } if (intAlarmID != 0) { if (pInfo.Unit(0).SubUnit(0).CurrAlarm(intAlarmID) != null) { InfoAct.clsAlarm currentAlarm = pInfo.Unit(0).SubUnit(0).Alarm(intAlarmID); pMsgTran.Primary().Item("ALCD").Putvalue(currentAlarm.AlarmCode); pMsgTran.Primary().Item("ALID").Putvalue(pInfo.All.OccurHeavyAlarmID); pMsgTran.Primary().Item("ALTX").Putvalue(currentAlarm.AlarmDesc); pMsgTran.Primary().Item("MODULEID1").Putvalue(currentAlarm.ModuleID); dintAlarmID = pInfo.All.OccurHeavyAlarmID; } else { pMsgTran.Primary().Item("ALCD").Putvalue(0); pMsgTran.Primary().Item("ALID").Putvalue(0); pMsgTran.Primary().Item("ALTX").Putvalue(""); pMsgTran.Primary().Item("MODULEID1").Putvalue(""); } } else { pMsgTran.Primary().Item("ALCD").Putvalue(0); pMsgTran.Primary().Item("ALID").Putvalue(0); pMsgTran.Primary().Item("ALTX").Putvalue(""); pMsgTran.Primary().Item("MODULEID1").Putvalue(""); } } else { pMsgTran.Primary().Item("ALCD").Putvalue(0); pMsgTran.Primary().Item("ALID").Putvalue(0); pMsgTran.Primary().Item("ALTX").Putvalue(""); pMsgTran.Primary().Item("MODULEID1").Putvalue(""); } } } ///////////////해제 체크//////////////////////////// //이전 상태가 Pause이고 현재 상태가 정상상태(Pause가 아닌상태), Fault가 아니면 현재 Clear된 Alarm정보를 입력한다. else if (this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPState == "2" && this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPProcessStateOLD == "4" && this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPProcessState != "4") { pMsgTran.Primary().Item("ALCD").Putvalue(0); pMsgTran.Primary().Item("ALID").Putvalue(0); pMsgTran.Primary().Item("ALTX").Putvalue(""); pMsgTran.Primary().Item("MODULEID1").Putvalue(""); } //[2015/04/26] Event Log(Modify by HS) if (dintSubUnitID != 0) { strMCCData = "EVENT;"; strMCCData += "CEID_51" + ","; strMCCData += pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).ModuleID + ","; if (pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).GLSExist) { InfoAct.clsGLS CurrentGLS = pInfo.GLSID(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).HGLSID); if (CurrentGLS == null) { strMCCData += ",,,"; } else { strMCCData += CurrentGLS.STEPID + ","; strMCCData += CurrentGLS.H_PANELID + ","; strMCCData += CurrentGLS.LOTID + ","; } } else { strMCCData += ",,,"; } strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ","; PROCESSSTATE PROC_OLD = (PROCESSSTATE)(Convert.ToInt32(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPProcessStateOLD)); PROCESSSTATE PROC = (PROCESSSTATE)(Convert.ToInt32(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPProcessState)); strMCCData += PROC_OLD.ToString() + ","; strMCCData += PROC.ToString() + ";"; pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData); } break; case 53: ///////////////발생 체크//////////////////////////// //이전 상태가 정상상태(Normal 혹은 PM)이고 현재 상태가 Fault이면 현재 발생한 Alarm정보를 입력한다. if (this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPStateOLD != "2" && this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPState == "2") { if (dintUnitID == 0 || dintUnitID == 3) //160510 KEUN 조건식 변경 (dintUnitID == 0) { //현재 Unit에서 Heavy Alarm이 발생해있는지 여부 foreach (int dintAlarm in this.pInfo.Unit(0).SubUnit(0).CurrAlarm()) { if (this.pInfo.Unit(0).SubUnit(0).CurrAlarm(dintAlarm).AlarmType == "H") { dbolHeavyAlarm = true; break; } } if (dbolHeavyAlarm == true && this.pInfo.All.OccurHeavyAlarmID != 0) { InfoAct.clsAlarm currentAlarm = pInfo.Unit(0).SubUnit(0).Alarm(pInfo.All.OccurHeavyAlarmID); pMsgTran.Primary().Item("ALCD").Putvalue(currentAlarm.AlarmCode); pMsgTran.Primary().Item("ALID").Putvalue(pInfo.All.OccurHeavyAlarmID); pMsgTran.Primary().Item("ALTX").Putvalue(currentAlarm.AlarmDesc); pMsgTran.Primary().Item("MODULEID1").Putvalue(currentAlarm.ModuleID); dintAlarmID = pInfo.All.OccurHeavyAlarmID; } else { pMsgTran.Primary().Item("ALCD").Putvalue(0); pMsgTran.Primary().Item("ALID").Putvalue(0); pMsgTran.Primary().Item("ALTX").Putvalue(""); pMsgTran.Primary().Item("MODULEID1").Putvalue(""); } } else { int intAlarmID = this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).AlarmID; if (intAlarmID == 0) { intAlarmID = this.pInfo.Unit(dintUnitID).SubUnit(0).AlarmID; } if (intAlarmID != 0) { InfoAct.clsAlarm currentAlarm = pInfo.Unit(0).SubUnit(0).Alarm(intAlarmID); pMsgTran.Primary().Item("ALCD").Putvalue(currentAlarm.AlarmCode); pMsgTran.Primary().Item("ALID").Putvalue(pInfo.All.OccurHeavyAlarmID); pMsgTran.Primary().Item("ALTX").Putvalue(currentAlarm.AlarmDesc); pMsgTran.Primary().Item("MODULEID1").Putvalue(currentAlarm.ModuleID); dintAlarmID = pInfo.All.OccurHeavyAlarmID; } else { pMsgTran.Primary().Item("ALCD").Putvalue(0); pMsgTran.Primary().Item("ALID").Putvalue(0); pMsgTran.Primary().Item("ALTX").Putvalue(""); pMsgTran.Primary().Item("MODULEID1").Putvalue(""); } } } ///////////////해제 체크//////////////////////////// //이전 상태가 Fault이고 현대 상태가 정상상태(Normal 혹은 PM)이면 현재 Clear된 Alarm정보를 입력한다. else if (this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPStateOLD == "2" && this.pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPState != "2") { //Alarm Reset 후 51, 53 보고시 Alarm Reset 정보를 보내지 않아도 됨. pMsgTran.Primary().Item("ALCD").Putvalue(0); pMsgTran.Primary().Item("ALID").Putvalue(0); pMsgTran.Primary().Item("ALTX").Putvalue(""); pMsgTran.Primary().Item("MODULEID1").Putvalue(""); } //[2015/04/26] Event Log(Modify by HS) if (dintSubUnitID != 0) { strMCCData = "EVENT;"; strMCCData += "CEID_53" + ","; strMCCData += pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).ModuleID + ","; if (pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).GLSExist) { InfoAct.clsGLS CurrentGLS = pInfo.GLSID(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).HGLSID); //[2015/05/20](Add by HS) if (CurrentGLS == null) { strMCCData += ",,,"; } else { strMCCData += CurrentGLS.STEPID + ","; strMCCData += CurrentGLS.H_PANELID + ","; strMCCData += CurrentGLS.LOTID + ","; } } else { strMCCData += ",,,"; } strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ","; EQPSTATE EQP_OLD = (EQPSTATE)(Convert.ToInt32(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPStateOLD)); EQPSTATE EQP = (EQPSTATE)(Convert.ToInt32(pInfo.Unit(dintUnitID).SubUnit(dintSubUnitID).EQPState)); strMCCData += EQP_OLD + ","; strMCCData += EQP + ","; if (dintAlarmID != 0) { strMCCData += dintAlarmID.ToString() + ","; strMCCData += pInfo.Unit(0).SubUnit(0).Alarm(dintAlarmID).AlarmDesc + ";"; } else { strMCCData += dintAlarmID.ToString() + ","; strMCCData += ";"; } pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData); } break; default: pMsgTran.Primary().Item("ALCD").Putvalue(0); pMsgTran.Primary().Item("ALID").Putvalue(0); pMsgTran.Primary().Item("ALTX").Putvalue(""); pMsgTran.Primary().Item("MODULEID1").Putvalue(""); if (dintCEID == 73) { pInfo.Unit(0).SubUnit(0).RemoveTRID(); } break; } return(pMsgTran); } catch (Exception error) { funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString()); return(null); } }