Exemplo n.º 1
0
        /// <summary>
        /// 按地址查找变量
        /// </summary>
        /// <param name="cpu">控制器</param>
        /// <param name="address">地址</param>
        public static IBLTag FindRootTagByAddress(this ICoreObject cpu,
                                                  string address,
                                                  ISynchronizeInvoke synchronizer = null)
        {
            ISynchronizeInvoke UsingSynchronizer;

            if (synchronizer == null)
            {
                UsingSynchronizer = cpu.GetSynchronizer();
            }
            else
            {
                UsingSynchronizer = synchronizer;
            }
            return(TiaStarter.RunInSynchronizer(UsingSynchronizer,
                                                (p_cpu, p_address, p_synchronizer) =>
            {
                ITagService tagService = p_cpu.GetTagService();
                RootTagCollectionProxy rtcp = p_cpu.FindRootTags(p_synchronizer);
                List <IBLTag> tags = rtcp.Tags;
                foreach (IBLTag tag in tags)
                {
                    if (tag.LogicalAddress == p_address)
                    {
                        return tag;
                    }
                }
                return null;
            }, cpu, address, UsingSynchronizer) as IBLTag);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 取得控制器所有变量
        /// </summary>
        public static RootTagCollectionProxy FindRootTags(this ICoreObject cpu,
                                                          ISynchronizeInvoke synchronizer = null)
        {
            ISynchronizeInvoke UsingSynchronizer;

            if (synchronizer == null)
            {
                UsingSynchronizer = cpu.GetSynchronizer();
            }
            else
            {
                UsingSynchronizer = synchronizer;
            }
            return(TiaStarter.RunInSynchronizer(UsingSynchronizer,
                                                (p_cpu) =>
            {
                ITagService tagService = cpu.GetTagService();
                IList list = tagService.FindRootTags(p_cpu, cpu.GetTagType(), "InverseTarget", true);

                RootTagCollectionProxy rtcp = new RootTagCollectionProxy(list, UsingSynchronizer);
                return rtcp;
            }, cpu) as RootTagCollectionProxy);
        }