Esempio n. 1
0
        /// <summary>
        /// Adds a set of items to a subscription.
        /// </summary>
        private void DoAddItems()
        {
            try
            {
                // assign globally unique client handle.
                TsCDaItem[] items = ItemsCTRL.GetItems();

                foreach (TsCDaItem item in items)
                {
                    item.ClientHandle = Guid.NewGuid().ToString();
                }

                // add items to subscription.
                m_items = m_subscription.AddItems(items);

                // move to add items panel.
                BackBTN.Enabled          = true;
                NextBTN.Enabled          = false;
                CancelBTN.Visible        = false;
                DoneBTN.Visible          = true;
                OptionsBTN.Visible       = false;
                SubscriptionCTRL.Visible = true;
                BrowseCTRL.Visible       = false;
                ItemsCTRL.Visible        = false;
                ResultsCTRL.Visible      = true;

                // update controls with actual values.
                SubscriptionCTRL.Set(m_subscription.State);
                ResultsCTRL.Initialize(m_server, null, m_items);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Adds a set of items to a subscription.
        /// </summary>
        private void DoAddItems()
        {
            try
            {
                // assign globally unique client handle.
                TsCDaItem[] items = itemsCtrl_.GetItems();

                foreach (TsCDaItem item in items)
                {
                    item.ClientHandle = Guid.NewGuid().ToString();
                }

                // add items to subscription.
                mItems_ = mSubscription_.AddItems(items);

                // move to add items panel.
                backBtn_.Enabled     = true;
                nextBtn_.Enabled     = false;
                cancelBtn_.Visible   = false;
                doneBtn_.Visible     = true;
                optionsBtn_.Visible  = false;
                browseCtrl_.Visible  = true;
                itemsCtrl_.Visible   = false;
                resultsCtrl_.Visible = true;

                // update controls with actual values.
                resultsCtrl_.Initialize(mServer_, null, mItems_);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
        /// <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);
            }
        }
        /// <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;
            }
        }
        //----------------------------------------------------------------------------------------------------------------------
        // 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);
            }
        }
Esempio n. 6
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>
        /// Edits items in the specified subscription.
        /// </summary>
        private void EditItems(TreeNode node, TsCDaSubscription subscription)
        {
            try
            {
                // save item ids to detect item id changes.
                OpcItem[] itemIDs = new OpcItem[subscription.Items.Length];

                for (int ii = 0; ii < itemIDs.Length; ii++)
                {
                    itemIDs[ii] = new OpcItem(subscription.Items[ii]);
                }

                // edit the items.
                TsCDaItem[] items = new ItemListEditDlg().ShowDialog(subscription.Items, false, false);

                if (items == null)
                {
                    return;
                }

                // separate the items in lists depending on whether item id changed.
                ArrayList insertItems = new ArrayList();
                ArrayList updateItems = new ArrayList();
                ArrayList deleteItems = new ArrayList();

                for (int ii = 0; ii < itemIDs.Length; ii++)
                {
                    if (items[ii].Key != itemIDs[ii].Key)
                    {
                        insertItems.Add(items[ii]);
                        deleteItems.Add(itemIDs[ii]);
                    }
                    else
                    {
                        updateItems.Add(items[ii]);
                    }
                }

                // update existing items.
                if (updateItems.Count > 0)
                {
                    subscription.ModifyItems((int)TsCDaStateMask.All, (TsCDaItem[])updateItems.ToArray(typeof(TsCDaItem)));
                }

                // insert new items.
                if (insertItems.Count > 0)
                {
                    subscription.AddItems((TsCDaItem[])insertItems.ToArray(typeof(TsCDaItem)));
                }

                // delete old items.
                if (deleteItems.Count > 0)
                {
                    subscription.RemoveItems((OpcItem[])deleteItems.ToArray(typeof(OpcItem)));
                }

                // update tree.
                node.Nodes.Clear();

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

                node.Expand();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
		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;
		}