Пример #1
0
        public bool AddItems(IList <TagMetaData> items)
        {
            int count = items.Count;

            if (_items == null)
            {
                _items = new Dictionary <short, ITag>(count);
            }
            lock (_server.SyncRoot)
            {
                for (int i = 0; i < count; i++)
                {
                    ITag          dataItem = null;
                    TagMetaData   meta     = items[i];
                    DeviceAddress addr     = new DeviceAddress(0, 0, 0, meta.ID, meta.Size, 0, meta.DataType);
                    switch (meta.DataType)
                    {
                    case DataType.BOOL:
                        dataItem = new BoolTag(meta.ID, addr, this);
                        break;

                    case DataType.BYTE:
                        dataItem = new ByteTag(meta.ID, addr, this);
                        break;

                    case DataType.WORD:
                        dataItem = new UShortTag(meta.ID, addr, this);
                        break;

                    case DataType.SHORT:
                        dataItem = new ShortTag(meta.ID, addr, this);
                        break;

                    case DataType.INT:
                        dataItem = new IntTag(meta.ID, addr, this);
                        break;

                    case DataType.DWORD:
                        dataItem = new UIntTag(meta.ID, addr, this);
                        break;

                    case DataType.FLOAT:
                        dataItem = new FloatTag(meta.ID, addr, this);
                        break;

                    case DataType.STR:
                        dataItem = new StringTag(meta.ID, addr, this);
                        break;

                    default:
                        dataItem = new BoolTag(meta.ID, addr, this);
                        break;
                    }
                    _items.Add(meta.ID, dataItem);
                    _server.AddItemIndex(meta.Name, dataItem);
                }
            }
            //Init();
            return(true);
        }
Пример #2
0
        public void WhenRawStringIsEmpty_ShouldIgnore()
        {
            TagMetaData metadata = null;
            var         act      = new Action(() => metadata = _testee.Parse(string.Empty));

            act.ShouldNotThrow();
            metadata.Comment.Should().BeEmpty();
        }
Пример #3
0
        public bool AddItems(IList <TagMetaData> items)
        {
            int count = items.Count;

            if (_items == null)
            {
                _items = new List <ITag>();
            }
            lock (_server.SyncRoot)
            {
                int j = 0;
                for (int i = 0; i < count; i++)
                {
                    ITag        dataItem = null;
                    TagMetaData meta     = items[i];
                    if (meta.GroupID == this._id)
                    {
                        DeviceAddress addr = new DeviceAddress(-1, (ushort)meta.GroupID, (ushort)meta.ID, j++, meta.Size, 0, meta.DataType);
                        switch (meta.DataType)
                        {
                        case DataType.BOOL:
                            dataItem = new BoolTag(meta.ID, addr, this);
                            break;

                        case DataType.BYTE:
                            dataItem = new ByteTag(meta.ID, addr, this);
                            break;

                        case DataType.WORD:
                        case DataType.SHORT:
                            dataItem = new ShortTag(meta.ID, addr, this);
                            break;

                        case DataType.TIME:
                        case DataType.INT:
                            dataItem = new IntTag(meta.ID, addr, this);
                            break;

                        case DataType.FLOAT:
                            dataItem = new FloatTag(meta.ID, addr, this);
                            break;

                        case DataType.STR:
                            dataItem = new StringTag(meta.ID, addr, this);
                            break;

                        default:
                            dataItem = new BoolTag(meta.ID, addr, this);
                            break;
                        }
                        _items.Add(dataItem);
                        _server.AddItemIndex(meta.Name, dataItem);
                    }
                }
            }
            return(true);
        }
Пример #4
0
 public TagItem(TagMetaData metadata)
 {
     _tagname = metadata.Name;
     _addr    = metadata.Address;
     _tag     = App.Server[_tagname];
     if (_tag != null)
     {
         _tagValue          = _tag.ToString();
         _timestamp         = _tag.TimeStamp;
         _tag.ValueChanged += new ValueChangedEventHandler(TagValueChanged);
     }
 }
Пример #5
0
        private void AddTag()
        {
            TagMetaData tag = new TagMetaData((short)(list.Count == 0 ? 1 : list.Max(x => x.ID) + 1), short.Parse(treeView1.SelectedNode.Name), "", "", DataType.INT, 1);

            bindingSource1.Add(tag);
            int index = list.BinarySearch(tag);

            if (index < 0)
            {
                index = ~index;
            }
            list.Insert(index, tag);
            dataGridView1.FirstDisplayedScrollingRowIndex = bindingSource1.Count - 1;
        }
Пример #6
0
 public TagItem(TagMetaData metadata, ITag tag, DataGridView dataGrid, int index)
 {
     _tagname  = metadata.Name;
     _addr     = metadata.Address;
     _tag      = tag;
     _dataGrid = dataGrid;
     _index    = index;
     if (_tag != null)
     {
         _tagValue          = _tag.ToString();
         _timestamp         = _tag.TimeStamp;
         _tag.ValueChanged += new ValueChangedEventHandler(TagValueChanged);
     }
 }
Пример #7
0
        void InitServerByDatabase()
        {
            using (var dataReader = DataHelper.Instance.ExecuteProcedureReader("InitServer"))
            {
                if (dataReader == null)
                {
                    return;                    // Stopwatch sw = Stopwatch.StartNew();
                }
                dataReader.Read();
                int count = dataReader.GetInt32(0);
                _list    = new List <TagMetaData>(count);//把所有激活的 数据库记录 都导入 _list<TagMetaData> 里面
                _mapping = new Dictionary <string, ITag>(count);
                dataReader.NextResult();
                while (dataReader.Read())
                {
                    var meta = new TagMetaData(dataReader.GetInt16(0), dataReader.GetInt16(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(10), (DataType)dataReader.GetByte(4),
                                               (ushort)dataReader.GetInt16(5), dataReader.GetBoolean(6), dataReader.GetFloat(7), dataReader.GetFloat(8), dataReader.GetInt32(9));

                    _list.Add(meta);
                    if (meta.Archive)
                    {
                        //Id 和Cycle 其实就是归档的时间,归档周期没有设定(0),则置为 null
                        _archiveTimes.Add(meta.ID, meta.Cycle == 0 ? null : new ArchiveTime(meta.Cycle, DateTime.MinValue));
                    }
                }
                _list.Sort();//只是id 排序就好了
                dataReader.NextResult();
                while (dataReader.Read())
                {
                    if (_driver != null)
                    {
                        IGroup grp = _driver.AddGroup(dataReader.GetString(1), dataReader.GetInt16(2), dataReader.GetInt32(3),
                                                      dataReader.GetFloat(4), dataReader.GetBoolean(5));
                        if (grp != null)
                        {
                            grp.AddItems(_list);//这里完成 从 _list<TagMetaData> 到 _list<ITag>的转换
                        }
                    }
                }
            }
            //待归档的列表里面  有 超过一个的 变量,就开启归档
            if (_archiveTimes.Count > 0)
            {
                _hasHda       = true;
                _hda.Capacity = MAXHDACAP;
            }
        }
Пример #8
0
        private void contextMenuStrip2_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            switch (e.ClickedItem.Text)
            {
            case "变量编辑":
            {
                if (bindingSource1.Count > 0)
                {
                    TagParam frm = new TagParam(bindingSource1);
                    frm.ShowDialog();
                }
            }
            break;

            case "复制":
            {
                selectedTags.Clear();
                var rows = dataGridView1.SelectedRows;
                if (rows != null)
                {
                    short maxid = list.Max(x => x.ID);
                    for (int i = 0; i < rows.Count; i++)
                    {
                        TagMetaData tag    = rows[i].DataBoundItem as TagMetaData;
                        TagMetaData newtag = new TagMetaData((short)++maxid, tag.GroupID, tag.Name, tag.Address, tag.DataType,
                                                             tag.Size, tag.Active, tag.Maximum, tag.Minimum, tag.Cycle);
                        selectedTags.Add(newtag);
                    }
                }
                isCut = false;
            }
            break;

            case "剪切":
            {
                selectedTags.Clear();
                var rows = dataGridView1.SelectedRows;
                if (rows != null)
                {
                    for (int i = 0; i < rows.Count; i++)
                    {
                        TagMetaData tag = rows[i].DataBoundItem as TagMetaData;
                        selectedTags.Add(tag);
                    }
                }
                isCut = true;
            }
            break;

            case "粘贴CSV":
                break;

            case "粘帖":
            {
                if (treeView1.SelectedNode == null || treeView1.SelectedNode.Level != 2)
                {
                    return;
                }
                if (isCut)
                {
                    foreach (var tag in selectedTags)
                    {
                        tag.GroupID = curgroupId;
                        bindingSource1.Add(tag);
                    }
                }
                else
                {
                    foreach (var tag in selectedTags)
                    {
                        tag.GroupID = curgroupId;
                        bindingSource1.Add(tag);
                        list.Add(tag);
                    }
                }
                if (bindingSource1.Count > 0)
                {
                    dataGridView1.FirstDisplayedScrollingRowIndex = bindingSource1.Count - 1;
                    list.Sort();
                }
                selectedTags.Clear();
            }
            break;

            case "批量删除":
            {
                var rows = dataGridView1.SelectedRows;
                if (rows != null)
                {
                    for (int i = 0; i < rows.Count; i++)
                    {
                        TagMetaData tag = rows[i].DataBoundItem as TagMetaData;
                        bindingSource1.Remove(tag);
                        list.Remove(tag);
                    }
                }
            }
            break;
            }
            tspCount.Text = bindingSource1.Count.ToString();
        }
Пример #9
0
        private void toolStrip3_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            switch (e.ClickedItem.Text)
            {
            case "前缀":
            {
                string front = txtFront.Text;
                if (treeView1.SelectedNode.Level == 0)
                {
                    foreach (var item in list)
                    {
                        item.Name = front + item.Name;
                    }
                }
                else if (treeView1.SelectedNode.Level == 1)
                {
                    var rows = dataGridView1.Rows;
                    if (rows != null)
                    {
                        for (int i = 0; i < rows.Count; i++)
                        {
                            TagMetaData tag = rows[i].DataBoundItem as TagMetaData;
                            tag.Name = front + tag.Name;
                        }
                    }
                }
                else if (treeView1.SelectedNode.Level == 2)
                {
                    foreach (var item in list.FindAll(x => x.GroupID == curgroupId))
                    {
                        item.Name = front + item.Name;
                    }
                }
            }
            break;

            case "替换地址":
            {
                string filter  = txtReplaceAddr1.Text;
                string replace = txtReplaceAddr2.Text;
                foreach (var item in list.FindAll(x => x.GroupID == curgroupId))
                {
                    item.Address = item.Address.Replace(filter, replace);
                }
            }
            break;

            case "偏移":
            {
                string offset = tspOffset.Text;
                int    baseaddr;
                if (int.TryParse(offset, out baseaddr))
                {
                    foreach (DataGridViewRow item in dataGridView1.SelectedRows)
                    {
                        var tag   = item.DataBoundItem as TagMetaData;
                        var index = tag.Address.LastIndexOf('W');
                        if (index < 0)
                        {
                            index = tag.Address.LastIndexOf('D');
                        }
                        if (index >= 0)
                        {
                            var ad = Convert.ToDecimal(tag.Address.Substring(index + 1));
                            ad          = ad + baseaddr;
                            tag.Address = tag.Address.Substring(0, index + 1) + ad.ToString();
                        }
                    }
                }
            }
            break;

            case "替换名称":
            {
                string filter  = txtReplace1.Text;
                string replace = txtReplace2.Text;
                foreach (var item in list.FindAll(x => x.GroupID == curgroupId))
                {
                    item.Name = item.Name.Replace(filter, replace);
                }
            }
            break;
            }
        }
Пример #10
0
        private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            switch (e.ClickedItem.Text)
            {
            case "增加":
                if (treeView1.SelectedNode != null && treeView1.SelectedNode.Level == 2)
                {
                    AddTag();
                }
                break;

            case "删除":
            {
                TagMetaData tag = bindingSource1.Current as TagMetaData;
                bindingSource1.Remove(tag);
                list.Remove(tag);
            }
            break;

            case "清除":
                if (MessageBox.Show("将清除所有的标签,是否确定?", "警告", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    bindingSource1.Clear();
                    list.Clear();
                }
                break;

            case "保存":
                if (Save())
                {
                    MessageBox.Show("保存成功!");
                }
                break;

            case "注册":
            {
                RegisterSet frm = new RegisterSet();
                frm.ShowDialog();
            }
            break;

            case "查找":
            {
                string filter = txtFind.Text.ToUpper();
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    if (dataGridView1[0, i].Value.ToString() == filter)
                    {
                        dataGridView1.Rows[i].Selected = true;
                        dataGridView1.FirstDisplayedScrollingRowIndex = i;
                        return;
                    }
                }
            }
            break;

            case "名称过滤":
            {
                dataGridView1.ClearSelection();
                string filter = txtFilter.Text.ToUpper();
                var    tags   = GetTagNames(filter);
                if (tags != null)
                {
                    foreach (int index in tags)
                    {
                        dataGridView1.Rows[index].Selected            = true;
                        dataGridView1.FirstDisplayedScrollingRowIndex = index;
                    }
                }
            }
            break;

            case "描述过滤":
            {
                dataGridView1.ClearSelection();
                string filter = txtFilter1.Text.ToUpper();
                var    tags   = GetTags(filter);
                if (tags != null)
                {
                    foreach (int index in tags)
                    {
                        dataGridView1.Rows[index].Selected            = true;
                        dataGridView1.FirstDisplayedScrollingRowIndex = index;
                    }
                }
            }
            break;

            case "退出":
                this.Close();
                break;
            }
            tspCount.Text = bindingSource1.Count.ToString();
        }
Пример #11
0
        void InitServerBySqlite()
        {
            string          sql          = "select * from Protocol";
            List <Protocol> protocolList = DataHelper.Instance.ExecuteList <Protocol>(sql);

            if (protocolList.Count == 0)
            {
                MessageBox.Show("数据库读取失败!");
                return;
            }
            int count = protocolList.Count();

            _list    = new List <TagMetaData>(count);//把所有激活的 数据库记录 都导入 _list<TagMetaData> 里面
            _mapping = new Dictionary <string, ITag>(count);
            foreach (Protocol protocol in protocolList)
            {
                var meta = new TagMetaData((short)protocol.TagID, (short)protocol.GroupID, protocol.TagName, protocol.Address, protocol.Description, (DataType)protocol.DataType,
                                           (ushort)protocol.DataSize, protocol.Archive == 1 ? true : false, (float)protocol.Maximum, (float)protocol.Minimum, protocol.Cycle);

                _list.Add(meta);
                if (meta.Archive)
                {
                    //Id 和Cycle 其实就是归档的时间,归档周期没有设定(0),则置为 null
                    _archiveTimes.Add(meta.ID, meta.Cycle == 0 ? null : new ArchiveTime(meta.Cycle, DateTime.MinValue)); //归档的ID,归档的时间
                }
                _list.Sort();                                                                                            //只是id 排序就好了
            }
            sql = "select * from ProtocolGroup";
            List <ProtocolGroup> groupList = DataHelper.Instance.ExecuteList <ProtocolGroup>(sql);

            foreach (ProtocolGroup pgroup in groupList)
            {
                if (_driver != null)
                {
                    IGroup grp = _driver.AddGroup(pgroup.GroupName, (short)pgroup.GroupID, pgroup.UpdateRate,
                                                  pgroup.DeadBand, pgroup.IsActive == 1 ? true : false);
                    if (grp != null)
                    {
                        grp.AddItems(_list);//这里完成 从 _list<TagMetaData> 到 _list<ITag>的转换  ,这个地方是需要根据 GroupID 的不同,生成不同的组别,对应于不同的页面??
                    }
                }
            }

            //using (var dataReader = DataHelper.Instance.ExecuteProcedureReader("InitServer"))
            //{
            //    if (dataReader == null) return;// Stopwatch sw = Stopwatch.StartNew();

            //    dataReader.Read();
            //    int count = dataReader.GetInt32(0);
            //    _list = new List<TagMetaData>(count);//把所有激活的 数据库记录 都导入 _list<TagMetaData> 里面
            //    _mapping = new Dictionary<string, ITag>(count);
            //    dataReader.NextResult();
            //    while (dataReader.Read())
            //    {
            //        var meta = new TagMetaData(dataReader.GetInt16(0), dataReader.GetInt16(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(10), (DataType)dataReader.GetByte(4),
            //         (ushort)dataReader.GetInt16(5), dataReader.GetBoolean(6), dataReader.GetFloat(7), dataReader.GetFloat(8), dataReader.GetInt32(9));

            //        _list.Add(meta);
            //        if (meta.Archive)
            //        {
            //            //Id 和Cycle 其实就是归档的时间,归档周期没有设定(0),则置为 null
            //            _archiveTimes.Add(meta.ID, meta.Cycle == 0 ? null : new ArchiveTime(meta.Cycle, DateTime.MinValue));//归档的ID,归档的时间
            //        }
            //    }
            //    _list.Sort();//只是id 排序就好了
            //    dataReader.NextResult();
            //    while (dataReader.Read())
            //    {
            //        if (_driver != null)
            //        {
            //            IGroup grp = _driver.AddGroup(dataReader.GetString(1), dataReader.GetInt16(2), dataReader.GetInt32(3),
            //                   dataReader.GetFloat(4), dataReader.GetBoolean(5));
            //            if (grp != null)
            //                grp.AddItems(_list);//这里完成 从 _list<TagMetaData> 到 _list<ITag>的转换  ,这个地方是需要根据 GroupID 的不同,生成不同的组别,对应于不同的页面??
            //        }
            //    }
            //}
            //待归档的列表里面  有 超过一个的 变量,就开启归档
            if (_archiveTimes.Count > 0)
            {
                _hasHda       = true;
                _hda.Capacity = MAXHDACAP;//单次归档的最大数据 1 万条;
            }
        }
Пример #12
0
        public bool AddItems(IList <TagMetaData> items)
        {
            FxSerialReader fxReader = _plcReader as FxSerialReader;

            if (fxReader == null)
            {
                return(false);
            }


            int count = items.Count;

            if (_items == null)
            {
                _items = new List <ITag>(count);
            }
            lock (_server.SyncRoot)
            {
                for (int i = 0; i < count; i++)
                {
                    ITag        dataItem = null;
                    TagMetaData meta     = items[i];
                    if (meta.GroupID == this._id)
                    {
                        DeviceAddress addr = fxReader.GetDeviceAddress(meta);
                        if (addr.DataSize == 0)
                        {
                            addr.DataSize = meta.Size;
                        }
                        if (addr.VarType == DataType.NONE)
                        {
                            addr.VarType = meta.DataType;
                        }
                        if (addr.VarType != DataType.BOOL)
                        {
                            addr.Bit = 0;
                        }
                        switch (meta.DataType)
                        {
                        case DataType.BOOL:
                            dataItem = new BoolTag(meta.ID, addr, this);
                            break;

                        case DataType.BYTE:
                            dataItem = new ByteTag(meta.ID, addr, this);
                            break;

                        case DataType.WORD:
                            dataItem = new UShortTag(meta.ID, addr, this);
                            break;

                        case DataType.SHORT:
                            dataItem = new ShortTag(meta.ID, addr, this);
                            break;

                        case DataType.DWORD:
                            dataItem = new UIntTag(meta.ID, addr, this);
                            break;

                        case DataType.INT:
                            dataItem = new IntTag(meta.ID, addr, this);
                            break;

                        case DataType.FLOAT:
                            dataItem = new FloatTag(meta.ID, addr, this);
                            break;

                        case DataType.STR:
                            dataItem = new StringTag(meta.ID, addr, this);
                            break;
                        }
                        if (dataItem != null)
                        {
                            //dataItem.Active = meta.Active;
                            _items.Add(dataItem);
                            _server.AddItemIndex(meta.Name, dataItem);
                        }
                    }
                }
            }
            _items.TrimExcess();
            _items.Sort((x, y) => x.Address.CompareTo(y.Address));
            UpdatePDUArea();
            return(true);
        }
Пример #13
0
        public DeviceAddress GetDeviceAddress(TagMetaData meta)
        {
            string newaddress = ParseAddress(meta);

            return(GetDeviceAddress(newaddress));
        }
Пример #14
0
        //将三菱PLC的地址解析为modbus地址格式,参考bcnet的地址解析方式
        //T/C暂存器分为bool类型和word类型,采用地址的第二码区分,第二码A表示bool,第二码为B表示word, 默认则为读取word值
        private string ParseAddress(TagMetaData meta)
        {
            string address = meta.Address;
            int    m, n;
            string newaddress = "";

            switch (address[0])
            {
            case 'Y':
            case 'y':
                int.TryParse(address.Substring(1, address.Length - 2), out m);
                int.TryParse(address.Substring(address.Length - 1), out n);
                newaddress = '0' + (m * 8 + n).ToString().PadLeft(5, '0');
                break;

            case 'M':
            case 'm':
                int.TryParse(address.Substring(1, address.Length - 1), out m);
                if (m >= 8000)
                {
                    newaddress = '0' + (5001 + (m - 8000)).ToString().PadLeft(5, '0');
                }
                else
                {
                    newaddress = '0' + (10001 + m).ToString().PadLeft(5, '0');
                }
                break;

            case 'T':
            case 't':
                if (meta.DataType == DataType.BOOL)
                {
                    int.TryParse(address.Substring(1, address.Length - 1), out m);
                    newaddress = '0' + (6001 + m).ToString().PadLeft(5, '0');
                }
                else
                {
                    int.TryParse(address.Substring(1, address.Length - 1), out m);
                    newaddress = '4' + (1 + m).ToString().PadLeft(5, '0');
                }
                break;

            case 'C':
            case 'c':
                if (meta.DataType == DataType.BOOL)
                {
                    int.TryParse(address.Substring(1, address.Length - 1), out m);
                    newaddress = '0' + (7001 + m).ToString().PadLeft(5, '0');
                }
                else
                {
                    int.TryParse(address.Substring(1, address.Length - 1), out m);
                    newaddress = '4' + (1001 + m).ToString().PadLeft(5, '0');
                }
                break;

            case 'S':
            case 's':
                int.TryParse(address.Substring(1, address.Length - 1), out m);
                newaddress = '0' + (30001 + m).ToString().PadLeft(5, '0');
                break;

            case 'X':
            case 'x':
                int.TryParse(address.Substring(1, address.Length - 2), out m);
                int.TryParse(address.Substring(address.Length - 1), out n);
                newaddress = '1' + (1 + m * 8 + n).ToString().PadLeft(5, '0');
                break;

            case 'D':
            case 'd':
                int.TryParse(address.Substring(1, address.Length - 1), out m);
                if (m >= 8000)
                {
                    newaddress = '4' + (1301 + m - 8000).ToString().PadLeft(5, '0');
                }
                else
                {
                    newaddress = '4' + (2001 + m).ToString().PadLeft(5, '0');
                }
                break;
            }
            return(newaddress);
        }
Пример #15
0
        public bool AddItems(IList <TagMetaData> items)
        {
            int count = items.Count;

            if (_items == null)
            {
                _items   = new List <ITag>(count);
                _mapping = new Dictionary <short, string>(count);
            }
            lock (_server.SyncRoot)
            {
                for (int i = 0; i < count; i++)
                {
                    ITag        dataItem = null;
                    TagMetaData meta     = items[i];
                    if (meta.GroupID == this._id)
                    {
                        DeviceAddress addr = new DeviceAddress {
                            Start = meta.ID, DataSize = meta.Size, VarType = meta.DataType
                        };
                        switch (meta.DataType)
                        {
                        case DataType.BOOL:
                            dataItem = new BoolTag(meta.ID, addr, this);
                            break;

                        case DataType.BYTE:
                            dataItem = new ByteTag(meta.ID, addr, this);
                            break;

                        case DataType.WORD:
                        case DataType.SHORT:
                            dataItem = new ShortTag(meta.ID, addr, this);
                            break;

                        case DataType.DWORD:
                        case DataType.INT:
                            dataItem = new IntTag(meta.ID, addr, this);
                            break;

                        case DataType.FLOAT:
                            dataItem = new FloatTag(meta.ID, addr, this);
                            break;

                        case DataType.STR:
                            dataItem = new StringTag(meta.ID, addr, this);
                            break;
                        }
                        if (dataItem != null)
                        {
                            //dataItem.Active = meta.Active;
                            _items.Add(dataItem);
                            _plcReader.TransactItem(meta.Name);
                            _mapping.Add(meta.ID, meta.Address);
                            _server.AddItemIndex(meta.Name, dataItem);
                        }
                    }
                }
                return(true);
            }
        }