/// <summary>
        /// Removes a previously created subscription.
        /// </summary>
        private void UndoCreate()
        {
            try
            {
                mServer_.CancelSubscription(mSubscription_);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                if (mSubscription_ != null)
                {
                    mSubscription_.Dispose();
                }
                mSubscription_ = null;
            }

            // move to edit subscription panel.
            backBtn_.Enabled          = false;
            nextBtn_.Enabled          = true;
            cancelBtn_.Visible        = true;
            doneBtn_.Visible          = false;
            optionsBtn_.Visible       = false;
            subscriptionCtrl_.Visible = true;
            browseCtrl_.Visible       = false;
            itemsCtrl_.Visible        = true;
            resultsCtrl_.Visible      = false;
        }
        /// <summary>
        /// Edit the specified subscription.
        /// </summary>
        private void EditSubscription(TreeNode node, TsCDaSubscription subscription)
        {
            try
            {
                TsCDaSubscriptionState state = new SubscriptionListEditDlg().ShowDialog(subscription.Server, subscription.State);

                if (state == null)
                {
                    return;
                }

                subscription.ModifyState((int)TsCDaStateMask.All, state);

                node.Text = subscription.Name;

                if (SubscriptionModified != null)
                {
                    SubscriptionModified(subscription, !state.Active);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Prompts the use to select items for the write request.
        /// </summary>
        public TsCDaItemValueResult[] ShowDialog(TsCDaServer server)
        {
            if (server == null)
            {
                throw new ArgumentNullException("server");
            }

            mServer_       = server;
            mSubscription_ = null;
            mSynchronous_  = true;

            backBtn_.Enabled          = false;
            nextBtn_.Enabled          = true;
            cancelBtn_.Visible        = true;
            doneBtn_.Visible          = false;
            browseCtrl_.Visible       = true;
            subscriptionCtrl_.Visible = false;
            itemsCtrl_.Visible        = true;
            resultsCtrl_.Visible      = false;

            browseCtrl_.ShowSingleServer(mServer_, null);
            itemsCtrl_.Initialize(mServer_, null);

            ShowDialog();

            // ensure server connection in the browse control are closed.
            browseCtrl_.Clear();

            return(mValues_);
        }
        /// <summary>
        /// Creates a subscription with the specified parameters.
        /// </summary>
        private void DoCreate()
        {
            try
            {
                // assign a globally unique handle to the subscription.
                TsCDaSubscriptionState state = (TsCDaSubscriptionState)subscriptionCtrl_.Get();

                state.ClientHandle = Guid.NewGuid().ToString();

                // create the subscription.
                mSubscription_ = (TsCDaSubscription)mServer_.CreateSubscription(state);

                // move to add items panel.
                backBtn_.Enabled          = true;
                nextBtn_.Enabled          = true;
                cancelBtn_.Visible        = false;
                doneBtn_.Visible          = true;
                optionsBtn_.Visible       = true;
                subscriptionCtrl_.Visible = false;
                browseCtrl_.Visible       = true;
                itemsCtrl_.Visible        = true;
                resultsCtrl_.Visible      = false;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
        /// <summary>
        /// Lookups the error text for the specified error id.
        /// </summary>
        private string GetErrorText(object subscriptionHandle, OpcResult resultID)
        {
            if (ShowErrorTextMI.Checked)
            {
                // display nothing for ok results.
                if (resultID == OpcResult.S_OK)
                {
                    return("");
                }

                // fetch the error text from the server.
                string errorText = null;

                try
                {
                    TsCDaSubscription subscription = (TsCDaSubscription)m_subscriptions[subscriptionHandle];
                    string            locale       = (subscription != null)?subscription.Locale:CultureInfo.CurrentCulture.Name;
                    errorText = m_server.GetErrorText(locale, resultID);
                }
                catch
                {
                    errorText = null;
                }

                // return the result;
                return((errorText != null)?errorText:"");
            }

            // return the result id as a string.
            return(resultID.ToString());
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Stop this service.
 /// </summary>
 protected override void OnStop()
 {
     try
     {
         Console.WriteLine("Remove Groups ...");
         if (group != null)
         {
             group.Dispose();
             group = null;
         }
         Console.WriteLine("Disconnect from Server ...");
         if (myDaServer != null)
         {
             myDaServer.Disconnect();
             myDaServer = null;
         }
         Console.WriteLine("Done.");
     }
     catch (OpcResultException e)
     {
         Console.WriteLine("   " + e.Message);
         return;
     }
     catch (Exception e)
     {
         Console.WriteLine("   " + e.Message);
         return;
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Prompts the use to select items for the read request.
        /// </summary>
        public TsCDaItemValueResult[] ShowDialog(TsCDaSubscription subscription, bool synchronous)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            m_server       = subscription.Server;
            m_subscription = subscription;
            m_synchronous  = synchronous;

            BackBTN.Enabled          = false;
            NextBTN.Enabled          = true;
            CancelBTN.Visible        = true;
            DoneBTN.Visible          = false;
            OptionsBTN.Visible       = true;
            BrowseCTRL.Visible       = false;
            SubscriptionCTRL.Visible = true;
            ItemsCTRL.Visible        = true;
            ResultsCTRL.Visible      = false;

            SubscriptionCTRL.Initialize(m_subscription);
            ItemsCTRL.Initialize(m_server, null, m_subscription.Items);

            ShowDialog();

            return(m_values);
        }
        /// <summary>
        /// Edits items in the specified subscription.
        /// </summary>
        private void EditItem(TreeNode node, TsCDaSubscription subscription, TsCDaItem item)
        {
            try
            {
                // save existing item id.
                OpcItem itemId = new OpcItem(item);

                TsCDaItem[] items = new ItemListEditDlg().ShowDialog(new TsCDaItem[] { item }, false, false);

                if (items == null)
                {
                    return;
                }

                // modify an existing item.
                if (itemId.Key == items[0].Key)
                {
                    subscription.ModifyItems((int)TsCDaStateMask.All, items);
                }

                // add/remove item because the item id changed.
                else
                {
                    items = subscription.AddItems(items);
                    subscription.RemoveItems(new OpcItem[] { itemId });
                }

                node.Text = items[0].ItemName;
                node.Tag  = items[0];
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Prompts the use to select items for the read request.
        /// </summary>
        public TsCDaItemValueResult[] ShowDialog(TsCDaSubscription subscription, bool synchronous)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            mServer_       = subscription.Server;
            mSubscription_ = subscription;
            mSynchronous_  = synchronous;

            backBtn_.Enabled          = false;
            nextBtn_.Enabled          = true;
            cancelBtn_.Visible        = true;
            doneBtn_.Visible          = false;
            optionsBtn_.Visible       = true;
            browseCtrl_.Visible       = false;
            subscriptionCtrl_.Visible = true;
            itemsCtrl_.Visible        = true;
            resultsCtrl_.Visible      = false;

            subscriptionCtrl_.Initialize(mSubscription_);
            itemsCtrl_.Initialize(null, mSubscription_.Items);

            ShowDialog();

            return(mValues_);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Prompts a user to add items to a subscitpion with a modal dialog.
        /// </summary>
        public TsCDaItemResult[] ShowDialog(TsCDaSubscription subscription)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            mServer_       = subscription.Server;
            mSubscription_ = subscription;
            mItems_        = null;

            backBtn_.Enabled     = false;
            nextBtn_.Enabled     = true;
            cancelBtn_.Visible   = true;
            doneBtn_.Visible     = false;
            optionsBtn_.Visible  = true;
            browseCtrl_.Visible  = true;
            itemsCtrl_.Visible   = true;
            resultsCtrl_.Visible = false;

            browseCtrl_.ShowSingleServer(mServer_, null);
            itemsCtrl_.Initialize(null);

            ShowDialog();

            // ensure server connection in the browse control are closed.
            browseCtrl_.Clear();

            return(mItems_);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Prompts a user to create a new subscription with a modal dialog.
        /// </summary>
        public TsCDaSubscription ShowDialog(TsCDaServer server)
        {
            if (server == null)
            {
                throw new ArgumentNullException("server");
            }

            m_server       = server;
            m_subscription = null;
            m_items        = null;

            BackBTN.Enabled          = false;
            NextBTN.Enabled          = true;
            CancelBTN.Visible        = true;
            DoneBTN.Visible          = false;
            OptionsBTN.Visible       = false;
            SubscriptionCTRL.Visible = true;
            BrowseCTRL.Visible       = false;
            ItemsCTRL.Visible        = true;
            ResultsCTRL.Visible      = false;

            SubscriptionCTRL.Server = m_server;
            SubscriptionCTRL.Set(null);
            BrowseCTRL.ShowSingleServer(m_server, null);
            ItemsCTRL.Initialize((TsCDaItem)null);

            ShowDialog();

            // ensure server connection in the browse control are closed.
            BrowseCTRL.Clear();

            return(m_subscription);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Creates a subscription with the specified parameters.
        /// </summary>
        private void DoCreate()
        {
            try
            {
                // assign a globally unique handle to the subscription.
                TsCDaSubscriptionState state = (TsCDaSubscriptionState)SubscriptionCTRL.Get();

                state.ClientHandle = Guid.NewGuid().ToString();

                // create the subscription.
                m_subscription = (TsCDaSubscription)m_server.CreateSubscription(state);

                // move to add items panel.
                BackBTN.Enabled          = true;
                NextBTN.Enabled          = true;
                CancelBTN.Visible        = false;
                DoneBTN.Visible          = true;
                OptionsBTN.Visible       = true;
                SubscriptionCTRL.Visible = false;
                BrowseCTRL.Visible       = true;
                ItemsCTRL.Visible        = true;
                ResultsCTRL.Visible      = false;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Set things in motion so your service can do its work.
        /// </summary>
        protected override void OnStart(string[] args)
        {
            const string serverName = "opcda://localhost/Technosoftware.DaSample";

            try
            {
                myDaServer = new TsCDaServer();

                myDaServer.Connect(serverName);
                OpcServerStatus status = myDaServer.GetServerStatus();

                // Add a group with default values Active = true and UpdateRate = 500ms
                TsCDaSubscriptionState groupState = new TsCDaSubscriptionState();
                groupState.Name = "MyGroup";                                          // Group Name
                group           = (TsCDaSubscription)myDaServer.CreateSubscription(groupState);

                // Add Items
                TsCDaItem[]       items = new TsCDaItem[3];
                TsCDaItemResult[] itemResults;
                items[0]                 = new TsCDaItem();
                items[0].ItemName        = "SimulatedData.Ramp";                      // Item Name
                items[0].ClientHandle    = 100;                                       // Client Handle
                items[0].MaxAgeSpecified = true;
                items[0].MaxAge          = Int32.MaxValue;
                items[1]                 = new TsCDaItem();
                items[1].ItemName        = "SimulatedData.Random";                    // Item Name
                items[1].ClientHandle    = 150;                                       // Client Handle
                items[2]                 = new TsCDaItem();
                items[2].ItemName        = "InOut_I4";                                // Item Name
                items[2].ClientHandle    = 200;                                       // Client Handle

                TsCDaItem[] arAddedItems;
                itemResults = group.AddItems(items);

                for (int i = 0; i < itemResults.GetLength(0); i++)
                {
                    if (itemResults[i].Result.IsError())
                    {
                        Console.WriteLine("   Item " + itemResults[i].ItemName + "could not be added to the group");
                    }
                }

                arAddedItems = itemResults;

                group.DataChangedEvent += new TsCDaDataChangedEventHandler(DataChangeHandler);
                Console.WriteLine("Wait 5 seconds ...");
                //System.Threading.Thread.Sleep(5000);
            }
            catch (OpcResultException e)
            {
                Console.WriteLine("   " + e.Message);
                return;
            }
            catch (Exception e)
            {
                Console.WriteLine("   " + e.Message);
                return;
            }
        }
        /// <summary>
        /// Initializes the control with the specified server.
        /// </summary>
        public void Initialize(TsCDaSubscription subscription)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            AddSubscription(null, subscription);
        }
        /// <summary>
        /// Called when a subscription is added or removed from the control.
        /// </summary>
        public void OnSubscriptionModified(TsCDaSubscription subscription, bool deleted)
        {
            if (subscription == null)
            {
                return;
            }

            if (!deleted)
            {
                // check if the subscription is already added to the control.
                if (m_items.Contains(subscription.ClientHandle))
                {
                    return;
                }

                // register for data updates.
                subscription.DataChangedEvent += new TsCDaDataChangedEventHandler(OnDataChangeEvent);

                // add to subscription list.
                m_subscriptions.Add(subscription.ClientHandle, subscription);
                m_items.Add(subscription.ClientHandle, new ArrayList());
            }
            else
            {
                // check if the subscription is already removed from the control.
                if (!m_items.Contains(subscription.ClientHandle))
                {
                    return;
                }

                // unregister for data updates.
                subscription.DataChangedEvent -= new TsCDaDataChangedEventHandler(OnDataChangeEvent);

                // remove all items for the subscription.
                ArrayList existingItemList = (ArrayList)m_items[subscription.ClientHandle];

                foreach (ListViewItem listItem in existingItemList)
                {
                    EditComplexValueDlg dialog = (EditComplexValueDlg)m_viewers[listItem];

                    if (dialog != null)
                    {
                        dialog.Close();
                        m_viewers.Remove(listItem);
                    }

                    listItem.Remove();
                }

                // remove from subscription list.
                m_subscriptions.Remove(subscription.ClientHandle);
                m_items.Remove(subscription.ClientHandle);
            }
        }
 /// <summary>
 /// Refreshes the items of a subscription.
 /// </summary>
 private void Refresh(TsCDaSubscription subscription)
 {
     try
     {
         subscription.Refresh();
     }
     catch (Exception e)
     {
         MessageBox.Show(e.Message);
     }
 }
 /// <summary>
 /// Toggles the enabled state of a subscription.
 /// </summary>
 private void SetEnabled(TsCDaSubscription subscription, bool enabled)
 {
     try
     {
         subscription.SetEnabled(enabled);
     }
     catch (Exception e)
     {
         MessageBox.Show(e.Message);
     }
 }
        /// <summary>
        /// Called when the close button is clicked.
        /// </summary>
        private void DoneBTN_Click(object sender, System.EventArgs e)
        {
            if (sender == cancelBtn_)
            {
                try   { mServer_.CancelSubscription(mSubscription_); }
                catch {}
                mSubscription_ = null;
            }

            DialogResult = DialogResult.Cancel;
            Close();
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Called when the close button is clicked.
        /// </summary>
        private void DoneBTN_Click(object sender, System.EventArgs e)
        {
            if (sender == CancelBTN)
            {
                try   { m_server.CancelSubscription(m_subscription); }
                catch {}
                m_subscription = null;
            }

            DialogResult = DialogResult.Cancel;
            Close();
        }
 /// <summary>
 /// Remove an item in the specified subscription.
 /// </summary>
 private void RemoveItem(TreeNode node, TsCDaSubscription subscription, TsCDaItem item)
 {
     try
     {
         subscription.RemoveItems(new OpcItem[] { item });
         node.Remove();
     }
     catch (Exception e)
     {
         MessageBox.Show(e.Message);
     }
 }
Ejemplo n.º 21
0
        //----------------------------------------------------------------------------------------------------------------------
        // btnAddItem_Click
        //--------------------
        // This method tries to add the specified item to the preceding added group object.
        //----------------------------------------------------------------------------------------------------------------------
        private void btnAddItem_Click(object sender, System.EventArgs e)
        {
            try
            {
                TsCDaSubscriptionState groupState = new TsCDaSubscriptionState();
                groupState.Name = "MyGroup";                                          // Group Name
                m_pOpcGroup     = (TsCDaSubscription)m_OpcDaServer.CreateSubscription(groupState);

                TsCDaItemResult[] res;
                TsCDaItem[]       items = new TsCDaItem[1];
                items[0]              = new TsCDaItem();
                items[0].ItemName     = txtboxOpcItem.Text;                       // Item Name
                items[0].ClientHandle = 100;                                      // Client Handle

                res = m_pOpcGroup.AddItems(items);

                if (res[0].Result.IsSuccess())
                {
                    if (!(res[0].Result.IsOk()))                                                        // Note: Since this sample adds only one item it's required that AddItems()
                    {
                        return;                                                                         // succeeds for all specified items (in this case only one).
                    }
                    else
                    {
                        m_arAddedItems = res;
                    }
                }
                else
                {
                    MessageBox.Show("AddItems() method failed: " + res[0].Result.Description(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }


                /// All succeeded, update buttons and text fields
                txtboxOpcItem.Enabled = false;
                btnAddItem.Enabled    = false;
                btnRead.Enabled       = true;
                btnWrite.Enabled      = true;
                txtboxWrite.Enabled   = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
        /// <summary>
        /// Adds items to the specified subscription.
        /// </summary>
        private void AddItems(TreeNode node, TsCDaSubscription subscription)
        {
            TsCDaItemResult[] items = new SubscriptionAddItemsDlg().ShowDialog(subscription);

            // update tree with new items.
            if (items != null)
            {
                foreach (TsCDaItemResult item in items)
                {
                    if (item.Result.Succeeded())
                    {
                        AddItem(node, item);
                    }
                }

                node.Expand();
            }
        }
        /// <summary>
        /// Toggles the active state of a subscription.
        /// </summary>
        private void SetActive(TsCDaSubscription subscription, bool active)
        {
            try
            {
                TsCDaSubscriptionState state = new TsCDaSubscriptionState();
                state.Active = active;
                subscription.ModifyState((int)TsCDaStateMask.Active, state);

                if (SubscriptionModified != null)
                {
                    SubscriptionModified(subscription, !state.Active);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
        /// <summary>
        /// Toggles the active state of a subscription.
        /// </summary>
        private void SetActive(TreeNode node, TsCDaSubscription subscription, TsCDaItem item, bool active)
        {
            try
            {
                item.Active          = active;
                item.ActiveSpecified = true;

                TsCDaItem[] items = subscription.ModifyItems((int)TsCDaStateMask.Active, new TsCDaItem[] { item });

                if (items != null)
                {
                    node.Tag = items[0];
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
        /// <summary>
        /// Deletes the specified subscription.
        /// </summary>
        private void DeleteSubscription(TreeNode node, TsCDaSubscription subscription)
        {
            if (SubscriptionModified != null)
            {
                SubscriptionModified(subscription, true);
            }

            try
            {
                TsCDaServer server = subscription.Server;
                server.CancelSubscription(subscription);
                subscription.Dispose();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

            node.Remove();
        }
Ejemplo n.º 26
0
        //----------------------------------------------------------------------------------------------------------------------
        // btnAddItem_Click
        //--------------------
        // This method tries to add the specified item to the preceding added group object.
        //----------------------------------------------------------------------------------------------------------------------
        private void btnAddItem_Click(object sender, System.EventArgs e)
        {
            try
            {
                TsCDaSubscriptionState groupState = new TsCDaSubscriptionState();
                groupState.Name         = "MyGroup";                  // Group Name
                groupState.ClientHandle = "test";
                groupState.Deadband     = 0;
                groupState.UpdateRate   = 1000;
                groupState.KeepAlive    = 10000;
                m_pOpcGroup             = (TsCDaSubscription)m_OpcDaServer.CreateSubscription(groupState);

                TsCDaItemResult[] itemResults;
                TsCDaItem[]       items = new TsCDaItem[1];
                items[0]              = new TsCDaItem();
                items[0].ItemName     = txtboxOpcItem.Text;       // Item Name
                items[0].ClientHandle = 100;                      // Client Handle

                itemResults    = m_pOpcGroup.AddItems(items);
                m_arAddedItems = itemResults;

                /// Activate data change subscription
                m_pOpcGroup.DataChangedEvent += new TsCDaDataChangedEventHandler(DataChangeHandler);

                /// All succeeded, update buttons and text fields
                txtboxOpcItem.Enabled      = false;
                btnAddItem.Enabled         = false;
                btnRead.Enabled            = true;
                btnRefresh.Enabled         = true;
                btnCancel.Enabled          = true;
                btnWrite.Enabled           = true;
                txtboxWrite.Enabled        = true;
                chboxNotifications.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
        /// <summary>
        /// Adds a subscription into the tree.
        /// </summary>
        private void AddSubscription(TreeNode parent, TsCDaSubscription subscription)
        {
            TreeNode child = new TreeNode(subscription.Name);

            child.ImageIndex = child.SelectedImageIndex = Resources.IMAGE_ENVELOPE;
            child.Tag        = subscription;

            foreach (TsCDaItem item in subscription.Items)
            {
                AddItem(child, item);
            }

            if (parent != null)
            {
                parent.Nodes.Add(child);
            }
            else
            {
                subscriptionTv_.Nodes.Add(child);
                child.Expand();
            }
        }
        /// <summary>
        /// Executes an asynchronous read and displays the results.
        /// </summary>
        public TsCDaItemValueResult[] ShowDialog(TsCDaSubscription subscription, TsCDaItem[] items)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            m_subscription = subscription;
            m_items        = items;
            m_values       = null;
            m_results      = null;

            BeginRequest();

            // show dialog.
            if (ShowDialog() != DialogResult.OK)
            {
                return(null);
            }

            // return results.
            return((TsCDaItemValueResult[])m_results);
        }
        /// <summary>
        /// Executes an asynchronous read and displays the results.
        /// </summary>
        public OpcItemResult[] ShowDialog(TsCDaSubscription subscription, TsCDaItemValue[] values)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            mSubscription_ = subscription;
            mItems_        = null;
            mValues_       = values;
            mResults_      = null;

            BeginRequest();

            // show dialog.
            if (ShowDialog() != DialogResult.OK)
            {
                return(null);
            }

            // return results.
            return((OpcItemResult[])mResults_);
        }
        /// <summary>
        /// Disconnects from the server and clears all objects.
        /// </summary>
        private void Disconnect(TreeNode node, TsCDaServer server)
        {
            // remove all subscriptions.
            foreach (TreeNode child in node.Nodes)
            {
                if (IsSubscriptionNode(child))
                {
                    if (SubscriptionModified != null)
                    {
                        SubscriptionModified((TsCDaSubscription)child.Tag, true);
                    }

                    TsCDaSubscription subscription = (TsCDaSubscription)child.Tag;
                    server.CancelSubscription(subscription);
                    subscription.Dispose();
                }
            }

            // disconnect server.
            server.Disconnect();

            // remove tree from view.
            node.Remove();
        }
Ejemplo n.º 31
0
		void OnCreateSubscription()
		{
			// Создаём объект подписки
			var subscriptionState = new TsCDaSubscriptionState
			{
				Name = "MySubscription",
				ClientHandle = "MySubscriptionId",
				Deadband = 0,
				UpdateRate = 1000,
				KeepAlive = 10000
			};
			_activeSubscription = (TsCDaSubscription)_activeOpcServer.CreateSubscription(subscriptionState);

			// Добавляем в объект подписки выбранные теги
			var x = 0;
			List<TsCDaItem> list = new List<TsCDaItem>();
			foreach (var item in CheckedTags)
			{
				var tag = new TsCDaItem
				{
					ItemName = item.Element.ItemName,
					ClientHandle = 100 + x // Уникальный Id определяемый пользователем
				};
				list.Add(tag);
				++x;
			}

			// Добавляем теги и проверяем результат данной операции
			var results = _activeSubscription.AddItems(list.ToArray());

			var errors = results.Where(result => result.Result.IsError());

			if (errors.Count() > 0)
			{
				StringBuilder msg = new StringBuilder();
				msg.Append("Не удалось добавить теги для подписки. Возникли ошибки в тегах:");
				foreach (var error in errors)
				{
 					msg.Append(String.Format("ItemName={0} ClientHandle={1} Description={2}; ",
						error.ItemName, error.ClientHandle, error.Result.Description()));
				}
				throw new InvalidOperationException(msg.ToString());
			}

			_activeSubscription.DataChangedEvent += _dataChangeEventHandler;
		}
Ejemplo n.º 32
0
		void OnCancelSubscription()
		{
 			//_activeSubscription.Cancel()
			_activeOpcServer.CancelSubscription(_activeSubscription);
			_activeSubscription.DataChangedEvent -= _dataChangeEventHandler;
			_activeSubscription.Dispose();
			_activeSubscription = null;
		}