예제 #1
0
        private void Notification_MonitoredItem(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new MonitoredItemNotificationEventHandler(Notification_MonitoredItem), monitoredItem, e);
                return;
            }

            MonitoredItemNotification notification = e.NotificationValue as MonitoredItemNotification;

            if (notification == null)
            {
                return;
            }

            //Seach for item in listview
            bool         foundItem   = false;
            ListViewItem foundLvItem = new ListViewItem();

            foreach (ListViewItem item in SubscriptionListView.Items)
            {
                if (item.Text == monitoredItem.StartNodeId.ToString())
                {
                    foundItem   = true;
                    foundLvItem = item;
                    break;
                }
            }

            //Don't allow double display
            if (!foundItem)
            {
                Node node = myHelperApi.ReadNode(monitoredItem.StartNodeId.ToString());

                ListViewItem lvItem = new ListViewItem(new[] { monitoredItem.StartNodeId.ToString(), monitoredItem.DisplayName,
                                                               monitoredItem.SamplingInterval.ToString(), notification.Value.Value == null ? "(null)" : notification.Value.Value.ToString(), notification.Value.StatusCode.ToString(),
                                                               notification.Value.ServerTimestamp.ToString() });
                SubscriptionListView.Items.Add(lvItem).Tag = monitoredItem;
            }
            else
            {
                foundLvItem.SubItems.Clear();
                foundLvItem.Text = monitoredItem.StartNodeId.ToString();
                foundLvItem.SubItems.AddRange(new[] { monitoredItem.DisplayName,
                                                      monitoredItem.SamplingInterval.ToString(), notification.Value.Value == null ? "(null)" : notification.Value.Value.ToString(), notification.Value.StatusCode.ToString(),
                                                      notification.Value.ServerTimestamp.ToString() });
            }
        }
예제 #2
0
        private void NodeTreeView_BeforeSelect(object sender, TreeViewCancelEventArgs e)
        {
            descriptionGridView.Rows.Clear();
            try
            {
                ReferenceDescription refDesc = (ReferenceDescription)e.Node.Tag;
                Node         node            = myClientHelperAPI.ReadNode(refDesc.NodeId.ToString());
                VariableNode variableNode    = new VariableNode();

                string[] row1 = new string[] { "Node Id", refDesc.NodeId.ToString() };
                string[] row2 = new string[] { "Namespace Index", refDesc.NodeId.NamespaceIndex.ToString() };
                string[] row3 = new string[] { "Identifier Type", refDesc.NodeId.IdType.ToString() };
                string[] row4 = new string[] { "Identifier", refDesc.NodeId.Identifier.ToString() };
                string[] row5 = new string[] { "Browse Name", refDesc.BrowseName.ToString() };
                string[] row6 = new string[] { "Display Name", refDesc.DisplayName.ToString() };
                string[] row7 = new string[] { "Node Class", refDesc.NodeClass.ToString() };
                string[] row8 = new string[] { "Description", "null" };
                //try { row8 = new string[] { "Description", node.Description.ToString() }; }
                //catch { row8 = new string[] { "Description", "null" }; }
                string[] row9  = new string[] { "Type Definition", refDesc.TypeDefinition.ToString() };
                string[] row10 = new string[] { "Write Mask", node.WriteMask.ToString() };
                string[] row11 = new string[] { "User Write Mask", node.UserWriteMask.ToString() };
                if (node.NodeClass == NodeClass.Variable)
                {
                    variableNode = (VariableNode)node.DataLock;
                    List <NodeId>        nodeIds      = new List <NodeId>();
                    List <string>        displayNames = new List <string>();
                    List <ServiceResult> errors       = new List <ServiceResult>();
                    NodeId nodeId = new NodeId(variableNode.DataType);
                    nodeIds.Add(nodeId);

                    mySession.ReadDisplayName(nodeIds, out displayNames, out errors);

                    string[] row12 = new string[] { "Data Type", displayNames[0] };
                    string[] row13 = new string[] { "Value Rank", variableNode.ValueRank.ToString() };
                    string[] row14 = new string[] { "Array Dimensions", variableNode.ArrayDimensions.Capacity.ToString() };
                    string[] row15 = new string[] { "Access Level", variableNode.AccessLevel.ToString() };
                    string[] row16 = new string[] { "Minimum Sampling Interval", variableNode.MinimumSamplingInterval.ToString() };
                    string[] row17 = new string[] { "Historizing", variableNode.Historizing.ToString() };

                    object[] rows = new object[] { row1, row2, row3, row4, row5, row6, row7, row8, row9, row10, row11, row12, row13, row14, row15, row16, row17 };
                    foreach (string[] rowArray in rows)
                    {
                        descriptionGridView.Rows.Add(rowArray);
                    }
                }
                else
                {
                    object[] rows = new object[] { row1, row2, row3, row4, row5, row6, row7, row8, row9, row10, row11 };
                    foreach (string[] rowArray in rows)
                    {
                        descriptionGridView.Rows.Add(rowArray);
                    }
                }
                descriptionGridView.ClearSelection();
            }
            catch (Exception ex)
            {
                if (BGW_OPCUA.IsBusy)
                {
                    BGW_OPCUA.CancelAsync();
                }
                MessageBox.Show(ex.Message, "Error");
            }
        }