/// <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); }
/// <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); }