半導體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);

        }

 

 

 

 

QQ 369883431

 


免責聲明!

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



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