public static FuncBlockViewModel CreateFuncBlockByXElement(XElement xEle, ProjectModel pmodel) { FuncBlockViewModel result = new FuncBlockViewModel(xEle.Attribute("Name").Value, pmodel); result.Code = xEle.Value; return(result); }
public void Remove(FuncBlockViewModel fbmodel) { if (FuncBlocks.Contains(fbmodel)) { FuncBlocks.Remove(fbmodel); IsModify = true; } }
public void Add(FuncBlockViewModel fbmodel) { if (!FuncBlocks.Contains(fbmodel)) { FuncBlocks.Add(fbmodel); IsModify = true; } }
public static XElement CreateXElementByFuncBlock(FuncBlockViewModel fbmodel) { XElement result = new XElement("FuncBlock"); result.SetAttributeValue("Name", fbmodel.ProgramName); result.Value = fbmodel.Code; return(result); }
public void CreateFuncBlockModel(FuncBlockViewModel fbvmodel) { if (_generateViewModel.FBModel == null) { _generateViewModel.FBModel = new GenerateFuncBlockModel(); } _generateViewModel.FBModel.Append(fbvmodel.Code); }
public ProjectModel(string projectname) { ProjectName = projectname; MainRoutine = new LadderDiagramViewModel("Main", this); MainRoutine.IsMainLadder = true; MMonitorManager = new MonitorManager(this); MTVModel = new ModbusTableViewModel(this); MMonitorManager.MMWindow.Manager = MMonitorManager; PManager = new SerialPortManager(); UManager = new USBManager(); StreamReader sr = new StreamReader( String.Format(@"{0:s}\simug\simuflib.c", FileHelper.AppRootPath)); FuncBlockViewModel libfuncblock = new FuncBlockViewModel(Properties.Resources.Library_Function, this); libfuncblock.Code = sr.ReadToEnd(); libfuncblock.IsReadOnly = true; LibFuncBlock = libfuncblock; }
/// <summary> /// 写入函数块内的代码文本 /// </summary> /// <param name="fbvmodel">函数块</param> /// <param name="option">选项</param> static private void Write(FuncBlockViewModel fbvmodel, int option) { edata.Add(0xfd); Write(fbvmodel.ProgramName); if ((option & OPTION_COMMENT) == 0) { Write32(fbvmodel.Code); return; } List <FuncBlock_Comment> comments = new List <FuncBlock_Comment>(); GetComments(fbvmodel.Model.Root, comments); comments.Sort((fb1, fb2) => { return(fb1.IndexStart.CompareTo(fb2.IndexStart)); }); int start = 0, end = 0; int szid = edata.Count(); edata.Add(0x00); edata.Add(0x00); foreach (FuncBlock_Comment comment in comments) { end = comment.IndexStart; for (int i = start; i < end; i++) { edata.Add((byte)fbvmodel.Code[i]); } start = comment.IndexEnd + 1; } end = fbvmodel.Code.Count(); for (int i = start; i < end; i++) { edata.Add((byte)fbvmodel.Code[i]); } int sz = edata.Count() - szid - 2; edata[szid] = Int32_Low(sz); edata[szid + 1] = Int32_High(sz); }
static private void Read(ProjectModel pmodel, IList <byte> _odata, IList <byte> _edata) { odata = _odata; oid = 0; edata = _edata; eid = 0; regs.Clear(); try { option = edata[eid++]; while (eid < edata.Count) { int head = edata[eid++]; switch (head) { case 0xff: LadderDiagramViewModel ldvmodel = new LadderDiagramViewModel(String.Empty, pmodel); Read(ldvmodel); if (ldvmodel.ProgramName.Equals("main")) { pmodel.MainRoutine = ldvmodel; } else { pmodel.Add(ldvmodel); } break; case 0xfd: FuncBlockViewModel fbvmodel = new FuncBlockViewModel(String.Empty, pmodel); Read(fbvmodel); pmodel.Add(fbvmodel); break; case 0xfc: ReadRegisters(); break; case 0xfb: ModbusTableViewModel mtvmodel = new ModbusTableViewModel(pmodel); Read(mtvmodel); pmodel.MTVModel = mtvmodel; break; case 0xf9: MainMonitor mmoni = new MainMonitor(pmodel); Read(mmoni); pmodel.MMonitorManager.MMWindow = mmoni; break; default: throw new FormatException( String.Format("非法头标志符0x{0x2X}", head)); } } pmodel.MainRoutine = new LadderDiagramViewModel("main", pmodel); } catch (OutOfMemoryException) { } catch (FormatException) { } }
static private void Read(FuncBlockViewModel fbvmodel) { fbvmodel.ProgramName = ReadTextE8(); fbvmodel.Code = ReadTextE16(); }