Beispiel #1
0
        /// <summary>
        /// Чтение модулей ввода-вывода
        /// </summary>
        /// <param name="isContainsNodes">Прочитаны или нет узлы</param>
        private void ReadModules(bool isContainsNodes)
        {
            foreach (var function in functionsForSearching)
            {
                bool needSkipModule = NeedSkipModule(function);
                if (needSkipModule == true)
                {
                    continue;
                }

                var match             = IONameRegex.Match(function.VisibleName);
                int moduleNumber      = Convert.ToInt32(match.Groups["n"].Value);
                int shortModuleNumber = moduleNumber % 100;
                int shortNodeNumber;
                if (isContainsA1 == true)
                {
                    shortNodeNumber = moduleNumber / 100;
                }
                else
                {
                    shortNodeNumber = moduleNumber / 100 - numberA1;
                }

                string    type = GetModuleTypeFromFunction(function);
                IO.IONode node = IOManager[shortNodeNumber];
                if (IOManager[shortNodeNumber] != null)
                {
                    IO.IOModuleInfo moduleInfo = GetIOModuleInfo(function,
                                                                 type);

                    int inOffset;
                    int outOffset;
                    GetInAndOutOffset(shortNodeNumber, moduleInfo,
                                      out inOffset, out outOffset);

                    IO.IOModule nodeModule = new IO.IOModule(inOffset,
                                                             outOffset, moduleInfo, moduleNumber, function);

                    node.DI_count += moduleInfo.DI_count;
                    node.DO_count += moduleInfo.DO_count;
                    node.AI_count += moduleInfo.AI_count;
                    node.AO_count += moduleInfo.AO_count;
                    node.SetModule(nodeModule, shortModuleNumber);
                }
                else
                {
                    ProjectManager.GetInstance().AddLogMessage($"Для" +
                                                               $" \"{function.VisibleName}\" - \"{type}\", " +
                                                               $"не найден узел номер {++shortNodeNumber}.");
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Чтение узлов ввода-вывода.
        /// </summary>
        private void ReadNodes()
        {
            foreach (var function in functionsForSearching)
            {
                bool needToSkip = NeedSkipNode(function);
                if (needToSkip == true)
                {
                    continue;
                }

                isContainsNodes = true;
                var    match      = IONameRegex.Match(function.VisibleName);
                int    nodeNumber = Convert.ToInt32(match.Groups["n"].Value);
                string name       = $"A{nodeNumber}";
                string ipAdress   = GetIPAdressFromFunction(function);
                string type       = GetNodeTypeFromFunction(function);

                if (type != "")
                {
                    if (isContainsA1 == true)
                    {
                        if (nodeNumber == numberA1)
                        {
                            IOManager.AddNode(numberA1, type, ipAdress, name);
                        }
                        else
                        {
                            IOManager.AddNode(nodeNumber / 100 + numberA1, type,
                                              ipAdress, name);
                        }
                    }
                    else
                    {
                        IOManager.AddNode(nodeNumber / 100, type, ipAdress,
                                          name);
                    }
                }
                else
                {
                    ProjectManager.GetInstance().AddLogMessage($"У модуля \"" +
                                                               $"{function.VisibleName}\" не задан параметр изделия" +
                                                               $" (номер типа изделия).");
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Нужно ли пропустить модуль ввода-вывода.
        /// </summary>
        /// <param name="function">Функция для проверки</param>
        /// <returns></returns>
        private bool NeedSkipModule(Function function)
        {
            bool skip = NeedSkipFunction(function);

            if (skip == true)
            {
                return(skip);
            }

            var match        = IONameRegex.Match(function.VisibleName);
            int moduleNumber = Convert.ToInt32(match.Groups["n"].Value);

            if (moduleNumber % 100 == 0 || moduleNumber == numberA1)
            {
                skip = true;
                return(skip);
            }

            return(skip);
        }
Beispiel #4
0
        /// <summary>
        /// Нужно ли пропустить узел ввода-вывода.
        /// </summary>
        /// <param name="function">Функция</param>
        /// <returns></returns>
        private bool NeedSkipNode(Function function)
        {
            bool skip = NeedSkipFunction(function);

            if (skip == true)
            {
                return(skip);
            }

            var match      = IONameRegex.Match(function.VisibleName);
            int nodeNumber = Convert.ToInt32(match.Groups["n"].Value);

            if (nodeNumber % 100 != 0 && nodeNumber != numberA1)
            {
                skip = true;
                return(skip);
            }

            return(skip);
        }
Beispiel #5
0
        /// <summary>
        /// Функция проверки наличия узлового модуля
        /// типа А1, на котором находится управляющая
        /// программа (для Phoenix Contact)
        /// </summary>
        private bool CheckA1()
        {
            List <int> theNumbers = new List <int>();

            foreach (var function in functionsForSearching)
            {
                Match match = IONameRegex.Match(function.VisibleName);
                if (match.Success)
                {
                    int number = Convert.ToInt32(match.Groups["n"].Value);
                    theNumbers.Add(number);
                }
            }

            if (theNumbers.Contains(numberA1) == true)
            {
                return(true);
            }

            return(false);
        }
Beispiel #6
0
        /// <summary>
        /// Нужно ли пропустить функцию.
        /// </summary>
        /// <param name="function">Функция для проверки</param>
        /// <returns></returns>
        private bool NeedSkipFunction(Function function)
        {
            var skip  = false;
            var match = IONameRegex.Match(function.VisibleName);

            if (match.Success == false ||
                !function.Properties.FUNC_SUPPLEMENTARYFIELD[1].IsEmpty)
            {
                skip = true;
                return(skip);
            }

            if (function.Articles.GetLength(0) == 0)
            {
                ProjectManager.GetInstance().AddLogMessage($"У модуля \"" +
                                                           $"{function.VisibleName}\" не задано изделие.");
                skip = true;
                return(skip);
            }

            return(skip);
        }
Beispiel #7
0
        /// <summary>
        /// Чтение модулей ввода-вывода
        /// </summary>
        /// <param name="isContainsNodes">Прочитаны или нет узлы</param>
        private void ReadModules(bool isContainsNodes)
        {
            foreach (var function in functionsForSearching)
            {
                bool needSkipModule = NeedSkipModule(function);
                if (needSkipModule == true)
                {
                    continue;
                }

                var match             = IONameRegex.Match(function.VisibleName);
                int moduleNumber      = Convert.ToInt32(match.Groups["n"].Value);
                int shortModuleNumber = moduleNumber % 100;
                int shortNodeNumber;
                if (isContainsA1 == true)
                {
                    shortNodeNumber = moduleNumber / 100;
                }
                else
                {
                    shortNodeNumber = moduleNumber / 100 - numberA1;
                }

                string    type = GetModuleTypeFromFunction(function);
                IO.IONode node = IOManager[shortNodeNumber];
                if (IOManager[shortNodeNumber] != null)
                {
                    IO.IOModuleInfo moduleInfo = GetIOModuleInfo(function,
                                                                 type);

                    int inOffset;
                    int outOffset;
                    GetInAndOutOffset(shortNodeNumber, moduleInfo,
                                      out inOffset, out outOffset);

                    IO.IOModule nodeModule = new IO.IOModule(inOffset,
                                                             outOffset, moduleInfo, moduleNumber, function);

                    node.DI_count += moduleInfo.DICount;
                    node.DO_count += moduleInfo.DOCount;
                    node.AI_count += moduleInfo.AICount;
                    node.AO_count += moduleInfo.AOCount;

                    bool moduleNotExist = node[shortModuleNumber - 1] == null;
                    if (moduleNotExist)
                    {
                        node.SetModule(nodeModule, shortModuleNumber);
                    }
                    else
                    {
                        Logs.AddMessage($"Главная функция модуля " +
                                        $"ввода-вывода \'{function.VisibleName}\' " +
                                        $"определяется дважды, проверьте расстановку " +
                                        $"главных функций на модулях. ");
                    }
                }
                else
                {
                    Logs.AddMessage($"Для" +
                                    $" \"{function.VisibleName}\" - \"{type}\", " +
                                    $"не найден узел номер {++shortNodeNumber}.");
                }
            }
        }