半导体semi通讯的协议SECS/GEM

经过多年的从事SECS/GEM开发,还有研究。
写出了如下软件,与大家分享, 还有C# Demo
整理出标准API接口,如下边C#代码。

  // 开始
        public long start()
        {
            InitSecs();
            InitWhenever();

            MapManage.SetSecsEquipObject(m_nKey, this);
            return m_pImpl.Start(m_pMDLN, "");
        }
        
        // 停止
        public void Abort()
        {
            m_pImpl.Abort();           
            MapManage.DeleteSecsEquipObject(m_nKey);
        }
        
        // 警告处理
        public void AlarmAdd(int ALID, string ALTX)
        {
            AlarmAdd(ALID, ALTX, ALID, ALID+1);
        }
        
        
        // Extended version of AlarmAdd used when you need to customize the event report
        // CEID's used for the Alarm Set and Alarm Clear events
        // 警告与CEID不能相同
        // ALID:Alaram ID
        // ALTX:描述
        // alarmSetCEID: 设置ID
        // alarmClearCEID: 清除ID
        public void AlarmAdd(int ALID, string ALTX, int alarmSetCEID, int alarmClearCEID) 
        {
            // eq_alarm_add, ALID, ALTX, SetCEID, ClearCEID 

            if ( ALTX.Length > 120) 
            {
                throw new Exception("ALTX should be <=120 ASCII characters");
            }
            
            string cmd = "eq_alarm_add";

            CListOperate.listAppend(ref cmd, ALID.ToString(), ALTX,
                alarmSetCEID.ToString(), alarmClearCEID.ToString());

            m_pImpl.toolCmd(cmd);
        }

        // 报警使能
        public void AlarmEnable(int ALID, bool bEnabled)
        {
            // eq_alarm_enable, ALID, Enable
            string cmd = "eq_alarm_enable";
            CListOperate.listAppend(ref cmd, ALID.ToString(), bEnabled?"1":"0");        
            m_pImpl.toolCmd(cmd);
        }


        // 报警设置
        public void AlarmSet(int ALID, bool bSet)
        {
            // eq_alarm_set, ALID, set
            string cmd = "eq_alarm_set";
            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 = "eq_alarm_get_list";
            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;
        }


        public void SendSingleTerminal(string content)
        {
            string type = "B 0";
            string msg = "L";
            string info = "A";

            CListOperate.listAppend(ref info, content);
            CListOperate.listAppend(ref msg, type, info);

            string Reply = "";
            m_pImpl.SendMsg(msg, ref Reply);

        }

猜你喜欢

转载自www.cnblogs.com/semisecs/p/10488489.html