通過多年的從事SECS/GEM開發,還有研究。
寫出了以下軟件,與你們分享, 還有C# Demo
整理出標準API接口,以下邊C#代碼。ui
// 開始 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 369883431this