コード例 #1
0
ファイル: clsCimEventMessageSend.cs プロジェクト: k2un/k2un
        /// <summary>
        /// CIM에서 설비로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : cmdName
        /// parameters[1] : 1st parameter
        /// parameters[2] : 2nd parameter
        /// parameters[3] : 3rd parameter
        /// parameters[4] : 4th parameter
        /// parameters[5] : 5th Parameter
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string strMessage = parameters[0].ToString();

            string dstrBitAddress  = "B1003";;
            string dstrWordAddress = "W1010";
            string strType         = "";

            try
            {
                strType = parameters[1].ToString().Trim();
                if (strMessage.Length > 1000)     //메시지 길이 초과시 1000자로 조정
                {
                    strMessage = strMessage.Substring(0, 1000);
                }
                else
                {
                    strMessage = FunStringH.funStringData(strMessage, 1000);      //1000자로 맞춘다.
                }
                pEqpAct.funWordWrite("W1010", strMessage, EnuEQP.PLCRWType.ASCII_Data, false);

                if (strType == "O")
                {
                    pEqpAct.funBitWrite("B1003", "1", false);
                }
                else
                {
                    pEqpAct.funBitWrite("B1005", "1", false);
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString() + ", strMessage:" + strMessage);
            }
        }
コード例 #2
0
ファイル: clsCimEventPPIDCreate.cs プロジェクト: k2un/k2un
        /// <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());
            }
        }
コード例 #3
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 dstrPPIDBody, string dstrPPIDType)
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string strHOSTPPID  = parameters[0].ToString();
            string dstrEQPPPID  = parameters[1].ToString();
            string dstrPPIDBody = parameters[2].ToString();
            string dstrPPIDType = parameters[3].ToString();

            string dstrWordData = "";
            string dstrValue    = " ";

            string[] dstrData       = null;
            string   dstrHOSTPPID   = FunStringH.funStringData("", 20); //HOST PPID는 항상 공백으로 써줌(필요없음)
            int      dintPPIDType   = 1;                                //EQP PPID(1)
            string   strWordAddress = "W1210";
            string   dstrBitAddress = "";
            string   dstrTemp       = "";

            try
            {
                string[] arrCon = dstrPPIDBody.Split(';');
                dstrWordData += pEqpAct.funWordWriteString(1, dstrEQPPPID, 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 < arrCon.Length; dintLoop++)
                {
                    if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop + 1).Length == 2)
                    {
                        dstrTemp      = FunStringH.funMakePLCData(FunStringH.funMakeRound(arrCon[dintLoop], this.pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop + 1).Format));
                        dstrWordData += pEqpAct.funWordWriteString(2, dstrTemp, EnuEQP.PLCRWType.Int_Data);
                    }
                    else
                    {
                        dstrWordData += pEqpAct.funWordWriteString(8, arrCon[dintLoop].PadRight(16), EnuEQP.PLCRWType.ASCII_Data);
                    }
                }
                pEqpAct.funWordWrite(strWordAddress, dstrWordData, EnuEQP.PLCRWType.Hex_Data);

                //EQP PPID Body 수정
                dstrBitAddress = "B1034";
                pEqpAct.funBitWrite(dstrBitAddress, "1");

                if (pInfo.EQP("Main").DummyPLC)
                {
                    pEqpAct.funWordWrite("W2540", dstrWordData, EnuEQP.PLCRWType.Hex_Data);
                    pEqpAct.funBitWrite("B113B", "1");
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #4
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
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string dstrBitAddress = "B1000";
            string dstrData       = FunStringH.funMakeLengthStringFirst("0", 256); //384개임

            try
            {
                //EventBit를 초기화한다.
                pEqpAct.funBitWrite(dstrBitAddress, dstrData);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #5
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
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string strHOSTPPID = parameters[0].ToString();

            // lsc
            string dstrBitAddress  = "B1034";
            string dstrWordAddress = "W1010";
            string dstrWordData    = "";

            try
            {
                strHOSTPPID   = FunStringH.funStringData(strHOSTPPID, 20);                                //20자로 맞춘다.
                dstrWordData += pEqpAct.funWordWriteString(10, strHOSTPPID, EnuEQP.PLCRWType.ASCII_Data); //HOSTPPID

                pEqpAct.funWordWrite(dstrWordAddress, dstrWordData, EnuEQP.PLCRWType.Hex_Data);
                dstrWordData = "";   //초기화

                pEqpAct.funBitWrite(dstrBitAddress, "1");
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #6
0
        /// <summary>
        /// 설비에서 CIM으로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : strCompBit
        /// parameters[1] : dstrACTVal
        /// parameters[2] : dintActFrom
        /// parameters[3] : dstrACTFromSub
        /// parameters[4] : intBitVal
        /// parameters[5] : Special Parameter
        /// </remarks>
        public void funProcessEQPEvent(string[] parameters)
        {
            string        strCompBit      = parameters[0];
            string        dstrWordAddress = "";
            StringBuilder dstrLog         = new StringBuilder();
            int           dintLength      = 0;
            string        dstrTemp        = "";
            int           dintBodyIndex   = 3; //PPID Body Index


            string dstrAfterHOSTPPID = "";
            string dstrAfterEQPPPID  = "";
            string dstrBeforeEQPPPID = "";
            int    dintAfterPPIDType = 0;

            string[] dstrAfterValue;

            try
            {
                dstrWordAddress = "W2040";
                //m_pEqpAct.subWordReadSave(dstrWordAddress, 10, EnuEQP.PLCRWType.ASCII_Data);        //HOST PPID
                m_pEqpAct.subWordReadSave(dstrWordAddress, 1, EnuEQP.PLCRWType.Int_Data);           //EQP PPID
                m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.Int_Data);                       //Spare
                m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                        //PPID Type
                //for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                //{
                //    dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                //    m_pEqpAct.subWordReadSave("", dintLength, EnuEQP.PLCRWType.Int_Data);                 //Body
                //}

                dstrAfterValue = m_pEqpAct.funWordReadAction(true);

                //PLC Req에 대한 CIM의 Confirm Bit를 준다.5
                m_pEqpAct.subSetConfirmBit(strCompBit);

                dstrAfterHOSTPPID = dstrAfterValue[0];
                dstrAfterEQPPPID  = dstrAfterValue[1];
                dintAfterPPIDType = Convert.ToInt32(dstrAfterValue[3]);

                if (pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrAfterHOSTPPID) == null)
                {
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("존재하지 않는 HostPPID: {0} 에 대한 Mapping 변경 보고됨.", dstrAfterHOSTPPID));
                    return;
                }

                if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrAfterEQPPPID) == null)
                {
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("HostPPID: {0} 에 존재하지 않는 EQPPPID: {1} Mapping 변경 보고됨.", dstrAfterHOSTPPID, dstrAfterEQPPPID));
                    return;
                }



                dstrBeforeEQPPPID = pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrAfterHOSTPPID).EQPPPID;

                pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrAfterHOSTPPID).EQPPPID = dstrAfterEQPPPID;

                //로그를 출력한다.
                dstrLog.Append(FunStringH.funPaddingStringData("-", 30, '-') + "\r\n");
                dstrLog.Append("HOST PPID Mapping 수정(After Data)" + "\r\n");
                dstrLog.Append("AfterHOSTPPID:" + dstrAfterHOSTPPID + ",");
                dstrLog.Append("AfterEQPPPID:" + dstrAfterEQPPPID + ",");
                dstrLog.Append("AfterPPIDType:" + dintAfterPPIDType.ToString() + "\r\n");

                //for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                //{
                //    dstrTemp = FunStringH.funPoint(dstrAfterValue[dintBodyIndex + dintLoop - 1], pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                //    dstrLog.Append(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name + ":" + dstrTemp + "\r\n");
                //}
                dstrLog.Append(FunStringH.funPaddingStringData("-", 30, '-') + "\r\n");
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, dstrLog.ToString());


                //HOST로 HOST Mapping 변경 보고
                //인자:변경(3), PPIDTYPE, HOSTPPID, EQPPPID
                pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, "3", dintAfterPPIDType, dstrAfterHOSTPPID, dstrAfterEQPPPID);

                m_pEqpAct.subSetParameterLog("HOST PPID Mapping 수정", dstrAfterHOSTPPID, null, dstrBeforeEQPPPID, dstrAfterEQPPPID);

                //최종 수정된 날짜 Ini에 변경
                FunINIMethod.subINIWriteValue("ETCInfo", "RECIPELastModified", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), pInfo.All.SystemINIFilePath);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #7
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
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string dstrHGLSID       = "";
            string dstrWordAddress  = "";
            string dstrBitAddress   = "";
            bool   dbolItemCheck    = false;
            string strAPCEQPPPID    = "";
            string dstrValue        = "";
            int    APCItemIndex     = 0;
            string JobRecipe        = "";
            string strWordWriteData = "";

            try
            {
                //dstrHGLSID = parameters[0].ToString();
                dstrHGLSID = parameters[0].ToString(); //Test

                dstrWordAddress = "W1440";
                dstrBitAddress  = "B1018";
                strAPCEQPPPID   = pInfo.APC(dstrHGLSID).EQPPPID;

                //if (pInfo.All.GlassUpperJobFlag)
                //{
                //    JobRecipe = pInfo.Unit(0).SubUnit(0).MappingEQPPPID(strAPCEQPPPID).UP_EQPPPID;
                //}
                //else
                //{
                //    JobRecipe = pInfo.Unit(0).SubUnit(0).MappingEQPPPID(strAPCEQPPPID).LOW_EQPPPID;
                //}

                for (int dintLoop = 0; dintLoop < 574; dintLoop++)
                {
                    pEqpAct.funWordWrite(dstrWordAddress, "0", EnuEQP.PLCRWType.Int_Data);
                    dstrWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrWordAddress, 1);
                }

                dstrWordAddress = "W1440";

                for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBodyCount; dintLoop++)
                {
                    dbolItemCheck = false;
                    for (int dintLoop2 = 0; dintLoop2 < pInfo.APC(dstrHGLSID).ParameterName.Length; dintLoop2++)
                    {
                        if (pInfo.APC(dstrHGLSID).ParameterName[dintLoop2] == pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Name)
                        {
                            APCItemIndex  = dintLoop2;
                            dbolItemCheck = true;
                            break;
                        }
                    }

                    if (dbolItemCheck)
                    {
                        dstrValue = Convert.ToInt32(FunStringH.funMakePLCData(pInfo.APC(dstrHGLSID).ParameterValue[APCItemIndex].ToString())).ToString();
                    }
                    else
                    {
                        dstrValue = FunStringH.funMakePLCData(pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Value);
                    }

                    //if (pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Length > 1)
                    //{
                    //    pEqpAct.funDoubleWordWrite(dstrWordAddress, dstrValue, EnuEQP.PLCRWType.Int_Data);
                    //}
                    //else
                    //{
                    //    pEqpAct.funWordWrite(dstrWordAddress, dstrValue, EnuEQP.PLCRWType.Int_Data);
                    //}

                    //dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);

                    if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2)
                    {
                        if (dstrValue.Contains("-"))
                        {
                            strWordWriteData = pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue, EnuEQP.PLCRWType.Int_Data);
                        }
                        else
                        {
                            strWordWriteData = pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue, EnuEQP.PLCRWType.Int_Data).Substring(4, 4) + pEqpAct.funWordWriteString(2, dstrValue, EnuEQP.PLCRWType.Int_Data).Substring(0, 4);
                        }

                        pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(4, 4), EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                        dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 1);
                        pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(0, 4), EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                        dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length - 1);
                    }
                    else
                    {
                        pEqpAct.funWordWrite(dstrWordAddress, dstrValue.PadRight(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length), EnuEQP.PLCRWType.ASCII_Data);
                        dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);
                    }
                }
                pEqpAct.funWordWrite("W167E", strAPCEQPPPID, EnuEQP.PLCRWType.Int_Data);
                pEqpAct.funBitWrite(dstrBitAddress, "1");

                //pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S16F111APCStart, dstrHGLSID);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #8
0
        /// <summary>
        /// 설비에서 CIM으로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : strCompBit
        /// parameters[1] : dstrACTVal
        /// parameters[2] : dintActFrom
        /// parameters[3] : dstrACTFromSub
        /// parameters[4] : intBitVal
        /// parameters[5] : Special Parameter
        /// </remarks>
        public void funProcessEQPEvent(string[] parameters)
        {
            string[]      dstrValue;
            string        dstrWordAddress = "W2540";
            StringBuilder dstrLog         = new StringBuilder();
            string        dstrHOSTPPID    = "";
            string        dstrEQPPPID     = "";
            int           dintPPIDType    = 0;
            string        dstrTemp        = "";
            int           dintLength      = 0;
            int           dintBodyIndex   = 3; //PPID Body Index
            string        APCType         = "";
            string        strWordAddress  = "";
            //[2015/04/20](Add by HS)
            string dstrReadData   = "";
            int    dintStartIndex = 0;
            string strValue       = "";
            int    dintReadcount  = 0;

            try
            {
                //[2015/04/20]임시add by HS)
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("actOnePPIDInfoRequest Start. Time = {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")));
                dstrEQPPPID  = m_pEqpAct.funWordRead("W2540", 1, EnuEQP.PLCRWType.Int_Data);
                dintPPIDType = 1;
                //150429 고석현 수정
                //매번 읽으면 늦어지므로  EQPPPID가 존재하면 그대로 보고 EQPPPID가
                //pInfo.Unit(0).SubUnit(0).RemoveEQPPPID(dstrEQPPPID);

                dintReadcount  = (pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5) * 2;
                strWordAddress = "W254C";
                if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true)
                {
                    if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBodyCount == 0)
                    {
                        //[2015/04/20] PPID Body 값 Block으로 한번에(Add by HS)
                        dstrReadData = m_pEqpAct.funWordRead("W254C", dintReadcount, EnuEQP.PLCRWType.Hex_Data, false).Trim();
                        #region EQPPPID에 Body 저장
                        for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5; dintLoop++)
                        {
                            if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true)
                            {
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range    = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode  = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                                dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 4;       //Length에 맞게 자를 문자열 개수를 가져온다.
                                dstrTemp   = dstrReadData.Substring(dintStartIndex, dintLength);

                                if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length > 1)
                                {
                                    string dstrTemp1 = dstrTemp.Substring(0, 4);
                                    string dstrTemp2 = dstrTemp.Substring(4, 4);
                                    dstrTemp = dstrTemp2 + dstrTemp1;

                                    strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal);
                                    dstrTemp = FunStringH.funPoint(strValue, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                                    pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                                }
                                else
                                {
                                    strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.ASCString);
                                    pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = strValue;
                                }

                                dintStartIndex += dintLength;

                                #region 변경전 [2015.04.20] Modify by HS
                                //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                                //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                                //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                                //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                                //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                                //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                                //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                                //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                                //if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2)
                                //{
                                //    dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                                //    pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                                //}
                                //else
                                //{
                                //    dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data);
                                //    pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                                //}
                                //strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);
                                #endregion
                            }
                        }
                        #endregion

                        strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, dintReadcount);

                        dstrReadData   = m_pEqpAct.funWordRead(strWordAddress, 80, EnuEQP.PLCRWType.ASCII_Data, false);
                        dintStartIndex = 0;
                        #region EQPPPID에 Film Code 저장
                        for (int dintLoop = 251; dintLoop <= 255; dintLoop++)
                        {
                            if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true)
                            {
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range    = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode  = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                                dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 2;       //Length에 맞게 자를 문자열 개수를 가져온다.
                                dstrTemp   = dstrReadData.Substring(dintStartIndex, dintLength);


                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp.Trim();
                            }

                            dintStartIndex += dintLength;
                        }
                        #endregion
                    }
                }



                ////dstrHOSTPPID = dstrValue[0];
                //dstrEQPPPID = dstrValue[0];
                //dintPPIDType = Convert.ToInt32(dstrValue[2]);

                ////로그를 남긴다.
                //switch (dintPPIDType)
                //{
                //    case 1:
                //        dstrTemp = "EQP PPID 정보 요청(One)";
                //        break;

                //    case 2:
                //        dstrTemp = "HOST PPID 정보 요청(One)";
                //        break;

                //    default:        //여기로 들어오면 Error임.
                //        dstrTemp = "PPID 정보 요청(One)";
                //        break;
                //}

                //dstrLog.Append(FunStringH.funPaddingStringData("-", 30, '-') + "\r\n");
                //dstrLog.Append(dstrTemp + "\r\n");
                //dstrLog.Append("HOSTPPID:" + dstrHOSTPPID + ",");
                //dstrLog.Append("EQPPPID:" + dstrEQPPPID + ",");
                //dstrLog.Append("PPIDType:" + dintPPIDType.ToString() + "\r\n");
                //for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                //{
                //    dstrTemp = FunStringH.funPoint(dstrValue[dintBodyIndex + dintLoop - 1], pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                //    dstrLog.Append(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name + ":" + dstrTemp + "\r\n");
                //}
                //dstrLog.Append(FunStringH.funPaddingStringData("-", 30, '-'));
                //pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, dstrLog.ToString());

                switch (dintPPIDType)
                {
                case 1:             //EQP PPID

                    //기존에 EQPPPID가 존재하면 지운다.
                    //pInfo.Unit(0).SubUnit(0).RemoveEQPPPID(dstrEQPPPID);

                    //if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true)
                    //{
                    //    pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).EQPPPID = dstrEQPPPID;

                    //    for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                    //    {
                    //        //EQPPPID에 Body 저장
                    //        pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop);

                    //        pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                    //        pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                    //        pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                    //        pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                    //        pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                    //        pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                    //        pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                    //        dstrTemp = FunStringH.funPoint(dstrValue[dintBodyIndex + dintLoop - 1], pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                    //        pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                    //    }
                    //}
                    //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBodyCheck = true;

                    break;

                case 2:             //HOST PPID

                    if (pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrHOSTPPID) == null)
                    {
                        //기존에 HOSTPPID가 존재하지 않으면 새로 생성한다.
                        pInfo.Unit(0).SubUnit(0).AddHOSTPPID(dstrHOSTPPID);
                    }

                    pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrHOSTPPID).EQPPPID  = dstrEQPPPID;
                    pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrHOSTPPID).HostPPID = dstrHOSTPPID;


                    break;

                default:
                    break;
                }

                //if (pInfo.All.APCStartEQPPPIDCheck)
                //{
                //    pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.APCStart, pInfo.All.DataCheckGLSID);
                //}
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
            finally
            {
                pInfo.All.isReceivedFromHOST = false;  //초기화
                pInfo.All.PLCActionEnd       = true;   //PLC로 부터 값을 읽었음을 저장
                pInfo.All.PLCActionEnd2      = true;
                pInfo.All.APCPPIDReadFlag    = true;
                //[2015/04/20]임시add by HS)
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("actOnePPIDInfoRequest End. Time = {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")));
            }
        }
コード例 #9
0
        /// <summary>
        /// 설비에서 CIM으로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : strCompBit
        /// parameters[1] : dstrACTVal
        /// parameters[2] : dintActFrom
        /// parameters[3] : dstrACTFromSub
        /// parameters[4] : intBitVal
        /// parameters[5] : Special Parameter
        /// </remarks>
        public void funProcessEQPEvent(string[] parameters)
        {
            string dstrHGLSID       = "";
            string dstrWordAddress  = "W1440";
            string dstrBitAddress   = "";
            bool   dbolItemCheck    = false;
            string strAPCEQPPPID    = "";
            string dstrValue        = "";
            int    APCItemIndex     = 0;
            string JobRecipe        = "";
            string strWordWriteData = "";

            try
            {
                #region 임시

                dstrHGLSID      = "TEST";
                dstrWordAddress = "W1440";
                dstrBitAddress  = "B1018";

                for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBodyCount; dintLoop++)
                {
                    dbolItemCheck = false;
                    for (int dintLoop2 = 0; dintLoop2 < pInfo.APC(dstrHGLSID).ParameterName.Length; dintLoop2++)
                    {
                        if (pInfo.APC(dstrHGLSID).ParameterName[dintLoop2] == pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Name)
                        {
                            APCItemIndex  = dintLoop2;
                            dbolItemCheck = true;
                            break;
                        }
                    }

                    if (dbolItemCheck)
                    {
                        dstrValue = Convert.ToInt32(FunStringH.funMakePLCData(pInfo.APC(dstrHGLSID).ParameterValue[APCItemIndex].ToString())).ToString();
                    }
                    else
                    {
                        dstrValue = FunStringH.funMakePLCData(pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Value);
                    }

                    //if (pInfo.Unit(0).SubUnit(0).EQPPPID(strAPCEQPPPID).PPIDBody(dintLoop).Length > 1)
                    //{
                    //    pEqpAct.funDoubleWordWrite(dstrWordAddress, dstrValue, EnuEQP.PLCRWType.Int_Data);
                    //}
                    //else
                    //{
                    //    pEqpAct.funWordWrite(dstrWordAddress, dstrValue, EnuEQP.PLCRWType.Int_Data);
                    //}

                    //dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);
                    if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2)
                    {
                        if (dstrValue.Contains("-"))
                        {
                            strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue.ToString(), EnuEQP.PLCRWType.Int_Data);
                            //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData, EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                        }
                        else
                        {
                            strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue.ToString(), EnuEQP.PLCRWType.Int_Data).Substring(4, 4) + m_pEqpAct.funWordWriteString(2, dstrValue.ToString(), EnuEQP.PLCRWType.Int_Data).Substring(0, 4);
                        }

                        m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(4, 4), EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                        dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 1);
                        m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(0, 4), EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                        //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData, EnuEQP.PLCRWType.Hex_Data);
                        dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length - 1);
                    }
                    else
                    {
                        strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dstrValue, EnuEQP.PLCRWType.ASCII_Data);
                        dstrWordAddress  = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);
                    }
                }


                //pEqpAct.funBitWrite(dstrBitAddress, "1");

                //pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S16F111APCStart, dstrHGLSID);

                #endregion

                //int dintTest = 124;
                //for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                //{
                //    if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2)
                //    {
                //        dintTest -= 1;

                //        if (dintTest < 0)
                //        {
                //            strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dintTest.ToString(), EnuEQP.PLCRWType.Int_Data);
                //            //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData, EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터

                //        }
                //        else
                //        {
                //            strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dintTest.ToString(), EnuEQP.PLCRWType.Int_Data).Substring(4, 4) + m_pEqpAct.funWordWriteString(2, dintTest.ToString(), EnuEQP.PLCRWType.Int_Data).Substring(0, 4);
                //        }

                //        m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(4, 4), EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                //        dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 1);
                //        m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(0, 4), EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                //        //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData, EnuEQP.PLCRWType.Hex_Data);
                //        dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length - 1);
                //    }
                //    else
                //    {
                //        strWordWriteData = m_pEqpAct.funWordWriteString(pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, dintTest.ToString(), EnuEQP.PLCRWType.ASCII_Data);
                //        dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);

                //    }

                //    //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(4, 4), EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                //    //dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, 1);

                //    //m_pEqpAct.funWordWrite(dstrWordAddress, strWordWriteData.Substring(0, 4), EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                //    //dstrWordAddress = FunTypeConversion.funAddressAdd(dstrWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length - 1);
                //}
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #10
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;      //초기화
            }
        }
コード例 #11
0
ファイル: clsEQPEventDeparture.cs プロジェクト: k2un/k2un
        /// <summary>
        /// Glass APD를 읽어서 파일/구조체에 저장
        /// </summary>
        /// <param name="strLOTID"></param>
        /// <param name="intSlotID"></param>
        private void subGLSAPDRead(string strGLSID, int intSlotID)
        {
            string dstrWriteData   = "";
            string dstrTemp        = "";
            string dstrWordAddress = "W2780";
            string dstrValue       = "";
            string dstrDateTime    = "";
            string dstrReadData    = "";
            int    dintLength      = 0;
            int    dintStartIndex  = 0;


            try
            {
                //LOT이 존재하지 않거나 SlotID가 0이면 에러 로그를 출력하고 빠져나간다.
                if (pInfo.GLSID(strGLSID) == null || intSlotID == 0)
                {
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "subGLSAPDRead: strGlassID:" + strGLSID + ", intSlotID:" + intSlotID.ToString());
                    return;
                }

                ////기본 Data를 구성한다.(6개)
                //dstrTemp = strGLSID;                                                           //LOTID
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(1).Value = dstrTemp;

                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = pInfo.LOTID(strLOTID).Slot(intSlotID).HOSTPPID;                    //PPID
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(2).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = pInfo.LOTID(strLOTID).Slot(intSlotID).H_PANELID;               //H_PANELID
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(3).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = FunStringH.funMakeLengthStringFirst(intSlotID.ToString(), 2);       //SLOTNO
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(4).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = pInfo.LOTID(strLOTID).Slot(intSlotID).STEPID;                  //STEPID
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(5).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //dstrTemp = pInfo.Unit(0).SubUnit(0).EQPState;
                //pInfo.LOTID(strLOTID).Slot(intSlotID).GLSAPD(6).Value = dstrTemp;
                //dstrWriteData = dstrWriteData + dstrTemp + ",";                                 //파일로 쓰기 위해 결합

                //Word를 Block으로 한번에 읽는다.
                dstrReadData = m_pEqpAct.funWordRead(dstrWordAddress, pInfo.All.GLSAPDPLCReadLength * 4, EnuEQP.PLCRWType.Hex_Data).Trim();

                for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).GLSAPDCount; dintLoop++)
                {
                    try
                    {
                        dintLength = pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Length * 4;   //Length에 맞게 자를 문자열 개수를 가져온다.
                        dstrTemp   = dstrReadData.Substring(dintStartIndex, dintLength);     //문자열을 자른다.

                        //if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).HaveMinusValue == false)
                        //{
                        //날짜 데이터일 경우 읽은 값을 4자리로 끊어서 구조체에 저장
                        if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Format.ToUpper() == "YY/MM/DD/HH/MM/SS")
                        {
                            dstrValue = dstrTemp;

                            for (int dintStep = 1; dintStep <= dintLength / 4; dintStep++)
                            {
                                dstrTemp = dstrValue.Substring((dintStep - 1) * 4, 4);                           //문자열을 잘라온다.
                                dstrTemp = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal); //PLC로 읽은 Hex를 10진수(Int)로 변환한다.
                                if (dintStep != 1)
                                {
                                    dstrTemp = FunStringH.funMakeLengthStringFirst(dstrTemp, 2);     //월, 일, 시, 분, 초를 2자리로 맞춘다.
                                }
                                dstrDateTime = dstrDateTime + dstrTemp + "/";
                            }
                            dstrDateTime = dstrDateTime.Substring(0, dstrDateTime.Length - 1);

                            dstrValue    = dstrDateTime;    //최종 변환한 값
                            dstrDateTime = "";              //초기화
                        }
                        else
                        {
                            //2 Word일때 처리
                            if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Length > 1)
                            {
                                if (pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Length == 8)
                                {
                                    string strTemp = "";

                                    for (int dintLoop2 = 0; dintLoop2 < 7; dintLoop2++)
                                    {
                                        string strTemp2 = dstrTemp.Substring(dintLoop2 * 4, 4);
                                        strTemp2 = strTemp2.Substring(2, 2) + strTemp2.Substring(0, 2);
                                        strTemp += FunTypeConversion.funHexConvert(strTemp2, EnuEQP.StringType.ASCString);
                                    }
                                    dstrTemp = strTemp;
                                    //dstrTemp = FunTypeConversion.funHexConvert(strTemp, EnuEQP.StringType.ASCString);
                                }
                                else
                                {
                                    dstrTemp = dstrTemp.Substring(4, 4) + dstrTemp.Substring(0, 4);
                                    dstrTemp = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal);
                                }

                                dstrValue = dstrTemp;           //최종 변환된 값
                            }
                            else
                            {
                                //1 Word임.
                                dstrValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal);      //PLC로 읽은 Hex를 10진수(Int)로 변환한다.
                            }
                        }
                        //}
                        //else
                        //{
                        //    //항목의 값에 음수값이 있는 경우 음수 값 처리
                        //    dstrValue = FunTypeConversion.funPlusMinusAPDCalc(dstrTemp);
                        //}

                        //소수점을 붙인다.
                        dstrValue = CommonAct.FunStringH.funPoint(dstrValue, pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Format);
                    }
                    catch
                    {
                        dstrValue = "0";
                    }
                    finally
                    {
                        pInfo.Unit(0).SubUnit(0).GLSAPD(dintLoop).Value = dstrValue;   //구조체에 저장
                        dstrWriteData = dstrWriteData + dstrValue + ",";               //파일로 쓰기 위해 결합

                        //읽을 Index 증가
                        dintStartIndex = dintStartIndex + dintLength;

                        #region LOTAPD
                        //LOT APD에 data를 저장한다.(후에 LOT APD 보고시 사용)
                        //switch (pInfo.Unit(0).SubUnit(0).LOTAPD(dintLoop).Type)
                        //{
                        //    case "DateTime":
                        //        break;

                        //    case "Other":       //Overwrite함.
                        //        pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //        break;

                        //    case "Boolean":     //하나라도 1인 값이 있으면 1로 설정한다.(0 혹은 1의 값 경우)
                        //        if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "1")
                        //        {
                        //        }
                        //        else
                        //        {
                        //            pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //        }
                        //        break;

                        //    case "Numeric":     //값을 누적한다.

                        //        dstrTemp = pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Name.Substring(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Name.LastIndexOf("_") + 1).ToUpper();

                        //        if (dstrTemp == "MIN")
                        //        {
                        //            if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "")        //첫번째 값이 들어올때는 그 값을 Min으로 한다.
                        //            {
                        //                pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //            }
                        //            else
                        //            {
                        //                //기존의 값 > 새로 들어온값 ---> 새로들오온 값을 Min으로 저장
                        //                if (Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) > Convert.ToSingle(dstrValue))
                        //                {
                        //                    pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //                }
                        //            }
                        //        }
                        //        else if (dstrTemp == "MAX")
                        //        {
                        //            if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "")        //첫번째 값이 들어올때는 그 값을 Max으로 한다.
                        //            {
                        //                pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //            }
                        //            else
                        //            {
                        //                //기존의 값 < 새로 들어온값 ---> 새로들오온 값을 Max으로 저장
                        //                if (Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) < Convert.ToSingle(dstrValue))
                        //                {
                        //                    pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = dstrValue;
                        //                }
                        //            }
                        //        }
                        //        else if (dstrTemp == "AVG")
                        //        {
                        //            if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = "0";

                        //            //기존의 값 + 새로 들어온 값을 계속 더한다.(평균은 subLOTAPDRead()에서 한다.)
                        //            pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = Convert.ToString(Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) + Convert.ToSingle(dstrValue));
                        //        }
                        //        else
                        //        {
                        //            if (pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = "0";

                        //            //기존의 값 + 새로 들어온 값을 계속 더한다.(평균은 subLOTAPDRead()에서 한다.)
                        //            pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = Convert.ToString(Convert.ToSingle(pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) + Convert.ToSingle(dstrValue));
                        //        }

                        //        break;

                        //    //case "Numeric":     //값을 누적한다.
                        //    //    if (m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value == "") m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = "0";

                        //    //    m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value = Convert.ToString(Convert.ToSingle(m_pInfo.LOTID(strLOTID).LOTAPD(dintLoop).Value) + Convert.ToSingle(dstrValue));

                        //    //    break;
                        //}
                        #endregion
                    }
                }

                //마지막의 콤마는 제거
                dstrWriteData = dstrWriteData.Remove(dstrWriteData.Length - 1);

                //파일에 저장
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSPDC, dstrWriteData);

                //HOST로 보고(S6F11, CEID=81, Process Data(GLS))
                pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F13GLSAPD, strGLSID, intSlotID, strGLSID);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString() + ", strGLSID:" + strGLSID + ", intSlotID:" + intSlotID.ToString());
            }
        }
コード例 #12
0
ファイル: tabfrmSetupECID.cs プロジェクト: k2un/k2un
        public void Save()
        {
            bool dbolError = false;
            float fMIN = 0;
            float fECSLL = 0;
            float fECDEF = 0;
            float fECSUL = 0;
            float fMax = 0;
            int dintECID = 0;
            BindingSource pEOIDListSource = new BindingSource();
            string arrECID = "";
            string dstrSQL = "";


            try
            {
                File.Copy(Application.StartupPath + @"\system\System.mdb", Application.StartupPath + @"\system\System.mdb.bak", true);

                try
                {
                    //유효성검사
                    for (int dintLoop = 0; dintLoop < this.dataGridView1.RowCount; dintLoop++)
                    {
                        dintECID = Convert.ToInt32(this.dataGridView1.Rows[dintLoop].Cells[0].Value);
                        fMIN = Convert.ToSingle(dataGridView1[2, dintLoop].Value.ToString());
                        fECSLL = Convert.ToSingle(dataGridView1[4, dintLoop].Value.ToString());
                        fECDEF = Convert.ToSingle(dataGridView1[5, dintLoop].Value.ToString());
                        fECSUL = Convert.ToSingle(dataGridView1[6, dintLoop].Value.ToString());
                        fMax = Convert.ToSingle(dataGridView1[8, dintLoop].Value.ToString());

                        if (fMIN > fECSLL || fECSLL > fECDEF || fECDEF > fECSUL || fECSUL > fMax)
                        {
                            dbolError = true;
                            MessageBox.Show("올바르지 않는 Data가 있습니다!!");
                            break;
                        }

                        //if (dbolError == true)
                        //{
                        //    string dstrErrorMsg = this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).Name + " 의 값은 " + this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL
                        //              + "~" + this.pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL + " 이어야 합니다.";
                        //    MessageBox.Show(dstrErrorMsg, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        //    return;
                        //}

                    }
                    if (dbolError == false)
                    {
                        pInfo.All.ECIDChange.Clear();
                        pInfo.All.ECIDChangeFromHost = "";
                        pInfo.All.ECIDChangeHOSTReport.Clear();

                        //바뀐 EOV 값이 있는지 검사한다.
                        for (int dintLoop = 0; dintLoop < this.dataGridView1.RowCount; dintLoop++)
                        {
                            dintECID = Convert.ToInt32(this.dataGridView1.Rows[dintLoop].Cells[0].Value);
                            fMIN = Convert.ToSingle(dataGridView1[2, dintLoop].Value.ToString());
                            fECSLL = Convert.ToSingle(dataGridView1[4, dintLoop].Value.ToString());
                            fECDEF = Convert.ToSingle(dataGridView1[5, dintLoop].Value.ToString());
                            fECSUL = Convert.ToSingle(dataGridView1[6, dintLoop].Value.ToString());
                            fMax = Convert.ToSingle(dataGridView1[8, dintLoop].Value.ToString());

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

                            if (Convert.ToSingle(CurrentECID.ECWLL) != fECSLL ||Convert.ToSingle( CurrentECID.ECDEF )!= fECDEF || Convert.ToSingle(CurrentECID.ECWUL) != fECSUL)
                            {
                                this.pInfo.All.ECIDChange.Add(dintECID,
                                    FunStringH.funMakePLCData(FunStringH.funMakeRound(fMIN.ToString(), CurrentECID.Format))
                                    + "," + FunStringH.funMakePLCData(FunStringH.funMakeRound(fECSLL.ToString(), CurrentECID.Format))
                                    + "," + FunStringH.funMakePLCData(FunStringH.funMakeRound(fECDEF.ToString(), CurrentECID.Format))
                                    + "," + FunStringH.funMakePLCData(FunStringH.funMakeRound(fECSUL.ToString(), CurrentECID.Format))
                                    + "," + FunStringH.funMakePLCData(FunStringH.funMakeRound(fMax.ToString(), CurrentECID.Format)));
                                this.pInfo.All.ECIDChangeFromHost += dintECID + ";";
                                this.pInfo.All.ECIDChangeHOSTReport.Add(dintECID, fMIN + "," + fECSLL + "," + fECDEF + "," + fECSUL + "," + fMax);
                            }
                        }

                        if (string.IsNullOrEmpty(pInfo.All.ECIDChangeFromHost))
                        {
                            MessageBox.Show("변경된 ECID가 존재하지 않습니다.");
                            pInfo.All.ECIDChange.Clear();
                            pInfo.All.ECIDChangeFromHost = "";
                            pInfo.All.ECIDChangeHOSTReport.Clear();
                            return;
                        }
                        else
                        {
                            pInfo.All.ECIDChangeBYWHO = "2";
                            //arrECID = arrECID.Substring(0, arrECID.Length - 1);
                            pInfo.subPLCCommand_Set(clsInfo.PLCCommand.ECIDChange);
                            MessageBox.Show("PLC에 ECID 변경 요청을 하였습니다.");
                        }
                    }


                    //if (!DBAct.clsDBAct.funBeginTransaction())
                    //{
                    //    MessageBox.Show("DB Transaction NG!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    //    return;
                    //}

                    ////DataAdapter 생성
                    //OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT * FROM tbECID order by ECID", DBAct.clsDBAct.funOleDbConnect());
                    //OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dataAdapter);

                    ////DataAdapter를 이용하여 DB로 업데이트를 한다.
                    //dataAdapter.SelectCommand.Transaction = DBAct.clsDBAct.funOleDbTransaction();
                    //dataAdapter.Update((DataTable)pEOIDListSource.DataSource);

                    //if (!DBAct.clsDBAct.funCommitTransaction())
                    //{
                    //    MessageBox.Show("DB Commit Transaction NG!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    //    DBAct.clsDBAct.funRollbackTransaction();
                    //    return;
                    //}

                    //dstrSQL = "SELECT * FROM tbECID order by ECID";
                    //pInfo.Unit(0).SubUnit(0).RemoveECID();
                    //DataTable dt = DBAct.clsDBAct.funSelectQuery(dstrSQL);
                    //pInfo.AddDataTable("ECID", dt);
                    //pInfo.AddViewEvent(InfoAct.clsInfo.ViewEvent.ECIDUpdate);
                }
                catch (Exception ex)
                {
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
                    DBAct.clsDBAct.funRollbackTransaction();
                    DBAct.clsDBAct.funDisconnect();     // DB 연결을 끊는다.
                    MessageBox.Show("DB Update Fail, Because DB Process Error!", "DB Update Error!",
                                     MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

                ////if (this.pEditMode) subSaveECList();
                ////else subSaveECValue();
                    
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #13
0
ファイル: clsEQPEventArrive.cs プロジェクト: k2un/k2un
        /// <summary>
        /// 설비에서 CIM으로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : strCompBit
        /// parameters[1] : dstrACTVal
        /// parameters[2] : dintActFrom
        /// parameters[3] : dstrACTFromSub
        /// parameters[4] : intBitVal
        /// parameters[5] : Special Parameter
        /// </remarks>
        public void funProcessEQPEvent(string[] parameters)
        {
            string        strCompBit   = parameters[0];
            int           intUnitID    = Convert.ToInt32(parameters[2]);
            int           intSubUnitID = Convert.ToInt32(parameters[3]);
            int           intModuleNo  = Convert.ToInt32(parameters[1]);
            StringBuilder dstrLog      = new StringBuilder();

            string[] dstrValue      = null;
            string   dstrHGLSID     = "";
            string   dstrLOTID      = "";
            int      dintSlotID     = 0;
            string   dstrGlassSize1 = "";
            string   dstrGlassSize2 = "";

            InfoAct.clsSlot dslot           = new InfoAct.clsSlot(0);
            string[]        dstrDataValue   = new string[4]; //MCC Log Data
            int             dintIndex       = 0;
            int             dintPortID      = 0;             //LD/UD 작업 Port
            int             dintJobStart    = 0;
            int             dintJobEnd      = 0;
            bool            dbolXPCStart    = false;
            bool            dbolProcChanged = false;

            InfoAct.clsGLS CurrentGLS;
            string         strMCCData = "";
            //[2015/05/18](Add by HS)
            string dstrWordAddress = "";
            int    nIndex          = 0;

            try
            {
                #region Unit1

                if (intModuleNo == 13 || intModuleNo == 14 || intModuleNo == 15) //ST01
                {
                    try
                    {
                        pInfo.All.RPCPPID = "";
                        if (intModuleNo != 15)
                        {
                            m_pEqpAct.subWordReadSave("W2040", 8, EnuEQP.PLCRWType.ASCII_Data);               //H-Glass(=panel)-ID
                        }
                        else
                        {
                            m_pEqpAct.subWordReadSave("W2380", 8, EnuEQP.PLCRWType.ASCII_Data);               //H-Glass(=panel)-ID
                        }
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //E-Glass(=panel)-ID
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Lot-ID
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Batch-ID
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Job-ID
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Port-ID
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Slot-NO
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Prod-Type
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Prod-Kind
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //ProductID
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Runspec-ID
                        m_pEqpAct.subWordReadSave("", 4, EnuEQP.PLCRWType.ASCII_Data);                        //Layer-ID
                        m_pEqpAct.subWordReadSave("", 4, EnuEQP.PLCRWType.ASCII_Data);                        //Step-ID
                        m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                       //HOST PPID
                        m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                       //Flow-ID

                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                          //Glass(=panel)-Size(하위)         ---->U2 2임.(하위 + Space(1) + 상위)
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                          //Glass(=panel)-Size(상위)         ---->U2 2임.(하위 + Space(1) + 상위)
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                          //Glass-thickness(thickness)
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                          //Glass-State(빈값)

                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Glass-Order
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Comment

                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Use-Count
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Judgement
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Reason-Code
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Inspection-Flag
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Enc-Flag
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Prerun-Flag
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Turn-Dir
                        m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                        //Flip-State
                        m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                        //Work-State
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Multi-Use
                        m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                        //Pair Glass-ID
                        m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                       //Pair PPID

                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name1
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value1
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name2
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value2
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name3
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value3
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name4
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value4
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Name5
                        m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                       //Option Value5


                        //m_pEqpAct.subWordReadSave("", 11, EnuEQP.PLCRWType.Hex_Data);                              //Spare
                        //m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                              //상부 / 하부 작업 진행여부 확인
                        //m_pEqpAct.subWordReadSave("", 156, EnuEQP.PLCRWType.Hex_Data);                              //Spare

                        //m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                              //Job Start
                        //m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                              //Job End



                        //장비에서 GLS Data정보를 한꺼번에 읽는다.
                        dstrValue = m_pEqpAct.funWordReadAction(true);


                        //읽은 GLS Data를 Parsing해서 변수에 저장
                        dslot.H_PANELID    = dstrValue[0].Trim();
                        dslot.E_PANELID    = dstrValue[1].Trim();
                        dslot.LOTID        = dstrValue[2].Trim();
                        dslot.BATCHID      = dstrValue[3].Trim();
                        dslot.JOBID        = dstrValue[4].Trim();
                        dslot.PORTID       = dstrValue[5].Trim();
                        dintPortID         = Convert.ToInt32(FunStringH.funMakeLengthStringFirst(dslot.PORTID, 4).Substring(2, 2));
                        dslot.SlotID       = Convert.ToInt32(dstrValue[6]);
                        dslot.SLOTNO       = dstrValue[6];
                        dslot.PRODUCT_TYPE = dstrValue[7].Trim();
                        dslot.PRODUCT_KIND = dstrValue[8].Trim();
                        dslot.PRODUCTID    = dstrValue[9].Trim();
                        dslot.RUNSPECID    = dstrValue[10].Trim();
                        dslot.LAYERID      = dstrValue[11].Trim();
                        dslot.STEPID       = dstrValue[12].Trim();
                        dslot.HOSTPPID     = dstrValue[13].Trim();
                        dslot.FLOWID       = dstrValue[14].Trim();
                        dstrGlassSize1     = dstrValue[15].Trim();
                        dstrGlassSize2     = dstrValue[16].Trim();
                        dslot.SIZE         = dstrGlassSize1 + " " + dstrGlassSize2;
                        dslot.THICKNESS    = Convert.ToInt32(dstrValue[17]);
                        //dstrValue[18]은 Reserved임. Glass State
                        dslot.GLASS_ORDER = dstrValue[19].Trim();
                        dslot.COMMENT     = dstrValue[20].Trim();
                        dslot.USE_COUNT   = dstrValue[21].Trim();
                        dslot.JUDGEMENT   = dstrValue[22].Trim();
                        dslot.REASON_CODE = dstrValue[23].Trim();
                        dslot.INS_FLAG    = dstrValue[24].Trim();
                        dslot.ENC_FLAG    = dstrValue[25].Trim();
                        dslot.PRERUN_FLAG = dstrValue[26].Trim();
                        dslot.TURN_DIR    = dstrValue[27].Trim();
                        dslot.FLIP_STATE  = dstrValue[28].Trim();
                        dslot.WORK_STATE  = dstrValue[29].Trim();
                        dslot.MULTI_USE   = dstrValue[30].Trim();

                        dslot.PAIR_GLASSID = dstrValue[31].Trim();
                        dslot.PAIR_PPID    = dstrValue[32].Trim();

                        for (int dintLoop = 0; dintLoop <= dslot.OPTION_NAME.Length - 1; dintLoop++)
                        {
                            dslot.OPTION_NAME[dintLoop]  = dstrValue[dintIndex + 33].Trim();
                            dslot.OPTION_VALUE[dintLoop] = dstrValue[dintIndex + 34].Trim();
                            //dslot.OPTION_NAME[dintLoop] = "0";
                            //dslot.OPTION_VALUE[dintLoop] = "0";
                            dintIndex = dintIndex + 2;
                        }

                        dintIndex = 0;


                        //상부, 하부 확인 - ksh  //A3 사용안함
                        //if (dstrValue[44] == "0")
                        //{
                        //    pInfo.All.GlassUpperJobFlag = true;
                        //}
                        //else
                        //{
                        //    pInfo.All.GlassUpperJobFlag = false;
                        //}

                        //dintJobStart = Convert.ToInt32(dstrValue[46]);
                        //dintJobEnd = Convert.ToInt32(dstrValue[47]);

                        //if (dintJobStart == 1) dslot.JOBStart = true;
                        //else dslot.JOBStart = false;

                        //if (dintJobEnd == 1) dslot.JOBEnd = true;
                        //else dslot.JOBEnd = false;

                        dstrLOTID  = dslot.LOTID;
                        dintSlotID = dslot.SlotID;
                        dstrHGLSID = dslot.H_PANELID;

                        if (intModuleNo == 13)
                        {
                            m_pEqpAct.funWordWrite("W1FC0", dslot.H_PANELID.PadRight(16, ' '), EnuEQP.PLCRWType.ASCII_Data);
                        }
                        else if (intModuleNo == 14)
                        {
                            m_pEqpAct.funWordWrite("W1FD0", dslot.H_PANELID.PadRight(16, ' '), EnuEQP.PLCRWType.ASCII_Data);
                        }
                        else
                        {
                            m_pEqpAct.funWordWrite("W1FE0", dslot.H_PANELID.PadRight(16, ' '), EnuEQP.PLCRWType.ASCII_Data);
                        }
                    }
                    catch (Exception ex)
                    {
                        pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
                    }
                    finally
                    {
                        //PLC Req에 대한 CIM의 Confirm Bit를 준다.
                        m_pEqpAct.subSetConfirmBit(strCompBit);
                    }

                    //장비에 GLS In시 읽은 Data를 로그를 남긴다.
                    dstrLog.Append("LOTID:" + dslot.LOTID + ",");
                    dstrLog.Append("SlotID:" + dslot.SlotID + ",");
                    dstrLog.Append("GLS Arrive   -> UnitID:" + intUnitID.ToString() + ",");
                    dstrLog.Append(intUnitID.ToString() + ",");
                    dstrLog.Append("HGLSID:" + dslot.H_PANELID + ",");
                    dstrLog.Append("EGLSID:" + dslot.E_PANELID + ",");
                    dstrLog.Append("BatchID:" + dslot.BATCHID + ",");
                    dstrLog.Append("JobID:" + dslot.JOBID + ",");
                    dstrLog.Append("PortID:" + dslot.PORTID + ",");
                    dstrLog.Append("ProdType:" + dslot.PRODUCT_TYPE + ",");
                    dstrLog.Append("ProdKind:" + dslot.PRODUCT_KIND + ",");
                    dstrLog.Append("ProdID:" + dslot.PRODUCTID + ",");
                    dstrLog.Append("RunspecID:" + dslot.RUNSPECID + ",");
                    dstrLog.Append("LayerID:" + dslot.LAYERID + ",");
                    dstrLog.Append("StepID:" + dslot.STEPID + ",");
                    dstrLog.Append("HOSTPPID:" + dslot.HOSTPPID + ",");
                    dstrLog.Append("FlowID:" + dslot.FLOWID + ",");
                    dstrLog.Append("GlassSize1:" + dstrGlassSize1 + ",");
                    dstrLog.Append("GlassSize2:" + dstrGlassSize2 + ",");
                    dstrLog.Append("Glassthickness:" + dslot.THICKNESS.ToString() + ",");
                    dstrLog.Append("GlassOrder:" + dslot.GLASS_ORDER + ",");
                    dstrLog.Append("Comment:" + dslot.COMMENT + ",");

                    dstrLog.Append("UseCount:" + dslot.USE_COUNT + ",");
                    dstrLog.Append("Judgement:" + dslot.JUDGEMENT + ",");
                    dstrLog.Append("ReasonCode:" + dslot.REASON_CODE + ",");
                    dstrLog.Append("InspectionFlag:" + dslot.INS_FLAG + ",");
                    dstrLog.Append("EncFlag:" + dslot.ENC_FLAG + ",");
                    dstrLog.Append("PrerunFlag:" + dslot.PRERUN_FLAG + ",");
                    dstrLog.Append("TurnDir:" + dslot.TURN_DIR + ",");
                    dstrLog.Append("FlipState:" + dslot.FLIP_STATE + ",");
                    dstrLog.Append("WorkState:" + dslot.WORK_STATE + ",");
                    dstrLog.Append("MultiUse:" + dslot.MULTI_USE + ",");

                    dstrLog.Append("PairGlassID:" + dslot.PAIR_GLASSID + ",");
                    dstrLog.Append("PairPPID:" + dslot.PAIR_PPID + ",");

                    for (int dintLoop = 0; dintLoop <= dslot.OPTION_NAME.Length - 1; dintLoop++)
                    {
                        dstrLog.Append("OptionName" + Convert.ToString(dintLoop + 1) + ":" + dslot.OPTION_NAME[dintLoop] + ",");
                        dstrLog.Append("OptionValue" + Convert.ToString(dintLoop + 1) + ":" + dslot.OPTION_VALUE[dintLoop] + ",");
                    }

                    dstrLog.Append("JobStart:" + dintJobStart.ToString() + ",");
                    dstrLog.Append("JobEnd:" + dintJobEnd.ToString());

                    //pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, dstrLog.ToString());

                    dstrLog.Clear();
                    dstrLog.Append(dslot.GlassID + ",");
                    dstrLog.Append(dslot.SLOTNO + ",");

                    switch (intModuleNo)
                    {
                    case 13:
                        dstrLog.Append("ST01 Glass IN");
                        break;

                    case 14:
                        dstrLog.Append("ST02 Glass IN");
                        break;

                    case 15:
                        dstrLog.Append("GL01 Glass IN");
                        break;
                    }
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, dstrLog.ToString());

                    //LOT의 첫번째 GLS이면 LOT정보를 생성한다.
                    //if (pInfo.LOTID(dslot.LOTID) == null) subCreateLOTInfo(dslot.LOTID, dintJobStart);
                    if (pInfo.GLSID(dslot.H_PANELID) == null)
                    {
                        pInfo.AddGLS(dslot.H_PANELID);
                    }

                    pInfo.GLSID(dslot.H_PANELID).CopyFrom(dslot);

                    CurrentGLS = pInfo.GLSID(dslot.H_PANELID);

                    ////GLS Data를 구조체에 저장
                    //InfoAct.clsSlot currentSlot = pInfo.LOTID(dstrLOTID).Slot(dintSlotID);
                    //currentSlot.CopyFrom(dslot);

                    CurrentGLS.StartTime   = DateTime.Now.ToString("yyyyMMddHHmmss");
                    CurrentGLS.GLASS_STATE = 3;      //Processing

                    //pInfo.LOTID(dstrLOTID).InCount += 1;   //LOT의 GLS개수 증가

                    if (pInfo.Unit(0).SubUnit(0).AddCurrGLS(CurrentGLS.H_PANELID) == true)
                    {
                        InfoAct.clsGLS curGLS = pInfo.Unit(0).SubUnit(0).CurrGLS(CurrentGLS.H_PANELID);
                        curGLS.H_PANELID = CurrentGLS.H_PANELID;
                        curGLS.SlotID    = CurrentGLS.SlotID;
                        pInfo.Unit(0).SubUnit(0).GLSExist = true;
                    }

                    if (pInfo.Unit(intUnitID).SubUnit(0).AddCurrGLS(CurrentGLS.H_PANELID) == true)
                    {
                        InfoAct.clsGLS curGLS = pInfo.Unit(intUnitID).SubUnit(0).CurrGLS(CurrentGLS.H_PANELID);
                        curGLS.H_PANELID = CurrentGLS.H_PANELID;
                        curGLS.SlotID    = CurrentGLS.SlotID;
                        pInfo.Unit(intUnitID).SubUnit(0).GLSExist = true;
                    }

                    if (pInfo.Unit(intUnitID).SubUnit(intSubUnitID).AddCurrGLS(CurrentGLS.H_PANELID) == true)
                    {
                        InfoAct.clsGLS curGLS = pInfo.Unit(intUnitID).SubUnit(intSubUnitID).CurrGLS(CurrentGLS.H_PANELID);
                        curGLS.H_PANELID = CurrentGLS.H_PANELID;
                        curGLS.SlotID    = CurrentGLS.SlotID;
                        pInfo.Unit(intUnitID).SubUnit(intSubUnitID).GLSExist = true;
                    }

                    string dstrOLDHOSTPPID = "";
                    string dstrNEWHOSTPPID = "";
                    if (pInfo.EQP("Main").DummyPLC == false)
                    {
                        if (pInfo.Unit(0).SubUnit(0).HOSTPPID(CurrentGLS.HOSTPPID) == null)
                        {
                            pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "Arrive HostPPID Null!! HostPPID : " + CurrentGLS.HOSTPPID);
                        }

                        dstrOLDHOSTPPID           = pInfo.All.CurrentHOSTPPID; //이전 PPID 백업
                        dstrNEWHOSTPPID           = CurrentGLS.HOSTPPID;
                        pInfo.All.CurrentHOSTPPID = dstrNEWHOSTPPID;           //변경된 HOSTPPID를 입력
                        pInfo.All.CurrentEQPPPID  = pInfo.Unit(0).SubUnit(0).HOSTPPID(dstrNEWHOSTPPID).EQPPPID;
                    }

                    if (pInfo.All.EQPSpecifiedCtrlBYWHO == "1")// || pInfo.All.EQPSpecifiedCtrlBYWHO == "2")
                    {
                        //HOST나 OP에서 발생한것임
                    }
                    else
                    {
                        pInfo.All.EQPSpecifiedCtrlBYWHO = "2"; //BY EQP
                    }


                    //wordwrite시점은 MCC로 정보를 보내기전으로...
                    //MCC로 메세지 전송후 보내면 MCC에서 Data 읽을때 이전Data를 읽을 수 있음.
                    string dstrMCCWordAddress = "W1D00";
                    dstrMCCWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrMCCWordAddress, 64 * (intModuleNo - 13));
                    string strGlassData = "";
                    strGlassData += m_pEqpAct.funWordWriteString(4, CurrentGLS.STEPID.PadRight(4, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(28, CurrentGLS.H_PANELID.PadRight(28, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(8, CurrentGLS.LOTID.PadRight(8, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(10, CurrentGLS.HOSTPPID.PadRight(10, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, CurrentGLS.SLOTNO, EnuEQP.PLCRWType.Int_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, "0", EnuEQP.PLCRWType.Int_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, "1", EnuEQP.PLCRWType.Int_Data);

                    m_pEqpAct.funWordWrite(dstrMCCWordAddress, strGlassData, EnuEQP.PLCRWType.Hex_Data);



                    DateTime dt = DateTime.Now;
                    strMCCData = "";

                    if (dstrOLDHOSTPPID != dstrNEWHOSTPPID)
                    {
                        //CEID=131보고
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11EquipmentSpecifiedControlEvent, 131, dstrOLDHOSTPPID, dstrNEWHOSTPPID);

                        //[2015/04/23]MCC Event Log(Add by HS)
                        strMCCData  = "EVENT;";
                        strMCCData += "CEID_131" + ",";
                        strMCCData += pInfo.Unit(intUnitID).SubUnit(intSubUnitID).ModuleID + ",";
                        strMCCData += CurrentGLS.STEPID + ",";
                        strMCCData += CurrentGLS.H_PANELID + ",";
                        strMCCData += CurrentGLS.LOTID + ",";
                        strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ",";
                        strMCCData += dstrOLDHOSTPPID + ",";
                        strMCCData += dstrNEWHOSTPPID + ";";

                        pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData);
                    }

                    if (pInfo.EQP("Main").EQPID.Contains("A3GLM")) //하부 라미시나리오
                    {
                        if (intModuleNo == 15)
                        {
                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, 0, dslot.H_PANELID, dslot.SlotID);

                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                            //pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                        }
                        else
                        {
                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                            //[2015/04/23]MCC Event Log(Add by HS)
                            strMCCData  = "EVENT;";
                            strMCCData += "CEID_16" + ",";
                            strMCCData += pInfo.Unit(intUnitID).SubUnit(intSubUnitID).ModuleID + ",";
                            strMCCData += CurrentGLS.STEPID + ",";
                            strMCCData += CurrentGLS.H_PANELID + ",";
                            strMCCData += CurrentGLS.LOTID + ",";
                            strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ";";

                            pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData);
                        }
                    }
                    else//상부 라미 시나리오
                    {
                        //Layer1 보고(CEID=16, PANEL PROCESS START for MODULE)
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, 0, dslot.H_PANELID, dslot.SlotID);

                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 16, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, intUnitID, intSubUnitID, dslot.H_PANELID, dslot.SlotID);
                        //[2015/04/23]MCC Event Log(Add by HS)
                        strMCCData += "EVENT;";
                        strMCCData += "CEID_16" + ",";
                        strMCCData += pInfo.Unit(intUnitID).SubUnit(intSubUnitID).ModuleID + ",";
                        strMCCData += CurrentGLS.STEPID + ",";
                        strMCCData += CurrentGLS.H_PANELID + ",";
                        strMCCData += CurrentGLS.LOTID + ",";
                        strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ";";

                        pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData);
                    }


                    // 20130220 이상창.. 여기가 위치가맞나..?
                    // 상태 변경 후에 보고하도록 변경해야하나..?
                    #region "Process Step"
                    string dstrModuleID = pInfo.Unit(intUnitID).SubUnit(0).ModuleID;

                    //foreach (InfoAct.clsProcessStep tmpProcStep in this.pInfo.Unit(0).SubUnit(0).ProcessStepValues())
                    //{
                    //    if (dstrModuleID.Equals(tmpProcStep.StartModuleID) || dstrModuleID.Equals(tmpProcStep.EndModuleID))
                    //    {
                    //        if (tmpProcStep.ProcessEvent.ToUpper().Equals("START"))
                    //        {
                    //            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, 0, dslot.LOTID, dslot.SlotID);
                    //        }
                    //    }

                    //    if (!dbolProcChanged && dstrModuleID.Equals(tmpProcStep.StartModuleID))
                    //    {
                    //        if (pInfo.Unit(0).SubUnit(0).CurrGLS(currentSlot.H_PANELID) != null)
                    //        {
                    //            currentSlot.StepNo_OLD = currentSlot.StepNo;
                    //            currentSlot.StepNo = tmpProcStep.StepNO;
                    //        }

                    //        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedProcessStatusEvent, 23, 0, dslot.LOTID, dslot.SlotID);
                    //        //break;

                    //        dbolProcChanged = true;
                    //    }
                    //}

                    #endregion

                    //2012.11.06 김영식...  Normal/APC/RPC/PPC Start 여부 판정하여 CIM Event 처리
                    // 20121212 lsc
                    if (this.pInfo.Unit(0).SubUnit(0).EOID(this.pInfo.funGetEOIDNameToIndex("RPC")).EOV == 1 && pInfo.RPC(dslot.H_PANELID) != null)
                    {
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S16F131RPCStart, dstrHGLSID);
                        pInfo.All.RPCDBUpdateCheck = true;
                        CurrentGLS.IsRPCRunning    = true;
                        dbolXPCStart      = true;
                        pInfo.All.RPCPPID = pInfo.RPC(dstrHGLSID).RPC_PPID;

                        if (pInfo.APC(dslot.H_PANELID) != null)
                        {
                            pInfo.APC(dslot.H_PANELID).State = "2";
                            pInfo.subProcessDataStatusSet(InfoAct.clsInfo.ProcessDataType.APC, dstrHGLSID);
                        }
                    }

                    else if (this.pInfo.Unit(0).SubUnit(0).EOID(this.pInfo.funGetEOIDNameToIndex("APC")).EOV == 1 && pInfo.APC(dslot.H_PANELID) != null)
                    {
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S16F111APCStart, dstrHGLSID);
                        CurrentGLS.IsAPCRunning = true;
                        dbolXPCStart            = true;
                    }

                    if (dbolXPCStart == false)
                    {
                        //pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.NormalStart, dstrHGLSID);
                    }

                    //unit별로 현재 Glass ID 저장
                    pInfo.Unit(intUnitID).SubUnit(0).HGLSID            = dslot.H_PANELID;
                    pInfo.Unit(intUnitID).SubUnit(intSubUnitID).HGLSID = dslot.H_PANELID;
                    pInfo.Unit(intUnitID).SubUnit(0).GLSExist          = true;
                }
                #endregion
                #region Film구간
                else
                {
                    int dintDEPUnitID = 0;
                    switch (intModuleNo)
                    {
                    case 7:     //FT01
                        dstrWordAddress = "W22C0";
                        break;

                    case 9:     //AL01
                        dstrWordAddress = "W2300";
                        break;

                    case 10:     //LM01
                        dstrWordAddress = "W2320";
                        break;

                    case 11:     //DM01
                        dstrWordAddress = "W2340";
                        break;

                    case 12:     //IS01
                        dstrWordAddress = "W2360";
                        break;

                    case 8:     //FT02
                        dstrWordAddress = "W22E0";
                        break;
                    }

                    if (string.IsNullOrEmpty(dstrWordAddress))
                    {
                        return;
                    }

                    m_pEqpAct.subWordReadSave(dstrWordAddress, 8, EnuEQP.PLCRWType.ASCII_Data);       // LOTID
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      // SlotID

                    string dstrproIDWordAddress = "W16B3";

                    string strPROID = m_pEqpAct.funWordRead(dstrproIDWordAddress, 8, EnuEQP.PLCRWType.ASCII_Data); //20160407 KEUN

                    dstrWordAddress = "W1680";
                    string strFilmID = m_pEqpAct.funWordRead(dstrWordAddress, 50, EnuEQP.PLCRWType.ASCII_Data);//1605023 keun strLotID -> strFilmID로 수정.

                    dstrValue = m_pEqpAct.funWordReadAction(true);

                    m_pEqpAct.subSetConfirmBit(strCompBit);

                    if (dstrValue[0].Length > 13)
                    {
                        dstrValue[0] = dstrValue[0].Substring(0, 13);
                    }
                    dstrLOTID  = dstrValue[0].Trim();
                    dintSlotID = Convert.ToInt32(dstrValue[1].Trim());

                    dstrLog.Append("FilmID:" + strFilmID + ",");//1605023 keun strLotID -> strFilmID로 수정.
                    dstrLog.Append("SlotID:" + dintSlotID + ",");
                    dstrLog.Append("Film Arrive   -> UnitID:" + intUnitID.ToString() + ",");
                    dstrLog.Append(intUnitID.ToString());
                    //this.pInfo.subLog_Set(InfoAct.clsInfo.LogType.GLSInOut, dstrLog.ToString());

                    if (this.pInfo.LOTID(dstrLOTID) == null)
                    {
                        subCreateLOTInfo(dstrLOTID, 0);
                    }

                    if (pInfo.LOTID(dstrLOTID).Slot(dintSlotID) == null)
                    {
                        pInfo.LOTID(dstrLOTID).AddSlot(dintSlotID);
                        pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, string.Format("Slot No Error!! AddSlot!! LotID : {0}, SlotNo : {1}", dstrLOTID, dintSlotID));
                    }
                    if (string.IsNullOrEmpty(pInfo.LOTID(dstrLOTID).Slot(dintSlotID).GlassID))
                    {
                        pInfo.LOTID(dstrLOTID).Slot(dintSlotID).GlassID   = strFilmID.Trim();
                        pInfo.LOTID(dstrLOTID).Slot(dintSlotID).USE_COUNT = dintSlotID.ToString().PadLeft(3, '0');
                        //pInfo.LOTID(dstrLOTID).Slot(dintSlotID).PRODUCTID = dstrLOTID;
                        pInfo.LOTID(dstrLOTID).Slot(dintSlotID).PRODUCTID = strPROID;  //160407 KEUN
                    }

                    //dstrHGLSID = this.pInfo.LOTID(dstrLOTID).Slot(dintSlotID).H_PANELID;
                    pInfo.Unit(intUnitID).SubUnit(0).FilmID    = strFilmID; //1605023 keun strLotID -> strFilmID로 수정.
                    pInfo.Unit(intUnitID).SubUnit(0).FilmCount = dintSlotID;
                    pInfo.LOTID(dstrLOTID).Slot(dintSlotID).FilmExistUnitID = intUnitID;
                    pInfo.Unit(intUnitID).SubUnit(0).FilmExist = true;

                    pInfo.Unit(intUnitID).SubUnit(intSubUnitID).FilmID      = strFilmID; //1605023 keun strLotID -> strFilmID로 수정.
                    pInfo.Unit(intUnitID).SubUnit(intSubUnitID).FilmCount   = dintSlotID;
                    pInfo.LOTID(dstrLOTID).Slot(dintSlotID).FilmExistUnitID = intUnitID;
                    pInfo.Unit(intUnitID).SubUnit(intSubUnitID).FilmExist   = true;

                    //wordwrite시점은 MCC로 정보를 보내기전으로...
                    //MCC로 메세지 전송후 보내면 MCC에서 Data 읽을때 이전Data를 읽을 수 있음.
                    string dstrMCCWordAddress = "W1B80";
                    dstrMCCWordAddress = CommonAct.FunTypeConversion.funAddressAdd(dstrMCCWordAddress, 64 * (intModuleNo - 7));
                    string strGlassData = "";
                    strGlassData += m_pEqpAct.funWordWriteString(4, "0000", EnuEQP.PLCRWType.ASCII_Data);//임시
                    strGlassData += m_pEqpAct.funWordWriteString(28, pInfo.LOTID(dstrLOTID).Slot(dintSlotID).GlassID.PadRight(28, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(8, dstrLOTID.PadRight(8, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(10, pInfo.All.CurrentHOSTPPID.PadRight(10, ' '), EnuEQP.PLCRWType.ASCII_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, dintSlotID.ToString(), EnuEQP.PLCRWType.Int_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, "0", EnuEQP.PLCRWType.Int_Data);
                    strGlassData += m_pEqpAct.funWordWriteString(1, "1", EnuEQP.PLCRWType.Int_Data);

                    m_pEqpAct.funWordWrite(dstrMCCWordAddress, strGlassData, EnuEQP.PLCRWType.Hex_Data);

                    if (intModuleNo == 7)
                    {
                        //this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.FilmJobCommand, 1006, dintPortID);     //Lot Start 지시
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedJobProcess, 1006, 2, 1, 2, dstrLOTID, dintSlotID);
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11MaterialProcEvent, 1016, intModuleNo, dstrLOTID, dintSlotID, intUnitID, 0);
                    }
                    pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11MaterialProcEvent, 1016, intModuleNo, dstrLOTID, dintSlotID, intUnitID, intSubUnitID);

                    //[2015/05/15]MCC Event Log(Add by HS)
                    InfoAct.clsSlot CurrentSlot = pInfo.LOTID(dstrLOTID).Slot(dintSlotID);

                    strMCCData  = "EVENT;";
                    strMCCData += "CEID_1016" + ",";
                    strMCCData += pInfo.Unit(intUnitID).SubUnit(intSubUnitID).ModuleID + ",";
                    strMCCData += CurrentSlot.STEPID + ",";
                    strMCCData += CurrentSlot.H_PANELID + ",";
                    strMCCData += CurrentSlot.LOTID + ",";
                    strMCCData += pInfo.All.CurrentHOSTPPID + "=" + pInfo.All.CurrentEQPPPID + ";";

                    pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.MCCDataSend, strMCCData);

                    // 20130220 이상창.. 여기가 위치가맞나..?
                    // 상태 변경 후에 보고하도록 변경해야하나..?
                    #region "Process Step - 생략"
                    //string dstrModuleID = pInfo.Unit(intUnitID).SubUnit(0).ModuleID;

                    //foreach (InfoAct.clsProcessStep tmpProcStep in this.pInfo.Unit(0).SubUnit(0).ProcessStepValues())
                    //{
                    //    if(dstrModuleID.Equals(tmpProcStep.StartModuleID) || dstrModuleID.Equals(tmpProcStep.EndModuleID))
                    //    {
                    //        if (tmpProcStep.ProcessEvent.ToUpper().Equals("START"))
                    //        {
                    //            pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedPanelProcessEvent, 26, 0, currentSlot.LOTID, currentSlot.SlotID);
                    //        }
                    //    }

                    //    if (!dbolProcChanged && dstrModuleID.Equals(tmpProcStep.StartModuleID))
                    //    {
                    //        if (pInfo.Unit(0).SubUnit(0).CurrGLS(currentSlot.H_PANELID) != null)
                    //        {
                    //            currentSlot.StepNo_OLD = currentSlot.StepNo;
                    //            currentSlot.StepNo = tmpProcStep.StepNO;
                    //        }

                    //        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedProcessStatusEvent, 23, 0, currentSlot.LOTID, currentSlot.SlotID);
                    //        //break;

                    //        dbolProcChanged = true;
                    //    }
                    //}

                    #endregion
                }
                #endregion
            }
            catch (Exception ex)
            {
                pInfo.All.RPCPPID = "";
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #14
0
ファイル: clsS2F15.cs プロジェクト: k2un/k2un
        /// <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;
            }
        }
コード例 #15
0
ファイル: clsEQPEventPPIDCreate.cs プロジェクト: k2un/k2un
        /// <summary>
        /// 설비에서 CIM으로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : strCompBit
        /// parameters[1] : dstrACTVal
        /// parameters[2] : dintActFrom
        /// parameters[3] : dstrACTFromSub
        /// parameters[4] : intBitVal
        /// parameters[5] : Special Parameter
        /// </remarks>
        public void funProcessEQPEvent(string[] parameters)
        {
            string strCompBit = parameters[0];

            StringBuilder dstrLog        = new StringBuilder();
            string        dstrEQPPPID    = "";
            int           dintPPIDType   = 0;
            string        dstrTemp       = "";
            string        strWordAddress = "";

            try
            {
                dstrEQPPPID  = m_pEqpAct.funWordRead("W2540", 1, EnuEQP.PLCRWType.Int_Data);
                dintPPIDType = 1;
                pInfo.Unit(0).SubUnit(0).RemoveEQPPPID(dstrEQPPPID);
                #region 수정 전
                //strWordAddress = "W254C";
                //if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true)
                //{
                //    for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                //    {
                //        //EQPPPID에 Body 저장
                //        if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true)
                //        {
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                //            if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2)
                //            {
                //                dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                //                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                //            }
                //            else
                //            {
                //                dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data);
                //                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                //            }
                //            strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);
                //        }
                //    }
                //}
                #endregion

                #region 수정 후
                int    dintReadcount  = (pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5) * 2;
                string dstrReadData   = "";
                int    dintLength     = 0;
                string strValue       = "";
                int    dintStartIndex = 0;
                strWordAddress = "W254C";
                if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true)
                {
                    //if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBodyCount == 0)
                    //{
                    //[2015/04/20] PPID Body 값 Block으로 한번에(Add by HS)
                    dstrReadData = m_pEqpAct.funWordRead("W254C", dintReadcount, EnuEQP.PLCRWType.Hex_Data, false).Trim();
                    #region EQPPPID에 Body 저장
                    for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5; dintLoop++)
                    {
                        if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true)
                        {
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range    = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode  = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                            dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 4;   //Length에 맞게 자를 문자열 개수를 가져온다.
                            dstrTemp   = dstrReadData.Substring(dintStartIndex, dintLength);

                            if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length > 1)
                            {
                                string dstrTemp1 = dstrTemp.Substring(0, 4);
                                string dstrTemp2 = dstrTemp.Substring(4, 4);
                                dstrTemp = dstrTemp2 + dstrTemp1;

                                strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal);
                                dstrTemp = FunStringH.funPoint(strValue, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                            }
                            else
                            {
                                strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.ASCString);
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = strValue;
                            }

                            dintStartIndex += dintLength;

                            #region 변경전 [2015.04.20] Modify by HS
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                            //if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2)
                            //{
                            //    dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                            //    pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                            //}
                            //else
                            //{
                            //    dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data);
                            //    pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                            //}
                            //strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);
                            #endregion
                        }
                    }
                    #endregion

                    strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, dintReadcount);

                    dstrReadData   = m_pEqpAct.funWordRead(strWordAddress, 80, EnuEQP.PLCRWType.ASCII_Data, false);
                    dintStartIndex = 0;
                    #region EQPPPID에 Film Code 저장
                    for (int dintLoop = 251; dintLoop <= 255; dintLoop++)
                    {
                        if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true)
                        {
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range    = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode  = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                            dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 2;   //Length에 맞게 자를 문자열 개수를 가져온다.
                            dstrTemp   = dstrReadData.Substring(dintStartIndex, dintLength);


                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp.Trim();
                        }

                        dintStartIndex += dintLength;
                    }
                    #endregion
                    //}
                }
                #endregion

                //PLC Req에 대한 CIM의 Confirm Bit를 준다.
                m_pEqpAct.subSetConfirmBit(strCompBit);

                switch (dintPPIDType)
                {
                case 1:             //EQP PPID
                    //Parameter.log에 로그 출력
                    m_pEqpAct.subSetParameterLog("EQP PPID 생성", "", null, dstrEQPPPID, dstrEQPPPID);

                    int[]  arrData = new int[16];
                    string strData = "";
                    if (pInfo.EQP("Main").DummyPLC)
                    {
                        foreach (string strEQPPID in pInfo.Unit(0).SubUnit(0).EQPPPID())
                        {
                            arrData[Convert.ToInt32(strEQPPID) - 1] = 1;
                        }

                        for (int dintLoop = 16; dintLoop > 0; dintLoop--)
                        {
                            strData += arrData[dintLoop - 1].ToString();
                        }

                        strData = CommonAct.FunTypeConversion.funBinConvert(strData, EnuEQP.StringType.Hex);
                        m_pEqpAct.funWordWrite("W2A00", strData, EnuEQP.PLCRWType.Hex_Data);
                    }

                    pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, "1", "1", "", dstrEQPPPID);
                    break;
                }

                //최종 수정된 날짜 Ini에 변경
                FunINIMethod.subINIWriteValue("ETCInfo", "RECIPELastModified", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), pInfo.All.SystemINIFilePath);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #16
0
        /// <summary>
        /// 설비에서 CIM으로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : strCompBit
        /// parameters[1] : dstrACTVal
        /// parameters[2] : dintActFrom
        /// parameters[3] : dstrACTFromSub
        /// parameters[4] : intBitVal
        /// parameters[5] : Special Parameter
        /// </remarks>
        public void funProcessEQPEvent(string[] parameters)
        {
            string strCompBit = parameters[0];
            //int intUnitID = Convert.ToInt32(parameters[2]);
            StringBuilder dstrLog = new StringBuilder();

            string[] dstrValue      = null;
            string   dstrHGLSID     = "";
            string   dstrLOTID      = "";
            int      dintSlotID     = 0;
            string   dstrGlassSize1 = "";
            string   dstrGlassSize2 = "";

            InfoAct.clsSlot dslot         = new InfoAct.clsSlot(0);
            string[]        dstrDataValue = new string[4]; //MCC Log Data

            int dintIndex = 0;

            int dintPortID = 0;     //LD/UD 작업 Port

            int dintJobStart = 0;
            int dintJobEnd   = 0;

            bool dbolXPCStart = false;

            bool dbolProcChanged = false;

            try
            {
                try
                {
                    m_pEqpAct.subWordReadSave("W2040", 8, EnuEQP.PLCRWType.ASCII_Data);               //H-Glass(=panel)-ID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //E-Glass(=panel)-ID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Lot-ID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Batch-ID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Job-ID
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Port-ID
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Slot-NO
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Prod-Type
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Prod-Kind
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //ProductID
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Runspec-ID
                    m_pEqpAct.subWordReadSave("", 4, EnuEQP.PLCRWType.ASCII_Data);                    //Layer-ID
                    m_pEqpAct.subWordReadSave("", 4, EnuEQP.PLCRWType.ASCII_Data);                    //Step-ID
                    m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                   //HOST PPID
                    m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                   //Flow-ID

                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Glass(=panel)-Size(하위)         ---->U2 2임.(하위 + Space(1) + 상위)
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Glass(=panel)-Size(상위)         ---->U2 2임.(하위 + Space(1) + 상위)
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Glass-thickness(thickness)
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Glass-State(빈값)

                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Glass-Order
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Comment

                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Use-Count
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Judgement
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Reason-Code
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Inspection-Flag
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Enc-Flag
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Prerun-Flag
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Turn-Dir
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.ASCII_Data);                    //Flip-State
                    m_pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.ASCII_Data);                    //Work-State
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Multi-Use
                    m_pEqpAct.subWordReadSave("", 8, EnuEQP.PLCRWType.ASCII_Data);                    //Pair Glass-ID
                    m_pEqpAct.subWordReadSave("", 10, EnuEQP.PLCRWType.ASCII_Data);                   //Pair PPID

                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name1
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value1
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name2
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value2
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name3
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value3
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name4
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value4
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Name5
                    m_pEqpAct.subWordReadSave("", 20, EnuEQP.PLCRWType.ASCII_Data);                   //Option Value5

                    m_pEqpAct.subWordReadSave("", 168, EnuEQP.PLCRWType.Hex_Data);                    //Spare

                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Job Start
                    m_pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //Job End

                    //장비에서 GLS Data정보를 한꺼번에 읽는다.
                    dstrValue = m_pEqpAct.funWordReadAction(true);


                    //읽은 GLS Data를 Parsing해서 변수에 저장
                    dslot.H_PANELID    = dstrValue[0].Trim();
                    dslot.E_PANELID    = dstrValue[1].Trim();
                    dslot.LOTID        = dstrValue[2].Trim();
                    dslot.BATCHID      = dstrValue[3].Trim();
                    dslot.JOBID        = dstrValue[4].Trim();
                    dslot.PORTID       = dstrValue[5].Trim();
                    dintPortID         = Convert.ToInt32(FunStringH.funMakeLengthStringFirst(dslot.PORTID, 4).Substring(2, 2));
                    dslot.SlotID       = Convert.ToInt32(dstrValue[6]);
                    dslot.SLOTNO       = dstrValue[6];
                    dslot.PRODUCT_TYPE = dstrValue[7].Trim();
                    dslot.PRODUCT_KIND = dstrValue[8].Trim();
                    dslot.PRODUCTID    = dstrValue[9].Trim();
                    dslot.RUNSPECID    = dstrValue[10].Trim();
                    dslot.LAYERID      = dstrValue[11].Trim();
                    dslot.STEPID       = dstrValue[12].Trim();
                    dslot.HOSTPPID     = dstrValue[13].Trim();
                    dslot.FLOWID       = dstrValue[14].Trim();
                    dstrGlassSize1     = dstrValue[15].Trim();
                    dstrGlassSize2     = dstrValue[16].Trim();
                    dslot.SIZE         = dstrGlassSize1 + " " + dstrGlassSize2;
                    dslot.THICKNESS    = Convert.ToInt32(dstrValue[17]);
                    //dstrValue[18]은 Reserved임. Glass State
                    dslot.GLASS_ORDER = dstrValue[19].Trim();
                    dslot.COMMENT     = dstrValue[20].Trim();
                    dslot.USE_COUNT   = dstrValue[21].Trim();
                    dslot.JUDGEMENT   = dstrValue[22].Trim();
                    dslot.REASON_CODE = dstrValue[23].Trim();
                    dslot.INS_FLAG    = dstrValue[24].Trim();
                    dslot.ENC_FLAG    = dstrValue[25].Trim();
                    dslot.PRERUN_FLAG = dstrValue[26].Trim();
                    dslot.TURN_DIR    = dstrValue[27].Trim();
                    dslot.FLIP_STATE  = dstrValue[28].Trim();
                    dslot.WORK_STATE  = dstrValue[29].Trim();
                    dslot.MULTI_USE   = dstrValue[30].Trim();

                    dslot.PAIR_GLASSID = dstrValue[31].Trim();
                    dslot.PAIR_PPID    = dstrValue[32].Trim();

                    for (int dintLoop = 0; dintLoop <= dslot.OPTION_NAME.Length - 1; dintLoop++)
                    {
                        dslot.OPTION_NAME[dintLoop]  = dstrValue[dintIndex + 33].Trim();
                        dslot.OPTION_VALUE[dintLoop] = dstrValue[dintIndex + 34].Trim();
                        //dslot.OPTION_NAME[dintLoop] = "0";
                        //dslot.OPTION_VALUE[dintLoop] = "0";
                        dintIndex = dintIndex + 2;
                    }

                    dintIndex = 0;

                    dintJobStart = Convert.ToInt32(dstrValue[44]);
                    dintJobEnd   = Convert.ToInt32(dstrValue[45]);

                    if (dintJobStart == 1)
                    {
                        dslot.JOBStart = true;
                    }
                    else
                    {
                        dslot.JOBStart = false;
                    }

                    if (dintJobEnd == 1)
                    {
                        dslot.JOBEnd = true;
                    }
                    else
                    {
                        dslot.JOBEnd = false;
                    }

                    dstrLOTID  = dslot.LOTID;
                    dintSlotID = dslot.SlotID;
                    dstrHGLSID = dslot.H_PANELID;
                    pInfo.All.DataCheckGLSID = dstrHGLSID;
                    pInfo.All.HostPPID       = dstrValue[13].Trim();
                }
                catch (Exception ex)
                {
                    pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
                }
                finally
                {
                    //PLC Req에 대한 CIM의 Confirm Bit를 준다.
                    m_pEqpAct.subSetConfirmBit(strCompBit);
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString() + ", dstrLOTID:" + dstrLOTID + ", dintSlotID: " + dintSlotID.ToString());
            }
        }
コード例 #17
0
        /// <summary>
        /// 설비에서 CIM으로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : strCompBit
        /// parameters[1] : dstrACTVal
        /// parameters[2] : dintActFrom
        /// parameters[3] : dstrACTFromSub
        /// parameters[4] : intBitVal
        /// parameters[5] : Special Parameter
        /// </remarks>
        public void funProcessEQPEvent(string[] parameters)
        {
            string strCompBit = parameters[0];

            StringBuilder dstrLog        = new StringBuilder();
            string        dstrEQPPPID    = "";
            int           dintPPIDType   = 0;
            string        dstrTemp       = "";
            string        strWordAddress = "";

            try
            {
                //m_pEqpAct.subWordReadSave("W2040", 10, EnuEQP.PLCRWType.ASCII_Data);    //HOST PPID
                dstrEQPPPID  = m_pEqpAct.funWordRead("W2540", 1, EnuEQP.PLCRWType.Int_Data);
                dintPPIDType = 1;
                #region 수정 전
                //pInfo.Unit(0).SubUnit(0).RemoveEQPPPID(dstrEQPPPID);
                //strWordAddress = "W254C";
                //if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true)
                //{
                //    for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount; dintLoop++)
                //    {
                //        //EQPPPID에 Body 저장
                //        if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true)
                //        {
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                //            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;
                //            if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2)
                //            {
                //                dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                //                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                //            }
                //            else
                //            {
                //                dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data);
                //                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                //            }
                //            strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);
                //        }
                //    }
                //}
                # endregion
                #region 수정 후
                int    dintReadcount  = (pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5) * 2;
                string dstrReadData   = "";
                int    dintLength     = 0;
                string strValue       = "";
                int    dintStartIndex = 0;
                strWordAddress = "W254C";
                if (pInfo.Unit(0).SubUnit(0).AddEQPPPID(dstrEQPPPID) == true)
                {
                    //if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBodyCount == 0)
                    //{
                    //[2015/04/20] PPID Body 값 Block으로 한번에(Add by HS)
                    dstrReadData = m_pEqpAct.funWordRead("W254C", dintReadcount, EnuEQP.PLCRWType.Hex_Data, false).Trim();
                    #region EQPPPID에 Body 저장
                    for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).PPIDBodyCount - 5; dintLoop++)
                    {
                        if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true)
                        {
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range    = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode  = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                            dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 4;       //Length에 맞게 자를 문자열 개수를 가져온다.
                            dstrTemp   = dstrReadData.Substring(dintStartIndex, dintLength);

                            if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length > 1)
                            {
                                string dstrTemp1 = dstrTemp.Substring(0, 4);
                                string dstrTemp2 = dstrTemp.Substring(4, 4);
                                dstrTemp = dstrTemp2 + dstrTemp1;

                                strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.Decimal);
                                dstrTemp = FunStringH.funPoint(strValue, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                            }
                            else
                            {
                                strValue = FunTypeConversion.funHexConvert(dstrTemp, EnuEQP.StringType.ASCString);
                                pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = strValue;
                            }

                            dintStartIndex += dintLength;

                            #region 변경전 [2015.04.20] Modify by HS
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                            //pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                            //if (pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length == 2)
                            //{
                            //    dstrTemp = FunStringH.funPoint(m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.Int_Data), pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format);
                            //    pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                            //}
                            //else
                            //{
                            //    dstrTemp = m_pEqpAct.funWordRead(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length, EnuEQP.PLCRWType.ASCII_Data);
                            //    pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp;
                            //}
                            //strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length);
                            #endregion
                        }
                    }
                    #endregion

                    strWordAddress = CommonAct.FunTypeConversion.funAddressAdd(strWordAddress, dintReadcount);

                    dstrReadData   = m_pEqpAct.funWordRead(strWordAddress, 80, EnuEQP.PLCRWType.ASCII_Data, false);
                    dintStartIndex = 0;
                    #region EQPPPID에 Film Code 저장
                    for (int dintLoop = 251; dintLoop <= 255; dintLoop++)
                    {
                        if (pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).AddPPIDBody(dintLoop) == true)
                        {
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).DESC     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).DESC;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Format   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Format;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Length   = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).ModuleID = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).ModuleID;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Name     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Name;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Range    = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Range;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Unit     = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Unit;
                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).UseMode  = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).UseMode;

                            dintLength = pInfo.Unit(0).SubUnit(0).PPIDBody(dintLoop).Length * 2;       //Length에 맞게 자를 문자열 개수를 가져온다.
                            dstrTemp   = dstrReadData.Substring(dintStartIndex, dintLength);


                            pInfo.Unit(0).SubUnit(0).EQPPPID(dstrEQPPPID).PPIDBody(dintLoop).Value = dstrTemp.Trim();
                        }

                        dintStartIndex += dintLength;
                    }
                    #endregion
                    //}
                }
                #endregion

                //PLC Req에 대한 CIM의 Confirm Bit를 준다.
                m_pEqpAct.subSetConfirmBit(strCompBit);

                switch (dintPPIDType)
                {
                case 1:             //EQP PPID
                {
                    pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, "3", "1", "", dstrEQPPPID);

                    ArrayList           arrCon = new ArrayList();
                    InfoAct.clsHOSTPPID CurrentPPID;
                    foreach (string strPPID in pInfo.Unit(0).SubUnit(0).HOSTPPID())
                    {
                        CurrentPPID = pInfo.Unit(0).SubUnit(0).HOSTPPID(strPPID);
                        if (CurrentPPID.EQPPPID == dstrEQPPPID)
                        {
                            arrCon.Add(strPPID);
                        }
                    }

                    string dstrSQL = "";
                    for (int dintLoop = 0; dintLoop < arrCon.Count; dintLoop++)
                    {
                        pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S7F107PPIDCreatDeleteAndPPBodyChangedReport, "3", "2", arrCon[dintLoop].ToString(), dstrEQPPPID);

                        //pInfo.Unit(0).SubUnit(0).RemoveHOSTPPID(arrCon[dintLoop].ToString());

                        dstrSQL = string.Format("Update `tbHOSTPPID` set EQPPPID='{0}', DTime='{1}' Where HOSTPPID='{2}';", dstrEQPPPID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), arrCon[dintLoop].ToString());
                        DBAct.clsDBAct.funExecuteQuery(dstrSQL);
                    }
                }
                break;
                }

                //최종 수정된 날짜 Ini에 변경
                FunINIMethod.subINIWriteValue("ETCInfo", "RECIPELastModified", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), pInfo.All.SystemINIFilePath);
            }
コード例 #18
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
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string        dstrWordAddress = "";
            StringBuilder dstrLog         = new StringBuilder();

            string[] dstrValue = null;
            int      dintIndex = 0;
            string   dstrECSLL = "";
            string   dstrECWLL = "";
            string   dstrECDEF = "";
            string   dstrECWUL = "";
            string   dstrECSUL = "";
            string   dstrSQL   = "";
            int      dintECID  = 0;

            try
            {
                dstrWordAddress = "W2A00";
                for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).ECIDCount; dintLoop++)
                {
                    if (dintLoop == 1)
                    {
                        pEqpAct.subWordReadSave(dstrWordAddress, 1, EnuEQP.PLCRWType.Int_Data);             //ECID
                    }
                    else
                    {
                        pEqpAct.subWordReadSave("", 1, EnuEQP.PLCRWType.Int_Data);                      //ECID
                    }
                    pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.Int_Data);                          //ECSLL
                    pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.Int_Data);                          //ECDEF
                    pEqpAct.subWordReadSave("", 2, EnuEQP.PLCRWType.Int_Data);                          //ECSUL
                }
                dstrValue = pEqpAct.funWordReadAction(true);

                // 디비트랜젝션... 해야지..
                if (DBAct.clsDBAct.funOleDbTransaction() == null)
                {
                    DBAct.clsDBAct.funBeginTransaction();
                }

                OleDbTransaction odbTransaction = DBAct.clsDBAct.funOleDbTransaction();

                //변경된 ECID 값을 구조체에 저장, DB Update, HOST로 보고
                for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).ECIDCount; dintLoop++)
                {
                    dintECID = Convert.ToInt32(dstrValue[dintIndex++]);

                    if (dintLoop == dintECID)
                    {
                        dstrECSLL = dstrValue[dintIndex++];
                        dstrECDEF = dstrValue[dintIndex++];
                        dstrECSUL = dstrValue[dintIndex++];

                        //dstrECSLL = FunTypeConversion.funDecimalConvert(dstrECSLL, EnuEQP.StringType.Hex);
                        //dstrECDEF = FunTypeConversion.funDecimalConvert(dstrECDEF, EnuEQP.StringType.Hex);
                        //dstrECSUL = FunTypeConversion.funDecimalConvert(dstrECSUL, EnuEQP.StringType.Hex);

                        //dstrECSLL = FunTypeConversion.funPlusMinusAPDCalc(dstrECSLL);
                        //dstrECDEF = FunTypeConversion.funPlusMinusAPDCalc(dstrECDEF);
                        //dstrECSUL = FunTypeConversion.funPlusMinusAPDCalc(dstrECSUL);

                        dstrECSLL = FunStringH.funPoint(dstrECSLL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format);
                        dstrECDEF = FunStringH.funPoint(dstrECDEF, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format);
                        dstrECSUL = FunStringH.funPoint(dstrECSUL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format);

                        //if (pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL != dstrECSLL || //pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWLL != dstrECWLL ||
                        //pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECDEF != dstrECDEF || //pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWUL != dstrECWUL ||
                        //pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL != dstrECSUL)

                        //if (
                        //     pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWLL != dstrECSLL ||
                        //    pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECDEF != dstrECDEF ||
                        //     pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWUL != dstrECSUL
                        //    )
                        {
                            //구조체 업데이트
                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSLL = dstrECSLL;
                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWLL = dstrECSLL;
                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECDEF = dstrECDEF;
                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWUL = dstrECSUL;
                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSUL = dstrECSUL;

                            //dstrSQL = "Update tbECID set ECWLL=" + dstrECSLL + ", ECDEF=" + dstrECDEF +
                            //           ", ECWUL=" + dstrECSUL + " Where ECID=" + dintLoop.ToString();

                            dstrSQL = "Update tbECID set ECSLL=" + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSLL + ", ECWLL=" + dstrECSLL + ", ECDEF=" + dstrECDEF +
                                      ", ECWUL=" + dstrECSUL + ", ECSUL=" + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSUL + " Where ECID=" + dintLoop.ToString();

                            if (DBAct.clsDBAct.funExecuteNonQuery(dstrSQL) == false)
                            {
                                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "DB Update Fail(subLoadECID): ECID: " + dintLoop.ToString());
                            }
                        }
                    }

                    //dintIndex += 6;
                }

                if (DBAct.clsDBAct.funOleDbTransaction() != null)
                {
                    DBAct.clsDBAct.funCommitTransaction();
                }


                // 디비내용 업데이트는 한번만 하면 되지.. 이게 뭐니...
                pInfo.DeleteTable("ECID");
                dstrSQL = "SELECT * FROM tbECID order by ECID";
                DataTable dt = DBAct.clsDBAct.funSelectQuery(dstrSQL);
                pInfo.AddDataTable("ECID", dt);
                pInfo.AddViewEvent(InfoAct.clsInfo.ViewEvent.ECIDUpdate);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
            finally
            {
                if (!DBAct.clsDBAct.funIsNullTransaction())
                {
                    DBAct.clsDBAct.funCommitTransaction();
                }

                //HOST로 부터 S2F29가 와서 PLC로 부터 모두 읽었다고 저장, 그리고 HOST Act단에서 S2F30을 응답
                if (pInfo.All.isReceivedFromHOST == true)
                {
                    pInfo.All.isReceivedFromHOST = false;      //초기화
                    pInfo.All.PLCActionEnd       = true;       //PLC로 부터 값을 읽었음을 저장
                }
            }
        }
コード例 #19
0
ファイル: clsCimEventECIDChange.cs プロジェクト: k2un/k2un
        /// <summary>
        /// CIM에서 설비로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : cmdName
        /// parameters[1] : 1st parameter
        /// parameters[2] : 2nd parameter
        /// parameters[3] : 3rd parameter
        /// parameters[4] : 4th parameter
        /// parameters[5] : 5th Parameter
        /// </remarks>
        public void funProcessCIMEvent(object[] parameters)
        {
            string dstrWordAddress = "";
            string dstrWordData    = "";
            string dstrBitAddress  = "B1020";

            string[] dstrValue;
            string   dstrECID       = FunStringH.funMakeLengthStringFirst("0", 48);
            int      dintECID       = 0;
            int      dintIndex      = 0;
            string   strConvertData = "";

            try
            {
                if (pInfo.All.ECIDChange.Count > 0)
                {
                    for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).ECIDCount; dintLoop++)
                    {
                        dintIndex = pInfo.All.ECIDChange.IndexOfKey(dintLoop);         //Key 값을 가지고 SortedList의 Index값을 가져온다.

                        if (pInfo.All.ECIDChange.ContainsKey(dintLoop))
                        {
                            dintECID  = Convert.ToInt32(pInfo.All.ECIDChange.GetKey(dintIndex));                           //Index값을 가지고 Key값을 알아온다,
                            dstrValue = pInfo.All.ECIDChange.GetByIndex(dintIndex).ToString().Split(new char[] { ',' });   //Index값을 가지고 value값을 알아온다.

                            //Word영역에 변경할 ECID를 Write한다.
                            dstrWordData += pEqpAct.funWordWriteString(1, dintECID.ToString(), EnuEQP.PLCRWType.Int_Data);
                            //dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[0], EnuEQP.PLCRWType.Int_Data);

                            if (!dstrValue[1].Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[1], EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, dstrValue[1], EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            if (!dstrValue[2].Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[2], EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, dstrValue[2], EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            if (!dstrValue[3].Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[3], EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, dstrValue[2], EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            //dstrWordData += pEqpAct.funWordWriteString(2, dstrValue[4], EnuEQP.PLCRWType.Int_Data);
                        }
                        else
                        {
                            clsECID CurrentECID = pInfo.Unit(0).SubUnit(0).ECID(dintLoop);
                            dstrWordData += pEqpAct.funWordWriteString(1, CurrentECID.Index.ToString(), EnuEQP.PLCRWType.Int_Data);
                            //dstrWordData += pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECSLL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                            if (!CurrentECID.ECWLL.Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECWLL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECWLL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            if (!CurrentECID.ECDEF.Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECDEF, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECDEF, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }

                            if (!CurrentECID.ECWUL.Contains("-"))
                            {
                                dstrWordData += pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECWUL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                            }
                            else
                            {
                                strConvertData = pEqpAct.funWordWriteString(2, FunStringH.funMakePLCData(FunStringH.funMakeRound(CurrentECID.ECWUL, CurrentECID.Format)), EnuEQP.PLCRWType.Int_Data);
                                dstrWordData  += strConvertData.Substring(4, 4) + strConvertData.Substring(0, 4);
                            }
                        }
                    }

                    //변경할 ECID 값을 써준다.
                    dstrWordAddress = "W16C0";
                    pEqpAct.funWordWrite(dstrWordAddress, dstrWordData, EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터

                    ////ECID 변경 지시를 내린다.
                    pEqpAct.funBitWrite(dstrBitAddress, "1");

                    //if (pInfo.EQP("Main").DummyPLC)
                    //{
                    //pEqpAct.funWordWrite("W2A00", dstrWordData, EnuEQP.PLCRWType.Hex_Data);        //변경할 ECID 데이터
                    //pEqpAct.funBitWrite("B1121", "1");

                    //}
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
            }
        }
コード例 #20
0
        /// <summary>
        /// Primary Message에 대해 처리한 후 Secondary Message를 Biuld하여 Driver에 전송한다.
        /// </summary>
        /// <param name="msgTran">Primary Message의 Transaction</param>
        public void funPrimaryReceive(Transaction msgTran)
        {
            int    dintAck3                = (int)LOTInfoValidation.Accepted;
            int    dintLOTIndex            = 0;
            string dstrHostGLSMapping10    = "";
            string dstrProcessGLSMapping10 = "";
            string dstrGLSLoaderMapping10  = "";
            string dstrPortModuleID        = "";
            int    dintPortID              = 0;
            int    dintSlotID              = 0;
            int    dintPortType            = 0;
            string dstrHPanelID            = "";
            string dstrHOSTPPID            = "";
            string dstrProductType         = "";
            string dstrCSTID               = "";
            int    dintCSTType             = 0;
            string dstrMapStif             = "";
            string dstrCurStif             = "";
            int    dintOrder               = 0;
            string SlotArray               = "";
            string strGLSID                = "";

            //subSetLog(InfoAct.clsInfo.LogType.ReceivedPrimaryMessage, "funPrimaryReceive() S" + msgTran.Primary().Stream + "F" + msgTran.Primary().Function + "Start");   // 수신메시지추적 [6/3/2013 Hojun])

            int dintUnitID    = 0;
            int dintSubUnitID = 0;

            try
            {
                dstrPortModuleID = msgTran.Primary().Item("PORTID").Getvalue().ToString();
                for (int dintLoop = 0; dintLoop < 6; dintLoop++)
                {
                    if (pInfo.Port(dintLoop + 1).HostReportPortID == dstrPortModuleID)
                    {
                        dintPortID = dintLoop + 1;
                        switch (dintLoop + 1)
                        {
                        case 1:
                            dintUnitID    = 1;
                            dintSubUnitID = 1;
                            break;

                        case 2:
                            dintUnitID    = 1;
                            dintSubUnitID = 2;
                            break;

                        case 3:
                            dintUnitID    = 1;
                            dintSubUnitID = 3;
                            break;

                        case 4:
                            dintUnitID    = 1;
                            dintSubUnitID = 4;
                            break;

                        case 5:
                            dintUnitID    = 2;
                            dintSubUnitID = 1;
                            break;

                        case 6:
                            dintUnitID    = 2;
                            dintSubUnitID = 2;
                            break;
                        }
                        break;
                    }
                }


                dstrCSTID    = msgTran.Primary().Item("CSTID").Getvalue().ToString();
                dintPortType = Convert.ToInt32(msgTran.Primary().Item("PORT_TYPE").Getvalue());

                if (dintPortID == 0 || dintPortID > 6)
                {
                    dintAck3 = (int)LOTInfoValidation.ParameterError;
                }
                else
                {
                    if (pInfo.Port(dintPortID).S3F115Received)
                    {
                        dintAck3 = (int)LOTInfoValidation.AlreadyReceived;
                    }
                    else if (0 != dintPortType)
                    {
                        dintAck3 = (int)LOTInfoValidation.ParameterError;
                    }
                }



                if (dintAck3 == 0)
                {
                    //if (dintPortType == 0)
                    //{
                    //    dintAck3 = (int)LOTInfoValidation.ParameterError;
                    //}
                    //else
                    if (pInfo.Port(dintPortID).PortState == "4")
                    {
                        dintAck3 = (int)LOTInfoValidation.Busy;
                    }
                    else if ((pInfo.Port(dintPortID).PortState == "0") || (string.IsNullOrEmpty(pInfo.Port(dintPortID).CSTID)))
                    {
                        if (dintPortID == 2)
                        {
                            dintAck3 = (int)LOTInfoValidation.NoCST;
                        }
                    }
                    else if (pInfo.Port(dintPortID).PortState != "2")
                    {
                        dintAck3 = (int)LOTInfoValidation.PortStateNotWaiting;
                    }
                    else if (string.IsNullOrEmpty(pInfo.Port(dintPortID).CSTID) == false)
                    {
                        if (pInfo.Port(dintPortID).CSTID != dstrCSTID.Trim())
                        {
                            dintAck3 = (int)LOTInfoValidation.CSTIDMismatch;
                        }
                        else
                        {
                            //[2015/05/20]FI01에서도 저장되게 조건식 추가(Add by HS)
                            if (dintUnitID == 1 && dintSubUnitID == 2 || dintUnitID == 1 && dintSubUnitID == 1)
                            {
                                dstrHostGLSMapping10    = FunStringH.funPaddingStringData("0", 56, '0');
                                dstrProcessGLSMapping10 = FunStringH.funPaddingStringData("0", 56, '0');
                                dstrGLSLoaderMapping10  = FunStringH.funPaddingStringData("0", 56, '0');

                                dstrCSTID   = msgTran.Primary().Item("CSTID").Getvalue().ToString();
                                dintCSTType = Convert.ToInt32(msgTran.Primary().Item("CST_TYPE").Getvalue());
                                dstrMapStif = msgTran.Primary().Item("MAP_STIF").Getvalue().ToString();
                                dstrCurStif = msgTran.Primary().Item("CUR_STIF").Getvalue().ToString();

                                int dintGlassCount = Convert.ToInt32(msgTran.Primary().Item("M_COUNT").Getvalue());

                                //pInfo.Port(dintPortID).SlotCount = dintGlassCount;
                                pInfo.Port(dintPortID).GLSHostMapping10         = dstrMapStif;
                                pInfo.Port(dintPortID).GLSLoaderMapping10       = dstrMapStif;
                                pInfo.Port(dintPortID).GLSProcessMapping10_HOST = dstrCurStif;
                                pInfo.Port(dintPortID).GLSRealMapping10         = dstrCurStif;
                                pInfo.Port(dintPortID).CSTType = dintCSTType.ToString();
                                pInfo.Port(dintPortID).arrSlotNo.Clear();
                                //SlotArray += dstrCSTID + ",";
                                for (int dintIndex = 0; dintIndex < dintGlassCount; dintIndex++)
                                {
                                    int.TryParse(msgTran.Primary().Item("USE_COUNT" + dintIndex).Getvalue().ToString(), out dintSlotID);

                                    SlotArray += dintSlotID + ",";
                                    if (pInfo.Port(dintPortID).arrSlotNo.Contains(dintSlotID) == false)
                                    {
                                        pInfo.Port(dintPortID).arrSlotNo.Add(dintSlotID);
                                    }

                                    for (int dintLoop2 = 1; dintLoop2 <= dintSlotID; dintLoop2++)
                                    {
                                        if (pInfo.Port(dintPortID).Slot(dintLoop2) == null)
                                        {
                                            if (pInfo.Port(dintPortID).AddSlot(dintLoop2) == false)
                                            {
                                                pInfo.subLog_Set(clsInfo.LogType.CIM, "Port Slot Add Error!!");
                                                //continue;
                                            }
                                        }
                                    }

                                    clsSlot dpSlot = pInfo.Port(dintPortID).Slot(1);
                                    if (dpSlot == null)
                                    {
                                        pInfo.Port(dintPortID).AddSlot(1);
                                        dpSlot = pInfo.Port(dintPortID).Slot(1);
                                    }


                                    //dpSlot.H_PANELID = msgTran.Primary().Item("H_GLASSID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.GlassID      = msgTran.Primary().Item("MATERIALID" + dintIndex).Getvalue().ToString().Trim();
                                    strGLSID            = dpSlot.GlassID; //150122 고석현
                                    dpSlot.E_PANELID    = msgTran.Primary().Item("M_SETID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.LOTID        = msgTran.Primary().Item("LOTID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.BATCHID      = msgTran.Primary().Item("BATCHID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.JOBID        = msgTran.Primary().Item("JOBID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PORTID       = msgTran.Primary().Item("PORTID1" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.SLOTNO       = msgTran.Primary().Item("SLOTNO" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PRODUCT_TYPE = msgTran.Primary().Item("PROD_TYPE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PRODUCT_KIND = msgTran.Primary().Item("PROD_KIND" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PRODUCTID    = msgTran.Primary().Item("PRODUCTID" + dintIndex).Getvalue().ToString().Trim();
                                    //strGLSID = dpSlot.PRODUCTID; //150122 고석현
                                    dpSlot.RUNSPECID = msgTran.Primary().Item("RUNSPECID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.LAYERID   = msgTran.Primary().Item("LAYERID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.STEPID    = msgTran.Primary().Item("STEPID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.HOSTPPID  = msgTran.Primary().Item("PPID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.FLOWID    = msgTran.Primary().Item("FLOWID" + dintIndex).Getvalue().ToString().Trim();
                                    int[] arrSIZE = { 0, 0 };
                                    arrSIZE = (int[])msgTran.Primary().Item("M_SIZE" + dintIndex).Getvalue();
                                    //dpSlot.SIZE = msgTran.Primary().Item("SIZE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.SIZE1           = arrSIZE[0];
                                    dpSlot.SIZE2           = arrSIZE[1];
                                    dpSlot.THICKNESS       = Convert.ToInt32(msgTran.Primary().Item("M_THICKNESS" + dintIndex).Getvalue().ToString().Trim());
                                    dpSlot.GLASS_STATE     = Convert.ToInt32(msgTran.Primary().Item("M_STATE" + dintIndex).Getvalue().ToString().Trim());
                                    dpSlot.GLASS_ORDER     = msgTran.Primary().Item("M_ORDER" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.COMMENT         = msgTran.Primary().Item("COMMENT" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.USE_COUNT       = msgTran.Primary().Item("USE_COUNT" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.JUDGEMENT       = msgTran.Primary().Item("JUDGEMENT" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.REASON_CODE     = msgTran.Primary().Item("REASON_CODE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.INS_FLAG        = msgTran.Primary().Item("INS_FLAG" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.ENC_FLAG        = msgTran.Primary().Item("LIBRARYID" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PRERUN_FLAG     = msgTran.Primary().Item("PRERUN_FLAG" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.TURN_DIR        = msgTran.Primary().Item("TURN_DIR" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.FLIP_STATE      = msgTran.Primary().Item("FLIP_STATE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.WORK_STATE      = msgTran.Primary().Item("WORK_STATE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.MULTI_USE       = msgTran.Primary().Item("MULTI_USE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PAIR_GLASSID    = msgTran.Primary().Item("STAGE_STATE" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.PAIR_PPID       = msgTran.Primary().Item("LOCATION" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[0]  = msgTran.Primary().Item("OPTION_NAME1" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[0] = msgTran.Primary().Item("OPTION_VALUE1" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[1]  = msgTran.Primary().Item("OPTION_NAME2" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[1] = msgTran.Primary().Item("OPTION_VALUE2" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[2]  = msgTran.Primary().Item("OPTION_NAME3" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[2] = msgTran.Primary().Item("OPTION_VALUE3" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[3]  = msgTran.Primary().Item("OPTION_NAME4" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[3] = msgTran.Primary().Item("OPTION_VALUE4" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_NAME[4]  = msgTran.Primary().Item("OPTION_NAME5" + dintIndex).Getvalue().ToString().Trim();
                                    dpSlot.OPTION_VALUE[4] = msgTran.Primary().Item("OPTION_VALUE5" + dintIndex).Getvalue().ToString().Trim();
                                }

                                if (dintAck3 == (int)LOTInfoValidation.Accepted)
                                {
                                    pInfo.Port(dintPortID).HostPPID = dstrHOSTPPID;
                                }
                            }
                        }
                    }
                }

                msgTran.Secondary().Item("ACKC3").Putvalue(dintAck3);
                funSendReply(msgTran);


                //pInfo.subPLCCommand_Set(clsInfo.PLCCommand.LotInfoSet, dintPortID, dintSlotID);

                if (dintAck3 == (int)LOTInfoValidation.Accepted)
                {
                    //[2015/05/20]FI01에서도 저장되게 조건식 추가(Add by HS)
                    if (dintUnitID == 1 && dintSubUnitID == 2 || dintUnitID == 1 && dintSubUnitID == 1)
                    {
                        pInfo.Port(dintPortID).S3F115Received = true;

                        clsSlot dpSlot = pInfo.Port(dintPortID).Slot(1);

                        if (dpSlot != null)
                        {
                            int dintFilmCount = Convert.ToInt32(dpSlot.USE_COUNT);

                            //[2015/06/23]FI02에서만 저장되게 조건식 추가(Add by HS)
                            if (dintUnitID == 1 && dintSubUnitID == 2)
                            {
                                pInfo.subPLCCommand_Set(clsInfo.PLCCommand.LotinformationSend, strGLSID, dintFilmCount, dpSlot.PRODUCTID);
                            }

                            if (pInfo.LOTID(pInfo.Port(dintPortID).CSTID) == null)
                            {
                                pInfo.AddLOT(pInfo.Port(dintPortID).CSTID);
                            }

                            for (int dintLoop = 1; dintLoop <= dintFilmCount; dintLoop++)
                            {
                                if (pInfo.LOTID(pInfo.Port(dintPortID).CSTID).Slot(dintLoop) == null)
                                {
                                    pInfo.LOTID(pInfo.Port(dintPortID).CSTID).AddSlot(dintLoop);
                                }
                                //pInfo.LOTID(strGLSID).Slot(dintLoop).GlassID = strGLSID + dintLoop.ToString().PadLeft(3, '0');
                                pInfo.LOTID(pInfo.Port(dintPortID).CSTID).Slot(dintLoop).GlassID   = strGLSID;
                                pInfo.LOTID(pInfo.Port(dintPortID).CSTID).Slot(dintLoop).USE_COUNT = dintLoop.ToString();
                                pInfo.LOTID(pInfo.Port(dintPortID).CSTID).Slot(dintLoop).PRODUCTID = dpSlot.PRODUCTID;
                            }
                        }
                        if (dintPortID == 2)
                        {
                            //this.pInfo.subPLCCommand_Set(InfoAct.clsInfo.PLCCommand.FilmJobCommand, 1001, dintPortID);     //Lot Start 지시
                        }
                    }
                    //150122 고석현
                    if (dintUnitID == 1 && dintSubUnitID == 1)
                    {
                        pInfo.subPLCCommand_Set(clsInfo.PLCCommand.FI01_Check, "1");
                    }
                }
                else
                {
                    pInfo.Port(dintPortID).S3F115Received = false;
                }
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(clsInfo.LogType.CIM, ex.ToString());
                return;
            }
            finally
            {
            }
        }
コード例 #21
0
        /// <summary>
        /// 설비에서 CIM으로 발생하는 Event에 대한 처리
        /// </summary>
        /// <param name="parameters">Parameter Array</param>
        /// <remarks>
        /// parameters[0] : strCompBit
        /// parameters[1] : dstrACTVal
        /// parameters[2] : dintActFrom
        /// parameters[3] : dstrACTFromSub
        /// parameters[4] : intBitVal
        /// parameters[5] : Special Parameter
        /// </remarks>
        public void funProcessEQPEvent(string[] parameters)
        {
            string strCompBit = parameters[0];
            int    dintIndex  = 0;
            //int dintIndex2 = 0;
            string dstrWordAddress = "";
            string dstrECIDReport  = "";
            string dstrECSLL       = "";
            string dstrECWLL       = "";
            string dstrECDEF       = "";
            string dstrECWUL       = "";
            string dstrECSUL       = "";
            string dstrLog         = "";
            string dstrSQL         = "";

            string[] dstrValue        = null;
            int      dintECID         = 0;
            string   dstrECIDReadData = "";
            string   strData          = "";
            string   dstrECID         = "";

            try
            {
                dstrWordAddress = "W2A00";

                dstrECIDReadData = m_pEqpAct.funWordRead(dstrWordAddress, pInfo.Unit(0).SubUnit(0).ECIDCount * 7, EnuEQP.PLCRWType.Hex_Data);
                //PLC Req에 대한 CIM의 Confirm Bit를 준다.
                m_pEqpAct.subSetConfirmBit(strCompBit);

                // 디비트랜젝션... 해야지..
                if (DBAct.clsDBAct.funOleDbTransaction() == null)
                {
                    DBAct.clsDBAct.funBeginTransaction();
                }

                OleDbTransaction odbTransaction = DBAct.clsDBAct.funOleDbTransaction();


                for (int dintLoop = 1; dintLoop <= pInfo.Unit(0).SubUnit(0).ECIDCount; dintLoop++)
                {
                    strData  = dstrECIDReadData.Substring((dintLoop - 1) * 28, 28);
                    dstrECID = strData.Substring(0, 4);
                    dintECID = Convert.ToInt32(FunTypeConversion.funHexConvert(dstrECID, EnuEQP.StringType.Decimal));  //ECID

                    //dstrECSLL = strData.Substring(4, 8); // ECSLL
                    dstrECWLL = strData.Substring(4, 8);
                    dstrECWLL = dstrECWLL.Substring(4, 4) + dstrECWLL.Substring(0, 4);
                    dstrECDEF = strData.Substring(12, 8); // ECDEF
                    dstrECDEF = dstrECDEF.Substring(4, 4) + dstrECDEF.Substring(0, 4);
                    //dstrECSUL = strData.Substring(20, 8); // ECSUL
                    dstrECWUL = strData.Substring(20, 8);
                    dstrECWUL = dstrECWUL.Substring(4, 4) + dstrECWUL.Substring(0, 4);

                    //dstrECSLL = FunTypeConversion.funDecimalConvert(dstrECSLL, EnuEQP.StringType.Hex);
                    //dstrECDEF = FunTypeConversion.funDecimalConvert(dstrECDEF, EnuEQP.StringType.Hex);
                    //dstrECSUL = FunTypeConversion.funDecimalConvert(dstrECSUL, EnuEQP.StringType.Hex);

                    dstrECWLL = FunTypeConversion.funHexConvert(dstrECWLL, EnuEQP.StringType.Decimal);
                    dstrECDEF = FunTypeConversion.funHexConvert(dstrECDEF, EnuEQP.StringType.Decimal);
                    dstrECWUL = FunTypeConversion.funHexConvert(dstrECWUL, EnuEQP.StringType.Decimal);

                    ////dstrECSLL = FunTypeConversion.funPlusMinusAPDCalc(dstrECSLL);
                    //dstrECWLL = FunTypeConversion.funPlusMinusAPDCalc(dstrECWLL);
                    //dstrECDEF = FunTypeConversion.funPlusMinusAPDCalc(dstrECDEF);
                    ////dstrECSUL = FunTypeConversion.funPlusMinusAPDCalc(dstrECSUL);
                    //dstrECWUL = FunTypeConversion.funPlusMinusAPDCalc(dstrECWUL);

                    //dstrECSLL = FunStringH.funPoint(dstrECSLL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format);
                    dstrECWLL = FunStringH.funPoint(dstrECWLL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format);
                    dstrECDEF = FunStringH.funPoint(dstrECDEF, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format);
                    //dstrECSUL = FunStringH.funPoint(dstrECSUL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format);
                    dstrECWUL = FunStringH.funPoint(dstrECWUL, pInfo.Unit(0).SubUnit(0).ECID(dintLoop).Format);



                    if (pInfo.Unit(0).SubUnit(0).ECID(dintECID) != null)
                    {
                        if (pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECDEF != dstrECDEF ||
                            pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWLL != dstrECWLL ||
                            pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECWUL != dstrECWUL)
                        // pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSLL != dstrECSLL ||
                        //pInfo.Unit(0).SubUnit(0).ECID(dintECID).ECSUL != dstrECSUL)
                        {
                            dstrECIDReport += dintLoop.ToString() + ";";

                            //로그 출력
                            //dstrLog = dstrLog + "ECID" + ",";
                            //dstrLog = dstrLog + DateTime.Now.ToString("yyyyMMddHHmmss") + ",";
                            //dstrLog = dstrLog + "변경" + ",";
                            //dstrLog = dstrLog + pInfo.All.UserID + ",";
                            //dstrLog = dstrLog + "ECID(" + dintLoop.ToString() + "): " + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).DESC + ",";
                            //dstrLog = dstrLog + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSLL + ",";
                            //dstrLog = dstrLog + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECDEF + ",";
                            //dstrLog = dstrLog + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSUL + ",";

                            //dstrLog = dstrLog + dstrECSLL + ",";
                            //dstrLog = dstrLog + dstrECWLL + ",";
                            //dstrLog = dstrLog + dstrECDEF + ",";
                            //dstrLog = dstrLog + dstrECWUL + ",";
                            //dstrLog = dstrLog + dstrECSUL;


                            dstrLog = string.Format("ECID,{0},변경,{1},ECID({2}): {3},{4} -> {5}, {6} -> {7}, {8} -> {9}",
                                                    DateTime.Now.ToString("yyyyMMddHHmmss"),
                                                    pInfo.All.UserID,
                                                    dintLoop.ToString(),
                                                    pInfo.Unit(0).SubUnit(0).ECID(dintLoop).DESC,
                                                    pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWLL,
                                                    dstrECWLL,
                                                    pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECDEF,
                                                    dstrECDEF,
                                                    pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWUL,
                                                    dstrECWUL
                                                    );

                            pInfo.subLog_Set(InfoAct.clsInfo.LogType.Parameter, dstrLog); //로그 출력
                            dstrLog = "";                                                 //초기화

                            //구조체 업데이트

                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSLL = dstrECWLL;
                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWLL = dstrECWLL;
                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECDEF = dstrECDEF;
                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECWUL = dstrECWUL;
                            pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSUL = dstrECWUL;

                            dstrSQL = "Update tbECID set ECSLL=" + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSLL + ", ECWLL=" + dstrECWLL + ", ECDEF=" + dstrECDEF +
                                      ", ECWUL=" + dstrECWUL + ", ECSUL=" + pInfo.Unit(0).SubUnit(0).ECID(dintLoop).ECSUL + " Where ECID=" + dintLoop.ToString();

                            if (DBAct.clsDBAct.funExecuteNonQuery(dstrSQL) == false)
                            {
                                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, "DB Update Fail(subLoadECID): ECID: " + dintLoop.ToString());
                            }
                        }
                    }
                }

                if (DBAct.clsDBAct.funOleDbTransaction() != null)
                {
                    DBAct.clsDBAct.funCommitTransaction();
                }


                // 디비내용 업데이트는 한번만 하면 되지.. 이게 뭐니...
                pInfo.DeleteTable("ECID");
                dstrSQL = "SELECT * FROM tbECID order by ECID";
                DataTable dt = DBAct.clsDBAct.funSelectQuery(dstrSQL);
                pInfo.AddDataTable("ECID", dt);
                pInfo.AddViewEvent(InfoAct.clsInfo.ViewEvent.ECIDUpdate);

                if (pInfo.All.ECIDChangeBYWHO == "1" || pInfo.All.ECIDChangeBYWHO == "2")
                {
                    //HOST나 OP에서 발생한것임
                    dstrECIDReport = pInfo.All.ECIDChangeFromHost;
                    pInfo.All.ECIDChangeFromHost = "";
                    //m_pInfo.All.ECIDChangeBYWHO = "";
                }
                else
                {
                    pInfo.All.ECIDChangeBYWHO = "2";  //By Equipment
                }


                pInfo.subSendSF_Set(InfoAct.clsInfo.SFName.S6F11RelatedEquipmentParameterEvent, 102, dstrECIDReport); //마지막 인자는 ECID임
                pInfo.All.ECIDChangeBYWHO = "";

                //최종 수정된 날짜 Ini에 변경
                FunINIMethod.subINIWriteValue("ETCInfo", "ECIDLastModified", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), pInfo.All.SystemINIFilePath);
            }
            catch (Exception ex)
            {
                pInfo.subLog_Set(InfoAct.clsInfo.LogType.CIM, ex.ToString());
                if (!DBAct.clsDBAct.funIsNullTransaction())
                {
                    DBAct.clsDBAct.funCommitTransaction();
                }
            }
        }