Example #1
0
        /// <summary>
        /// Validates a written value.
        /// </summary>
        public ServiceResult OnWriteAnalogValue(
            ISystemContext context,
            NodeState node,
            ref object value)
        {
            try
            {
                BaseVariableState euRange = node.FindChild(context, Opc.Ua.BrowseNames.EURange) as BaseVariableState;

                if (euRange == null)
                {
                    return(ServiceResult.Good);
                }

                Range range = euRange.Value as Range;

                if (range == null)
                {
                    return(ServiceResult.Good);
                }

                Array array = value as Array;

                if (array != null)
                {
                    for (int ii = 0; ii < array.Length; ii++)
                    {
                        object element = array.GetValue(ii);

                        if (typeof(Variant).IsInstanceOfType(element))
                        {
                            element = ((Variant)element).Value;
                        }

                        double elementNumber = Convert.ToDouble(element);

                        if (elementNumber > range.High || elementNumber < range.Low)
                        {
                            return(StatusCodes.BadOutOfRange);
                        }
                    }

                    return(ServiceResult.Good);
                }

                double number = Convert.ToDouble(value);

                if (number > range.High || number < range.Low)
                {
                    return(StatusCodes.BadOutOfRange);
                }

                return(ServiceResult.Good);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        /// <summary>
        /// Validates a written value.
        /// </summary>
        public ServiceResult OnWriteAnalogValue(
            ISystemContext context,
            NodeState node,
            ref object value)
        {
            try {
                if (!(node.FindChild(context, Opc.Ua.BrowseNames.EURange) is BaseVariableState euRange))
                {
                    return(ServiceResult.Good);
                }


                if (!(euRange.Value is Opc.Ua.Range range))
                {
                    return(ServiceResult.Good);
                }


                if (value is Array array)
                {
                    for (var ii = 0; ii < array.Length; ii++)
                    {
                        var element = array.GetValue(ii);

                        if (typeof(Variant).IsInstanceOfType(element))
                        {
                            element = ((Variant)element).Value;
                        }

                        var elementNumber = Convert.ToDouble(element);

                        if (elementNumber > range.High || elementNumber < range.Low)
                        {
                            return(StatusCodes.BadOutOfRange);
                        }
                    }

                    return(ServiceResult.Good);
                }

                var number = Convert.ToDouble(value);

                if (number > range.High || number < range.Low)
                {
                    return(StatusCodes.BadOutOfRange);
                }

                return(ServiceResult.Good);
            }
            catch (Exception e) {
                throw e;
            }
        }
        /// <summary>
        /// Validates a written value.
        /// </summary>
        public ServiceResult OnWriteAnalogValue(
            ISystemContext context,
            NodeState node,
            ref object value)
        {
            try
            {

            BaseVariableState euRange = node.FindChild(context, Opc.Ua.BrowseNames.EURange) as BaseVariableState;

            if (euRange == null)
            {
                return ServiceResult.Good;
            }

            Range range = euRange.Value as Range;
            
            if (range == null)
            {
                return ServiceResult.Good;
            }

            Array array = value as Array;

            if (array != null)
            {
                for (int ii = 0; ii < array.Length; ii++)
                {
                    object element = array.GetValue(ii);

                    if (typeof(Variant).IsInstanceOfType(element))
                    {
                        element = ((Variant)element).Value;
                    }

                    double elementNumber = Convert.ToDouble(element);

                    if (elementNumber > range.High || elementNumber < range.Low)
                    {
                        return StatusCodes.BadOutOfRange;
                    }
                }

                return ServiceResult.Good;
            }
                        
            double number = Convert.ToDouble(value);
            
            if (number > range.High || number < range.Low)
            {
                return StatusCodes.BadOutOfRange;
            }
            
            return ServiceResult.Good;
            }
            catch (Exception e)
            {
                throw e;
            }
        }