ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SecsDrv_S3F101 GLSINFO processing example source
    IT Story/C# & WPF 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());
                }
            }
    반응형

    댓글

Designed by Tistory.