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( )); } } } } }