/// <summary> /// Initializes a new instance of the <see cref="MonitoredItemAttribute"/> class. /// </summary> /// <param name="nodeId">the NodeId to monitor.</param> /// <param name="attributeId">the attribute to monitor.</param> /// <param name="indexRange">the range of array indexes to monitor.</param> /// <param name="samplingInterval">the sampling interval.</param> /// <param name="queueSize">the length of the queue used by the server to buffer values.</param> /// <param name="discardOldest">a value indicating whether to discard the oldest entries in the queue when it is full.</param> /// <param name="dataChangeTrigger">the properties that trigger a data change.</param> /// <param name="deadbandType">the type of deadband calculation.</param> /// <param name="deadbandValue">the deadband value.</param> public MonitoredItemAttribute(string nodeId = null, uint attributeId = AttributeIds.Value, string indexRange = null, int samplingInterval = -1, uint queueSize = 0, bool discardOldest = true, DataChangeTrigger dataChangeTrigger = DataChangeTrigger.StatusValue, DeadbandType deadbandType = DeadbandType.None, double deadbandValue = 0.0) { this.NodeId = nodeId; this.AttributeId = attributeId; this.IndexRange = indexRange; this.SamplingInterval = samplingInterval; this.QueueSize = queueSize; this.DiscardOldest = discardOldest; this.DataChangeTrigger = dataChangeTrigger; this.DeadbandType = deadbandType; this.DeadbandValue = deadbandValue; }
/// <summary> /// Initializes a new instance of the <see cref="MonitoredItemAttribute"/> class. /// </summary> /// <param name="nodeId">the NodeId to monitor.</param> /// <param name="attributeId">the attribute to monitor.</param> /// <param name="indexRange">the range of array indexes to monitor.</param> /// <param name="samplingInterval">the sampling interval.</param> /// <param name="queueSize">the length of the queue used by the server to buffer values.</param> /// <param name="discardOldest">a value indicating whether to discard the oldest entries in the queue when it is full.</param> /// <param name="dataChangeTrigger">the properties that trigger a data change.</param> /// <param name="deadbandType">the type of deadband calculation.</param> /// <param name="deadbandValue">the deadband value.</param> public MonitoredItemAttribute(string nodeId, uint attributeId = AttributeIds.Value, string?indexRange = null, int samplingInterval = -1, uint queueSize = 0, bool discardOldest = true, DataChangeTrigger dataChangeTrigger = DataChangeTrigger.StatusValue, DeadbandType deadbandType = DeadbandType.None, double deadbandValue = 0.0) { NodeId = nodeId; AttributeId = attributeId; IndexRange = indexRange; SamplingInterval = samplingInterval; QueueSize = queueSize; DiscardOldest = discardOldest; DataChangeTrigger = dataChangeTrigger; DeadbandType = deadbandType; DeadbandValue = deadbandValue; }
internal static DataMonitoredItem BuildMonitoredItem(this KSpiceVariableData info, DataChangeTrigger trigger, double samplingInterval) { return(new DataMonitoredItem(info.nodeId) { DataChangeTrigger = trigger, SamplingInterval = samplingInterval, UserData = info }); }
/// <summary> /// Prompts the user to edit the monitored item. /// </summary> public bool ShowDialog(Session session, MonitoredItem monitoredItem, bool isEvent) { if (!monitoredItem.Created) { NodeBTN.Session = session; NodeBTN.SelectedNode = monitoredItem.StartNodeId; } // hide fields not used for events. NodeLB.Visible = !monitoredItem.Created; NodeTB.Visible = !monitoredItem.Created; NodeBTN.Visible = !monitoredItem.Created; AttributeLB.Visible = !isEvent && !monitoredItem.Created; AttributeCB.Visible = !isEvent && !monitoredItem.Created; IndexRangeLB.Visible = !isEvent && !monitoredItem.Created; IndexRangeTB.Visible = !isEvent && !monitoredItem.Created; DataEncodingLB.Visible = !isEvent && !monitoredItem.Created; DataEncodingCB.Visible = !isEvent && !monitoredItem.Created; MonitoringModeLB.Visible = !monitoredItem.Created; MonitoringModeCB.Visible = !monitoredItem.Created; SamplingIntervalLB.Visible = true; SamplingIntervalUP.Visible = true; QueueSizeLB.Visible = !isEvent; QueueSizeUP.Visible = !isEvent; DiscardOldestLB.Visible = true; DiscardOldestCK.Visible = true; DeadbandTypeLB.Visible = !isEvent; DeadbandTypeCB.Visible = !isEvent; DeadbandValueLB.Visible = !isEvent; DeadbandValueUP.Visible = !isEvent; TriggerTypeLB.Visible = !isEvent; TriggerTypeCB.Visible = !isEvent; // fill in values. SamplingIntervalUP.Value = monitoredItem.SamplingInterval; DiscardOldestCK.Checked = monitoredItem.DiscardOldest; if (!isEvent) { AttributeCB.SelectedIndex = (int)(monitoredItem.AttributeId - 1); IndexRangeTB.Text = monitoredItem.IndexRange; MonitoringModeCB.SelectedItem = monitoredItem.MonitoringMode; QueueSizeUP.Value = monitoredItem.QueueSize; DataChangeFilter filter = monitoredItem.Filter as DataChangeFilter; if (filter != null) { DeadbandTypeCB.SelectedItem = (DeadbandType)filter.DeadbandType; DeadbandValueUP.Value = (decimal)filter.DeadbandValue; TriggerTypeCB.SelectedItem = filter.Trigger; } if (!monitoredItem.Created) { // fetch the available encodings for the first node in the list from the server. IVariableBase variable = session.NodeCache.Find(monitoredItem.StartNodeId) as IVariableBase; DataEncodingCB.Items.Add(new EncodingInfo()); DataEncodingCB.SelectedIndex = 0; if (variable != null) { if (session.NodeCache.IsTypeOf(variable.DataType, Opc.Ua.DataTypeIds.Structure)) { foreach (INode encoding in session.NodeCache.Find(variable.DataType, Opc.Ua.ReferenceTypeIds.HasEncoding, false, true)) { DataEncodingCB.Items.Add(new EncodingInfo() { EncodingName = encoding.BrowseName }); if (monitoredItem.Encoding == encoding.BrowseName) { DataEncodingCB.SelectedIndex = DataEncodingCB.Items.Count - 1; } } } } } } else { AttributeCB.SelectedIndex = ((int)Attributes.EventNotifier - 1); } if (base.ShowDialog() != DialogResult.OK) { return(false); } // update monitored item. if (!monitoredItem.Created) { monitoredItem.StartNodeId = NodeBTN.SelectedNode; monitoredItem.DisplayName = session.NodeCache.GetDisplayText(monitoredItem.StartNodeId); monitoredItem.RelativePath = null; monitoredItem.AttributeId = (uint)(AttributeCB.SelectedIndex + 1); monitoredItem.MonitoringMode = (MonitoringMode)MonitoringModeCB.SelectedItem; } monitoredItem.SamplingInterval = (int)SamplingIntervalUP.Value; monitoredItem.DiscardOldest = DiscardOldestCK.Checked; if (!isEvent) { if (!monitoredItem.Created) { monitoredItem.IndexRange = IndexRangeTB.Text.Trim(); monitoredItem.Encoding = ((EncodingInfo)DataEncodingCB.SelectedItem).EncodingName; } monitoredItem.QueueSize = (uint)QueueSizeUP.Value; DataChangeTrigger trigger = (DataChangeTrigger)TriggerTypeCB.SelectedItem; DeadbandType deadbandType = (DeadbandType)DeadbandTypeCB.SelectedItem; if (monitoredItem.Filter != null || deadbandType != DeadbandType.None || trigger != DataChangeTrigger.StatusValue) { DataChangeFilter filter = new DataChangeFilter(); filter.DeadbandType = (uint)deadbandType; filter.DeadbandValue = (double)DeadbandValueUP.Value; filter.Trigger = trigger; monitoredItem.Filter = filter; } } else { if (!monitoredItem.Created) { monitoredItem.IndexRange = null; monitoredItem.Encoding = null; } monitoredItem.QueueSize = 0; monitoredItem.Filter = new EventFilter(); } return(true); }