Example #1
0
        private static bool IsLadderGraphOpen(LadderNetworkViewModel ladderNetwork)
        {
            ladderNetwork.ClearSearchedFlag();
            //首先检查元素的基本性质
            if (!Assert(ladderNetwork))
            {
                return(true);
            }
            var rootElements = ladderNetwork.GetElements().Where(x => { return(x.Type == ElementType.Output); });
            //检查上并联错误
            int MinY = rootElements.First().Y;

            foreach (var ele in rootElements)
            {
                if (ele.Y < MinY)
                {
                    MinY = ele.Y;
                }
            }
            var tempQueue = new Queue <BaseViewModel>(rootElements);

            while (tempQueue.Count > 0)
            {
                var item = tempQueue.Dequeue();
                if (!item.IsSearched)
                {
                    item.IsSearched = true;
                    if (item.Y < MinY)
                    {
                        ladderNetwork.ErrorModels.Clear();
                        ladderNetwork.ErrorModels.Add(item);
                        return(true);
                    }
                    foreach (var ele in item.NextElements)
                    {
                        tempQueue.Enqueue(ele);
                    }
                }
            }
            return(false);
        }
Example #2
0
        private static bool IsLadderGraphShort(LadderNetworkViewModel ladderNetwork)
        {
            ladderNetwork.ClearSearchedFlag();
            var rootElements = ladderNetwork.LadderElements.Where(x => { return(x.Type == ElementType.Output); });
            Queue <BaseViewModel> tempQueue = new Queue <BaseViewModel>(rootElements);

            while (tempQueue.Count > 0)
            {
                var ele = tempQueue.Dequeue();
                if (!ele.IsSearched)
                {
                    ele.IsSearched = true;
                    if (ele.Type != ElementType.Null && (!CheckLadderGraphShort(ladderNetwork, ele)))
                    {
                        return(true);
                    }
                }
                foreach (var item in ele.NextElements)
                {
                    tempQueue.Enqueue(item);
                }
            }
            return(false);
        }