/// <summary> /// 写入一个梯形图元件 /// </summary> /// <param name="bvmodel">元件</param> static private void Write(BaseViewModel bvmodel) { // 连线不必写入 if (bvmodel is HorizontalLineViewModel || bvmodel is VerticalLineViewModel) { return; } // 坐标,指令ID edata.Add(Int32_Low(bvmodel.X)); edata.Add(Int32_Low(bvmodel.Y)); edata.Add(Int32_Low(LadderInstViewModelPrototype.GetOrderFromCatalog(bvmodel.GetCatalogID()))); // 写入每个软元件参数 for (int i = 0; i < bvmodel.Model.ParaCount; i++) { IValueModel ivmodel = bvmodel.Model.GetPara(i); // 在软元件表中找到,写入ID if (regids.ContainsKey(ivmodel.ValueString)) { int regid = regids[ivmodel.ValueString]; edata.Add(Int32_Low(regid)); edata.Add(Int32_High(regid)); } // 写入0xFFFF表示空参数 else { edata.Add(0xFF); edata.Add(0xFF); } } }
public static IEnumerable <BaseViewModel> CreateLadderElementsByXElement(XElement xEle) { List <BaseViewModel> result = new List <BaseViewModel>(); foreach (XElement instNode in xEle.Elements("InstEle")) { var viewmodel = LadderInstViewModelPrototype.Clone(int.Parse(instNode.Attribute("CatalogID").Value)); viewmodel.X = int.Parse(instNode.Attribute("X").Value); viewmodel.Y = int.Parse(instNode.Attribute("Y").Value); List <string> valueStrings = new List <string>(); foreach (XElement valuenode in instNode.Elements("Value")) { valueStrings.Add(valuenode.Value); } viewmodel.ParseValue(valueStrings); result.Add(viewmodel); } return(result); }
static private void Read(LadderNetworkViewModel lnvmodel) { int sz = ReadE32(); sz += eid; if ((option & OPTION_COMMENT) != 0) { lnvmodel.NetworkBrief = ReadTextE8(); } lnvmodel.RowCount = edata[eid++]; int le = (lnvmodel.RowCount * GlobalSetting.LadderXCapacity) >> 2; for (int y = 0; y < lnvmodel.RowCount; y++) { for (int x = 0; x < GlobalSetting.LadderXCapacity; x++) { int p = y * GlobalSetting.LadderXCapacity + x; int p1 = p >> 2; int p2 = (p & 3) * 2; if ((edata[eid + p1] & (1 << p2)) != 0) { HorizontalLineViewModel hlvmodel = new HorizontalLineViewModel(); hlvmodel.X = x; hlvmodel.Y = y; lnvmodel.ReplaceElement(hlvmodel); } if ((edata[eid + p1] & (1 << (p2 + 1))) != 0) { VerticalLineViewModel vlvmodel = new VerticalLineViewModel(); vlvmodel.X = x; vlvmodel.Y = y; lnvmodel.ReplaceVerticalLine(vlvmodel); } } } while (eid < sz) { BaseViewModel bvmodel = null; int x = edata[eid++]; int y = edata[eid++]; int catalog = LadderInstViewModelPrototype.GetCatalogFromOrder(edata[eid++]); bvmodel = LadderInstViewModelPrototype.Clone(catalog); bvmodel.X = x; bvmodel.Y = y; for (int i = 0; i < bvmodel.Model.ParaCount; i++) { IValueModel ivmold = bvmodel.Model.GetPara(i); IValueModel ivmnew = regs[ReadE16()]; if (ivmnew is DWordValue || ivmnew is DDoubleWordValue || ivmnew is DFloatValue) { if (ivmold is WordValue) { ivmnew = new DWordValue(ivmnew.Index, ivmnew.Offset); } if (ivmold is DoubleWordValue) { ivmnew = new DDoubleWordValue(ivmnew.Index, ivmnew.Offset); } if (ivmold is FloatValue) { ivmnew = new DFloatValue(ivmnew.Index, ivmnew.Offset); } } bvmodel.Model.SetPara(i, ivmnew); } lnvmodel.ReplaceElement(bvmodel); } InstructionCommentManager.RaiseMappedMessageChangedEvent(); }