IT Story/C# & WPF

SecsDrv_S3F101 GLSINFO processing example source

Hoyami7 2022. 7. 3. 17:30
반응형
private void PSecsDrv_S3F101GLSINFO()
        {
            try
            {
                this.m_Info.Set_ReceiveHostSF("S3F101GLSINFO");
            }
            catch (Exception ex)
            {
                this.m_Info.Set_Log(Common.EnuCommon.LogType.CIM, "", ex.ToString());
            }
        }

        private void S3F101LotInformation()
        {
            int iGlassCount = 0;

            string sProcessID = string.Empty;
            string sPartID = string.Empty;
            string sStepID = string.Empty;
            string sGlassID = string.Empty;
            string sLOTAction = string.Empty;

            int iSlotNo = 0;
            byte dintACKC3 = 0x00;

            try
            {
                if (this.m_Info.All.HostConnect == false) return;
                if (funACTSECSAort_Send(this.PSecsDrv.S3F101GLSINFO.Header) == true) return;

                if (this.m_Info.Port(1).Status != Structure.classStructure.PortStatus.LDCM || this.m_Info.Port(1).CSTID == string.Empty)
                {
                    dintACKC3 = 0x03;
                }

                this.PSecsDrv.S3F102GLSINFOReply.PTID   = this.PSecsDrv.S3F101GLSINFO.PTID;
                this.PSecsDrv.S3F102GLSINFOReply.CSTID  = this.PSecsDrv.S3F101GLSINFO.CSTID;
                this.PSecsDrv.S3F102GLSINFOReply.JOBID  = this.PSecsDrv.S3F101GLSINFO.JOBID;
                this.PSecsDrv.S3F102GLSINFOReply.DEVICE = this.PSecsDrv.S3F101GLSINFO.DEVICE;

                int.TryParse(this.PSecsDrv.S3F101GLSINFO.GLSCOUNT.ToString(), out iGlassCount);
                this.PSecsDrv.S3F102GLSINFOReply.GLSCOUNT = iGlassCount;

                for (int nGlassLoop = 1; nGlassLoop <= iGlassCount; nGlassLoop++)
                {
                    sProcessID  = this.PSecsDrv.S3F101GLSINFO.get_PROCESSID(nGlassLoop).Trim();
                    sPartID     = this.PSecsDrv.S3F101GLSINFO.get_PARTID(nGlassLoop).Trim();
                    sStepID     = this.PSecsDrv.S3F101GLSINFO.get_STEPID(nGlassLoop).Trim();
                    sGlassID    = this.PSecsDrv.S3F101GLSINFO.get_GLASSID(nGlassLoop).Trim();
                    sLOTAction  = this.PSecsDrv.S3F101GLSINFO.get_LOTACTION(nGlassLoop).Trim();

                    this.PSecsDrv.S3F102GLSINFOReply.set_SLOTNO(nGlassLoop,     this.PSecsDrv.S3F101GLSINFO.get_SLOTNO(nGlassLoop));
                    this.PSecsDrv.S3F102GLSINFOReply.set_PROCESSID(nGlassLoop,  sProcessID);
                    this.PSecsDrv.S3F102GLSINFOReply.set_PARTID(nGlassLoop,     sPartID);
                    this.PSecsDrv.S3F102GLSINFOReply.set_STEPID(nGlassLoop,     sStepID);
                    this.PSecsDrv.S3F102GLSINFOReply.set_GLASSTYPE(nGlassLoop,  this.PSecsDrv.S3F101GLSINFO.get_GLASSTYPE(nGlassLoop));
                    this.PSecsDrv.S3F102GLSINFOReply.set_LOTID(nGlassLoop,      this.PSecsDrv.S3F101GLSINFO.get_LOTID(nGlassLoop));
                    this.PSecsDrv.S3F102GLSINFOReply.set_GLASSID(nGlassLoop,    this.PSecsDrv.S3F101GLSINFO.get_GLASSID(nGlassLoop));
                    this.PSecsDrv.S3F102GLSINFOReply.set_PPID(nGlassLoop,       this.PSecsDrv.S3F101GLSINFO.get_PPID(nGlassLoop));
                    this.PSecsDrv.S3F102GLSINFOReply.set_CELLGRADE(nGlassLoop,  this.PSecsDrv.S3F101GLSINFO.get_CELLGRADE(nGlassLoop));
                    this.PSecsDrv.S3F102GLSINFOReply.set_LOTACTION(nGlassLoop,  sLOTAction);

                    string sCellDataLog = string.Empty;
                    string[] sReceiveGLSID = sGlassID.Split('.');
                    GetSlotNoFromGlassID(sGlassID.Replace(".", ""), out iSlotNo);
                    //if (iSlotNo > 0 && dintACKC3 == 0x00)
                    ////if (GetSlotNoFromGlassID(sGlassID, out iSlotNo) && dintACKC3 == 0x00)
                    //{ }
                    //else if (dintACKC3 == 0x00)

                    if (iSlotNo == 0)
                    {
                        dintACKC3 = 0x04;
                        this.m_Info.Set_Log(Common.EnuCommon.LogType.CIM, "S3F101 => H_PANELID : " + sGlassID); //SlotNo : " + iSlotNo + ", VCRID : " + this.m_Info.Port(1).Slot(iSlotNo).E_PANELID + ", 
                    }
                    else
                    {
                        if (this.m_Info.Port(1).Slot(iSlotNo).STEPID != this.m_Info.All.LastStepID)
                        {
                            this.m_Info.Port(1).Slot(iSlotNo).LOTACTION = "NG"; // 현재 설정된 STEPID 와 LotInfo 의 STEPID 가 맞지않다면
                        }
                        else
                        {
                            this.m_Info.Port(1).Slot(iSlotNo).LOTACTION = sLOTAction.ToUpper();
                        }
                        this.m_Info.Port(1).Slot(iSlotNo).STEPID = sStepID;
                        if (this.m_Info.Port(1).Slot(iSlotNo).LOTACTION.Contains("OK") == false 
                            || this.m_Info.Port(1).Slot(iSlotNo).STEPID != this.m_Info.All.LastStepID)
                        {
                            this.m_Info.Port(1).GLSNGCnt++;
                            this.m_Info.Port(1).GLSNGSlot = this.m_Info.Port(1).GLSNGSlot + iSlotNo + ",";
                        }

                        this.m_Info.Port(1).Slot(iSlotNo).H_PANELID = sGlassID;
                        this.m_Info.Port(1).Slot(iSlotNo).PROCESSID = sProcessID;

                        this.m_Info.Port(1).Slot(iSlotNo).PARTID = sPartID;
                        this.m_Info.Port(1).Slot(iSlotNo).STEPID = sStepID;

                        this.m_Info.Port(1).GLSTotalCnt++;
                        this.m_Info.Port(1).PROCESSID = sProcessID;
                        this.m_Info.Port(1).PRODUCTID = sPartID;
                    }

                    // 글라스 1장에 대한 DATA를 받을 때 마다 Port Data를 Backup 한다.
                    this.m_Info.subJobFailLotSave(1);

                    //PROCESSTIME,PORTID,CSTID,SLOTNO,PANELID,STEPID,PROCESSID,PRODUCTID,REASON
                    sCellDataLog = ",01," + this.m_Info.Port(1).CSTID + "," + iSlotNo.ToString().PadLeft(3, '0') + "," +
                                   sGlassID + "," + sStepID + "," + sProcessID + "," + sPartID + "," + sLOTAction;
                    this.m_Info.Set_Log(EnuCommon.LogType.Cell, sCellDataLog);
                }

                this.PSecsDrv.S3F102GLSINFOReply.ACKC6 = dintACKC3;
                this.PSecsDrv.S3F102GLSINFOReply.Reply(this.PSecsDrv.S3F101GLSINFO.Header);
            }
            catch (Exception ex)
            {
                this.m_Info.Set_Log(Common.EnuCommon.LogType.CIM, "", ex.ToString());
            }
        }
반응형