Opc.Ua.Com.Server.ComDaGroup.SetItemDeadbands C# (CSharp) Method

SetItemDeadbands() public method

Sets the deadband for the items.
public SetItemDeadbands ( int serverHandles, float deadbands ) : int[]
serverHandles int The server handles.
deadbands float The deadbands.
return int[]
        public int[] SetItemDeadbands(int[] serverHandles, float[] deadbands)
        {
            TraceState("SetItemDeadbands", serverHandles.Length);
            ThrowIfDisposed();

            int[] errors = new int[serverHandles.Length];
            ComDaGroupItem[] items = new ComDaGroupItem[serverHandles.Length];
            int count = 0;

            lock (m_lock)
            {
                // update the filter for analog items that have not overriden the deadband.
                for (int ii = 0; ii < serverHandles.Length; ii++)
                {
                    ComDaGroupItem item = null;

                    if (!m_itemsByHandle.TryGetValue(serverHandles[ii], out item))
                    {
                        errors[ii] = ResultIds.E_INVALIDHANDLE;
                        continue;
                    }

                    if (item.EuType >= 0 && item.EuType != (int)OpcRcw.Da.OPCEUTYPE.OPC_ANALOG)
                    {
                        errors[ii] = ResultIds.E_DEADBANDNOTSUPPORTED;
                        continue;
                    }

                    if (deadbands[ii] < 0 || deadbands[ii] > 100)
                    {
                        errors[ii] = ResultIds.E_INVALIDARG;
                        continue;
                    }

                    item.Deadband = deadbands[ii];
                    items[ii] = item;
                    count++;
                }
            }

            if (count == 0)
            {
                return errors;
            }

            // need the EU Info if the deadband is specified.
            m_manager.UpdateItemEuInfo(this, items);

            lock (m_lock)
            {
                // need to check the EU type after updating the EU info.
                for (int ii = 0; ii < items.Length; ii++)
                {
                    ComDaGroupItem item = items[ii];

                    if (item != null && item.EuType != (int)OpcRcw.Da.OPCEUTYPE.OPC_ANALOG)
                    {
                        errors[ii] = ResultIds.E_DEADBANDNOTSUPPORTED;
                        items[ii] = null;
                        continue;
                    }
                }

                // update filters for selected items.
                UpdateDeadbandFilters(items);

                // update the items on the server.
                try
                {
                    m_subscription.ApplyChanges();
                }
                catch (Exception e)
                {
                    int error = ComUtils.GetErrorCode(e, ResultIds.E_FAIL);

                    for (int ii = 0; ii < items.Length; ii++)
                    {
                        if (items[ii] != null)
                        {
                            errors[ii] = error;
                        }
                    }

                    return errors;
                }

                // check results for monitored items.
                for (int ii = 0; ii < items.Length; ii++)
                {
                    ComDaGroupItem item = items[ii];

                    if (item == null)
                    {
                        continue;
                    }

                    if (ServiceResult.IsBad(item.MonitoredItem.Status.Error))
                    {
                        item.MonitoredItem.Filter = item.MonitoredItem.Status.Filter;
                        DataChangeFilter filter = item.MonitoredItem.Filter as DataChangeFilter;

                        if (filter != null)
                        {
                            item.Deadband = (float)filter.DeadbandValue;
                        }

                        errors[ii] = ResultIds.E_FAIL;
                        continue;
                    }
                }

                return errors;
            }
        }