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