public void TestSetGetAddressSpaceType(
            IOModuleInfo.ADDRESS_SPACE_TYPE expected,
            IOModuleInfo.ADDRESS_SPACE_TYPE actual)
        {
            IOModuleInfo testModule = GetModuleInfoForTest();

            testModule.AddressSpaceType = actual;
            Assert.AreEqual(expected, testModule.AddressSpaceType);
        }
Example #2
0
        /// <summary>
        /// Установка канала ввода\вывода.
        /// </summary>
        /// <param name="addressSpace">Тип адресного пространства канала.
        /// </param>
        /// <param name="node">Номер узла.</param>
        /// <param name="module">Номер модуля.</param>
        /// <param name="physicalKlemme">Номер клеммы.</param>
        /// <param name="comment">Комментарий к каналу.</param>
        /// <param name="error">Строка с описанием ошибки при возникновении
        /// таковой.</param>
        public bool SetChannel(IOModuleInfo.ADDRESS_SPACE_TYPE addressSpace,
                               int node, int module, int physicalKlemme, string comment,
                               out string error, int fullModule, int logicalPort,
                               int moduleOffset, string channelName)
        {
            error = "";

            List <IOChannel> findedChannels = GetChannels(addressSpace,
                                                          channelName, comment);

            if (findedChannels.Count > 0)
            {
                foreach (IOChannel channel in findedChannels)
                {
                    if (!channel.IsEmpty())
                    {
                        error = string.Format(
                            "\"{0}\" : канал {1}.\"{2}\" уже привязан " +
                            "к A{3}.{4} \"{5}\".",
                            name, addressSpace, comment,
                            100 * (channel.Node + 1) + channel.Module,
                            channel.PhysicalClamp, channel.Comment);
                        return(false);
                    }

                    channel.SetChannel(node, module, physicalKlemme,
                                       fullModule, logicalPort, moduleOffset);

                    List <IONode> nodes = IOManager.GetInstance().IONodes;
                    if (nodes.Count > node &&
                        nodes[node].IOModules.Count > module - 1)
                    {
                        nodes[node].IOModules[module - 1]
                        .AssignChannelToDevice(
                            physicalKlemme, this, channel);
                    }
                }
                return(true);
            }
            else
            {
                error = string.Format(
                    "\"{0}\" : нет такого канала {1}:\"{2}\".",
                    name, addressSpace, comment);
                return(false);
            }
        }
Example #3
0
        /// <summary>
        /// Получение модуля по номеру узла и смещение (поддержка считывания
        /// информации об устройствах из старого описания *.ds4).
        /// </summary>
        /// <param name="n">Номер (c единицы).</param>
        /// <param name="offset">Смещение.</param>
        /// <param name="addressSpaceType">Тип адресного пространства.</param>
        public IOModule GetModuleByOffset(int n, int offset,
                                          IOModuleInfo.ADDRESS_SPACE_TYPE addressSpaceType)
        {
            IOModule res = null;

            if (iONodes.Count >= n && n > 0)
            {
                int idx = 0;

                foreach (IOModule module in IONodes[n - 1].IOModules)
                {
                    if (module.Info.AddressSpaceType == addressSpaceType)
                    {
                        int moduleOffset = 0;
                        switch (addressSpaceType)
                        {
                        case IOModuleInfo.ADDRESS_SPACE_TYPE.DI:
                        case IOModuleInfo.ADDRESS_SPACE_TYPE.AI:
                            moduleOffset = module.InOffset;
                            break;

                        case IOModuleInfo.ADDRESS_SPACE_TYPE.DO:
                        case IOModuleInfo.ADDRESS_SPACE_TYPE.AO:
                            moduleOffset = module.OutOffset;
                            break;
                        }

                        if (moduleOffset > offset)
                        {
                            break;
                        }
                        else
                        {
                            res = module;
                        }
                    }

                    idx++;
                }
            }

            return(res);
        }
Example #4
0
        /// <summary>
        /// Сброс канала ввода\вывода.
        /// </summary>
        /// <param name="addressSpace">Тип адресного пространства канала.
        /// </param>
        /// <param name="comment">Комментарий к каналу.</param>
        /// <param name="error">Строка с описанием ошибки при возникновении
        /// таковой.</param>
        public bool ClearChannel(
            IOModuleInfo.ADDRESS_SPACE_TYPE addressSpace,
            string comment, string channelName)
        {
            List <IOChannel> findedChannels = GetChannels(addressSpace,
                                                          channelName, comment);

            if (findedChannels.Count > 0)
            {
                foreach (IOChannel channel in findedChannels)
                {
                    channel.Clear();
                }
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #5
0
        /// <summary>
        /// Получить каналы устройства, которые привязывались или будут
        /// привязываться к модулю ввода-вывода
        /// </summary>
        /// <param name="addressSpace">Тип адресного пространства
        /// модуля ввода-вывода</param>
        /// <param name="channelName">Имя канала для IO-Link</param>
        /// <param name="comment">Комментарий канала</param>
        /// <returns></returns>
        private List <IOChannel> GetChannels(
            IOModuleInfo.ADDRESS_SPACE_TYPE addressSpace, string channelName,
            string comment)
        {
            var IO = new List <IOChannel>();

            switch (addressSpace)
            {
            case IOModuleInfo.ADDRESS_SPACE_TYPE.DO:
                IO.AddRange(DO);
                break;

            case IOModuleInfo.ADDRESS_SPACE_TYPE.DI:
                IO.AddRange(DI);
                break;

            case IOModuleInfo.ADDRESS_SPACE_TYPE.AO:
                IO.AddRange(AO);
                break;

            case IOModuleInfo.ADDRESS_SPACE_TYPE.AI:
                IO.AddRange(AI);
                break;

            case IOModuleInfo.ADDRESS_SPACE_TYPE.AOAI:
                IO.AddRange(AO);
                IO.AddRange(AI);
                break;

            case IOModuleInfo.ADDRESS_SPACE_TYPE.DODI:
                IO.AddRange(DO);
                IO.AddRange(DI);
                break;

            case IOModuleInfo.ADDRESS_SPACE_TYPE.AOAIDODI:
                switch (channelName)
                {
                default:
                    IO.AddRange(AO);
                    IO.AddRange(AI);
                    break;

                case "DO":
                    IO.AddRange(DO);
                    break;

                case "DI":
                    IO.AddRange(DI);
                    break;
                }
                break;
            }

            bool haveNewLineSymbol = comment
                                     .Contains(CommonConst.NewLineWithCarriageReturn) ||
                                     comment.Contains(CommonConst.NewLine);

            if (haveNewLineSymbol)
            {
                comment = comment
                          .Replace(CommonConst.NewLineWithCarriageReturn, "");
                comment = comment
                          .Replace(CommonConst.NewLine, "");
            }

            List <IOChannel> findedChannels = IO.FindAll(delegate(IOChannel channel)
            {
                return(channel.Comment == comment);
            });

            return(findedChannels);
        }