Exemple #1
0
        /// <summary>
        /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다.
        /// </summary>
        /// <param name="msgTran">Primary Message의 Transaction</param>
        public void funPrimaryReceive(Transaction msgTran)
        {
            string  dstrModuleID   = "";
            int     dintECIDCount  = 0;
            int     dintECID       = 0;
            Boolean dbolLayerExist = false;
            int     dintIndex      = 0;

            try
            {
                dstrModuleID = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim();

                //for (int dintUnit = 0; dintUnit <= pInfo.UnitCount; dintUnit++)
                //{
                if (dstrModuleID == pInfo.Unit(3).SubUnit(0).ModuleID)
                {
                    dbolLayerExist = true;
                    //break;
                }
                //}

                //ModuleID가 존재하지 않는 경우(Layer2도 비교한다.)
                if (dbolLayerExist == false)
                {
                    msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID);
                    msgTran.Secondary().Item("ECCOUNT").Putvalue(0);

                    funSendReply(msgTran);

                    return;
                }
                dintECIDCount = Convert.ToInt32(msgTran.Primary().Item("ECIDCNT").Getvalue());
                ArrayList arrCon = new ArrayList();
                //받은 ECID중에 존재하지 않는것이 하나라도 있으면 L,0으로 보고한다.
                for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++)
                {
                    dintECID = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue());
                    if (pInfo.Unit(0).SubUnit(0).ECID(dintECID) == null)
                    {
                        msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID);
                        msgTran.Secondary().Item("ECCOUNT").Putvalue(0);

                        funSendReply(msgTran);

                        return;
                    }

                    if (arrCon.Contains(dintECID) == true)
                    {
                        msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID);
                        msgTran.Secondary().Item("ECCOUNT").Putvalue(0);

                        funSendReply(msgTran);

                        return;
                    }

                    arrCon.Add(dintECID);
                }

                msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID);

                //ECID를 PLC에서 읽는다.
                //this.PInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "시작(subS2F29): " + DateTime.Now.ToString("yyyyMMddHHmmss") + ": " + DateTime.Now.Millisecond.ToString());
                if (pInfo.EQP("Main").DummyPLC == false)
                {
                    pInfo.All.isReceivedFromHOST = true;                            //HOST로 부터 S2F29를 받았음을 저장
                    pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.ECIDRead);   //ECID를 PLC로 부터 읽는다.
                    pHost.subWaitDuringReadFromPLC();                               //바로 위에 PLC로 준 명령이 완료될때까지 이 함수에서 대기한다.
                    pInfo.All.isReceivedFromHOST = false;                           //HOST로 부터 S2F29를 받지 않았음을 저장(초기화)
                }
                //this.PInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "종료(subS2F29): " + DateTime.Now.ToString("yyyyMMddHHmmss") + ": " + DateTime.Now.Millisecond.ToString());
                //dstrModuleID = pInfo.Unit(0).SubUnit(0).ModuleID;
                //HOST로 부터 받은 List가 L, 0이면 모든 ECID 보고
                if (dintECIDCount == 0)
                {
                    int ecidCount = pInfo.Unit(0).SubUnit(0).ECIDCount;
                    msgTran.Secondary().Item("ECCOUNT").Putvalue(ecidCount);

                    for (int dintLoop = 1; dintLoop <= ecidCount; dintLoop++)
                    {
                        //ECID 중 사용하지 않는것(Spare)는 제외하고 보고한다.
                        if (pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ModuleID.Contains(dstrModuleID) == true)  //&& pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Use == true)
                        {
                            InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintIndex + 1);

                            msgTran.Secondary().Item("ECID" + dintIndex).Putvalue(currentECID.Index);
                            msgTran.Secondary().Item("ECNAME" + dintIndex).Putvalue(currentECID.Name);
                            msgTran.Secondary().Item("ECDEF" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECDEF, currentECID.Format));
                            msgTran.Secondary().Item("ECSLL" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECSLL, currentECID.Format));
                            msgTran.Secondary().Item("ECSUL" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECSUL, currentECID.Format));
                            msgTran.Secondary().Item("ECWLL" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECWLL, currentECID.Format));
                            msgTran.Secondary().Item("ECWUL" + dintIndex).Putvalue(FunStringH.funPoint(currentECID.ECWUL, currentECID.Format));

                            dintIndex = dintIndex + 1;
                        }
                    }
                }
                else
                {
                    msgTran.Secondary().Item("ECCOUNT").Putvalue(dintECIDCount);

                    if (dstrModuleID == this.pInfo.Unit(0).SubUnit(0).ModuleID)         //Layer1단 모두 보고
                    {
                        for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++)
                        {
                            dintECID = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue());

                            InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintECID);

                            msgTran.Secondary().Item("ECID" + (dintLoop - 1)).Putvalue(currentECID.Index);
                            msgTran.Secondary().Item("ECNAME" + (dintLoop - 1)).Putvalue(currentECID.Name);
                            msgTran.Secondary().Item("ECDEF" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECDEF, currentECID.Format));
                            msgTran.Secondary().Item("ECSLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSLL, currentECID.Format));
                            msgTran.Secondary().Item("ECSUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSUL, currentECID.Format));
                            msgTran.Secondary().Item("ECWLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWLL, currentECID.Format));
                            msgTran.Secondary().Item("ECWUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWUL, currentECID.Format));
                        }
                    }
                    else                                    //Layer2단 해당 되는것만 보고
                    {
                        for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++)
                        {
                            dintECID = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue());

                            if (dstrModuleID != this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ModuleID)
                            {
                                if (this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ModuleID.Length > 13)
                                {
                                    if (dstrModuleID != this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ModuleID.Substring(0, 13))
                                    {
                                        dintECIDCount = 0;
                                        break;
                                    }
                                    else
                                    {
                                        InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintECID);

                                        msgTran.Secondary().Item("ECID" + (dintLoop - 1)).Putvalue(currentECID.Index);
                                        msgTran.Secondary().Item("ECNAME" + (dintLoop - 1)).Putvalue(currentECID.Name);
                                        msgTran.Secondary().Item("ECDEF" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECDEF, currentECID.Format));
                                        msgTran.Secondary().Item("ECSLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSLL, currentECID.Format));
                                        msgTran.Secondary().Item("ECSUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSUL, currentECID.Format));
                                        msgTran.Secondary().Item("ECWLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWLL, currentECID.Format));
                                        msgTran.Secondary().Item("ECWUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWUL, currentECID.Format));
                                    }
                                }
                                else
                                {
                                    dintECIDCount = 0;
                                    break;
                                }
                            }
                            else
                            {
                                InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintECID);

                                msgTran.Secondary().Item("ECID" + (dintLoop - 1)).Putvalue(currentECID.Index);
                                msgTran.Secondary().Item("ECNAME" + (dintLoop - 1)).Putvalue(currentECID.Name);
                                msgTran.Secondary().Item("ECDEF" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECDEF, currentECID.Format));
                                msgTran.Secondary().Item("ECSLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSLL, currentECID.Format));
                                msgTran.Secondary().Item("ECSUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECSUL, currentECID.Format));
                                msgTran.Secondary().Item("ECWLL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWLL, currentECID.Format));
                                msgTran.Secondary().Item("ECWUL" + (dintLoop - 1)).Putvalue(FunStringH.funPoint(currentECID.ECWUL, currentECID.Format));
                            }
                        }
                    }
                }


                funSendReply(msgTran);
            }
            catch (Exception error)
            {
                funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString());
                return;
            }
            finally
            {
                this.pInfo.All.isReceivedFromHOST = false;      //초기화
                this.pInfo.All.PLCActionEnd       = false;      //초기화
            }
        }
        /// <summary>
        /// Primary Message를 Biuld하여 Transaction을 Return한다.
        /// </summary>
        /// <param name="strParameters">Parameter 문자열</param>
        public Transaction funPrimarySend(string strParameters)
        {
            string[] arrayEvent;
            try
            {
                arrayEvent = strParameters.Split(',');

                int      dintBYWHO           = 0;
                int      dintIndex           = 0;
                int      dintEOIDSingleCount = 0;
                int      dintSendIndex       = 0;
                int      dintECID            = 0;
                int      dintCount           = 0;
                string[] dstrData;
                Queue    dqEOIDIndex = new Queue();

                int    dintCEID  = Convert.ToInt32(arrayEvent[1]);  //CEID
                string dstrValue = arrayEvent[2];                   //Value(102는 ECID값(KEY값), EOID의 경우 Index이다.)

                pMsgTran = pSecsDrv.MakeTransaction(this.StrPrimaryMsgName);

                pMsgTran.Primary().Item("DATAID").Putvalue(0);      //Fixed Value
                pMsgTran.Primary().Item("CEID").Putvalue(dintCEID);
                pMsgTran.Primary().Item("RPTID").Putvalue(1);       //Fixed Value

                pMsgTran.Primary().Item("MODULEID").Putvalue(pInfo.Unit(3).SubUnit(0).ModuleID);
                pMsgTran.Primary().Item("MCMD").Putvalue(pInfo.All.ControlState);
                pMsgTran.Primary().Item("MODULE_STATE").Putvalue(pInfo.Unit(3).SubUnit(0).EQPState);
                pMsgTran.Primary().Item("PROC_STATE").Putvalue(pInfo.Unit(3).SubUnit(0).EQPProcessState);

                //각 CEID별로 BYWHO값을 설정한다.
                switch (dintCEID)
                {
                case 101:
                {
                    dintBYWHO = Convert.ToInt32(pInfo.All.EOIDChangeBYWHO);

                    pMsgTran.Primary().Item("ECCOUNT").Putvalue(0);

                    dstrValue = dstrValue.Remove(dstrValue.LastIndexOf(';'));
                    dstrData  = dstrValue.Split(';');                               //보고할 EOID Index 값

                    //EOID Index가 4~9, 그 이외의 값 개수 체크
                    for (int dintLoop = 0; dintLoop <= dstrData.Length - 1; dintLoop++)
                    {
                        dintIndex = Convert.ToInt32(dstrData[dintLoop]);

                        dintEOIDSingleCount = dintEOIDSingleCount + 1;              //EOID Index가 4~9 이외의 값 개수

                        if (dqEOIDIndex.Contains(pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOID) == false)
                        {
                            dqEOIDIndex.Enqueue(pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOID);
                        }
                    }

                    pMsgTran.Primary().Item("EOCOUNT").Putvalue(dqEOIDIndex.Count);

                    for (int dintLoop = 1; dintLoop <= dstrData.Length; dintLoop++)
                    {
                        dintIndex = Convert.ToInt32(dstrData[dintLoop - 1]);
                        int dintEOID = pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOID;
                        int dintEOMD = pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOMD;
                        int dintEOV  = pInfo.Unit(0).SubUnit(0).EOID(dintIndex).EOV;

                        pMsgTran.Primary().Item("EOMDCOUNT" + (dintLoop - 1)).Putvalue(1);
                        pMsgTran.Primary().Item("EOID" + (dintLoop - 1)).Putvalue(dintEOID);
                        pMsgTran.Primary().Item("EOMD" + (dintLoop - 1) + 0).Putvalue(dintEOMD);
                        pMsgTran.Primary().Item("EOV" + (dintLoop - 1) + 0).Putvalue(dintEOV);
                    }
                }
                break;

                case 102:
                {
                    dintBYWHO = Convert.ToInt32(pInfo.All.ECIDChangeBYWHO);

                    pMsgTran.Primary().Item("EOCOUNT").Putvalue(0);

                    dintCount = dstrValue.Split(';').Length - 1;            //보고할 List 개수
                    dstrData  = dstrValue.Split(';');

                    pMsgTran.Primary().Item("ECCOUNT").Putvalue(dintCount);

                    for (int dintLoop = 1; dintLoop <= dintCount; dintLoop++)
                    {
                        dintECID = Convert.ToInt32(dstrData[dintLoop - 1]);
                        pMsgTran.Primary().Item("ECID" + (dintLoop - 1)).Putvalue(dintECID);

                        InfoAct.clsECID currentECID = pInfo.Unit(0).SubUnit(0).ECID(dintECID);
                        pMsgTran.Primary().Item("ECNAME" + (dintLoop - 1)).Putvalue(currentECID.Name);
                        pMsgTran.Primary().Item("ECDEF" + (dintLoop - 1)).Putvalue(currentECID.ECDEF);
                        pMsgTran.Primary().Item("ECSLL" + (dintLoop - 1)).Putvalue(currentECID.ECSLL);
                        pMsgTran.Primary().Item("ECSUL" + (dintLoop - 1)).Putvalue(currentECID.ECSUL);
                        pMsgTran.Primary().Item("ECWLL" + (dintLoop - 1)).Putvalue(currentECID.ECWLL);
                        pMsgTran.Primary().Item("ECWUL" + (dintLoop - 1)).Putvalue(currentECID.ECWUL);
                    }
                }
                break;

                default:
                    break;
                }

                pMsgTran.Primary().Item("BYWHO").Putvalue(dintBYWHO);
                pMsgTran.Primary().Item("OPERID").Putvalue(pInfo.All.UserID);
                pMsgTran.Primary().Item("RPTID1").Putvalue(5); //Fixed Value
                pMsgTran.Primary().Item("RPTID2").Putvalue(6); //Fixed Value

                pInfo.All.ECIDChangeBYWHO = "";                //초기화

                return(pMsgTran);
            }
            catch (Exception error)
            {
                funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString());
                return(null);
            }
        }
Exemple #3
0
        /// <summary>
        /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다.
        /// </summary>
        /// <param name="msgTran">Primary Message의 Transaction</param>
        public void funPrimaryReceive(Transaction msgTran)
        {
            string  dstrModuleID   = "";
            int     dintECIDCount  = 0;
            int     dintECID       = 0;
            string  dstrECName     = "";
            Boolean dbolFail       = false;
            bool    dbolECNameFail = false;
            bool    dbolECIDFail   = false;
            int     dintFailCount  = 0;
            //int dintECSLL = 0;
            //int dintECWLL = 0;
            //int dintECDEF = 0;
            //int dintECWUL = 0;
            //int dintECSUL = 0;

            float dintECSLL = 0;
            float dintECWLL = 0;
            float dintECDEF = 0;
            float dintECWUL = 0;
            float dintECSUL = 0;

            int dintEAC     = 0;
            int dintEACName = 0;
            int dintEACECID = 0;
            int dintTEAC    = 0;
            int dintEAC_SLL = 0;
            int dintEAC_WLL = 0;
            int dintEAC_DEF = 0;
            int dintEAC_WUL = 0;
            int dintEAC_SUL = 0;

            bool dbolErrorCheck = true;

            Boolean dbolLayerExist = false;
            Queue   dqECID         = new Queue();


            try
            {
                dstrModuleID = msgTran.Primary().Item("MODULEID").Getvalue().ToString().Trim();


                //for (int dintUnit = 0; dintUnit <= this.pInfo.UnitCount; dintUnit++)
                //{
                if (dstrModuleID == pInfo.Unit(3).SubUnit(0).ModuleID)
                {
                    dbolLayerExist = true;
                    //break;
                }
                //}

                //ModuleID가 존재하지 않는 경우
                if (dbolLayerExist == false)
                {
                    msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID);
                    msgTran.Secondary().Item("MIACK").Putvalue(1);      //1 : There is no such a MOUDLEID
                    msgTran.Secondary().Item("ECCOUNT").Putvalue(0);

                    funSendReply(msgTran);

                    return;
                }

                msgTran.Secondary().Item("MODULEID").Putvalue(dstrModuleID);
                msgTran.Secondary().Item("MIACK").Putvalue(0);
                dintECIDCount = Convert.ToInt32(msgTran.Primary().Item("ECCOUNT").Getvalue());
                msgTran.Secondary().Item("ECCOUNT").Putvalue(dintECIDCount);

                //받은 ECID중에 존재하지 않는것이 하나라도 있으면 NAK으로 보고하고 PLC에 모두 적용하지 않는다.
                for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++)
                {
                    dintECID   = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue());
                    dstrECName = msgTran.Primary().Item("ECNAME" + (dintLoop - 1)).Getvalue().ToString().Trim();

                    //존재하지 않는 ECID가 왔을때
                    if (pInfo.Unit(0).SubUnit(0).ECID(dintECID) == null)
                    {
                        dbolECIDFail = true;
                    }
                    else
                    {
                        if (dstrECName != this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Name)  //존재하지 않는 ECID가 왔을때
                        {
                            dbolECNameFail = true;
                        }
                        else if (this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ModuleID.Contains(dstrModuleID) == false)
                        {
                            dbolFail = true;
                        }
                        else
                        {
                            string dstrFormat = this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Format;

                            dintECSLL = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECSLL" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat));
                            dintECWLL = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECWLL" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat));
                            dintECDEF = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECDEF" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat));
                            dintECWUL = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECWUL" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat));
                            dintECSUL = Convert.ToSingle(FunStringH.funMakeRound(msgTran.Primary().Item("ECSUL" + (dintLoop - 1)).Getvalue().ToString().Trim(), dstrFormat));

                            Single dSingleMin = Convert.ToSingle(this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Min);
                            Single dSingleMax = Convert.ToSingle(this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Max);

                            if (Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL) != dintECSLL)
                            {
                                dbolFail    = true;
                                dintEAC_SLL = 2;
                            }
                            else if (Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL) != dintECSUL)
                            {
                                dbolFail    = true;
                                dintEAC_SUL = 2;
                            }
                            else
                            #region Min & Max 값 확인
                            if ((dintECDEF < dSingleMin) || (dintECDEF > dSingleMax))
                            {
                                dbolFail    = true;
                                dintEAC_DEF = 2;
                            }
                            else if ((dintECSUL < dSingleMin) || (dintECSUL > dSingleMax))
                            {
                                dbolFail    = true;
                                dintEAC_SUL = 2;
                            }
                            else if ((dintECSLL < dSingleMin) || (dintECSLL > dSingleMax))
                            {
                                dbolFail    = true;
                                dintEAC_SLL = 2;
                            }
                            else if ((dintECWUL < dSingleMin) || (dintECWUL > dSingleMax))
                            {
                                dbolFail    = true;
                                dintEAC_WUL = 2;
                            }
                            else if ((dintECWLL < dSingleMin) || (dintECWLL > dSingleMax))
                            {
                                dbolFail    = true;
                                dintEAC_WLL = 2;
                            }



                            //if ((dintECWUL < dSingleMin) || (dintECWUL > dSingleMax))
                            //{
                            //    dbolFail = true;
                            //    dintEAC_WUL = 2;
                            //}
                            //if ((dintECWLL < dSingleMin) || (dintECWLL > dSingleMax))
                            //{
                            //    dbolFail = true;
                            //    dintEAC_WLL = 2;
                            //}
                            #endregion

                            if (!dbolFail)
                            {
                                dbolErrorCheck = false;
                                // 각 항목별 Data 확인
                                if (dintECSUL >= dintECWUL && dintECSUL >= dintECDEF && dintECSUL >= dintECWLL && dintECSUL >= dintECSLL)
                                {
                                    if (dintECWUL >= dintECDEF && dintECWUL >= dintECWLL && dintECWLL >= dintECSLL)
                                    {
                                        if (dintECDEF >= dintECWLL && dintECDEF >= dintECSLL)
                                        {
                                            if (dintECWLL < dintECSLL)
                                            {
                                                dbolFail    = true;
                                                dintEAC_WLL = 2;
                                            }
                                            else
                                            {
                                                dqECID.Enqueue(dintECID);                       //Update를 위해 Queue에 저장
                                            }
                                        }
                                        else
                                        {
                                            if (!(dintECDEF > dintECWLL))
                                            {
                                                dintEAC_DEF = 2;
                                                dintEAC_WLL = 2;
                                            }
                                            else
                                            {
                                                dintEAC_DEF = 2;
                                                dintEAC_SLL = 2;
                                            }
                                            dbolFail = true;
                                            //dintEAC_DEF = 2;
                                        }
                                    }
                                    else
                                    {
                                        if (!(dintECWUL > dintECDEF))
                                        {
                                            dintEAC_WUL = 2;
                                            dintEAC_DEF = 2;
                                        }
                                        else if (!(dintECWUL > dintECWLL))
                                        {
                                            dintEAC_WUL = 2;
                                            dintEAC_WLL = 2;
                                        }
                                        else
                                        {
                                            dintEAC_WUL = 2;
                                            dintEAC_SLL = 2;
                                        }
                                        dbolFail = true;
                                        //dintEAC_DEF = 2;
                                    }
                                }
                                else
                                {
                                    if (!(dintECSUL > dintECWUL))
                                    {
                                        dintEAC_SUL = 2;
                                        dintEAC_WUL = 2;
                                    }
                                    else if (!(dintECSUL > dintECDEF))
                                    {
                                        dintEAC_SUL = 2;
                                        dintEAC_DEF = 2;
                                    }
                                    else if (!(dintECSUL > dintECWLL))
                                    {
                                        dintEAC_SUL = 2;
                                        dintEAC_WLL = 2;
                                    }
                                    else
                                    {
                                        dintEAC_SUL = 2;
                                        dintEAC_SLL = 2;
                                    }
                                    dbolFail = true;
                                    //dintEAC_DEF = 2;
                                }
                            }
                        }
                    }

                    if (dbolFail == true)                  //Validation 체크 에러
                    {
                        dintFailCount = dintFailCount + 1; //각 항목별로 Fail이 났을때 1씩 증가
                        dintEAC       = 2;
                        if (dbolErrorCheck == false)
                        {
                            if (Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL) != dintECSLL)
                            {
                                dintEAC_SLL = 2;
                            }
                            else if (Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL) != dintECSUL)
                            {
                                dintEAC_SUL = 2;
                            }
                            else
                            {
                                //dintEAC_SLL = 0;
                                //dintEAC_WLL = 0;
                                //dintEAC_DEF = 0;
                                //dintEAC_SUL = 0;
                                //dintEAC_WUL = 0;
                                //WLL 확인
                                if (!(Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL) <= dintECWLL && dintECWLL <= Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECDEF)))
                                {
                                    dintEAC_WLL = 2;
                                    dintEAC_SLL = 0;
                                    //dintEAC_WLL = 0;
                                    dintEAC_DEF = 0;
                                    dintEAC_SUL = 0;
                                    dintEAC_WUL = 0;
                                }
                                else
                                {
                                    if (!(Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWLL) <= dintECDEF && dintECDEF <= Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWUL)))
                                    {
                                        dintEAC_DEF = 2;
                                        dintEAC_SLL = 0;
                                        dintEAC_WLL = 0;
                                        //dintEAC_DEF = 0;
                                        dintEAC_SUL = 0;
                                        dintEAC_WUL = 0;
                                    }
                                    else
                                    {
                                        if (!(Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECDEF) <= dintECWUL && dintECWUL <= Convert.ToSingle(pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL)))
                                        {
                                            dintEAC_WUL = 2;
                                            dintEAC_SLL = 0;
                                            dintEAC_WLL = 0;
                                            dintEAC_DEF = 0;
                                            dintEAC_SUL = 0;
                                            //dintEAC_WUL = 0;
                                        }
                                        else
                                        {
                                            int a = 0;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        dintEAC = 0;
                    }

                    if (dbolECIDFail == true)
                    {
                        dintEACECID = 2;
                    }
                    else
                    {
                        dintEACECID = 0;
                    }

                    if (dbolECNameFail == true)
                    {
                        dintEACName = 2;
                    }
                    else
                    {
                        dintEACName = 0;
                    }

                    if (dbolFail || dbolECIDFail || dbolECNameFail)
                    {
                        dintTEAC = 1;
                    }
                    else
                    {
                        dintTEAC = 0;
                    }


                    dbolFail       = false;
                    dbolECIDFail   = false;
                    dbolECNameFail = false;

                    msgTran.Secondary().Item("TEAC" + (dintLoop - 1)).Putvalue(dintTEAC);

                    msgTran.Secondary().Item("ECID" + (dintLoop - 1)).Putvalue(dintECID);
                    msgTran.Secondary().Item("EAC1" + (dintLoop - 1)).Putvalue(dintEACECID);

                    msgTran.Secondary().Item("ECNAME" + (dintLoop - 1)).Putvalue(dstrECName);
                    msgTran.Secondary().Item("EAC2" + (dintLoop - 1)).Putvalue(dintEACName);

                    msgTran.Secondary().Item("ECDEF" + (dintLoop - 1)).Putvalue(dintECDEF);
                    msgTran.Secondary().Item("EAC3" + (dintLoop - 1)).Putvalue(dintEAC_DEF);

                    msgTran.Secondary().Item("ECSLL" + (dintLoop - 1)).Putvalue(dintECSLL);
                    msgTran.Secondary().Item("EAC4" + (dintLoop - 1)).Putvalue(dintEAC_SLL);

                    msgTran.Secondary().Item("ECSUL" + (dintLoop - 1)).Putvalue(dintECSUL);
                    msgTran.Secondary().Item("EAC5" + (dintLoop - 1)).Putvalue(dintEAC_SUL);

                    msgTran.Secondary().Item("ECWLL" + (dintLoop - 1)).Putvalue(dintECWLL);
                    msgTran.Secondary().Item("EAC6" + (dintLoop - 1)).Putvalue(dintEAC_WLL);

                    msgTran.Secondary().Item("ECWUL" + (dintLoop - 1)).Putvalue(dintECWUL);
                    msgTran.Secondary().Item("EAC7" + (dintLoop - 1)).Putvalue(dintEAC_WUL);

                    dintEAC_SLL = 0;
                    dintEAC_WLL = 0;
                    dintEAC_DEF = 0;
                    dintEAC_WUL = 0;
                    dintEAC_SUL = 0;
                }



                //HOST로 S2F16 보고
                funSendReply(msgTran);


                if (dintFailCount > 0)
                {
                    //Error가 발생한것임.
                    dqECID.Clear();
                    return;
                }

                ////NACK값이 하나라도 존재하면 PLC에 적용하지 않느다.
                ////2011.01.13        송은선
                //if (dintEAC != 0 && dintTEAC != 0)
                //{
                //    dqECID.Clear();
                //    return;
                //}

                //카운트가 0이상이면 맞는게 있음
                if (dqECID.Count > 0)
                {
                    this.pInfo.All.ECIDChangeBYWHO = "1";        //BY HOST

                    this.pInfo.All.ECIDChange.Clear();           //초기화
                    this.pInfo.All.ECIDChangeHOSTReport.Clear(); //초기화
                    this.pInfo.All.ECIDChangeFromHost = "";


                    string dstrECSLL = string.Empty;
                    string dstrECWLL = string.Empty;
                    string dstrECDEF = string.Empty;
                    string dstrECWUL = string.Empty;
                    string dstrECSUL = string.Empty;


                    //PLC에 Write할 ECID를 저장한다.
                    for (int dintLoop = 1; dintLoop <= dintECIDCount; dintLoop++)
                    {
                        dintECID = Convert.ToInt32(msgTran.Primary().Item("ECID" + (dintLoop - 1)).Getvalue());

                        if (dqECID.Contains(dintECID) == true)
                        {
                            string dstrFormat = this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Format;

                            dstrECSLL = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECSLL" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat));
                            dstrECWLL = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECWLL" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat));
                            dstrECDEF = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECDEF" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat));
                            dstrECWUL = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECWUL" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat));
                            dstrECSUL = FunStringH.funMakePLCData(FunStringH.funMakeRound(msgTran.Primary().Item("ECSUL" + (dintLoop - 1)).Getvalue().ToString(), dstrFormat));

                            this.pInfo.All.ECIDChange.Add(dintECID, dstrECSLL + "," + dstrECWLL + "," + dstrECDEF + "," + dstrECWUL + "," + dstrECSUL);

                            this.pInfo.All.ECIDChangeFromHost += dintECID + ";";

                            this.pInfo.All.ECIDChangeHOSTReport.Add(dintECID, dstrECSLL + "," + dstrECWLL + "," + dstrECDEF + "," + dstrECWUL + "," + dstrECSUL);
                        }
                    }

                    //HOST에서 받은것외에 없는 항목은 CIM이 가지고 있는 Data를 써준다.
                    //변경할 ECID만 써주는게 아니고 모든 ECID를 써주기 때문임
                    for (int dintLoop = 1; dintLoop <= this.pInfo.Unit(0).SubUnit(0).ECIDCount; dintLoop++)
                    {
                        if (this.pInfo.All.ECIDChange.ContainsKey(dintLoop) == true)
                        {
                        }
                        else
                        {
                            InfoAct.clsECID pECID = pInfo.Unit(0).SubUnit(0).ECID(dintLoop);

                            this.pInfo.All.ECIDChange.Add(dintLoop, FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECSLL, pECID.Format)) + ","
                                                          + FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECWLL, pECID.Format)) + ","
                                                          + FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECDEF, pECID.Format)) + ","
                                                          + FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECWUL, pECID.Format)) + ","
                                                          + FunStringH.funMakePLCData(FunStringH.funMakeRound(pECID.ECSUL, pECID.Format)));
                        }
                    }

                    //PLC로 ECID 변경 Write
                    this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.ECIDChange);
                }
            }
            catch (Exception error)
            {
                funSetLog(InfoAct.clsInfo.LogType.CIM, error.ToString());
                return;
            }
        }