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

猜你喜欢

转载自www.cnblogs.com/semisecs/p/11822082.html
今日推荐