A datachange returned in a NotificationMessage.
예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="monitoredItem"></param>
        /// <param name="e"></param>
        protected virtual void ItemNotificationHandler(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e)
        {
            try
            {
                if (monitoredItem != null)
                {
                    Opc.Ua.MonitoredItemNotification change = e.NotificationValue as Opc.Ua.MonitoredItemNotification;
                    if (change != null)
                    {
                        DataValue dv = change.Value;
                        if (dv != null)
                        {
                            ListViewItem[] lvis = ItemsLV.Items.Find(monitoredItem.ClientHandle.ToString(), false);
                            if (lvis.Length > 0)
                            {
                                DiagnosticListViewItem dlvi = lvis[0].Tag as DiagnosticListViewItem;
                                dlvi.UpdateInListView(lvis[0], dv, m_Session);
                            }
                        }
                        else
                        {
                            Utils.Trace("dv is null: {0}", MethodBase.GetCurrentMethod());
                        }
                    }
                    else
                    {
                        EventFieldList eventFields = e.NotificationValue as EventFieldList;
                        if (eventFields != null)
                        {
                            // get the event fields.
                            NodeId        eventType  = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.EventType) as NodeId;
                            string        sourceName = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.SourceName) as string;
                            DateTime?     time       = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.Time) as DateTime?;
                            ushort?       severity   = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.Severity) as ushort?;
                            LocalizedText message    = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.Message) as LocalizedText;
                            NodeId        sourceNode = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.SourceNode) as NodeId;

                            if (eventType == new NodeId(ObjectTypes.AuditAddNodesEventType))
                            {
                            }
                            else
                            {
                            }
                        }
                        else
                        {
                            Utils.Trace("eventFields is null " + MethodBase.GetCurrentMethod());
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception);
            }
        }
예제 #2
0
        /// <summary>
        /// Updates the row with the data value.
        /// </summary>
        private void UpdateRow(DataRow row, MonitoredItemNotification notification)
        {
            DataValue value = notification.Value;

            row[11] = value;

            if (value != null)
            {
                row[1]  = ImageList.Images[ClientUtils.GetImageIndex(Attributes.Value, value.Value)];
                row[12] = (value.WrappedValue.TypeInfo != null) ? value.WrappedValue.TypeInfo.ToString() : String.Empty;
                row[13] = value.WrappedValue;
                row[14] = value.StatusCode;
                row[15] = value.SourceTimestamp.ToLocalTime().ToString("hh:mm:ss.fff");
                row[16] = value.ServerTimestamp.ToLocalTime().ToString("hh:mm:ss.fff");
            }
        }
예제 #3
0
        /// <summary>
        /// Processes a Publish response from the server.
        /// </summary>
        ///
        void ItemNotification(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new MonitoredItemNotificationEventHandler(ItemNotification), monitoredItem, e);
                return;
            }
            else if (!IsHandleCreated)
            {
                return;
            }
            try
            {
                if (monitoredItem != null)
                {
                    string         Key  = monitoredItem.StartNodeId.Identifier.ToString() + "." + monitoredItem.RelativePath;
                    ListViewItem[] lvis = listView1.Items.Find(Key, true);
                    Opc.Ua.MonitoredItemNotification change = e.NotificationValue as Opc.Ua.MonitoredItemNotification;
                    if (change != null)
                    {
                        DataValue dv = change.Value;
                        if (lvis.Length == 1)
                        {
                            ListViewItem lvi                = lvis[0];
                            int          subindex           = lvi.SubItems.IndexOfKey(Key);
                            ListViewItem.ListViewSubItem si = lvi.SubItems[subindex];
                            TypedMonitoredItem           mi = si.Tag as TypedMonitoredItem;

                            if (mi != null)
                            {
                                if (mi.ClientHandle == monitoredItem.ClientHandle)
                                {
                                    if (dv != null && dv.Value != null)
                                    {
                                        if (monitoredItem.Status.Id == StatusCodes.BadNodeIdUnknown)
                                        {
                                            // Randy said we would get this, but we don't
                                            RemoveSessionItem(lvi, true);
                                        }
                                        else
                                        {
                                            si.Text = mi.ToString(dv);
                                        }
                                    }
                                    else
                                    {
                                        // This is what we get
                                        RemoveSessionItem(lvi, true);
                                    }
                                }
                                else
                                {
                                    Utils.Trace("(mi.ClientHandle != monitoredItem.ClientHandle " + MethodBase.GetCurrentMethod());
                                }
                            }
                            else
                            {
                                Utils.Trace("mi is null " + MethodBase.GetCurrentMethod());
                            }
                        }
                        else
                        {
                            Utils.Trace("lvis.Length != 1 " + MethodBase.GetCurrentMethod());
                        }
                    }
                    else
                    {
                        EventFieldList eventFields = e.NotificationValue as EventFieldList;
                        if (eventFields != null)
                        {
                            // get the event fields.
                            NodeId        eventType  = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.EventType) as NodeId;
                            string        sourceName = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.SourceName) as string;
                            DateTime?     time       = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.Time) as DateTime?;
                            ushort?       severity   = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.Severity) as ushort?;
                            LocalizedText message    = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.Message) as LocalizedText;
                            NodeId        sourceNode = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.SourceNode) as NodeId;
                            //Utils.Trace("eventType: {0}, message: {1}, sourceName: {2} sourceNode: {3}", eventType.ToString(), message.Text.ToString(), sourceName.ToString(), sourceNode.ToString());
                            if (eventType == new NodeId(ObjectTypes.AuditActivateSessionEventType))
                            {
                                Utils.Trace("AuditActivateSessionEventType detected " + MethodBase.GetCurrentMethod());
                                AddSessions();
                                m_Subscription.ModifyItems();
                                m_Subscription.ApplyChanges();
                            }
                        }
                        else
                        {
                            Utils.Trace("eventFields is null " + MethodBase.GetCurrentMethod());
                        }
                    }
                }
                else
                {
                    Utils.Trace("monitoredItem is null " + MethodBase.GetCurrentMethod());
                }
            }
            catch (Exception exception)
            {
                GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception);
            }
        }