Example #1
0
 /// <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);
         }
     }
 }
Example #2
0
        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);
        }
Example #3
0
        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();
        }