Пример #1
0
        /// <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
        /// (string strHOSTPPID, string strEQPPPID, string strTime, string strPPIDRev, string dstrPPIDType)
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string        dstrWordAddress = "W1210";
            string        dstrWordData    = "";
            string        dstrBitAddress  = "";
            StringBuilder dstrLog         = new StringBuilder();
            string        dstrTemp        = "";

            try
            {
                InfoAct.clsEQPPPID CurrentEQPPPID = (InfoAct.clsEQPPPID)parameters[0];

                dstrWordData += pEqpAct.funWordWriteString(1, CurrentEQPPPID.EQPPPID, EnuEQP.PLCRWType.Int_Data);
                dstrWordData += pEqpAct.funWordWriteString(10, "".PadRight(20), EnuEQP.PLCRWType.Hex_Data);
                dstrWordData += pEqpAct.funWordWriteString(1, "1", EnuEQP.PLCRWType.Int_Data);
                for (int dintLoop = 0; dintLoop < pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                {
                    if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop + 1).Length == 2)
                    {
                        if (CurrentEQPPPID.PPIDBody(dintLoop + 1) == null)
                        {
                            dstrTemp = "0";
                        }
                        else
                        {
                            dstrTemp = FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentEQPPPID.PPIDBody(dintLoop + 1).Value, this.pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop + 1).Format));
                        }
                        dstrWordData += pEqpAct.funWordWriteString(2, dstrTemp, EnuEQP.PLCRWType.Int_Data);
                    }
                    else
                    {
                        if (CurrentEQPPPID.PPIDBody(dintLoop + 1) == null)
                        {
                            dstrTemp = "";
                        }
                        else
                        {
                            dstrTemp = CurrentEQPPPID.PPIDBody(dintLoop + 1).Value;
                        }
                        dstrWordData += pEqpAct.funWordWriteString(8, dstrTemp.PadRight(16), EnuEQP.PLCRWType.ASCII_Data);
                    }
                }
                pEqpAct.funWordWrite(dstrWordAddress, dstrWordData, EnuEQP.PLCRWType.Hex_Data);

                //PPID 생성지시
                dstrBitAddress = "B1032";
                pEqpAct.funBitWrite(dstrBitAddress, "1");

                if (pInfo.EQP("Main").DummyPLC)
                {
                    pEqpAct.funWordWrite("W2540", dstrWordData, EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                    pEqpAct.funBitWrite("B113A", "1");
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
Пример #2
0
        /// <summary>
        /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다.
        /// </summary>
        /// <param name="msgTran">Primary Message의 Transaction</param>
        public void funPrimaryReceive(Transaction msgTran)
        {
            string dstrModuleID      = "";
            int    dintPPIDType      = 0;
            string dstrReceivedPPID  = "";
            int    dintACK           = 0;
            int    dintPPIDBodyCount = 0;
            int    dintPPIDBodyID    = 0;

            string    dstrHOSTPPID  = "";
            string    dstrEQPPPID   = "";
            string    dstrPPIDBody  = "";
            string    dstrMode      = "";
            bool      dbochekFlag   = false;
            Hashtable phashBodyList = new Hashtable();

            InfoAct.clsEQPPPID CreatePPID = null;
            string             dstrTemp   = "";

            try
            {
                dstrMode         = msgTran.Primary().Item("MODE").Getvalue().ToString().Trim();
                dstrModuleID     = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim();
                dstrReceivedPPID = msgTran.Primary().Item("PPID").Getvalue().ToString().Trim();
                dintPPIDType     = Convert.ToInt32(msgTran.Primary().Item("PPID_TYPE").Getvalue());

                if (dstrMode != "1" && dstrMode != "2")
                {
                    msgTran.Secondary().Item("ACKC7").Putvalue(1);
                    funSendReply(msgTran);

                    return;
                }

                //for (int dintLoop = 0; dintLoop <= pInfo.EQP("Main").UnitCount; dintLoop++)
                //{
                //ModuleID가 존재하지 않는 경우
                if (dstrModuleID == pInfo.Unit(3).SubUnit(0).ModuleID)
                {
                    dbochekFlag = true;
                    //break;
                }
                //}

                if (dbochekFlag == false)
                {
                    msgTran.Secondary().Item("ACKC7").Putvalue(8);
                    funSendReply(msgTran);
                    return;
                }

                if (dintPPIDType != 1 && dintPPIDType != 2)
                {
                    msgTran.Secondary().Item("ACKC7").Putvalue(9);
                    funSendReply(msgTran);
                    return;
                }
                else
                {
                    if (dstrMode == "1" || dstrMode == "2")
                    {
                        if (dstrMode == "1")
                        {
                            if (dintPPIDType == 1)
                            {
                                //msgTran.Secondary().Item("ACKC7").Putvalue(9);
                                //funSendReply(msgTran);
                                //return;

                                dstrEQPPPID       = dstrReceivedPPID;
                                dintPPIDBodyCount = Convert.ToInt32(msgTran.Primary().Item("PPARMCOUNT" + 0).Getvalue().ToString().Trim());

                                if (dintPPIDBodyCount == 0)
                                {
                                    dintACK = 7; //The list of P_PARM is not enough
                                }
                                else if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID) != null)
                                {
                                    dintACK = 5; //Already Existing PPID
                                }
                                else
                                {
                                    dintACK = 3;
                                    #region 사용안함

                                    //string strPPIDBodyName = "";
                                    //CreatePPID = new InfoAct.clsEQPPPID(dstrEQPPPID);

                                    //for (int dintLoop = 0; dintLoop < dintPPIDBodyCount; dintLoop++)
                                    //{


                                    //    strPPIDBodyName = msgTran.Primary().Item("P_PARM_NAME" + 0 + (dintLoop)).Getvalue().ToString().Trim();
                                    //    if (phashBodyList.Contains(strPPIDBodyName) == false)
                                    //    {
                                    //        //dintPPIDBodyID = funGetBodyNameToBodyID(msgTran.Primary().Item("P_PARM_NAME" + 0 + (dintLoop)).Getvalue().ToString().Trim());
                                    //        dintPPIDBodyID = (int)pInfo.Unit(0).SubUnit(0).pHashPPIDBodyName_GetIndex[msgTran.Primary().Item("P_PARM_NAME" + 0 + dintLoop).Getvalue().ToString().Trim()];

                                    //        if (dintPPIDBodyID != 0)
                                    //        {
                                    //            dstrPPIDBody = msgTran.Primary().Item("P_PARM" + 0 + (dintLoop)).Getvalue().ToString().Trim();
                                    //            if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintPPIDBodyID).Length == 2)
                                    //            {
                                    //                if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintPPIDBodyID).Min <= Convert.ToDouble(dstrPPIDBody) &&
                                    //                    Convert.ToDouble(dstrPPIDBody) <= pInfo.Unit(0).SubUnit(0).PPIDBody(dintPPIDBodyID).Max)
                                    //                {
                                    //                    phashBodyList.Add(strPPIDBodyName, dstrPPIDBody);
                                    //                    CreatePPID.AddPPIDBody(dintPPIDBodyID);
                                    //                    CreatePPID.PPIDBody(dintPPIDBodyID).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop + 1).Name;
                                    //                    CreatePPID.PPIDBody(dintPPIDBodyID).Value = dstrPPIDBody;


                                    //                }
                                    //                else
                                    //                {
                                    //                    phashBodyList.Clear();
                                    //                    dintACK = 6; //Length Error
                                    //                    break;
                                    //                }
                                    //            }
                                    //            else
                                    //            {
                                    //                phashBodyList.Add(strPPIDBodyName, dstrPPIDBody);
                                    //                CreatePPID.AddPPIDBody(dintPPIDBodyID);
                                    //                CreatePPID.PPIDBody(dintPPIDBodyID).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop + 1).Name;
                                    //                CreatePPID.PPIDBody(dintPPIDBodyID).Value = dstrPPIDBody;
                                    //            }
                                    //        }
                                    //        else
                                    //        {
                                    //            phashBodyList.Clear();
                                    //            dintACK = 6; //Length Error
                                    //            break;
                                    //        }

                                    //    }
                                    //    else
                                    //    {
                                    //        dintACK = 7; //The list of P_PARM is not enough
                                    //        break;
                                    //    }
                                    //}
                                    #endregion
                                }
                            }
                            else
                            {
                                dstrHOSTPPID = dstrReceivedPPID;
                                dstrEQPPPID  = msgTran.Primary().Item("P_PARM" + 0 + 0).Getvalue().ToString().Trim();
                                if (pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrHOSTPPID) != null)
                                {
                                    dintACK = 5; //Already Existing PPID
                                }
                                else if (msgTran.Primary().Item("P_PARM_NAME" + 0 + 0).Getvalue().ToString().Trim() != "SUBPPID")
                                {
                                    dintACK = 11; //At least one of P_PARM exceeded its defined range
                                }
                                else if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID) == null)
                                {
                                    dintACK = 5; //Already Existing PPID
                                }
                            }
                        }
                        else
                        {
                            switch (dintPPIDType)
                            {
                            case 1:
                                dstrEQPPPID = dstrReceivedPPID;
                                if (pInfo.All.CurrentEQPPPID == dstrEQPPPID)
                                {
                                    dintACK = 2;     //Busy, not in the situation to accept this message
                                }
                                else if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID) == null)
                                {
                                    dintACK = 4;     //Not existing PPID
                                }
                                else
                                {
                                    //bool dbolCheckFlag = false;

                                    //foreach (string strPPID in pInfo.Unit(0).SubUnit(0).HOSTPPID())
                                    //{
                                    //    if(pInfo.Unit(0).SubUnit(0).HOSTPPID(strPPID).EQPPPID == dstrEQPPPID)
                                    //    {
                                    //        dbolCheckFlag = true;
                                    //        break;
                                    //    }
                                    //}

                                    //if (dbolCheckFlag)
                                    //{
                                    //    dintACK = 12; //Reserve
                                    //}
                                }
                                break;

                            case 2:
                                dstrHOSTPPID = dstrReceivedPPID;
                                if (pInfo.All.CurrentHOSTPPID == dstrHOSTPPID)
                                {
                                    dintACK = 2;     //Busy, not in the situation to accept this message
                                }
                                else if (pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrHOSTPPID) == null)
                                {
                                    dintACK = 4;     //Not existing PPID
                                }
                                break;
                            }
                        }
                    }
                    else
                    {
                        dintACK = 3; //Mode Unsupported
                    }
                }

                msgTran.Secondary().Item("ACKC7").Putvalue(dintACK);
                funSendReply(msgTran);

                if (dintACK == 0)
                {
                    //PPID Command 작업
                    if (dstrMode == "1") // 생성
                    {
                        if (dintPPIDType == 1)
                        {
                            if (CreatePPID != null)
                            {
                                pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.PPIDCreate, CreatePPID);
                            }
                            else
                            {
                                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "CreatePPID Null");
                            }
                        }
                        else
                        {
                            pInfo.Unit(0).SubUnit(0).AddHOSTPPID(dstrHOSTPPID);
                            pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrHOSTPPID).EQPPPID = dstrEQPPPID;
                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, dstrMode, dstrHOSTPPID, dintPPIDType);
                        }
                    }
                    else //삭제
                    {
                        switch (dintPPIDType)
                        {
                        case 1:

                            pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.PPIDDelete, dstrEQPPPID);
                            break;

                        case 2:
                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, dstrMode, dstrHOSTPPID, dintPPIDType);
                            pInfo.Unit(0).SubUnit(0).RemoveHOSTPPID(dstrHOSTPPID);
                            break;
                        }
                    }
                }
            }
            catch (Exception error)
            {
                funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString());
                return;
            }
            finally
            {
                //PLC로 부터 리턴받은 값에 대해 사용된 변수 초기화
                //pInfo.All.isReceivedFromHOST = false;      //초기화
                //pInfo.All.PLCActionEnd = false;            //초기화
            }
        }