/// <summary>
        /// 监视标签重载
        /// </summary>
        /// <param name="itemName"></param>
        public void MonitorOPCItem(string itemName)
        {
            try
            {
                if (!this.clientHandleDict.ContainsKey(itemName))
                {
                    //var bro = this.opcServer.CreateBrowser();
                    //bro.ShowBranches();
                    //foreach (var branch in bro)
                    //{
                    //    Console.WriteLine(branch.ToString());
                    //}

                    var index = this.clientNameList.Count;
                    OPCAutomation.OPCItem tempItem = opcAGroup.OPCItems.AddItem(itemName, index);
                    TagItem item = new TagItem()
                    {
                        Name          = itemName,
                        ClientHandler = index,
                        //ClientHandler = itemIndex,
                        ServerHandler = tempItem.ServerHandle,
                    };
                    this.clientNameList.Add(itemName);
                    this.clientHandleDict.Add(itemName, item);
                    object value, timeStamp, quality;
                    tempItem.Read(1, out value, out quality, out timeStamp);
                }
            }
            catch
            {
            }
        }
 public void Write(string name, object value)
 {
     if (this.clientHandleDict.ContainsKey(name))
     {
         OPCAutomation.OPCItem item = opcAGroup.OPCItems.GetOPCItem(this.clientHandleDict[name].ServerHandler);
         item.Write(value);
     }
 }
Beispiel #3
0
        public void Attach(string serverAddress, NativeOpcGroup group)
        {
            _clientHandleIndex++;
            var address = serverAddress + "." + group.Name + "." + Address;

            try
            {
                ClientHandle = _clientHandleIndex;
                _item        = group.OPCItems.AddItem(address, _clientHandleIndex);
            }
            catch (Exception ex)
            {
                this.Fatal(new InvalidOperationException("创建OpcItem失败,错误原因" + ex));
            }
        }
        public OPCChangeModel ReadValue(string name)
        {
            if (this.clientHandleDict.ContainsKey(name))
            {
                OPCAutomation.OPCItem item = opcAGroup.OPCItems.GetOPCItem(this.clientHandleDict[name].ServerHandler);
                object value, quality, timestamp;
                item.Read(2, out value, out quality, out timestamp);

                return(new OPCChangeModel()
                {
                    Name = name,
                    Quality = (TagQuality)((short)quality),
                    Value = item.Value,
                    TimeStamp = (DateTime)timestamp,
                });
            }
            return(null);
        }
Beispiel #5
0
        public void Write(int index)
        {
            try
            {
                short                 ItemCount             = 1;
                int[]                 SyncItemServerHandles = new int[2];
                object[]              SyncItemValues        = new object[2];
                System.Array          SyncItemServerErrors  = null;
                OPCAutomation.OPCItem AnOpcItem             = default(OPCItem);

                SyncItemServerHandles[1] = (int)Config.ServerHandles.GetValue(index);
                AnOpcItem = _OpcGroup.OPCItems.GetOPCItem((int)Config.ServerHandles.GetValue(index));

                Array ItsAnArray = null;
                short CanonDT    = 0;
                short vbArray    = 8192;

                CanonDT = AnOpcItem.CanonicalDataType;
                if (CanonDT > vbArray)
                {
                    CanonDT -= vbArray;
                }

                switch (CanonDT)
                {
                case (short)CanonicalDataTypes.CanonDtByte:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(byte), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToByte((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtChar:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(SByte), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSByte((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtWord:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt16), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt16(Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtShort:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int16), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt16((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtDWord:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt32), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt32((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtLong:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int32), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt32((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtFloat:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(float), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSingle((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtDouble:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(double), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Config.ClientTags[index].Value;
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtBool:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(bool), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToBoolean(Config.ClientTags[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtString:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(string), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToString((string)Config.ClientTags[index].Value);
                    }
                    break;
                    // End case
                }

                // Invoke the SyncWrite operation.  Remember this call will wait until completion
                _OpcGroup.SyncWrite(ItemCount, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);

                if ((int)SyncItemServerErrors.GetValue(1) != 0)
                {
                    //MessageBox.Show("SyncItemServerError: " + SyncItemServerErrors.GetValue(1));
                }
            }
            catch (Exception ex)
            {
                // Error handling
                //MessageBox.Show("OPC server write item failed with exception: " + ex.Message + " INDEX = " + index.ToString() + " c=" + opcItemValueToWritte[index].Text + "/", "SimpleOPCInterface Exception", MessageBoxButtons.OK);
            }
        }
Beispiel #6
0
        public void Write(int index)
        {
            try
            {
                // Write only 1 item
                short ItemCount = 1;

                // Create some local scope variables to hold the value to be sent.
                // These arrays could just as easily contain all of the item we have added.
                int[]                 SyncItemServerHandles = new int[2];
                object[]              SyncItemValues        = new object[2];
                System.Array          SyncItemServerErrors  = null;
                OPCAutomation.OPCItem AnOpcItem             = default(OPCAutomation.OPCItem);

                // Get the Servers handle for the desired item.  The server handles
                // were returned in add item subroutine.
                SyncItemServerHandles[1] = (int)Module1.ItemServerHandles.GetValue(index);
                AnOpcItem = Module1._OPCGroup.OPCItems.GetOPCItem((int)Module1.ItemServerHandles.GetValue(index));

                // Load the value to be written using Item's Canonical Data Type to
                // convert to correct type.
                // See Kepware Application note on Canonical Data Types
                Array ItsAnArray = null;
                short CanonDT    = 0;
                short vbArray    = 8192;

                CanonDT = AnOpcItem.CanonicalDataType;


                // If it is an array, figure out the base type
                if (CanonDT > vbArray)
                {
                    CanonDT -= vbArray;
                }

                switch (CanonDT)
                {
                case (short)CanonicalDataTypes.CanonDtByte:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(byte), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToByte((string)Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtChar:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(SByte), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSByte((string)Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtWord:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt16), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt16(Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtShort:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int16), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt16((string)Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtDWord:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt32), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt32((string)Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtLong:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int32), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt32((string)Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtFloat:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(float), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSingle((string)Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtDouble:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(double), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Module1.TagList[index].Value;
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtBool:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(bool), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToBoolean(Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtString:
                    if ((int)Module1.OPCItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(string), (int)Module1.OPCItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = (object)ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToString((string)Module1.TagList[index].Value);
                    }
                    break;
                    // End case
                }

                // Invoke the SyncWrite operation.  Remember this call will wait until completion
                Module1._OPCGroup.SyncWrite(ItemCount, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);

                if ((int)SyncItemServerErrors.GetValue(1) != 0)
                {
                    //MessageBox.Show("SyncItemServerError: " + SyncItemServerErrors.GetValue(1));
                }
            }
            catch (Exception ex)
            {
                // Error handling
                //MessageBox.Show("OPC server write item failed with exception: " + ex.Message + " INDEX = " + index.ToString() + " c=" + opcItemValueToWritte[index].Text + "/", "SimpleOPCInterface Exception", MessageBoxButtons.OK);
            }
        }
        public void Write(int index)
        {
            try
            {
                short                 ItemCount             = 1;
                int[]                 SyncItemServerHandles = new int[2];
                object[]              SyncItemValues        = new object[2];
                System.Array          SyncItemServerErrors  = null;
                OPCAutomation.OPCItem AnOpcItem             = default(OPCItem);

                SyncItemServerHandles[1] = (int)Config.ServerHandles.GetValue(index);
                AnOpcItem = _OpcGroup.OPCItems.GetOPCItem((int)Config.ServerHandles.GetValue(index));

                Array ItsAnArray = null;
                short CanonDT    = 0;
                short vbArray    = 8192;

                CanonDT = AnOpcItem.CanonicalDataType;
                if (CanonDT > vbArray)
                {
                    CanonDT -= vbArray;
                }

                switch (CanonDT)
                {
                case (short)CanonicalDataTypes.CanonDtByte:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(byte), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToByte((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtChar:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(SByte), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSByte((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtWord:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt16), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt16(Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtShort:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int16), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt16((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtDWord:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt32), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt32((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtLong:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int32), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt32((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtFloat:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(float), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSingle((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtDouble:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(double), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Module1.TagList[index].Value;
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtBool:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(bool), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToBoolean(Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtString:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(string), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToString((string)Module1.TagList[index].Value);
                    }
                    break;
                    // End case
                }

                _OpcGroup.SyncWrite(ItemCount, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);

                if ((int)SyncItemServerErrors.GetValue(1) != 0)
                {
                    //MessageBox.Show("SyncItemServerError: " + SyncItemServerErrors.GetValue(1));
                }
            }
            catch (Exception ex)
            {
            }
        }