SECS/GEM半導體協議數據采集


SEMI SECS/GEM標准概述

SECS/GEM是由國際半導體設備與材料協會(SEMI)的會員一起構建的連接性標准。

該標准應用於在設備和工廠的MES,CIM等控制系統間建立通訊。

SECS/GEM是SEMI中的半導體設備通訊標准

一般來說,SECS/GEM標准定義了信息、狀態機和情境,設備與工廠選擇性的實現,來讓工廠軟件能夠控制並監視制造設備。

實現

GEM 接口

  GEM 工廠自動化提供了框架,從遠程主機監控和控制設備。允許來自不同供應商的設
備在制造工廠中自動化。
  GEM 標准定義了一組基本的 GEM 要求和一組額外的 GEM 功能。 GEM 要求每個 GEM
界面中都包含特定元素。 但是,它鼓勵每個接口都具有獨特的機器特定元素。

  在使用SECS/GEM標准的工廠內部,存在主機和設備這兩者。由設備方實施和遵守SEMI標准的運行軟件。制造商(工廠)構建與設備接口建立通訊的主機軟件,進而實現工廠對設備的控制。

  主機選擇性實現通訊標准,因為它只設定設備的預期行為。如果要使用接口與功能,主機與設備必須實現具體、清晰功能與行為。

通訊

  SECS/GEM SEMI連接性標准定義了主機和設備開始建立通訊的方式,並且還定義了當通訊中斷時重新建立通訊的方式。在線識別方法負責驗證設備的硬件和軟件標識。終端服務功能允許主機操作員和設備操作員在控制台上交換手動輸入的文本。

控制

  SECS/GEM SEMI連接性標准概括了主機與設備操作員之間的合作等級的控制狀態模型。設備提供三種基本的主機控制等級:離線,在線/本地,以及在線/遠程,確定了主機控制和監控設備的能力。設備操作員設定主機控制的等級。遠程控制功能允許主機發送諸如“啟動”、“停止”、“暫停”、“繼續”和“中斷”這樣的指令,用以控制設備的工作過程。

運作通知

  收集事件和警報功能使主機能監控設備的運作情況。設備收集事件功能會將重要的正常活動和異常活動通知主機。當潛在的危險活動出現並隨后被清除時,設備警報功能會通知主機。主機設定哪些收集事件和警報需要通知。SECS/GEM連接性標准要求特定的事件必須有通知,但一般會給設備定義額外的事件,以便主機監控具體設備相關的活動。

 事件報告

  主機可以將 設備 配置為在某種狀態 時自動在報告中發送 數據 。 這種強大的數據收集方法可以收集更多數據 。

過程程序管理

  處理程序管理提供了在主機和設備之間傳輸處理 程序的方法。主機還可以查詢可用的過程程序列表並刪除過程程序。

設備控制和配置

  GEM允許主機 用來控制和配置機器。

遠程命令

  每個GEM 接口定義一組遠程命令。機器也可以實現自定義命令。

設備常數

  每個GEM 接口定義一組 GEM 所需的常量。設備常量可以配置設備軟件和硬件的行為。

一段實現

 // 報警設置
        public void AlarmSet(int ALID, bool bSet)
        {
            // eq_alarm_set, ALID, set
            string cmd = "";
            CListOperate.listAppend(ref cmd, ALID.ToString(), bSet ? "1" : "0");
            m_pImpl.toolCmd(cmd);
        }

        // 報警獲取列表
        public List<AlarmInfo> AlarmGetList()
        {
            // eq_alarm_get_list
            // ALID, ALTX, Enable, Set

            string cmd = "";
            RcResult reply;
            reply = m_pImpl.toolCmdReply(cmd);

            // 解析            
            List<AlarmInfo> listInfo = new List<AlarmInfo>();
            if (reply.rc == 0 && reply.result != null)
            {
                string[] listAlarm = null;
                string[] element = null;
                CListOperate.listSplit(reply.result, ref listAlarm);

                for (int i = 0; i < listAlarm.Length; i++ )
                {
                    CListOperate.listSplit(listAlarm[i], ref element);
                    if (element != null && element.Length > 3)
                    {
                        AlarmInfo info = new AlarmInfo();
                        info.ALID = element[0];
                        info.ALTX = element[1];
                        info.bEnable = element[2]=="1"?true:false;
                        info.bSet = element[3] == "1" ? true : false;
                        listInfo.Add(info);
                    }
                }
            }
            return listInfo;
        }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM