/// <summary>
        /// Adds an item to the list view.
        /// </summary>
        public void AddItem(TsCDaItem item)
        {
            // create list view item.
            ListViewItem listItem = new ListViewItem(item.ItemName, Resources.IMAGE_YELLOW_SCROLL);

            // add appropriate sub-items.
            listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, ITEM_PATH)));
            listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, REQUESTED_TYPE)));
            listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, MAXIMUM_AGE)));
            listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, ACTIVE)));
            listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, DEADBAND)));
            listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, SAMPLING_RATE)));
            listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, ENABLE_BUFFERING)));

            // save item object as list view item tag.
            listItem.Tag = item;

            // insert/add item to list view.
            if (item == m_template)
            {
                ItemListLV.Items.Insert(0, listItem);
            }
            else
            {
                ItemListLV.Items.Add(listItem);
            }

            // adjust columns.
            AdjustColumns();
        }
        /// <summary>
        /// Edits the item template.
        /// </summary>
        private void EditTemplate(TsCDaItem template)
        {
            // prompt user to edit the template.
            TsCDaItem[] templates = new ItemListEditDlg().ShowDialog(new TsCDaItem[] { template }, IsReadItem, false);

            if (templates == null || templates.Length != 1)
            {
                return;
            }

            // get existing items without applying defaults.
            ArrayList items = new ArrayList();

            foreach (ListViewItem item in ItemListLV.Items)
            {
                if (item.Tag != null && item.Tag.GetType() == typeof(TsCDaItem))
                {
                    if (item.Tag != m_template)
                    {
                        items.Add(item.Tag);
                    }
                }
            }

            // re-initialize the list with the new template.
            Initialize(templates[0]);

            // add items back.
            foreach (TsCDaItem item in items)
            {
                AddItem(item);
            }
        }
        /// <summary>
        /// Copy values from control into object - throw exceptions on error.
        /// </summary>
        public object Get()
        {
            TsCDaItem item = new TsCDaItem(m_identifier);

            item.ItemName                 = ItemNameTB.Text;
            item.ItemPath                 = ItemPathTB.Text;
            item.ReqType                  = (ReqTypeSpecifiedCB.Checked)?ReqTypeCTRL.SelectedType:null;
            item.MaxAge                   = (MaxAgeSpecifiedCB.Checked)?(int)MaxAgeCTRL.Value * 1000:0;
            item.MaxAgeSpecified          = MaxAgeSpecifiedCB.Checked;
            item.Active                   = (ActiveSpecifiedCB.Checked)?ActiveCB.Checked:false;
            item.ActiveSpecified          = ActiveSpecifiedCB.Checked;
            item.Deadband                 = (DeadbandSpecifiedCB.Checked)?(float)DeadbandCTRL.Value:0;
            item.DeadbandSpecified        = DeadbandSpecifiedCB.Checked;
            item.SamplingRate             = (SamplingRateSpecifiedCB.Checked)?(int)SamplingRateCTRL.Value:0;
            item.SamplingRateSpecified    = SamplingRateSpecifiedCB.Checked;
            item.EnableBuffering          = (EnableBufferSpecifiedCB.Checked)?EnableBufferingCB.Checked:false;
            item.EnableBufferingSpecified = EnableBufferSpecifiedCB.Checked;

            // update the item id to reflect selections for complex data.
            try
            {
                GetComplexItem(item);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);

                item.ItemName = ItemNameTB.Text;
                item.ItemPath = ItemPathTB.Text;
            }

            return(item);
        }
        /// <summary>
        /// Adds an item to the list view.
        /// </summary>
        public void AddItem(TsCDaItem item)
        {
            // create list view item.
            ListViewItem listItem = new ListViewItem(item.ItemName, Resources.IMAGE_YELLOW_SCROLL);

            // add appropriate sub-items.
            listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, ItemPath)));
            listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, RequestedType)));
            listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, MaximumAge)));
            listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, Active)));
            listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, Deadband)));
            listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, SamplingRate)));
            listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, EnableBuffering)));

            // save item object as list view item tag.
            listItem.Tag = item;

            // insert/add item to list view.
            if (item == mTemplate_)
            {
                itemListLv_.Items.Insert(0, listItem);
            }
            else
            {
                itemListLv_.Items.Add(listItem);
            }

            // adjust columns.
            AdjustColumns();
        }
        /// <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>
        /// Copy values from control into object - throw exceptions on error.
        /// </summary>
        public object Get()
        {
            TsCDaItem item = new TsCDaItem(mIdentifier_);

            item.ItemName                 = itemNameTb_.Text;
            item.ItemPath                 = itemPathTb_.Text;
            item.ReqType                  = (reqTypeSpecifiedCb_.Checked)?reqTypeCtrl_.SelectedType:null;
            item.MaxAge                   = (maxAgeSpecifiedCb_.Checked)?(int)maxAgeCtrl_.Value * 1000:0;
            item.MaxAgeSpecified          = maxAgeSpecifiedCb_.Checked;
            item.Active                   = (activeSpecifiedCb_.Checked)?activeCb_.Checked:false;
            item.ActiveSpecified          = activeSpecifiedCb_.Checked;
            item.Deadband                 = (deadbandSpecifiedCb_.Checked)?(float)deadbandCtrl_.Value:0;
            item.DeadbandSpecified        = deadbandSpecifiedCb_.Checked;
            item.SamplingRate             = (samplingRateSpecifiedCb_.Checked)?(int)samplingRateCtrl_.Value:0;
            item.SamplingRateSpecified    = samplingRateSpecifiedCb_.Checked;
            item.EnableBuffering          = (enableBufferSpecifiedCb_.Checked)?enableBufferingCb_.Checked:false;
            item.EnableBufferingSpecified = enableBufferSpecifiedCb_.Checked;

            // update the item id to reflect selections for complex data.
            try
            {
                GetComplexItem(item);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);

                item.ItemName = itemNameTb_.Text;
                item.ItemPath = itemPathTb_.Text;
            }

            return(item);
        }
        /// <summary>
        /// Initializes the control with the specified set of items.
        /// </summary>
        public void Initialize(TsCDaItem template, TsCDaItem[] items)
        {
            Initialize(template);

            // add items.
            if (items != null)
            {
                foreach (TsCDaItem item in items)
                {
                    // clear subscription related fields.
                    if (IsReadItem)
                    {
                        item.ActiveSpecified          = false;
                        item.DeadbandSpecified        = false;
                        item.SamplingRateSpecified    = false;
                        item.EnableBufferingSpecified = false;
                    }

                    AddItem(item);
                }
            }

            // adjust columns.
            AdjustColumns();
        }
        /// <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>
        /// Adds an item into the tree.
        /// </summary>
        private void AddItem(TreeNode parent, TsCDaItem item)
        {
            TreeNode child = new TreeNode(item.ItemName);

            child.ImageIndex = child.SelectedImageIndex = Resources.IMAGE_YELLOW_SCROLL;
            child.Tag        = item;

            parent.Nodes.Add(child);
        }
 /// <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);
     }
 }
        /// <summary>
        /// Returns the set of items in the control.
        /// </summary>
        public TsCDaItem[] GetItems()
        {
            ArrayList items = new ArrayList();

            foreach (ListViewItem listItem in ItemListLV.Items)
            {
                // skip template.
                if (listItem.Tag == m_template)
                {
                    continue;
                }

                object field = null;

                // create copy of item.
                TsCDaItem item = (TsCDaItem)((TsCDaItem)listItem.Tag).Clone();

                // Req Type
                field        = GetFieldValue(item, REQUESTED_TYPE);
                item.ReqType = (System.Type)field;

                // Max Age
                field                = GetFieldValue(item, MAXIMUM_AGE);
                item.MaxAge          = (field != null)?(int)field:0;
                item.MaxAgeSpecified = field != null;

                // Active
                field                = GetFieldValue(item, ACTIVE);
                item.Active          = (field != null)?(bool)field:false;
                item.ActiveSpecified = field != null;

                // Deadband
                field                  = GetFieldValue(item, DEADBAND);
                item.Deadband          = (field != null)?(float)field:0;
                item.DeadbandSpecified = field != null;

                // Sampling Rate
                field                      = GetFieldValue(item, SAMPLING_RATE);
                item.SamplingRate          = (field != null)?(int)field:0;
                item.SamplingRateSpecified = field != null;

                // Enable Buffering
                field = GetFieldValue(item, ENABLE_BUFFERING);
                item.EnableBuffering          = (field != null)?(bool)field:false;
                item.EnableBufferingSpecified = field != null;

                // add item to list.
                items.Add(item);
            }

            // convert to array of item objects.
            return((TsCDaItem[])items.ToArray(typeof(TsCDaItem)));
        }
        /// <summary>
        /// Returns the set of items in the control.
        /// </summary>
        public TsCDaItem[] GetItems()
        {
            ArrayList items = new ArrayList();

            foreach (ListViewItem listItem in itemListLv_.Items)
            {
                // skip template.
                if (listItem.Tag == mTemplate_)
                {
                    continue;
                }

                object field = null;

                // create copy of item.
                TsCDaItem item = (TsCDaItem)((TsCDaItem)listItem.Tag).Clone();

                // Req Type
                field        = GetFieldValue(item, RequestedType);
                item.ReqType = (System.Type)field;

                // Max Age
                field                = GetFieldValue(item, MaximumAge);
                item.MaxAge          = (field != null)?(int)field:0;
                item.MaxAgeSpecified = field != null;

                // Active
                field                = GetFieldValue(item, Active);
                item.Active          = (field != null)?(bool)field:false;
                item.ActiveSpecified = field != null;

                // Deadband
                field                  = GetFieldValue(item, Deadband);
                item.Deadband          = (field != null)?(float)field:0;
                item.DeadbandSpecified = field != null;

                // Sampling Rate
                field                      = GetFieldValue(item, SamplingRate);
                item.SamplingRate          = (field != null)?(int)field:0;
                item.SamplingRateSpecified = field != null;

                // Enable Buffering
                field = GetFieldValue(item, EnableBuffering);
                item.EnableBuffering          = (field != null)?(bool)field:false;
                item.EnableBufferingSpecified = field != null;

                // add item to list.
                items.Add(item);
            }

            // convert to array of item objects.
            return((TsCDaItem[])items.ToArray(typeof(TsCDaItem)));
        }
        /// <summary>
        /// Initializes the control with the specified template item.
        /// </summary>
        public void Initialize(TsCDaItem template)
        {
            // clear existing items.
            ItemListLV.Items.Clear();

            // create template item.
            m_template          = (template != null)?(TsCDaItem)template.Clone():new TsCDaItem();
            m_template.ItemName = "<default>";

            // add template to list.
            AddItem(m_template);

            // adjust columns.
            AdjustColumns();
        }
        /// <summary>
        /// Copy object values into controls.
        /// </summary>
        public void Set(object value)
        {
            // check for null value.
            if (value == null)
            {
                SetDefaults(); return;
            }

            // cast value to item object.
            TsCDaItem item = (TsCDaItem)value;

            // save item identifier (including client and server handles).
            mIdentifier_ = new OpcItem(item);

            // update controls.
            itemNameTb_.Text                 = item.ItemName;
            itemPathTb_.Text                 = item.ItemPath;
            reqTypeCtrl_.SelectedType        = item.ReqType;
            reqTypeSpecifiedCb_.Checked      = item.ReqType != null;
            maxAgeCtrl_.Value                = (item.MaxAgeSpecified)?((decimal)item.MaxAge) / 1000:0;
            maxAgeSpecifiedCb_.Checked       = item.MaxAgeSpecified;
            activeCb_.Checked                = (item.ActiveSpecified)?item.Active:false;
            activeSpecifiedCb_.Checked       = item.ActiveSpecified;
            deadbandCtrl_.Value              = (item.DeadbandSpecified)?(decimal)item.Deadband:0;
            deadbandSpecifiedCb_.Checked     = item.DeadbandSpecified;
            samplingRateCtrl_.Value          = (item.SamplingRateSpecified)?(decimal)item.SamplingRate:0;
            samplingRateSpecifiedCb_.Checked = item.SamplingRateSpecified;
            enableBufferingCb_.Checked       = (item.EnableBufferingSpecified)?item.EnableBuffering:false;
            enableBufferSpecifiedCb_.Checked = item.EnableBufferingSpecified;

            reqTypePn_.Visible     = true;
            complexItemPn_.Visible = false;

            // initialize complex data controls.
            try
            {
                SetComplexItem(mIdentifier_);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);

                reqTypePn_.Visible     = true;
                complexItemPn_.Visible = false;
            }
        }
        /// <summary>
        /// Copy object values into controls.
        /// </summary>
        public void Set(object value)
        {
            // check for null value.
            if (value == null)
            {
                SetDefaults(); return;
            }

            // cast value to item object.
            TsCDaItem item = (TsCDaItem)value;

            // save item identifier (including client and server handles).
            m_identifier = new OpcItem(item);

            // update controls.
            ItemNameTB.Text                 = item.ItemName;
            ItemPathTB.Text                 = item.ItemPath;
            ReqTypeCTRL.SelectedType        = item.ReqType;
            ReqTypeSpecifiedCB.Checked      = item.ReqType != null;
            MaxAgeCTRL.Value                = (item.MaxAgeSpecified)?((decimal)item.MaxAge) / 1000:0;
            MaxAgeSpecifiedCB.Checked       = item.MaxAgeSpecified;
            ActiveCB.Checked                = (item.ActiveSpecified)?item.Active:false;
            ActiveSpecifiedCB.Checked       = item.ActiveSpecified;
            DeadbandCTRL.Value              = (item.DeadbandSpecified)?(decimal)item.Deadband:0;
            DeadbandSpecifiedCB.Checked     = item.DeadbandSpecified;
            SamplingRateCTRL.Value          = (item.SamplingRateSpecified)?(decimal)item.SamplingRate:0;
            SamplingRateSpecifiedCB.Checked = item.SamplingRateSpecified;
            EnableBufferingCB.Checked       = (item.EnableBufferingSpecified)?item.EnableBuffering:false;
            EnableBufferSpecifiedCB.Checked = item.EnableBufferingSpecified;

            ReqTypePN.Visible     = true;
            ComplexItemPN.Visible = false;

            // initialize complex data controls.
            try
            {
                SetComplexItem(m_identifier);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);

                ReqTypePN.Visible     = true;
                ComplexItemPN.Visible = false;
            }
        }
        //----------------------------------------------------------------------------------------------------------------------
        // 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>
        /// 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);
            }
        }
Beispiel #18
0
        /// <summary>
        /// Prompts the user to edit the item list parameters.
        /// </summary>
        public TsCDaItem[] ShowDialog(TsCDaItem[] items, bool isReadItems, bool allowEditItemId)
        {
            objectCtrl_.IsReadItem      = isReadItems;
            objectCtrl_.AllowEditItemId = allowEditItemId;

            if (items == null)
            {
                items = new TsCDaItem[] { (TsCDaItem)objectCtrl_.Create() }
            }
            ;

            ArrayList results = base.ShowDialog((object[])items, !allowEditItemId);

            if (results != null && results.Count > 0)
            {
                return((TsCDaItem[])results.ToArray(typeof(TsCDaItem)));
            }

            return(null);
        }
    }
Beispiel #19
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);
            }
        }
Beispiel #20
0
        private void TestMI_Click(object sender, System.EventArgs e)
        {
            try
            {
                TsCDaServer server = (TsCDaServer)m_server;

                TsCDaItem[] items = new TsCDaItem[100];

                for (int ii = 0; ii < items.Length; ii++)
                {
                    items[ii] = new TsCDaItem();

                    items[ii].ItemName     = "Static/ArrayTypes/Object[]";
                    items[ii].ItemPath     = "DA30";
                    items[ii].ClientHandle = ii;
                }

                TsCDaSubscriptionState state = new TsCDaSubscriptionState();

                state.Active     = true;
                state.UpdateRate = 1000;

                ITsCDaSubscription subscription = server.CreateSubscription(state);
                Thread.Sleep(100);

                TsCDaItemResult[] results = subscription.AddItems(items);
                Thread.Sleep(100);

                subscription.RemoveItems(results);
                Thread.Sleep(100);

                server.CancelSubscription(subscription);
                Thread.Sleep(100);
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
        /// <summary>
        /// Creates a new item.
        /// </summary>
        private void NewMI_Click(object sender, System.EventArgs e)
        {
            TsCDaItem template = null;

            // copy the current selection.
            if (ItemListLV.SelectedItems.Count > 0)
            {
                template = (TsCDaItem)((TsCDaItem)ItemListLV.SelectedItems[0].Tag).Clone();
            }

            // prompt user to edit new item.
            TsCDaItem[] items = new ItemListEditDlg().ShowDialog(new TsCDaItem[] { template }, IsReadItem, true);

            if (items == null)
            {
                return;
            }

            // add new items.
            foreach (TsCDaItem item in items)
            {
                AddItem(item);
            }
        }
        /// <summary>
        /// Returns the value of the specified field.
        /// </summary>
        private object GetFieldValue(TsCDaItem item, int fieldID)
        {
            object fieldValue = null;

            switch (fieldID)
            {
            // Item Path
            case ITEM_PATH:
            {
                fieldValue = item.ItemPath;
                break;
            }

            // Req Type
            case REQUESTED_TYPE:
            {
                fieldValue = item.ReqType;
                if (fieldValue == null)
                {
                    fieldValue = m_template.ReqType;
                }
                break;
            }

            // Max Age
            case MAXIMUM_AGE:
            {
                fieldValue = (item.MaxAgeSpecified)?item.MaxAge:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (m_template.MaxAgeSpecified)?m_template.MaxAge:fieldValue;
                }
                break;
            }

            // Active
            case ACTIVE:
            {
                fieldValue = (item.ActiveSpecified)?item.Active:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (m_template.ActiveSpecified)?m_template.Active:fieldValue;
                }
                break;
            }

            // Deadband
            case DEADBAND:
            {
                fieldValue = (item.DeadbandSpecified)?item.Deadband:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (m_template.DeadbandSpecified)?m_template.Deadband:fieldValue;
                }
                break;
            }

            // Sampling Rate
            case SAMPLING_RATE:
            {
                fieldValue = (item.SamplingRateSpecified)?item.SamplingRate:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (m_template.SamplingRateSpecified)?m_template.SamplingRate:fieldValue;
                }
                break;
            }

            // Enable Buffering
            case ENABLE_BUFFERING:
            {
                fieldValue = (item.EnableBufferingSpecified)?item.EnableBuffering:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (m_template.EnableBufferingSpecified)?m_template.EnableBuffering:fieldValue;
                }
                break;
            }
            }

            return(fieldValue);
        }
		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;
		}
        /// <summary>
        /// Updates the state of context menu.
        /// </summary>
        private void SubscriptionTV_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            // ignore left button actions.
            if (e.Button != MouseButtons.Right)
            {
                return;
            }

            // selects the item that was right clicked on.
            TreeNode clickedNode = subscriptionTv_.GetNodeAt(e.X, e.Y);

            // no item clicked on - do nothing.
            if (clickedNode == null)
            {
                return;
            }

            // force selection to clicked node.
            subscriptionTv_.SelectedNode = clickedNode;

            // disable everything.
            serverViewStatusMi_.Enabled      = false;
            serverBrowseItemsMi_.Enabled     = false;
            serverReadItemsMi_.Enabled       = false;
            serverWriteItemsMi_.Enabled      = false;
            serverDisconnectMi_.Enabled      = false;
            subscriptionCreateMi_.Enabled    = false;
            subscriptionDeleteMi_.Enabled    = false;
            subscriptionAddItemsMi_.Enabled  = false;
            subscriptionEditItemsMi_.Enabled = false;
            subscriptionEditMi_.Enabled      = false;
            subscriptionReadMi_.Enabled      = false;
            subscriptionWriteMi_.Enabled     = false;
            subscriptionRefreshMi_.Enabled   = false;
            subscriptionActiveMi_.Enabled    = false;
            subscriptionEnabledMi_.Enabled   = false;
            itemEditMi_.Enabled   = false;
            itemRemoveMi_.Enabled = false;

            if (IsServerNode(clickedNode))
            {
                subscriptionTv_.ContextMenuStrip = serverPopupMenu_;

                serverViewStatusMi_.Enabled   = true;
                serverBrowseItemsMi_.Enabled  = true;
                serverReadItemsMi_.Enabled    = true;
                serverWriteItemsMi_.Enabled   = true;
                serverDisconnectMi_.Enabled   = true;
                subscriptionCreateMi_.Enabled = true;

                return;
            }

            if (IsSubscriptionNode(clickedNode))
            {
                subscriptionTv_.ContextMenuStrip = subscriptionPopupMenu_;

                subscriptionEditMi_.Enabled      = true;
                subscriptionDeleteMi_.Enabled    = clickedNode.Parent != null;
                subscriptionAddItemsMi_.Enabled  = true;
                subscriptionEditItemsMi_.Enabled = clickedNode.Parent != null;
                subscriptionReadMi_.Enabled      = clickedNode.Parent != null;
                subscriptionWriteMi_.Enabled     = clickedNode.Parent != null;
                subscriptionRefreshMi_.Enabled   = clickedNode.Parent != null;
                subscriptionActiveMi_.Enabled    = clickedNode.Parent != null;
                subscriptionEnabledMi_.Enabled   = clickedNode.Parent != null;

                subscriptionActiveMi_.Checked  = ((TsCDaSubscription)clickedNode.Tag).Active;
                subscriptionEnabledMi_.Checked = ((TsCDaSubscription)clickedNode.Tag).Enabled;
                return;
            }

            if (IsItemNode(clickedNode))
            {
                subscriptionTv_.ContextMenuStrip = itemPopupMenu_;

                TsCDaItem item = (TsCDaItem)clickedNode.Tag;

                itemEditMi_.Enabled   = true;
                itemRemoveMi_.Enabled = true;
                itemActiveMi_.Checked = item.Active;
                return;
            }
        }
        ///////////////////////////////////////////////////////////////////////
        #region OPC Sample Functionality

        void DoOPCCalls()
        {
            try
            {
                const string serverUrl = "opcda://localhost/Technosoftware.DaSample";

                Console.WriteLine();
                Console.WriteLine("Simple OPC DA Client based on the OPC DA/AE/HDA Client SDK .NET");
                Console.WriteLine("--------------------------------------------------------------");
                Console.Write("   Press <Enter> to connect to "); Console.WriteLine(serverUrl);
                Console.ReadLine();
                Console.WriteLine("   Please wait...");

                //OpcBase.ValidateLicense("License Key");
                TsCDaServer myDaServer = new TsCDaServer();

                // Connect to the server
                myDaServer.Connect(serverUrl);

                OpcServerStatus status = myDaServer.GetServerStatus();

                Console.WriteLine("   Connected, press <Enter> to create an active group object and add several items.");
                Console.ReadLine();

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

                // Add Items
                TsCDaItem[]       items = new TsCDaItem[2];
                TsCDaItemResult[] itemResults;
                items[0]                 = new TsCDaItem();
                items[0].ItemName        = "SimpleTypes.InOut.Integer";               // Item Name
                items[0].ClientHandle    = 100;                                       // Client Handle
                items[0].Active          = true;
                items[0].ActiveSpecified = true;

                items[1]                 = new TsCDaItem();
                items[1].ItemName        = "SimpleTypes.InOut.Short";                 // Item Name
                items[1].ClientHandle    = 200;                                       // Client Handle
                items[1].Active          = false;
                items[1].ActiveSpecified = true;

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

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

                OpcItemResult[] res;
                IOpcRequest     m_ITRequest;

                TsCDaItemValue[] arItemValues = new TsCDaItemValue[1];
                arItemValues[0] = new TsCDaItemValue();
                arItemValues[0].ClientHandle = 100;
                arItemValues[0].ItemName     = "SimpleTypes.InOut.Short";

                int val = 0;
                do
                {
                    arItemValues[0].Value = val;

                    res = group.Write(arItemValues, 321, new TsCDaWriteCompleteEventHandler(OnWriteCompleteEvent), out m_ITRequest);
                    val++;
                } while (val < 1000);

                Console.ReadLine();


                group.Dispose();                                                    // optionally, it's not required
                myDaServer.Disconnect();                                            // optionally, it's not required
                Console.ReadLine();
                Console.WriteLine("   Disconnected from the server.");
                Console.WriteLine();
            }
            catch (OpcResultException e)
            {
                Console.WriteLine("   " + e.Message);
                Console.ReadLine();
                return;
            }
            catch (Exception e)
            {
                Console.WriteLine("   " + e.Message);
                Console.ReadLine();
                return;
            }
        }
Beispiel #26
0
        public void Run()
        {
            try
            {
                const string serverUrl = "opcda://localhost/Technosoftware.DaSample";

                Console.WriteLine();
                Console.WriteLine("Simple OPC DA Client based on the OPC DA/AE/HDA Client SDK .NET Standard");
                Console.WriteLine("------------------------------------------------------------------------");
                Console.Write("   Press <Enter> to connect to "); Console.WriteLine(serverUrl);
                Console.ReadLine();
                Console.WriteLine("   Please wait...");

                TsCDaServer myDaServer = new TsCDaServer();

                // Connect to the server
                myDaServer.Connect(serverUrl);

                // Get the status from the server
                OpcServerStatus status = myDaServer.GetServerStatus();
                Console.WriteLine($"   Status of Server is {status.ServerState}");

                Console.WriteLine("   Connected, press <Enter> to create an active group object and add several items.");
                Console.ReadLine();

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

                // Add Items
                TsCDaItem[] items = new TsCDaItem[4];
                items[0] = new TsCDaItem
                {
                    ItemName        = "SimulatedData.Ramp",
                    ClientHandle    = 100,
                    MaxAgeSpecified = true,
                    MaxAge          = 0,
                    Active          = true,
                    ActiveSpecified = true
                };
                // Item Name
                // Client Handle
                // Read from Cache

                items[1] = new TsCDaItem
                {
                    ItemName        = "CTT.SimpleTypes.InOut.Integer",
                    ClientHandle    = 150,
                    Active          = true,
                    ActiveSpecified = true
                };
                // Item Name
                // Client Handle

                items[2] = new TsCDaItem
                {
                    ItemName        = "CTT.SimpleTypes.InOut.Short",
                    ClientHandle    = 200,
                    Active          = false,
                    ActiveSpecified = true
                };
                // Item Name
                // Client Handle

                items[3] = new TsCDaItem
                {
                    ItemName = "CTT.Arrays.InOut.Word[]", ClientHandle = 250, Active = false, ActiveSpecified = true
                };
                // Item Name
                // Client Handle

                // Synchronous Read with server read function (DA 3.0) without a group
                TsCDaItemValueResult[] itemValues = myDaServer.Read(items);

                for (int i = 0; i < itemValues.GetLength(0); i++)
                {
                    if (itemValues[i].Result.IsError())
                    {
                        Console.WriteLine($"   Item {itemValues[i].ItemName} could not be read");
                    }
                }

                var 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");
                    }
                }

                Console.WriteLine("");
                Console.WriteLine("   Group and items added, press <Enter> to create a data change subscription");
                Console.WriteLine("   and press <Enter> again to deactivate the data change subscription.");
                Console.WriteLine("   This stops the reception of data change notifications.");
                Console.ReadLine();

                group.DataChangedEvent += OnDataChangeEvent;

                Console.ReadLine();

                // Set group inactive
                groupState.Active = false;
                group.ModifyState((int)TsCDaStateMask.Active, groupState);

                Console.WriteLine("   Data change subscription deactivated, press <Enter> to remove all");
                Console.WriteLine("   and disconnect from the server.");
                group.Dispose();
                myDaServer.Disconnect();
                myDaServer.Dispose();
                Console.ReadLine();
                Console.WriteLine("   Disconnected from the server.");
                Console.WriteLine();
            }
            catch (OpcResultException e)
            {
                Console.WriteLine("   " + e.Message);

                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine("   " + e.Message);
                Console.ReadLine();
            }
        }
        /// <summary>
        /// Returns the value of the specified field.
        /// </summary>
        private object GetFieldValue(TsCDaItem item, int fieldId)
        {
            object fieldValue = null;

            switch (fieldId)
            {
            // Item Path
            case ItemPath:
            {
                fieldValue = item.ItemPath;
                break;
            }

            // Req Type
            case RequestedType:
            {
                fieldValue = item.ReqType;
                if (fieldValue == null)
                {
                    fieldValue = mTemplate_.ReqType;
                }
                break;
            }

            // Max Age
            case MaximumAge:
            {
                fieldValue = (item.MaxAgeSpecified)?item.MaxAge:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (mTemplate_.MaxAgeSpecified)?mTemplate_.MaxAge:fieldValue;
                }
                break;
            }

            // Active
            case Active:
            {
                fieldValue = (item.ActiveSpecified)?item.Active:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (mTemplate_.ActiveSpecified)?mTemplate_.Active:fieldValue;
                }
                break;
            }

            // Deadband
            case Deadband:
            {
                fieldValue = (item.DeadbandSpecified)?item.Deadband:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (mTemplate_.DeadbandSpecified)?mTemplate_.Deadband:fieldValue;
                }
                break;
            }

            // Sampling Rate
            case SamplingRate:
            {
                fieldValue = (item.SamplingRateSpecified)?item.SamplingRate:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (mTemplate_.SamplingRateSpecified)?mTemplate_.SamplingRate:fieldValue;
                }
                break;
            }

            // Enable Buffering
            case EnableBuffering:
            {
                fieldValue = (item.EnableBufferingSpecified)?item.EnableBuffering:fieldValue;
                if (fieldValue == null)
                {
                    fieldValue = (mTemplate_.EnableBufferingSpecified)?mTemplate_.EnableBuffering:fieldValue;
                }
                break;
            }
            }

            return(fieldValue);
        }