Пример #1
0
        /// <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();
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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;
            }
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
0
        /// <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);
            }
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        /// <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);
            }
        }