protected override int InnerExecute()
        {
            int index     = -1;
            int wipCount1 = 1; // 1
            CGlassDataPropertiesWHTM glassData1 = null;
            List <int> jobDataA1 = null;

            index = int.Parse(_values["GLS_INDEX"]);

            if (index == -1)
            {
                return(-1);
            }

            if (_isManualMode)
            {
                glassData1                = new CGlassDataPropertiesWHTM();
                glassData1.GlassIndex     = 1;
                glassData1.CassetteIndex  = 2;
                glassData1.CassetteIndex  = 2;
                glassData1.ProductCode    = 1;
                glassData1.GlassThickness = 1;
                glassData1.LotID          = "GA";
                glassData1.GlassID        = "GB";
                glassData1.PPID           = "1";
                glassData1.GlassType      = 1;
                glassData1.JobJudge       = "G";
                glassData1.JobState       = 5;
                glassData1.JobGrade       = "G";
                glassData1.TrackingData   = 1000;
                glassData1.UnitPathNo     = 1;
                glassData1.SlotNo         = 0;
                glassData1.CycleTime      = 10000;
                glassData1.TactTime       = 10000;
                glassData1.ReasonCode     = 1;
                glassData1.SamplingFlag   = 1;
                glassData1.LotEndFlag     = 1;
                glassData1.OperationId    = "ABCDEFG";
                glassData1.ProductId      = "ABCDEFGAA";
                glassData1.CassetteId     = "ABCDEFGAA";

                jobDataA1 = CGlassDataPropertiesWHTM.ConvertPLCData(glassData1);
                wipCount1 = 1;
            }
            else
            {
                AMaterialData materialData = _main.GetReceivedGlassDataByLoc(_component.ControlName, index);
                glassData1 = materialData as CGlassDataPropertiesWHTM;

                glassData1.UnitPathNo = 301;
                glassData1.SlotNo     = 0;

                jobDataA1 = CGlassDataPropertiesWHTM.ConvertPLCData(glassData1);
                wipCount1 = 1;
            }

            _main.MelsecNetMultiWordWrite(OW_FORWARD_RECEIVED_JOB_REPORT_JOBDATAA1, jobDataA1);
            _main.MelsecNetWordWrite(OW_FORWARD_RECEIVED_JOB_REPORT_CURRENT_WIP_COUNT1, wipCount1);

            Log(string.Format("{0}\t{1}", _component.ControlName, string.Format("PGM DATA SEND - JOB DATA1={0} WIP COUNT1={1}", glassData1.ToString(), wipCount1)));

            Log(string.Format("{0}\t{1}", _component.ControlName, "PGM DATA DISPLAY"));

            CTimeout timeout = CTimeoutManager.GetTimeout(_controlName, T1);

            timeout.TargetOffValueCheck = true;
            timeout.Begin(OB_FORWARD_RECEIVED_JOB_REPORT, _main.CONTROLATTRIBUTES.GetProperty(IB_FORWARD_RECEIVED_JOB_REPORT.ControlName, IB_FORWARD_RECEIVED_JOB_REPORT.AttributeName) as ITimeoutResource);

            _main.MelsecNetBitOnOff(OB_FORWARD_RECEIVED_JOB_REPORT, true);
            Thread.Sleep(1000);
            IB_FORWARD_RECEIVED_JOB_REPORT.Value = true.ToString();
            string tempMsg = "";
            bool   error   = false;

            if (CTimeout.WaitSync(timeout, 10))
            {
            }
            else
            {
                error = true;
                _main.MelsecNetBitOnOff(OB_FORWARD_RECEIVED_JOB_REPORT, false);
                tempMsg = string.Format("PGM DATA TIMEOUT No response [timeout T1={0} sec]", T1 / 1000);
                Log(string.Format("{0}\t{1}", _component.ControlName, tempMsg));
            }

            Log(string.Format("{0}\t{1}", _component.ControlName, "PGM DATA DISPLAY"));

            CSubject subject = null;

            if (glassData1 != null)
            {
                if (index == 0)
                {
                    subject = CUIManager.Inst.GetData("ucGlassData");
                    subject.SetValue("Data", CGlassDataPropertiesWHTM.GetGuiData(glassData1));
                    subject.Notify();
                }
                else
                {
                    subject = CUIManager.Inst.GetData("ucGlassData");
                    subject.SetValue("Data2", CGlassDataPropertiesWHTM.GetGuiData(glassData1));
                    subject.Notify();
                }
            }

            if (!error)
            {
                return(0);
            }

            #region 메시지 창 표시

            string receivedTime = DateTime.Now.ToString("yyyyMMdd HH:mm:ss");
            string msgId        = "0";
            string message      = string.Format("[{0}] {1}", this.Name, tempMsg);
            string panelNo      = "1";

            subject = CUIManager.Inst.GetData("CIMMessage");
            subject.SetValue("List", new List <string>()
            {
                "MESSAGE_SET", msgId, receivedTime, message, panelNo
            });
            subject.Notify();

            #endregion


            return(0);
        }
Esempio n. 2
0
        protected override int InnerExecute()
        {
            //받아서 처리하는 부분
            //양전자 RECIPE 가져오는 곳

            List <int> jobDataA = new List <int>();//96
            CGlassDataPropertiesWHTM glassData1 = null;
            CGlassDataPropertiesWHTM glassData2 = null;

            CGlassDataPropertiesWHTM glassData = null;
            int jobCount1 = 0; // 1
            int wipCount1 = 1; // 1

            string glassID      = "";
            string mscrapCode   = "";
            int    mScrap_Index = 0;

            List <int> glassCode = new List <int>();
            List <int> scrapCode = new List <int>();
            List <int> operID    = new List <int>();

            if (_isManualMode)
            {
                glassData1                = new CGlassDataPropertiesWHTM();
                glassData1.GlassIndex     = 1;
                glassData1.CassetteIndex  = 2;
                glassData1.CassetteIndex  = 2;
                glassData1.ProductCode    = 1;
                glassData1.GlassThickness = 1;
                glassData1.LotID          = "GA";
                glassData1.GlassID        = "GB";
                glassData1.PPID           = "1";
                glassData1.GlassType      = 1;
                glassData1.JobJudge       = "G";
                glassData1.JobState       = 5;
                glassData1.JobGrade       = "G";
                glassData1.TrackingData   = 1000;
                glassData1.UnitPathNo     = 1;
                glassData1.SlotNo         = 1;
                glassData1.CycleTime      = 10000;
                glassData1.TactTime       = 10000;
                glassData1.ReasonCode     = 1;
                glassData1.SamplingFlag   = 1;
                glassData1.LotEndFlag     = 1;
                glassData1.OperationId    = "ABCDEFG";
                glassData1.ProductId      = "ABCDEFGAA";
                glassData1.CassetteId     = "ABCDEFGAA";

                jobDataA  = CGlassDataPropertiesWHTM.ConvertPLCData(glassData1);
                jobCount1 = 1;
                wipCount1 = 1;
            }
            else
            {
                //string value = VI_GLASS_SCRAP.Value;
                //string[] temp = value.Split('|');
                //if (temp.Length != 3)
                //    return -1;

                if (_values == null)
                {
                    return(-1);
                }



                glassID      = _values["GLASSID"];
                mScrap_Index = int.Parse(_values["SCRAPINDEX"]);

                AMaterialData materialData = _main.GetReceivedGlassDataByLoc(_component.ControlName, mScrap_Index);
                //AMaterialData materialData2 = _main.GetReceivedGlassDataByLoc(_component.ControlName, 1);
                if (materialData == null)
                {
                    //20161128
                    List <string> dataList = new List <string>();

                    dataList.Add("GLASS_SCRAP_ACK");
                    dataList.Add("X");

                    _main.SendData(dataList);
                    return(-1);
                }

                //if (materialData2 == null)
                //{
                //    //20161128
                //    List<string> dataList = new List<string>();

                //    dataList.Add("GLASS_SCRAP_ACK");
                //    dataList.Add("X");

                //    _main.SendData(dataList);
                //    return -1;
                //}

                glassData = materialData as CGlassDataPropertiesWHTM;

                string[] tempGlassID = glassData.GlassID.Split('\0');

                if (glassID == tempGlassID[0].Trim())
                {
                    jobDataA = CGlassDataPropertiesWHTM.ConvertPLCData(glassData);

                    if (_component.GlassStageExist) //20161129
                    {
                        //glassCode.AddRange(ConvertDecTo2WordList(Convert.ToInt32(glassData.GlassCode)));
                        ////scrapCode.Add(0);
                        ////scrapCode.Add(0);

                        //unitID = int.Parse(_component.UnitNo);

                        //tempOperID = _main.SystemConfig.UserAccount.ToCharArray();
                        //string word = "";
                        //foreach (char item in tempOperID)
                        //{
                        //    word = item + word;
                        //    if (word.Length > 1)
                        //    {
                        //        operID.Add(int.Parse(SmartDevice.UTILS.PLCUtils.HexToDec(SmartDevice.UTILS.PLCUtils.StringToHex(word))));
                        //        word = "";
                        //    }
                        //}

                        ////tempCode = mscrapCode.ToCharArray();
                        ////foreach (char item in tempCode)
                        ////{
                        ////    word = item + word;
                        ////    if (word.Length > 1)
                        ////    {
                        ////        scrapCode.Add(int.Parse(SmartDevice.UTILS.PLCUtils.HexToDec(SmartDevice.UTILS.PLCUtils.StringToHex(word))));
                        ////        word = "";
                        ////    }
                        ////}

                        //tempCode = mscrapCode.ToCharArray();
                        //string hex = "";
                        //for (int i = 0; i < tempCode.Length; i = i + 2)
                        //{
                        //    if (tempCode.Length > i + 1)
                        //    {
                        //        hex += SmartDevice.UTILS.PLCUtils.DecToHex(((int)tempCode[i + 1]).ToString()).Substring(2, 2);
                        //    }
                        //    if (tempCode.Length > i)
                        //    {
                        //        hex += SmartDevice.UTILS.PLCUtils.DecToHex(((int)tempCode[i]).ToString()).Substring(2, 2);
                        //        scrapCode.Add(int.Parse(SmartDevice.UTILS.PLCUtils.HexToDec(hex)));
                        //    }

                        //    hex = "";
                        //}
                    }
                }
                else
                {
                    //20161128
                    List <string> dataList = new List <string>();

                    dataList.Add("GLASS_SCRAP_ACK");
                    dataList.Add("X");

                    _main.SendData(dataList);
                    return(-1);
                }
            }
            _main.MelsecNetMultiWordWrite(OW_REMOVED_JOB_REPORT_JOBDATAA, jobDataA);


            //_main.MelsecNetBitOnOff(OB_REMOVED_JOB_REPORT, true);
            Log(string.Format("{0}\t{1}", _component.ControlName, string.Format("PGM DATA SEND - RECIPEID={0}", "")));

            //CSubject subject = CUIManager.Inst.GetData("ucCimStatus");
            //subject.SetValue("EQPSTATUS", _component.MachineAutoMode);
            //subject.Notify();

            //Thread.Sleep(1000);
            //_main.MelsecNetBitOnOff(OB_REMOVED_JOB_REPORT, false);


            CTimeout timeout = CTimeoutManager.GetTimeout(_controlName, T1);

            timeout.TargetOffValueCheck = true;
            timeout.Begin(OB_REMOVED_JOB_REPORT, _main.CONTROLATTRIBUTES.GetProperty(IB_REMOVED_JOB_REPORT.ControlName, IB_REMOVED_JOB_REPORT.AttributeName) as ITimeoutResource);
            _main.MelsecNetBitOnOff(OB_REMOVED_JOB_REPORT, true);
            Thread.Sleep(1000);
            IB_REMOVED_JOB_REPORT.Value = true.ToString();
            string   tempMsg = "";
            bool     error   = false;
            CSubject subject = null;

            if (CTimeout.WaitSync(timeout, 10))
            {
                //<TODO> Test용 임시
                _component.GlassStageExist = false;
                _component.GlassCode1      = 0;

                AMaterialData materialData = null;// _main.GetReceivedGlassDataByLoc(_component.ControlName, 0);
                _main.AddReceviedGlassData(_component.ControlName, materialData, mScrap_Index, false);

                if (mScrap_Index == 0)
                {
                    subject = CUIManager.Inst.GetData("ucEQP");

                    if (glassData.GlassPosition == 1)
                    {
                        subject.SetValue("GlassExist_A", false);
                    }
                    else
                    {
                        subject.SetValue("GlassExist_Whole", false);
                    }
                    subject.SetValue("GlassCode1", "");
                    subject.SetValue("GlassID1", "");
                    subject.Notify();
                }
                else
                {
                    subject = CUIManager.Inst.GetData("ucEQP");
                    subject.SetValue("GlassExist_B", false);
                    subject.SetValue("GlassCode2", "");
                    subject.SetValue("GlassID2", "");
                    subject.Notify();
                }
                //20161128
                List <string> dataList = new List <string>();

                dataList.Add("GLASS_SCRAP_ACK");
                dataList.Add("O");

                _main.SendData(dataList);

                _main.MelsecNetBitOnOff(OB_REMOVED_JOB_REPORT, false);
            }
            else
            {
                //에러:응답이 없다..
                List <string> dataList = new List <string>();

                dataList.Add("GLASS_SCRAP_ACK");
                dataList.Add("X");

                _main.SendData(dataList);

                dataList = new List <string>();
                dataList.Add("ALARM_SET_REQUEST");
                dataList.Add("1");
                dataList.Add("9001");
                _main.SendData(dataList);

                error = true;
                _main.MelsecNetBitOnOff(OB_REMOVED_JOB_REPORT, false);
                tempMsg = string.Format("PGM DATA TIMEOUT No response [timeout T1={0} sec]", T1 / 1000);
                Log(string.Format("{0}\t{1}", _component.ControlName, tempMsg));
            }

            Log(string.Format("{0}\t{1}", _component.ControlName, "PGM DATA DISPLAY"));

            if (glassData1 != null || glassData2 != null)
            {
                subject = CUIManager.Inst.GetData("ucGlassData");
                subject.SetValue("GlassCount", 2);
                subject.SetValue("Data", CGlassDataPropertiesWHTM.GetGuiData(glassData1));
                subject.SetValue("Data2", CGlassDataPropertiesWHTM.GetGuiData(glassData2));
                subject.Notify();
            }

            if (!error)
            {
                return(0);
            }

            #region 메시지 창 표시

            string receivedTime = DateTime.Now.ToString("yyyyMMdd HH:mm:ss");
            string msgId        = "0";
            string message      = string.Format("[{0}] {1}", this.Name, tempMsg);
            string panelNo      = "1";

            subject = CUIManager.Inst.GetData("CIMMessage");
            subject.SetValue("List", new List <string>()
            {
                "MESSAGE_SET", msgId, receivedTime, message, panelNo
            });
            subject.Notify();

            #endregion


            return(0);
        }