public object ReadItem(string address)
        {
            lock (this)
            {
                try
                {
                    if (DbAddress.ContainsKey(address))
                    {
                        var addr  = DbAddress[address];
                        var db_id = addr.DBBlockID;

                        var offset = (short)(addr.Offset - _dbStartAddress[db_id]);

                        if (addr.Type == "bool")
                        {
                            var _buf         = _dbAreaBuf[db_id];
                            var _result_byte = _buf[offset];

                            var result = (_result_byte & (1 << addr.BitOffset)) != 0;
                            return(result);
                        }

                        if (addr.Type == "int16")
                        {
                            var _buf       = _dbAreaBuf[db_id];
                            var _low_byte  = _buf[offset];
                            var _high_byte = _buf[offset + 1];

                            //Int16 result = (Int16)(_high_byte << 8 + _low_byte);
                            var result = (short)((_low_byte << 8) + _high_byte);
                            return(result);
                        }

                        if (addr.Type == "int32")
                        {
                            var _buf   = _dbAreaBuf[db_id];
                            var _byte1 = _buf[offset];
                            var _byte2 = _buf[offset + 1];
                            var _byte3 = _buf[offset + 2];
                            var _byte4 = _buf[offset + 3];

                            //Int32 result = (Int32)(_byte4 << 24 + _byte3 << 16 + _byte2 << 8 + _byte1);
                            var result = (_byte1 << 24) + (_byte2 << 16) + (_byte3 << 8) + _byte4;
                            return(result);
                        }

                        if (addr.Type == "string")
                        {
                            var _buf   = _dbAreaBuf[db_id];
                            var result =
                                Encoding.ASCII.GetString(_buf, offset + 2,
                                                         _buf[offset + 1]); //西门子字符串前两位要空出来,读取长度根据第2个字节
                            return(result);
                        }

                        if (addr.Type == "ByteArray") //2020/6/11 ByteArray
                        {
                            var _buf   = _dbAreaBuf[db_id];
                            var result = Encoding.ASCII.GetString(_buf, offset, addr.BitOffset);
                            return(result);
                        }

                        throw new Exception("Tag类型不支持");
                    }

                    if (_mAddress.ContainsKey(address))
                    {
                        var addr   = _mAddress[address];
                        var offset = (short)(addr.Offset - _mAreaMinAddress);
                        var _buf   = _mAreaBuf;

                        if (addr.Type == "bool")
                        {
                            var _result_byte = _buf[offset];

                            var result = (_result_byte & (1 << addr.BitOffset)) != 0;
                            return(result);
                        }

                        if (addr.Type == "int16")
                        {
                            var _low_byte  = _buf[offset];
                            var _high_byte = _buf[offset + 1];

                            var result = (short)((_low_byte << 8) + _high_byte);
                            return(result);
                        }

                        if (addr.Type == "int32")
                        {
                            var _byte1 = _buf[offset];
                            var _byte2 = _buf[offset + 1];
                            var _byte3 = _buf[offset + 2];
                            var _byte4 = _buf[offset + 3];

                            //Int32 result = (Int32)(_byte4 << 24 + _byte3 << 16 + _byte2 << 8 + _byte1);
                            var result = (_byte1 << 24) + (_byte2 << 16) + (_byte3 << 8) + _byte4;
                            return(result);
                        }
                    }
                    else
                    {
                        throw new Exception("_dbAddress或_MAddress不包含该地址!");
                    }
                }
                catch (Exception ex)
                {
                    //LOG.Error(string.Format("地址{0}读取错:{1}", address, ex));
                    Log.Error($"Address:{address} readed error,Message:{ex},IP地址时{_plc.IP}");
                }

                return(null);
            }
        }