/// <summary> /// Инициализировать теги КП и группы переменных на основе конфигурации /// </summary> private void InitKPTags() { int groupCnt = config.VarGroups.Count; List <TagGroup> tagGroups = new List <TagGroup>(groupCnt); List <bool> isBitsList = new List <bool>(); varGroups = new VarGroup[groupCnt]; int signal = 1; for (int i = 0; i < groupCnt; i++) { KpConfig.VarGroup configVarGroup = config.VarGroups[i]; int varCnt = configVarGroup.Variables.Count; TagGroup tagGroup = new TagGroup(configVarGroup.Name); VarGroup varGroup = new VarGroup(configVarGroup.Name, varCnt, signal); for (int j = 0; j < varCnt; j++) { KpConfig.Variable configVar = configVarGroup.Variables[j]; KPTag kpTag = new KPTag(signal++, configVar.Name); tagGroup.KPTags.Add(kpTag); varGroup.Variables[j] = CreateVariable(configVar); isBitsList.Add(configVar.IsBits); } tagGroups.Add(tagGroup); varGroups[i] = varGroup; } InitKPTags(tagGroups); strVals = new string[KPTags.Length]; Array.Clear(strVals, 0, strVals.Length); isBitsArr = isBitsList.ToArray(); }
/// <summary> /// Инициализировать теги КП и группы переменных на основе конфигурации /// </summary> private void InitKPTags() { int groupCnt = config.VarGroups.Count; List <TagGroup> tagGroups = new List <TagGroup>(groupCnt); varGroups = new VarGroup[groupCnt]; int signal = 1; for (int i = 0; i < groupCnt; i++) { Config.VarGroup configVarGroup = config.VarGroups[i]; int varCnt = configVarGroup.Variables.Count; TagGroup tagGroup = new TagGroup(configVarGroup.Name); VarGroup varGroup = new VarGroup(configVarGroup.Name, varCnt, signal); for (int j = 0; j < varCnt; j++) { Config.Variable configVar = configVarGroup.Variables[j]; KPTag kpTag = new KPTag(signal++, configVar.Name); tagGroup.KPTags.Add(kpTag); varGroup.VarNames[j] = configVar.Name; varGroup.Variables[j] = CreateVariable(configVar); } tagGroups.Add(tagGroup); varGroups[i] = varGroup; } InitKPTags(tagGroups); }
/// <summary> /// Загрузить конфигурацию из файла /// </summary> public bool Load(string fileName, out string errMsg) { SetToDefault(); try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); // загрузка параметров XmlNode paramsNode = xmlDoc.DocumentElement.SelectSingleNode("Params"); if (paramsNode != null) { XmlNodeList paramNodes = paramsNode.SelectNodes("Param"); foreach (XmlElement paramElem in paramNodes) { string name = paramElem.GetAttribute("name"); string nameL = name.ToLowerInvariant(); string val = paramElem.GetAttribute("value"); try { if (nameL == "readcommunity") ReadCommunity = val; else if (nameL == "writecommunity") WriteCommunity = val; else if (nameL == "snmpversion") SnmpVersion = int.Parse(val); } catch { throw new Exception(string.Format(CommonPhrases.IncorrectXmlParamVal, name)); } } } // загрузка групп переменных XmlNode varGroupsNode = xmlDoc.DocumentElement.SelectSingleNode("VarGroups"); if (varGroupsNode != null) { XmlNodeList varGroupNodes = varGroupsNode.SelectNodes("VarGroup"); foreach (XmlElement varGroupElem in varGroupNodes) { VarGroup varGroup = new VarGroup(); varGroup.Name = varGroupElem.GetAttribute("name"); varGroup.Parent = this; // загрузка переменных XmlNodeList variableNodes = varGroupElem.SelectNodes("Variable"); foreach (XmlElement variableElem in variableNodes) { Variable variable = new Variable(); variable.Name = variableElem.GetAttribute("name"); variable.OID = variableElem.GetAttribute("oid"); variable.Parent = varGroup; varGroup.Variables.Add(variable); } VarGroups.Add(varGroup); } } errMsg = ""; return true; } catch (Exception ex) { errMsg = CommPhrases.LoadKpSettingsError + ":" + Environment.NewLine + ex.Message; return false; } }
/// <summary> /// Загрузить конфигурацию из файла /// </summary> public bool Load(string fileName, out string errMsg) { SetToDefault(); try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); // загрузка параметров XmlNode paramsNode = xmlDoc.DocumentElement.SelectSingleNode("Params"); if (paramsNode != null) { XmlNodeList paramNodes = paramsNode.SelectNodes("Param"); foreach (XmlElement paramElem in paramNodes) { string name = paramElem.GetAttribute("name"); string nameL = name.ToLowerInvariant(); string val = paramElem.GetAttribute("value"); try { if (nameL == "readcommunity") { ReadCommunity = val; } else if (nameL == "writecommunity") { WriteCommunity = val; } else if (nameL == "snmpversion") { SnmpVersion = int.Parse(val); } } catch { throw new Exception(string.Format(CommonPhrases.IncorrectXmlParamVal, name)); } } } // загрузка групп переменных XmlNode varGroupsNode = xmlDoc.DocumentElement.SelectSingleNode("VarGroups"); if (varGroupsNode != null) { XmlNodeList varGroupNodes = varGroupsNode.SelectNodes("VarGroup"); foreach (XmlElement varGroupElem in varGroupNodes) { VarGroup varGroup = new VarGroup(); varGroup.Name = varGroupElem.GetAttribute("name"); varGroup.Parent = this; // загрузка переменных XmlNodeList variableNodes = varGroupElem.SelectNodes("Variable"); foreach (XmlElement variableElem in variableNodes) { Variable variable = new Variable(); variable.Name = variableElem.GetAttribute("name"); variable.OID = variableElem.GetAttribute("oid"); variable.IsBits = variableElem.GetAttrAsBool("isBits"); variable.Parent = varGroup; varGroup.Variables.Add(variable); } VarGroups.Add(varGroup); } } errMsg = ""; return(true); } catch (Exception ex) { errMsg = CommPhrases.LoadKpSettingsError + ":" + Environment.NewLine + ex.Message; return(false); } }
/// <summary> /// Выполнить запрос переменных группы /// </summary> private void Request(VarGroup varGroup) { int varCnt = varGroup.Variables.Length; if (lastCommSucc) { lastCommSucc = false; int tryNum = 0; while (RequestNeeded(ref tryNum)) { WriteToLog(varGroup.ReqDescr); try { if (varCnt > 0) { // получение значений переменных IList<Variable> receivedVars = Messenger.Get( snmpVersion, endPoint, readCommunity, varGroup.Variables, ReqParams.Timeout); if (receivedVars == null || receivedVars.Count != varCnt) throw new Exception(KpPhrases.VariablesMismatch); for (int i = 0, tagInd = varGroup.StartSignal - 1; i < varCnt; i++, tagInd++) { Variable receivedVar = receivedVars[i]; if (receivedVar.Id != varGroup.Variables[i].Id) throw new Exception(KpPhrases.VariablesMismatch); WriteToLog(varGroup.VarNames[i] + " = " + ConvertVarDataToString(receivedVar.Data)); // расшифровка данных переменной и установка данных тега КП SetCurData(tagInd, DecodeVarData(receivedVar.Data)); } } else { WriteToLog(KpPhrases.NoVariables); } lastCommSucc = true; } catch (Exception ex) { // ex.ToString() содержит более подробную информацию о причине ошибки по сравнению с ex.Message WriteToLog((Localization.UseRussian ? "Ошибка при получении переменных: " : "Error getting variables: ") + ex.ToString()); } // завершение запроса FinishRequest(); tryNum++; } // установка недостоверности данных в случае ошибки опроса заданной группы if (!lastCommSucc && tryNum > 0) InvalidateCurData(varGroup.StartSignal - 1, varCnt); } else { // установка недостоверности данных в случае ошибки опроса предыдущей группы InvalidateCurData(varGroup.StartSignal - 1, varCnt); } }
/// <summary> /// Инициализировать теги КП и группы переменных на основе конфигурации /// </summary> private void InitKPTags() { int groupCnt = config.VarGroups.Count; List<TagGroup> tagGroups = new List<TagGroup>(groupCnt); varGroups = new VarGroup[groupCnt]; int signal = 1; for (int i = 0; i < groupCnt; i++) { Config.VarGroup configVarGroup = config.VarGroups[i]; int varCnt = configVarGroup.Variables.Count; TagGroup tagGroup = new TagGroup(configVarGroup.Name); VarGroup varGroup = new VarGroup(configVarGroup.Name, varCnt, signal); for (int j = 0; j < varCnt; j++) { Config.Variable configVar = configVarGroup.Variables[j]; KPTag kpTag = new KPTag(signal++, configVar.Name); tagGroup.KPTags.Add(kpTag); varGroup.VarNames[j] = configVar.Name; varGroup.Variables[j] = CreateVariable(configVar); } tagGroups.Add(tagGroup); varGroups[i] = varGroup; } InitKPTags(tagGroups); }
/// <summary> /// Выполнить запрос переменных группы /// </summary> private void Request(VarGroup varGroup) { int varCnt = varGroup.Variables.Length; if (lastCommSucc) { lastCommSucc = false; int tryNum = 0; while (RequestNeeded(ref tryNum)) { WriteToLog(varGroup.ReqDescr); try { if (varCnt > 0) { // получение значений переменных IList <Variable> receivedVars = Messenger.Get( snmpVersion, endPoint, readCommunity, varGroup.Variables, ReqParams.Timeout); if (receivedVars == null || receivedVars.Count != varCnt) { throw new Exception(KpPhrases.VariablesMismatch); } for (int i = 0, tagInd = varGroup.StartSignal - 1; i < varCnt; i++, tagInd++) { Variable receivedVar = receivedVars[i]; if (receivedVar.Id != varGroup.Variables[i].Id) { throw new Exception(KpPhrases.VariablesMismatch); } ISnmpData snmpData = receivedVar.Data; bool isBits = isBitsArr[tagInd]; WriteToLog(KPTags[tagInd].Name + " = " + ConvertVarDataToString(snmpData, isBits)); // расшифровка данных переменной и установка данных тега КП bool decodeOK = DecodeVarData(snmpData, isBits, out SrezTableLight.CnlData tagData, out bool isString); SetCurData(tagInd, tagData); strVals[tagInd] = isString ? ConvertVarDataToString(snmpData, isBits, MaxTagStrLen, false) : null; } } else { WriteToLog(KpPhrases.NoVariables); } lastCommSucc = true; } catch (Exception ex) { // ex.ToString() содержит более подробную информацию о причине ошибки по сравнению с ex.Message WriteToLog((Localization.UseRussian ? "Ошибка при получении переменных: " : "Error getting variables: ") + ex.ToString()); } // завершение запроса FinishRequest(); tryNum++; } // установка недостоверности данных в случае ошибки опроса заданной группы if (!lastCommSucc && tryNum > 0) { InvalidateCurData(varGroup.StartSignal - 1, varCnt); } } else { // установка недостоверности данных в случае ошибки опроса предыдущей группы InvalidateCurData(varGroup.StartSignal - 1, varCnt); } }