private void RenderDataGridView(AbTagItem[] items)
 {
     if (items == null)
     {
         items = new AbTagItem[0];
     }
     // 在 DataGridView 显示
     DemoUtils.DataGridSpecifyRowCount(dataGridView1, items.Length);
     for (int i = 0; i < items.Length; i++)
     {
         dataGridView1.Rows[i].Cells[0].Value = (i + 1).ToString( );
         dataGridView1.Rows[i].Cells[1].Value = treeView1.ImageList.Images[GetIamgeKeyByTag(items[i])];
         dataGridView1.Rows[i].Cells[2].Value = items[i].Name;
         dataGridView1.Rows[i].Cells[3].Value = items[i].SymbolType.ToString("X");
         dataGridView1.Rows[i].Cells[4].Value = items[i].GetTypeText( );
         if (items[i].Tag != null)
         {
             dataGridView1.Rows[i].Cells[5].Value = items[i].Tag.ToString( );
         }
         else
         {
             dataGridView1.Rows[i].Cells[5].Value = "";
         }
     }
 }
        private void AddTreeNode(TreeNode parent, AbTagItem[] items, string parentName, bool showDataGrid)
        {
            foreach (var item in items)
            {
                TreeNode treeNode = new TreeNode(item.Name);
                treeNode.Name             = string.IsNullOrEmpty(parentName) ? item.Name : parentName + "." + item.Name;
                treeNode.ImageKey         = GetIamgeKeyByTag(item);
                treeNode.SelectedImageKey = GetIamgeKeyByTag(item);
                treeNode.Tag = item;
                parent.Nodes.Add(treeNode);

                if (item.IsStruct)
                {
                    OperateResult <AbTagItem[]> read = GetStruct(item);
                    if (!read.IsSuccess)
                    {
                        continue;
                    }

                    item.Members = read.Content;
                    if (item.ArrayDimension == 0)
                    {
                        AddTreeNode(treeNode, read.Content, treeNode.Name, false);
                    }
                    else if (item.ArrayDimension == 1)
                    {
                        for (int i = 0; i < item.ArrayLength[0]; i++)
                        {
                            TreeNode treeNodeChild = new TreeNode(item.Name + $"[{i}]");
                            treeNodeChild.Name             = string.IsNullOrEmpty(parentName) ? item.Name + $"[{i}]" : parentName + "." + item.Name + $"[{i}]";
                            treeNodeChild.ImageKey         = GetIamgeKeyByTag(item);
                            treeNodeChild.SelectedImageKey = GetIamgeKeyByTag(item);
                            AbTagItem abTag = new AbTagItem( );
                            abTag.Name           = item.Name + $"[{i}]";
                            abTag.InstanceID     = item.InstanceID;
                            abTag.SymbolType     = item.SymbolType;
                            abTag.IsStruct       = item.IsStruct;
                            abTag.ArrayDimension = 0;
                            abTag.ArrayLength    = item.ArrayLength;
                            abTag.Members        = AbTagItem.CloneBy(item.Members);

                            treeNodeChild.Tag = abTag;
                            AddTreeNode(treeNodeChild, read.Content, treeNodeChild.Name, false);
                            treeNode.Nodes.Add(treeNodeChild);
                        }
                    }
                    else
                    {
                    }
                }
            }

            if (showDataGrid)
            {
                RenderDataGridView(items);
            }
        }
        private OperateResult <AbTagItem[]> GetStruct(AbTagItem tagItem)
        {
            int typeCode = tagItem.SymbolType & 0x0fff;

            if (dictStructDefine.ContainsKey(typeCode))
            {
                return(OperateResult.CreateSuccessResult(AbTagItem.CloneBy(dictStructDefine[typeCode])));
            }
            OperateResult <AbTagItem[]> read = allenBradleyNet.StructTagEnumerator(tagItem);

            if (read.IsSuccess)
            {
                dictStructDefine.Add(typeCode, AbTagItem.CloneBy(read.Content));
            }
            return(read);
        }
 private string GetIamgeKeyByTag(AbTagItem abTag)
 {
     if (abTag.ArrayDimension == 1)
     {
         return("brackets_Square_16xMD");
     }
     else if (abTag.ArrayDimension > 1)
     {
         return("Module_648");
     }
     else if (abTag.IsStruct)
     {
         return("Class_489");
     }
     else
     {
         return("Enum_582");
     }
 }
        private void ReadStruct(AbTagItem tagItem, string tagName)
        {
            if (!tagItem.IsStruct)
            {
                return;
            }

            OperateResult <byte[]> read = allenBradleyNet.Read(tagName, 1);

            if (!read.IsSuccess)
            {
                return;
            }

            if (tagItem.Members == null)
            {
                return;
            }

            foreach (var item in tagItem.Members)
            {
                if (!item.IsStruct)
                {
                    if (item.ArrayDimension == 0)
                    {
                        if (item.SymbolType == AllenBradleyHelper.CIP_Type_Byte)
                        {
                            item.Tag = ((sbyte)read.Content[item.ByteOffset]).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_Word)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransInt16(read.Content, item.ByteOffset).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_DWord)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransInt32(read.Content, item.ByteOffset).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_LInt)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransInt64(read.Content, item.ByteOffset).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_USInt)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransByte(read.Content, item.ByteOffset).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_UInt)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransUInt16(read.Content, item.ByteOffset).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_UDint)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransUInt32(read.Content, item.ByteOffset).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_ULint)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransUInt64(read.Content, item.ByteOffset).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_Bool)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransBool(read.Content, item.ByteOffset * 8 + item.ArrayLength[0]).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_Real)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransSingle(read.Content, item.ByteOffset).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_Double)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransDouble(read.Content, item.ByteOffset).ToString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_D3)
                        {
                            item.Tag = SoftBasic.BoolArrayToString(allenBradleyNet.ByteTransform.TransByte(read.Content, item.ByteOffset, 4).ToBoolArray( ));
                        }
                    }
                    else if (item.ArrayDimension == 1)
                    {
                        if (item.SymbolType == AllenBradleyHelper.CIP_Type_Byte)
                        {
                            item.Tag = Encoding.UTF8.GetString(read.Content, item.ByteOffset, item.ArrayLength[0]);
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_Word)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransInt16(read.Content, item.ByteOffset, item.ArrayLength[0]).ToArrayString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_DWord)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransInt32(read.Content, item.ByteOffset, item.ArrayLength[0]).ToArrayString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_LInt)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransInt64(read.Content, item.ByteOffset, item.ArrayLength[0]).ToArrayString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_USInt)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransByte(read.Content, item.ByteOffset, item.ArrayLength[0]).ToArrayString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_UInt)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransUInt16(read.Content, item.ByteOffset, item.ArrayLength[0]).ToArrayString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_UDint)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransUInt32(read.Content, item.ByteOffset, item.ArrayLength[0]).ToArrayString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_ULint)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransUInt64(read.Content, item.ByteOffset, item.ArrayLength[0]).ToArrayString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_Real)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransSingle(read.Content, item.ByteOffset, item.ArrayLength[0]).ToArrayString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_Double)
                        {
                            item.Tag = allenBradleyNet.ByteTransform.TransDouble(read.Content, item.ByteOffset, item.ArrayLength[0]).ToArrayString( );
                        }
                        else if (item.SymbolType == AllenBradleyHelper.CIP_Type_D3)
                        {
                            item.Tag = SoftBasic.BoolArrayToString(allenBradleyNet.ByteTransform.TransByte(read.Content, item.ByteOffset, item.ArrayLength[0] * 4).ToBoolArray( ));
                        }
                    }
                }
            }
        }