Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        /// <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;
            }
        }
Exemplo n.º 4
0
        /// <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;
            }
        }
Exemplo n.º 5
0
        /// <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);
            }
        }