public LadderDiagramReplaceNetworksCommand(
     LadderDiagramViewModel ld,
     LadderNetworkViewModel replacedNet, IEnumerable <LadderNetworkViewModel> removedNets, int index,
     NetworkChangeElementArea area = null, NetworkChangeElementArea oldarea = null)
 {
     _ladderDiagram    = ld;
     _replacedNetworks = new SortedSet <LadderNetworkViewModel>()
     {
         replacedNet
     };
     _removedNetworks = new SortedSet <LadderNetworkViewModel>(removedNets);
     _index           = index;
     _oldarea         = oldarea;
     _area            = area;
     if (_oldarea == null)
     {
         _oldarea = NetworkChangeElementArea.Create(
             _ladderDiagram, _removedNetworks);
     }
     if (_area == null)
     {
         _area = NetworkChangeElementArea.Create(
             _ladderDiagram, _replacedNetworks);
     }
 }
 public NetworkReplaceElementsCommand(
     LadderNetworkViewModel network,
     IEnumerable <BaseViewModel> elements,
     IEnumerable <BaseViewModel> oldelements,
     NetworkChangeElementArea area    = null,
     NetworkChangeElementArea oldarea = null)
 {
     _network     = network;
     _elements    = elements;
     _oldelements = oldelements;
     _vlines      = new VerticalLineViewModel[] { };
     _oldvlines   = new VerticalLineViewModel[] { };
     _area        = area;
     _oldarea     = oldarea;
     if (_area == null)
     {
         _area = NetworkChangeElementArea.Create(
             _network, _elements, _vlines);
     }
     if (_oldarea == null)
     {
         _oldarea = NetworkChangeElementArea.Create(
             _network, _oldelements, _oldvlines);
     }
 }
Beispiel #3
0
        public void Initialize()
        {
            pmodel   = new ProjectModel("效果展示");
            ldvmodel = new LadderDiagramViewModel("效果展示", pmodel);
            lnvmodel = ldvmodel.GetNetworks().First();

            ldvmodel.LadderMode = LadderMode.Demo;
            ldvmodel.Visibility = Visibility.Hidden;
            GD_Main.Children.Add(ldvmodel);

            LDDemoViewModel    ldmodel    = new LDDemoViewModel();
            LDWEQDemoViewModel ldweqmodel = new LDWEQDemoViewModel();
            SMOVDemoViewModel  smovmodel  = new SMOVDemoViewModel();

            lnvmodel.LadderCanvas.Children.Add(ldmodel);
            lnvmodel.LadderCanvas.Children.Add(ldweqmodel);
            lnvmodel.LadderCanvas.Children.Add(smovmodel);

            lnvmodel.CommentAreaExpander.IsEnabled = false;
            lnvmodel.ladderExpander.IsEnabled      = false;
            lnvmodel.LadderCanvas.IsEnabled        = false;
            ldvmodel.CommentAreaExpander.IsEnabled = false;
            ldvmodel.ladderExpander.IsEnabled      = false;
            ldvmodel.IsCommentMode = true;

            fbvmodel      = new FuncBlockViewModel("效果展示", null);
            fbvmodel.Code = "void Func(WORD* w1, WORD* w2, WORD* w3)\n{\n\tw3[0] = w1[0] + w2[0];\n}\n";
            fbvmodel.CodeTextBox.IsReadOnly = true;
            GD_Main.Children.Add(fbvmodel);
            fbvmodel.Visibility = Visibility.Hidden;
        }
Beispiel #4
0
        private static bool IsRelativeToModel(LadderNetworkViewModel ladderNetwork, BaseViewModel model, BaseViewModel hLine)
        {
            var relativePoints = GetRightRelativePoint(hLine.X, hLine.Y);

            //判断元素hLine是否与model相连
            return(CheckRelativePoints(ladderNetwork, relativePoints, model, Direction.Right));
        }
Beispiel #5
0
        //短路检测
        private static bool CheckLadderGraphShort(LadderNetworkViewModel ladderNetwork, BaseViewModel checkmodel)
        {
            List <BaseViewModel> eles = checkmodel.NextElements;

            if (eles.Count == 1)
            {
                return(true);
            }
            if (eles.Exists(x => { return(x.Type == ElementType.Null); }) && eles.Count > 1)
            {
                ladderNetwork.ErrorModels.Clear();
                ladderNetwork.ErrorModels.Add(eles.First());//add error element
                return(false);
            }
            Queue <BaseViewModel> tempQueue = new Queue <BaseViewModel>(eles);

            while (tempQueue.Count > 0)
            {
                var ele = tempQueue.Dequeue();
                if (eles.Intersect(ele.NextElements).Count() > 0)
                {
                    ladderNetwork.ErrorModels.Clear();
                    ladderNetwork.ErrorModels.Add(ele);//add error element
                    return(false);
                }
                else
                {
                    foreach (var item in ele.NextElements)
                    {
                        tempQueue.Enqueue(item);
                    }
                }
            }
            return(true);
        }
 public void Uninstall()
 {
     lnvmodel.ElementChanged      -= OnElementChanged;
     lnvmodel.VerticalLineChanged -= OnVerticalLineChanged;
     lnvmodel.PropertyChanged     -= OnNetworkPropertyChanged;
     this.lnvmodel = null;
 }
        private BackTraceElement GetElement(int bpaddr)
        {
            BaseViewModel bvmodel = BreakPointManager.GetBVModel(bpaddr);

            if (bvmodel != null)
            {
                LadderNetworkViewModel lnvmodel = ifacade.ProjectModel.GetNetwork(bvmodel);
                if (lnvmodel == null)
                {
                    return(null);
                }
                LadderDiagramViewModel ldvmodel = lnvmodel.LDVModel;
                SimuBrpoElement        brpo     = new SimuBrpoElement();
                brpo.LDVModel = ldvmodel;
                brpo.LNVModel = lnvmodel;
                brpo.BVModel  = bvmodel;
                return(new BackTraceElement(BackTraceType.Diagram, brpo));
            }
            FuncBlock fblock = BreakPointManager.GetFBlock(bpaddr);

            if (fblock != null)
            {
                FuncBlockViewModel fbvmodel = ifacade.ProjectModel.GetFuncBlock(fblock);
                if (fbvmodel == null)
                {
                    return(null);
                }
                FuncBrpoElement brpo = new FuncBrpoElement();
                brpo.FBVModel = fbvmodel;
                brpo.FBlock   = fblock;
                return(new BackTraceElement(BackTraceType.FuncBlock, brpo));
            }
            return(new BackTraceElement(BackTraceType.External));
        }
Beispiel #8
0
        static private void Analyze(
            LadderNetworkViewModel lnvmodel,
            BaseViewModel bvmodel,
            ref NetworkChangeElementArea area)
        {
            int x = bvmodel.X;
            int y = bvmodel.Y;

            if (bvmodel is VerticalLineViewModel)
            {
                x++;
            }
            if (area == null)
            {
                area                    = new NetworkChangeElementArea();
                area.SU_Select          = SelectStatus.SingleSelected;
                area.SU_Cross           = CrossNetworkState.NoCross;
                area.NetworkNumberStart = lnvmodel.NetworkNumber;
                area.NetworkNumberEnd   = lnvmodel.NetworkNumber;
                area.X1                 = area.X2 = x;
                area.Y1                 = area.Y2 = y;
            }
            else
            {
                area.SU_Select = SelectStatus.MultiSelected;
                area.X1        = Math.Min(area.X1, x);
                area.X2        = Math.Max(area.X2, x);
                area.Y1        = Math.Min(area.Y1, y);
                area.Y2        = Math.Max(area.Y2, y);
            }
        }
Beispiel #9
0
        public static LadderNetworkViewModel CreateLadderNetworkByXElement(XElement xEle, LadderDiagramViewModel parent)
        {
            LadderNetworkViewModel result = new LadderNetworkViewModel(parent, int.Parse(xEle.Attribute("Number").Value));

            result.RowCount = int.Parse(xEle.Attribute("RowCount").Value);
            if (xEle.Attribute("IsMasked") != null)
            {
                result.IsMasked = bool.Parse(xEle.Attribute("IsMasked").Value);
            }
            else
            {
                result.IsMasked = false;
            }
            result.NetworkBrief       = xEle.Element("Brief").Value;
            result.NetworkDescription = xEle.Element("Description").Value;

            XElement contentNode = xEle.Element("LadderContent");

            foreach (var instEle in CreateLadderElementsByXElement(contentNode))
            {
                result.ReplaceElement(instEle);
            }
            foreach (var vline in CreateLadderVertialLineByXElement(contentNode))
            {
                result.ReplaceVerticalLine(vline);
            }
            InstructionCommentManager.RaiseMappedMessageChangedEvent();
            return(result);
        }
Beispiel #10
0
        private void OnBreakpointChanged(object sender, BreakpointChangedEventArgs e)
        {
            LadderNetworkViewModel        lnvmodel = (LadderNetworkViewModel)sender;
            LadderDiagramViewModel        ldvmodel = lnvmodel.LDVModel;
            IEnumerable <SimuBrpoElement> fit      = null;
            SimuBrpoElement ele = null;

            if (e.BPRect_old != null)
            {
                fit = items.Where((_ele) => { return(_ele.BPRect == e.BPRect_old); });
                if (fit.Count() > 0)
                {
                    ele = fit.First();
                    Unactive(ele);
                    items.Remove(ele);
                }
            }
            if (e.BPRect_new != null)
            {
                ele           = new SimuBrpoElement();
                ele.IsActive  = true;
                ele.LDVModel  = ldvmodel;
                ele.LNVModel  = lnvmodel;
                ele.BVModel   = e.BPRect_new.BVModel;
                ele.BPRect    = e.BPRect_new;
                ele.BreakTime = "1";
                items.Add(ele);
                Active(ele);
            }
            PropertyChanged(this, new PropertyChangedEventArgs("Items"));
            ifacade.MainWindow.LACBreakpoint.Show();
        }
Beispiel #11
0
        private static bool CheckRelativePoints(LadderNetworkViewModel ladderNetwork, IEnumerable <IntPoint> relativePoints, BaseViewModel model, Direction direction)
        {
            IntPoint p1    = new IntPoint(); //right
            IntPoint p2    = new IntPoint(); //up
            IntPoint p3    = new IntPoint(); //down
            bool     right = false;
            bool     up    = false;
            bool     down  = false;

            if (direction == Direction.Right)
            {
                p1 = relativePoints.ElementAt(0);
                p2 = relativePoints.ElementAt(1);
                p3 = relativePoints.ElementAt(2);
            }
            else if (direction == Direction.Up)
            {
                p2 = relativePoints.ElementAt(0);
                p1 = relativePoints.ElementAt(1);
            }
            else
            {
                p3 = relativePoints.ElementAt(0);
                p1 = relativePoints.ElementAt(1);
            }
            BaseViewModel element = ladderNetwork.LadderElements[p1.X, p1.Y];

            if (element != null)
            {
                if (element == model)
                {
                    return(true);
                }
                if (element.Type == ElementType.HLine)
                {
                    right = CheckRelativePoints(ladderNetwork, GetRightRelativePoint(p1.X, p1.Y), model, Direction.Right);
                }
            }
            VerticalLineViewModel verticalLine;

            if ((direction == Direction.Up) || (direction == Direction.Right))
            {
                verticalLine = ladderNetwork.LadderVerticalLines[p2.X, p2.Y];
                if (verticalLine != null)
                {
                    up = CheckRelativePoints(ladderNetwork, GetUpRelativePoint(p2.X, p2.Y), model, Direction.Up);
                }
            }
            if ((direction == Direction.Down) || (direction == Direction.Right))
            {
                verticalLine = ladderNetwork.LadderVerticalLines[p3.X, p3.Y];
                if (verticalLine != null)
                {
                    down = CheckRelativePoints(ladderNetwork, GetDownRelativePoint(p3.X, p3.Y), model, Direction.Down);
                }
            }
            //结果必须是三个方向的并
            return(right || up || down);
        }
 public virtual void Dispose()
 {
     lnvmodel.ElementChanged -= OnElementChanged;
     parent   = null;
     bvmodel  = null;
     ldvmodel = null;
     lnvmodel = null;
 }
 public static void Execute(LadderNetworkViewModel ladderNetwork)
 {
     foreach (var KVPair in ladderNetwork.LadderLogicModules.OrderBy(x => { return(x.Key); }))
     {
         HorizontalScan(KVPair.Value);
         VerticalScan(KVPair.Value);
     }
     RemoveEmptyLines(ladderNetwork);
 }
Beispiel #14
0
 public ElementReplaceArgumentCommand(
     LadderNetworkViewModel _lnvmodel, BaseViewModel _bvmodel,
     IList <string> _pstring_old, IList <string> _pstring_new)
 {
     lnvmodel    = _lnvmodel;
     bvmodel     = _bvmodel;
     pstring_old = _pstring_old;
     pstring_new = _pstring_new;
 }
Beispiel #15
0
 public FindElement
 (
     FindWindow _parent,
     BaseViewModel _bvmodel,
     LadderDiagramViewModel _ldvmodel,
     LadderNetworkViewModel _lnvmodel
 ) : base(null, _bvmodel, _ldvmodel, _lnvmodel)
 {
     parent = _parent;
 }
 public void Undo()
 {
     _ladderDiagram.AddNetwork(_removedNetworks, _index, true);
     _ladderDiagram.IDVModel.Setup(_ladderDiagram);
     _ladderDiagram.UpdateModelMessageByNetwork();
     if (_area != null)
     {
         LadderNetworkViewModel lnvmodel = _removedNetworks.First();
         _area.Select(lnvmodel);
     }
 }
 public BreakpointChangedEventArgs
 (
     LadderNetworkViewModel _lnvmodel,
     BreakpointRect _bprect_old,
     BreakpointRect _bprect_new
 )
 {
     LNVModel   = _lnvmodel;
     BPRect_old = _bprect_old;
     BPRect_new = _bprect_new;
 }
 public ErrorReportElement
 (
     PLCOriginInst _inst,
     LadderNetworkViewModel _lnvmodel,
     LadderDiagramViewModel _ldvmodel
 )
 {
     this.inst     = _inst;
     this.lnvmodel = _lnvmodel;
     this.ldvmodel = _ldvmodel;
 }
 public MonitorContextMenu(LadderNetworkViewModel _lnvmodel)
 {
     lnvmodel = _lnvmodel;
     foreach (MenuItem MI_Value in MI_Values)
     {
         Items.Add(MI_Value);
         MI_Value.Click += OnMenuItemClick;
     }
     Items.Add(new Separator());
     Items.Add(MI_Breakpoint);
     MI_Breakpoint.Click += OnMenuItemClick;
 }
 public void Setup(LadderNetworkViewModel _lnvmodel)
 {
     if (lnvmodel != null)
     {
         Uninstall();
     }
     this.lnvmodel                 = _lnvmodel;
     lnvmodel.ElementChanged      += OnElementChanged;
     lnvmodel.VerticalLineChanged += OnVerticalLineChanged;
     lnvmodel.PropertyChanged     += OnNetworkPropertyChanged;
     Update();
 }
Beispiel #21
0
 private static bool Assert(LadderNetworkViewModel ladderNetwork)
 {
     return(ladderNetwork.GetElements().All(x =>
     {
         if (!x.Assert())
         {
             ladderNetwork.ErrorModels.Clear();
             ladderNetwork.ErrorModels.Add(x);
         }
         return x.Assert();
     }) && CheckVerticalLines(ladderNetwork, ladderNetwork.GetVerticalLines()));
 }
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="_lnvmodel">网络的显示模型</param>
 /// <param name="_element">要替换的列表元素</param>
 /// <param name="_command">替换命令</param>
 public NetworkReplaceElementsCommand_ForReplaceWindow
 (
     LadderNetworkViewModel _lnvmodel,
     ReplaceElement _element,
     NetworkReplaceElementsCommand _command
 )
 {
     lnvmodel = _lnvmodel;
     Element  = _element;
     BVM_old  = _command.OldElements.First();
     BVM_new  = _command.NewElements.First();
 }
Beispiel #23
0
 public NetworkReplaceBreakpointCommand(
     LadderNetworkViewModel network,
     IEnumerable <BreakpointRect> oldbreakpoints,
     IEnumerable <BreakpointRect> newbreakpoints,
     NetworkChangeElementArea oldarea = null,
     NetworkChangeElementArea newarea = null)
 {
     _network        = network;
     _oldbreakpoints = new HashSet <BreakpointRect>(oldbreakpoints);
     _newbreakpoints = new HashSet <BreakpointRect>(newbreakpoints);
     _oldarea        = oldarea;
     _newarea        = newarea;
 }
Beispiel #24
0
 private static bool CheckVerticalLines(LadderNetworkViewModel ladderNetwork, IEnumerable <VerticalLineViewModel> VLines)
 {
     foreach (var VLine in VLines)
     {
         if (!ladderNetwork.CheckVerticalLine(VLine))
         {
             ladderNetwork.ErrorModels.Clear();
             ladderNetwork.ErrorModels.Add(VLine);
             return(false);
         }
     }
     return(true);
 }
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="_lnvmodel">网络的显示模型</param>
 /// <param name="_element">要替换的列表元素</param>
 /// <param name="_BVM_old">旧的元件</param>
 /// <param name="_BVM_new">新的元件</param>
 public NetworkReplaceElementsCommand_ForReplaceWindow
 (
     LadderNetworkViewModel _lnvmodel,
     ReplaceElement _element,
     BaseViewModel _BVM_old,
     BaseViewModel _BVM_new
 )
 {
     lnvmodel = _lnvmodel;
     Element  = _element;
     BVM_old  = _BVM_old;
     BVM_new  = _BVM_new;
 }
Beispiel #26
0
        public void Select(LadderNetworkViewModel lnvmodel)
        {
            if (this == Empty)
            {
                return;
            }
            LadderDiagramViewModel ldvmodel = lnvmodel.LDVModel;
            ProjectModel           pmodel   = ldvmodel.ProjectModel;
            InteractionFacade      ifacade  = pmodel.IFacade;

            ldvmodel.AcquireArea(this);
            ifacade.MainTabControl.ShowItem(ldvmodel);
        }
Beispiel #27
0
        //得到与model直连的所有HLine
        private static IEnumerable <BaseViewModel> GetHLines(BaseViewModel model, LadderNetworkViewModel ladderNetwork)
        {
            var hLines   = ladderNetwork.LadderElements.Where(x => { return(x.Type == ElementType.HLine); });
            var tempList = new List <BaseViewModel>();

            foreach (var hLine in hLines)
            {
                if (IsRelativeToModel(ladderNetwork, model, hLine))
                {
                    tempList.Add(hLine);
                }
            }
            return(tempList);
        }
 public NetworkRemoveRowCommand(LadderNetworkViewModel network, int rowNumber)
 {
     _network                    = network;
     _rowNumber                  = rowNumber;
     _oldarea                    = new NetworkChangeElementArea();
     _oldarea.SU_Select          = SelectStatus.MultiSelected;
     _oldarea.SU_Cross           = CrossNetworkState.NoCross;
     _oldarea.NetworkNumberStart = network.NetworkNumber;
     _oldarea.NetworkNumberEnd   = _oldarea.NetworkNumberStart;
     _oldarea.X1                 = 0;
     _oldarea.X2                 = 11;
     _oldarea.Y1                 = rowNumber;
     _oldarea.Y2                 = _oldarea.Y1;
 }
 public LadderDiagramReplaceNetworksCommand(
     LadderDiagramViewModel ld,
     LadderNetworkViewModel net, int index,
     NetworkChangeElementArea area = null, NetworkChangeElementArea oldarea = null)
 {
     _ladderDiagram    = ld;
     _replacedNetworks = new SortedSet <LadderNetworkViewModel>()
     {
         net
     };
     _removedNetworks = new SortedSet <LadderNetworkViewModel>();
     _index           = index;
     _oldarea         = oldarea;
     _area            = area;
 }
 public NetworkRemoveElementsCommand(
     LadderNetworkViewModel network,
     IEnumerable <BaseViewModel> elements, IEnumerable <VerticalLineViewModel> vlines,
     NetworkChangeElementArea area = null)
 {
     _network  = network;
     _elements = elements;
     _vlines   = vlines;
     _area     = area;
     if (_area == null)
     {
         _area = NetworkChangeElementArea.Create(
             _network, _elements, _vlines);
     }
 }