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

SEMI SECS/GEM標準概述

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

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

SECS/GEM是SEMI中的半導體設備通信標準框架

通常來講,SECS/GEM標準定義了信息、狀態機和情境,設備與工廠選擇性的實現,來讓工廠軟件可以控制並監視製造設備。spa

實現

GEM 接口接口

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

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

  主機選擇性實現通信標準,由於它只設定設備的預期行爲。若是要使用接口與功能,主機與設備必須實現具體、清晰功能與行爲。get

通信

  SECS/GEM SEMI鏈接性標準定義了主機和設備開始創建通信的方式,而且還定義了當通信中斷時從新創建通信的方式。在線識別方法負責驗證設備的硬件和軟件標識。終端服務功能容許主機操做員和設備操做員在控制檯上交換手動輸入的文本。cmd

控制

  SECS/GEM SEMI鏈接性標準歸納了主機與設備操做員之間的合做等級的控制狀態模型。設備提供三種基本的主機控制等級:離線,在線/本地,以及在線/遠程,肯定了主機控制和監控設備的能力。設備操做員設定主機控制的等級。遠程控制功能容許主機發送諸如「啓動」、「中止」、「暫停」、「繼續」和「中斷」這樣的指令,用以控制設備的工做過程。string

運做通知

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

 事件報告

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

過程程序管理

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

設備控制和配置

  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;        }

相關文章
相關標籤/搜索