/// <summary> /// Gets the result for the read operayoin. /// </summary> /// <param name="context">The context.</param> /// <param name="item">The item.</param> /// <param name="nodeToRead">The node to read.</param> /// <param name="value">The value.</param> /// <param name="diagnosticsMasks">The diagnostics masks.</param> /// <returns></returns> public ServiceResult GetResult( ISystemContext context, DaItemState item, ReadValueId nodeToRead, DataValue value, DiagnosticsMasks diagnosticsMasks) { if (nodeToRead.AttributeId == Attributes.Value) { ServiceResult result = GetItemValue(m_value, value, diagnosticsMasks); if (ServiceResult.IsBad(result)) { return(result); } return(ApplyIndexRangeAndDataEncoding(context, nodeToRead, value)); } switch (nodeToRead.AttributeId) { case Attributes.Description: { string description = this.GetPropertyValue <string>(Opc.Ua.Com.PropertyIds.Description, value, false); if (StatusCode.IsGood(value.StatusCode)) { value.Value = new LocalizedText(description); } break; } case Attributes.DataType: { short datatype = this.GetPropertyValue <short>(Opc.Ua.Com.PropertyIds.DataType, value, false); if (StatusCode.IsGood(value.StatusCode)) { value.Value = ComUtils.GetDataTypeId(datatype); } break; } case Attributes.ValueRank: { short datatype = this.GetPropertyValue <short>(Opc.Ua.Com.PropertyIds.DataType, value, false); if (StatusCode.IsGood(value.StatusCode)) { value.Value = ComUtils.GetValueRank(datatype); } break; } case Attributes.AccessLevel: case Attributes.UserAccessLevel: { int accessRights = this.GetPropertyValue <int>(Opc.Ua.Com.PropertyIds.AccessRights, value, false); if (StatusCode.IsGood(value.StatusCode)) { value.Value = (byte)accessRights; } break; } case Attributes.MinimumSamplingInterval: { float scanRate = this.GetPropertyValue <float>(Opc.Ua.Com.PropertyIds.ScanRate, value, false); if (StatusCode.IsGood(value.StatusCode)) { value.Value = (double)scanRate; } break; } default: { return(StatusCodes.BadAttributeIdInvalid); } } // check if the property value is missing. if (value.StatusCode == StatusCodes.BadNotFound) { return(StatusCodes.BadAttributeIdInvalid); } return(ApplyIndexRangeAndDataEncoding(context, nodeToRead, value)); }
/// <summary> /// Gets the result for the read operayoin. /// </summary> /// <param name="context">The context.</param> /// <param name="item">The item.</param> /// <param name="nodeToRead">The node to read.</param> /// <param name="value">The value.</param> /// <param name="diagnosticsMasks">The diagnostics masks.</param> /// <returns></returns> public ServiceResult GetResult( ISystemContext context, HdaItemState item, ReadValueId nodeToRead, DataValue value, DiagnosticsMasks diagnosticsMasks) { switch (nodeToRead.AttributeId) { case Attributes.Description: { string description = this.GetAttributeValue <string>(Constants.OPCHDA_DESCRIPTION, value, false); if (StatusCode.IsGood(value.StatusCode)) { value.Value = new LocalizedText(description); } break; } case Attributes.DataType: { short datatype = this.GetAttributeValue <short>(Constants.OPCHDA_DATA_TYPE, value, false); if (StatusCode.IsGood(value.StatusCode)) { value.Value = ComUtils.GetDataTypeId(datatype); } else { value.Value = DataTypeIds.BaseDataType; value.StatusCode = StatusCodes.GoodLocalOverride; } break; } case Attributes.ValueRank: { short datatype = this.GetAttributeValue <short>(Constants.OPCHDA_DATA_TYPE, value, false); if (StatusCode.IsGood(value.StatusCode)) { value.Value = ComUtils.GetValueRank(datatype); } else { value.Value = ValueRanks.Any; value.StatusCode = StatusCodes.GoodLocalOverride; } break; } case Attributes.Historizing: { bool archiving = this.GetAttributeValue <bool>(Constants.OPCHDA_ARCHIVING, value, false); if (StatusCode.IsGood(value.StatusCode)) { value.Value = archiving; } else { value.Value = false; value.StatusCode = StatusCodes.GoodLocalOverride; } break; } default: { return(StatusCodes.BadAttributeIdInvalid); } } // check if the attribute value is missing. if (value.StatusCode == StatusCodes.BadNotFound) { return(StatusCodes.BadAttributeIdInvalid); } return(ApplyIndexRangeAndDataEncoding(context, nodeToRead, value)); }