在工业自动化系统中,数据的可靠性和准确性至关重要。为了有效管理和监控数据质量,OPC(OLE for Process Control)标准引入了质量码(Quality Codes),用于描述和标识数据的状态和可用性。本文将深入探讨OPC质量码的背景、结构以及常见的应用场景。
什么是OPC质量码?
OPC质量码是一种标准化的表示方式,用于指示数据质量的状态。它们通过数字码的形式提供了关于数据的各种信息,例如数据是否有效、是否有异常、是否可信等。这些码是OPC通信协议中的一部分,不仅在实时数据访问(如OPC DA)中使用广泛,也在更复杂的系统中(如OPC UA)扮演重要角色。
OPC质量码的分类
OPC DA 质量代码
OPC DA使用16位的质量代码来表示数据的质量状态。这些质量代码由主质量(Major Quality)和子质量(Substatus)组成,并且还包含一些特定的位来表示更多详细信息。质量代码的结构如下:
- 质量代码(16位)
- 主要质量(2位):Good(00),Uncertain(01),Bad(10)
- 子状态(6位):提供详细的状态信息
- 限制位(2位):表示值是否超过范围
- 保留位(6位):用于扩展或特定应用
常见的OPC DA质量代码:
0xC0
- Bad0x80
- Uncertain0x00
- Good- 例如:
0xC0
:Bad,通用错误0x84
:Uncertain,非正常0x00
:Good,正常
OPC UA 质量代码
OPC UA使用32位的状态代码(Status Codes)来表示数据的质量状态,比OPC DA提供了更详细和结构化的表示方式。状态代码不仅仅表示质量,还可以包括诊断信息和其他扩展信息。
状态代码的结构如下:
- 状态代码(32位)
- 主要质量(位 31-30):Good(00),Uncertain(01),Bad(10)
- 子状态(位 29-16):提供详细的状态信息
- 限制位和保留位(位 15-0):用于扩展和特定用途
常见的OPC UA质量代码:
0x00000000
- Good0x40000000
- Uncertain0x80000000
- Bad- 例如:
0x80070000
:Bad,通用错误0x40090000
:Uncertain,非正常0x00000000
:Good,正常
比较与总结
表示方式:
- OPC DA使用16位质量代码,包含主要质量和子状态。
- OPC UA使用32位状态代码,包含更多的详细信息和扩展能力。
扩展性:
- OPC UA提供了更强的扩展能力,能够表示更多的状态和诊断信息。
- OPC DA的质量代码结构相对简单,适用于实时数据访问。
使用场景:
- OPC DA主要用于传统的实时数据访问场景。
- OPC UA不仅用于实时数据访问,还用于报警、历史数据访问和其他高级功能,适用于更复杂的工业自动化场景。
总体来说,OPC UA的质量代码比OPC DA的质量代码更加详细和灵活,适应了现代工业自动化系统的复杂需求。
OPC质量码记录
OPCUA质量码
info | code | 描述 |
---|---|---|
好 | 0x00000000 | 操作成功。 |
不确定 | 0x40000000 | 值不确定,但原因不明。 |
坏 | 0x80000000 | 值为坏,但原因不明。 |
Bad_UnexpectedError | 0x80010000 | 发生非预期错误。 |
Bad_InternalError | 0x80020000 | 编程或配置错误时发生内部错误。 |
Bad_OutOfMemory | 0x80030000 | 完成操作所需内存不足。 |
Bad_ResourceUnavailable | 0x80040000 | 操作系统资源不可用。 |
Bad_CommunicationError | 0x80050000 | 发生底层通信错误。 |
Bad_EncodingError | 0x80060000 | 正在序列化的对象中有非法数据,编码暂停。 |
Bad_DecodingError | 0x80070000 | 数据流中有非法数据,解码暂停。 |
Bad_EncodingLimitsExceeded | 0x80080000 | 栈设置的消息编码和解码限制已超出。 |
Bad_RequestTooLarge | 0x80B80000 | 请求消息大小超出了服务器设置的限制。 |
Bad_ResponseTooLarge | 0x80B90000 | 响应消息大小超出了客户端设置的限制。 |
Bad_UnknownResponse | 0x80090000 | 从服务器接收到的响应无法识别。 |
Bad_Timeout | 0x800A0000 | 操作超时。 |
Bad_ServiceUnsupported | 0x800B0000 | 服务器不支持请求的服务。 |
Bad_Shutdown | 0x800C0000 | 应用程序正在关闭,所以操作取消。 |
Bad_ServerNotConnected | 0x800D0000 | 由于客户端未连接至服务器,操作无法完成。 |
Bad_ServerHalted | 0x800E0000 | 服务器已停止,无法处理任何请求。 |
Bad_NothingToDo | 0x800F0000 | 客户端传入的操作列表中无任何元素,因此不会执行任何操作。 |
Bad_TooManyOperations | 0x80100000 | 请求指定的操作过多,无法进行处理。 |
Bad_TooManyMonitoredItems | 0x80DB0000 | 由于订阅中的监视项过多,无法处理请求。 |
Bad_DataTypeIdUnknown | 0x80110000 | 由于数据类型ID无法识别,扩展对象无法序列化或解序列化。 |
Bad_CertificateInvalid | 0x80120000 | 提供的证书不是有效参数。 |
Bad_SecurityChecksFailed | 0x80130000 | 验证安全时发生错误。 |
Bad_CertificateTimeInvalid | 0x80140000 | 证书已过期或尚未生效。 |
Bad_CertificateIssuerTimeInvalid | 0x80150000 | 发布方证书已过期或尚未生效。 |
Bad_CertificateHostNameInvalid | 0x80160000 | 用于连接服务器的主机名与证书中的主机名不匹配。 |
Bad_CertificateUriInvalid | 0x80170000 | 应用程序说明中指定的URI与证书中的URI不匹配。 |
Bad_CertificateUseNotAllowed | 0x80180000 | 证书可能无法用于请求的操作。 |
Bad_CertificateIssuerUseNotAllowed | 0x80190000 | 发布方证书可能无法用于请求的操作。 |
Bad_CertificateUntrusted | 0x801A0000 | 证书未被信任。 |
Bad_CertificateRevocationUnknown | 0x801B0000 | 无法确定证书是否已被吊销。 |
Bad_CertificateIssuerRevocationUnknown | 0x801C0000 | 无法确定发布方证书是否已被吊销。 |
Bad_CertificateRevoked | 0x801D0000 | 证书已被吊销。 |
Bad_CertificateIssuerRevoked | 0x801E0000 | 发布方证书已被吊销。 |
Bad_UserAccessDenied | 0x801F0000 | 用户无权限执行请求的操作。 |
Bad_IdentityTokenInvalid | 0x80200000 | 用户身份令牌无效。 |
Bad_IdentityTokenRejected | 0x80210000 | 用户身份令牌有效,但服务器拒绝该令牌。 |
Bad_SecureChannelIdInvalid | 0x80220000 | 指定的安全通道不再有效。 |
Bad_InvalidTimestamp | 0x80230000 | 时间标识超出了服务器允许的范围。 |
Bad_NonceInvalid | 0x80240000 | Nonce不是一个随机值,或长度不符合要求。 |
Bad_SessionIdInvalid | 0x80250000 | 会话ID无效。 |
Bad_SessionClosed | 0x80260000 | 会话已被客户端关闭。 |
Bad_SessionNotActivated | 0x80270000 | 由于未调用ActivateSession,无法使用会话。 |
Bad_SubscriptionIdInvalid | 0x80280000 | 订阅ID无效。 |
Bad_RequestHeaderInvalid | 0x802A0000 | 请求的标头无效或丢失。 |
Bad_TimestampsToReturnInvalid | 0x802B0000 | 要返回参数的时间标识无效。 |
Bad_RequestCancelledByClient | 0x802C0000 | 请求已被客户端取消。 |
Good_SubscriptionTransferred | 0x002D0000 | 订阅被转移至另一个会话。 |
Good_CompletesAsynchronously | 0x002E0000 | 处理过程将异步完成。 |
Good_Overload | 0x002F0000 | 由于资源限制,采样速度已降低。 |
Good_Clamped | 0x00300000 | 写入的值已被接受,但未限定范围。 |
Bad_NoCommunication | 0x80310000 | 已定义与数据源之间的通信,但尚未建立通信,无可用的最近已知值。 |
Bad_WaitingForInitialData | 0x80320000 | 等待服务器从底层数据源获取值。 |
Bad_NodeIdInvalid | 0x80330000 | 节点ID的语法无效。 |
Bad_NodeIdUnknown | 0x80340000 | 节点ID指向服务器地址空间中不存在的节点。 |
Bad_AttributeIdInvalid | 0x80350000 | 指定的节点不支持该属性。 |
Bad_IndexRangeInvalid | 0x80360000 | 索引范围参数的语法无效。 |
Bad_IndexRangeNoData | 0x80370000 | 指定的索引范围内无数据存在。 |
Bad_DataEncodingInvalid | 0x80380000 | 数据编码无效。 |
Bad_DataEncodingUnsupported | 0x80390000 | 服务器不支持为该节点请求的数据编码。 |
Bad_NotReadable | 0x803A0000 | 访问等级不允许读取或订阅该节点。 |
Bad_NotWritable | 0x803B0000 | 访问等级不允许写入节点。 |
Bad_OutOfRange | 0x803C0000 | 值超出范围。 |
Bad_NotSupported | 0x803D0000 | 不支持请求的操作。 |
Bad_NotFound | 0x803E0000 | 请求的项未找到,或搜索操作已结束但无结果。 |
Bad_ObjectDeleted | 0x803F0000 | 对象已被删除,无法使用。 |
Bad_NotImplemented | 0x80400000 | 求取的操作未执行。 |
Bad_MonitoringModeInvalid | 0x80410000 | 监视模式无效。 |
Bad_MonitoredItemIdInvalid | 0x80420000 | 监视ID未指向有效的监视项。 |
Bad_MonitoredItemFilterInvalid | 0x80430000 | 监视项的过滤参数无效。 |
Bad_MonitoredItemFilterUnsupported | 0x80440000 | 服务器不支持请求的监视项筛选器。 |
Bad_FilterNotAllowed | 0x80450000 | 监视筛选器无法与指定的属性配合使用。 |
Bad_StructureMissing | 0x80460000 | 强制性架构的参数丢失或为空。 |
Bad_EventFilterInvalid | 0x80470000 | 事件过滤器无效。 |
Bad_ContentFilterInvalid | 0x80480000 | 内容过滤器无效。 |
Bad_FilterOperatorInvalid | 0x80C10000 | 过滤器中提供了无法识别的运算符。 |
Bad_FilterOperatorUnsupported | 0x80C20000 | 提供的运算符有效,但服务器不支持该过滤器运算符。 |
Bad_FilterOperandCountMismatch | 0x80C30000 | 为过滤器运算符提供的操作数少于期望的操作数。 |
Bad_FilterOperandInvalid | 0x80490000 | 内容过滤器中使用的操作数无效。 |
Bad_FilterElementInvalid | 0x80C40000 | 引用的元素不是内容过滤器中的有效元素。 |
Bad_FilterLiteralInvalid | 0x80C50000 | 引用的字面值不是有效值。 |
Bad_ContinuationPointInvalid | 0x804A0000 | 连续点不再有效。 |
Bad_NoContinuationPoints | 0x804B0000 | 由于所有的连续点已被分配,无法处理该操作。 |
Bad_ReferenceTypeIdInvalid | 0x804C0000 | 引用类型ID无效。 |
Bad_BrowseDirectionInvalid | 0x804D0000 | 浏览方向无效。 |
Bad_NodeNotInView | 0x804E0000 | 节点不是视图的一部分。 |
Bad_ServerUriInvalid | 0x804F0000 | ServerUri不是有效的URI。 |
Bad_ServerNameMissing | 0x80500000 | 未指定ServerName。 |
Bad_DiscoveryUrlMissing | 0x80510000 | 未指定DiscoveryUrl。 |
Bad_SempahoreFileMissing | 0x80520000 | 客户端指定的信号量文件无效。 |
Bad_RequestTypeInvalid | 0x80530000 | 安全令牌请求类型无效。 |
Bad_SecurityModeRejected | 0x80540000 | 安全模式不满足服务器设定的要求。 |
Bad_SecurityPolicyRejected | 0x80550000 | 安全策略不满足服务器设定的要求。 |
Bad_TooManySessions | 0x80560000 | 服务器已达到最大会话数量。 |
Bad_UserSignatureInvalid | 0x80570000 | 用户令牌签名丢失或无效。 |
Bad_ApplicationSignatureInvalid | 0x80580000 | 使用客户端证书生成的签名丢失或无效。 |
Bad_NoValidCertificates | 0x80590000 | 客户端未向服务器提供至少一个有效且满足性能要求的软件证书。 |
Bad_IdentityChangeNotSupported | 0x80C60000 | 服务器不支持更改为会话分配的用户身份。 |
Bad_RequestCancelledByRequest | 0x805A0000 | 客户端通过Cancel服务取消了请求。 |
Bad_ParentNodeIdInvalid | 0x805B0000 | 父节点ID未指向有效的节点。 |
Bad_ReferenceNotAllowed | 0x805C0000 | 由于引用违反了数据模型设定的约束条件,无法创建引用。 |
Bad_NodeIdRejected | 0x805D0000 | 由于节点ID无效或服务器不允许客户端指定节点ID,请求的节点ID被拒绝。 |
Bad_NodeIdExists | 0x805E0000 | 请求的节点ID已被另一个节点使用。 |
Bad_NodeClassInvalid | 0x805F0000 | 节点类无效。 |
Bad_BrowseNameInvalid | 0x80600000 | 浏览器名称无效。 |
Bad_BrowseNameDuplicated | 0x80610000 | 浏览名称不是共享相同父节点关系的节点中的唯一名称。 |
Bad_NodeAttributesInvalid | 0x80620000 | 节点类的节点属性无效。 |
Bad_TypeDefinitionInvalid | 0x80630000 | 类型定义节点ID未引用正确的类型节点。 |
Bad_SourceNodeIdInvalid | 0x80640000 | 源节点ID未引用有效的节点。 |
Bad_TargetNodeIdInvalid | 0x80650000 | 目标节点ID未引用有效的节点。 |
Bad_DuplicateReferenceNotAllowed | 0x80660000 | 节点间的引用类型已被定义。 |
Bad_InvalidSelfReference | 0x80670000 | 服务器在该节点上不允许此类自引用。 |
Bad_ReferenceLocalOnly | 0x80680000 | 远程服务器引用的引用类型无效。 |
Bad_NoDeleteRights | 0x80690000 | 服务器不允许删除节点。 |
Uncertain_ReferenceNotDeleted | 0x40BC0000 | 服务器无法删除所有目标引用。 |
Bad_ServerIndexInvalid | 0x806A0000 | 服务器索引无效。 |
Bad_ViewIdUnknown | 0x806B0000 | 视图ID未指向有效的视图节点。 |
Bad_ViewTimestampInvalid | 0x80C90000 | 视图时间标识不可用或不受支持。 |
Bad_ViewParameterMismatch | 0x80CA0000 | 视图参数彼此不一致。 |
Bad_ViewVersionInvalid | 0x80CB0000 | 视图版本不可用或不受支持。 |
Uncertain_NotAllNodesAvailable | 0x40C00000 | 由于底层系统不可用,引用列表可能不完整。 |
Good_ResultsMayBeIncomplete | 0x00BA0000 | 服务器应跟踪远程服务器的节点引用,但并未跟踪。结果集可能不完整。 |
Bad_NotTypeDefinition | 0x80C80000 | 提供的节点ID不是自定义类型节点ID。 |
Uncertain_ReferenceOutOfServer | 0x406C0000 | 相对路径中要跟踪的引用之一指向了另一服务器上地址空间中的节点。 |
Bad_TooManyMatches | 0x806D0000 | 请求操作的返回匹配数量过多。 |
Bad_QueryTooComplex | 0x806E0000 | 请求操作需要的服务器资源过多。 |
Bad_NoMatch | 0x806F0000 | 请求的操作无匹配可返回。 |
Bad_MaxAgeInvalid | 0x80700000 | 最大年龄参数无效。 |
Bad_HistoryOperationInvalid | 0x80710000 | 历史详情参数无效。 |
Bad_HistoryOperationUnsupported | 0x80720000 | 服务器不支持请求的操作。 |
Bad_InvalidTimestampArgument | 0x80BD0000 | 定义的返回的时间标识无效。 |
Bad_WriteNotSupported | 0x80730000 | 服务器不支持写入所提供的值、状态和时间标识的组合。 |
Bad_TypeMismatch | 0x80740000 | 为属性提供的值与属性值的类型不匹配。 |
Bad_MethodInvalid | 0x80750000 | 方法ID未指向指定对象的方法。 |
Bad_ArgumentsMissing | 0x80760000 | 客户端未指定该方法的全部输入参数。 |
Bad_TooManySubscriptions | 0x80770000 | 服务器已达到最大订阅数量。 |
Bad_TooManyPublishRequests | 0x80780000 | 服务器已达到最大发布请求队列数量。 |
Bad_NoSubscription | 0x80790000 | 无订阅可用于该会话。 |
Bad_SequenceNumberUnknown | 0x807A0000 | 序列号对于服务器未知。 |
Bad_MessageNotAvailable | 0x807B0000 | 请求的通知消息不再可用。 |
Bad_InsufficientClientProfile | 0x807C0000 | 当前会话的客户端不支持订阅所需的一个或多个性能。 |
Bad_StateNotActive | 0x80BF0000 | 子状态机当前不是活动状态。 |
Bad_TcpServerTooBusy | 0x807D0000 | 服务器过于忙碌,无法处理请求。 |
Bad_TcpMessageTypeInvalid | 0x807E0000 | 标头中指定的消息类型无效。 |
Bad_TcpSecureChannelUnknown | 0x807F0000 | SecureChannelId和/或TokenId当前未被使用。 |
Bad_TcpMessageTooLarge | 0x80800000 | 标头中指定的消息大小过大。 |
Bad_TcpNotEnoughResources | 0x80810000 | 无足够的资源处理请求。 |
Bad_TcpInternalError | 0x80820000 | 发生内部错误。 |
Bad_TcpEndpointUrlInvalid | 0x80830000 | 服务器未识别指定的QueryString。 |
Bad_RequestInterrupted | 0x80840000 | 由于网络中断,无法发送请求。 |
Bad_RequestTimeout | 0x80850000 | 处理请求时发生超时。 |
Bad_SecureChannelClosed | 0x80860000 | 安全通道已关闭。 |
Bad_SecureChannelTokenUnknown | 0x80870000 | 令牌已过期或未被识别。 |
Bad_SequenceNumberInvalid | 0x80880000 | 序列号无效。 |
Bad_ProtocolVersionUnsupported | 0x80BE0000 | 应用程序没有兼容的协议版本。 |
Bad_ConfigurationError | 0x80890000 | 配置存在问题,影响了值的有效性。 |
Bad_NotConnected | 0x808A0000 | 变量应从另一个变量中接收值,但未如此配置。 |
Bad_DeviceFailure | 0x808B0000 | 生成值的设备/数据源存在故障,对值造成了影响。 |
Bad_SensorFailure | 0x808C0000 | 设备/数据源获取值的传感器存在故障。 |
Bad_OutOfService | 0x808D0000 | 数据源未正常运行。 |
Bad_DeadbandFilterInvalid | 0x808E0000 | 死区过滤器无效。 |
Uncertain_NoCommunicationLastUsableValue | 0x408F0000 | 与数据源通信失败。变量值为最后一个质量为Good的值。 |
Uncertain_LastUsableValue | 0x40900000 | 正在更新该值的操作已停止更新。 |
Uncertain_SubstituteValue | 0x40910000 | 该值为手动改写的运行值。 |
Uncertain_InitialValue | 0x40920000 | 该值为变量的初始值,变量通常从另一个变量接收值。 |
Uncertain_SensorNotAccurate | 0x40930000 | 该值位于一个传感器的限值。 |
Uncertain_EngineeringUnitsExceeded | 0x40940000 | 值超出了为该参数定义的值范围。 |
Uncertain_SubNormal | 0x40950000 | 该值从多个源中获取,包含的Good源数量小于所需数量。 |
Good_LocalOverride | 0x00960000 | 值已被覆盖。 |
Bad_RefreshInProgress | 0x80970000 | 条件刷新失败,或已有条件刷新操作正在运行。 |
Bad_ConditionAlreadyDisabled | 0x80980000 | 该条件已被禁用。 |
Bad_ConditionAlreadyEnabled | 0x80CC0000 | 该条件已被启用。 |
Bad_ConditionDisabled | 0x80990000 | 属性不可用,或该条件被禁用。 |
Bad_EventIdUnknown | 0x809A0000 | 指定的事件ID未被识别。 |
Bad_EventNotAcknowledgeable | 0x80BB0000 | 事件无法知悉。 |
Bad_DialogNotActive | 0x80CD0000 | 对话框条件未处于活动状态。 |
Bad_DialogResponseInvalid | 0x80CE0000 | 响应对于对话框无效。 |
Bad_ConditionBranchAlreadyAcked | 0x80CF0000 | 条件分支已被知悉。 |
Bad_ConditionBranchAlreadyConfirmed | 0x80D00000 | 条件分支已被确认。 |
Bad_ConditionAlreadyShelved | 0x80D10000 | 条件已被搁置。 |
Bad_ConditionNotShelved | 0x80D20000 | 条件当前未被搁置。 |
Bad_ShelvingTimeOutOfRange | 0x80D30000 | 搁置时间不在允许范围内。 |
Bad_NoData | 0x809B0000 | 请求的时间范围内或事件筛选条件下不存在数据。 |
Bad_BoundNotFound | 0x80D70000 | 未找到提供上/下边界值的数据。 |
Bad_BoundNotSupported | 0x80D80000 | 服务器无法检索到变量边界。 |
Bad_DataLost | 0x809D0000 | 由于采集开始/停止/丢失,数据已丢失。 |
Bad_DataUnavailable | 0x809E0000 | 由于存在未安装的卷、离线存档或磁带,或由于暂时不可用等类似原因,期望的数据在请求的时间范围内不可用。 |
Bad_EntryExists | 0x809F0000 | 由于存在匹配条目,数据或事件未成功插入。 |
Bad_NoEntryExists | 0x80A00000 | 由于不存在匹配条目,数据或事件未成功更新。 |
Bad_TimestampNotSupported | 0x80A10000 | 客户端请求历史数据所使用时间标识格式不受服务器支持。换言之,客户端请求了ServerTimestamp,而服务器仅支持SourceTimestamp。 |
Good_EntryInserted | 0x00A20000 | 数据或事件已成功插入历史数据库。 |
Good_EntryReplaced | 0x00A30000 | 历史数据库中的数据或事件已被成功替换。 |
Uncertain_DataSubNormal | 0x40A40000 | 该值从多个值中获取,包含的Good值数量小于所需数量。 |
Good_NoData | 0x00A50000 | 请求的时间范围内或事件筛选条件下不存在数据。 |
Good_MoreData | 0x00A60000 | 请求的时间范围内或事件筛选条件下存在更多数据。 |
Bad_AggregateListMismatch | 0x80D40000 | 请求的集合数量与请求的节点ID数量不匹配。 |
Bad_AggregateNotSupported | 0x80D50000 | 服务器不支持请求的集合。 |
Bad_AggregateInvalidInputs | 0x80D60000 | 由于输入数据无效,无法获取集合值。 |
Bad_AggregateConfigurationRejected | 0x80DA0000 | 指定节点的集合配置无效。 |
Good_DataIgnored | 0x00D90000 | 请求所指定的字段对于EventType无效,或无法被历史记录保存。 |
Good_CommunicationEvent | 0x00A70000 | 通信层已发起事件。 |
Good_ShutdownEvent | 0x00A80000 | 系统正在关闭。 |
Good_CallAgain | 0x00A90000 | 操作未完成,需重新调用。 |
Good_NonCriticalTimeout | 0x00AA0000 | 发生非关键超时。 |
Bad_InvalidArgument | 0x80AB0000 | 一个或多个参数无效。 |
Bad_ConnectionRejected | 0x80AC0000 | 无法与远程服务器建立网络连接。 |
Bad_Disconnect | 0x80AD0000 | 服务器已从客户端断开连接。 |
Bad_ConnectionClosed | 0x80AE0000 | 网络连接已关闭。 |
Bad_InvalidState | 0x80AF0000 | 由于对象被关闭、未初始化或处于其他无效状态,操作无法完成。 |
Bad_EndOfStream | 0x80B00000 | 无法移动至数据流结束之后。 |
Bad_NoDataAvailable | 0x80B10000 | 非阻隔数据流中当前没有数据可读取。 |
Bad_WaitingForResponse | 0x80B20000 | 异步操作正在等待响应。 |
Bad_OperationAbandoned | 0x80B30000 | 异步操作已被调用方放弃。 |
Bad_ExpectedStreamToBlock | 0x80B40000 | 数据流未返回所有的请求数据(可能由于数据流为非阻隔性数据流)。 |
Bad_WouldBlock | 0x80B50000 | 需要非阻隔性操作,但该操作会导致阻隔。 |
Bad_SyntaxError | 0x80B60000 | 值语法无需。 |
Bad_MaxConnectionsReached | 0x80B70000 | 由于所有变量连接正在使用,操作无法完成。 |
OPCDA质量码(十进制)
0 Bad
1 Bad, Low Limited
2 Bad, High Limited
3 Bad, Constant
4 Bad, Configuration Error
5 Bad, Configuration Error, Low Limited
6 Bad, Configuration Error, High Limited
7 Bad, Configuration Error, Constant
8 Bad, Not Connected
9 Bad, Not Connected, Low Limited
10 Bad, Not Connected, High Limited
11 Bad, Not Connected, Constant
12 Bad, Device Failure
13 Bad, Device Failure, Low Limited
14 Bad, Device Failure, High Limited
15 Bad, Device Failure, Constant
16 Bad, Sensor Failure
17 Bad, Sensor Failure, Low Limited
18 Bad, Sensor Failure, High Limited
19 Bad, Sensor Failure, Constant
20 Bad, Last Known Value
21 Bad, Last Known Value, Low Limited
22 Bad, Last Known Value, High Limited
23 Bad, Last Known Value, Constant
24 Bad, Comm Failure
25 Bad, Comm Failure, Low Limited
26 Bad, Comm Failure, High Limited
27 Bad, Comm Failure, Constant
28 Bad, Out of Service
29 Bad, Out of Service, Low Limited
30 Bad, Out of Service, High Limited
31 Bad, Out of Service, Constant
32 Bad, Waiting for Initial Data
33 Bad, Waiting for Initial Data, Low Limited
34 Bad, Waiting for Initial Data, High Limited
35 Bad, Waiting for Initial Data, Constant
64 Uncertain
65 Uncertain, Low Limited
66 Uncertain, High Limited
67 Uncertain, Constant
68 Uncertain, Last Usable Value
69 Uncertain, Last Usable Value, Low Limited
70 Uncertain, Last Usable Value, High Limited
71 Uncertain, Last Usable Value, Constant
80 Uncertain, Sensor Not Accurate
81 Uncertain, Sensor Not Accurate, Low Limited
82 Uncertain, Sensor Not Accurate, High Limited
83 Uncertain, Sensor Not Accurate, Constant
84 Uncertain, Engineering Units Exceeded
85 Uncertain, Engineering Units Exceeded, Low Limited
86 Uncertain, Engineering Units Exceeded, High Limited
87 Uncertain, Engineering Units Exceeded, Constant
88 Uncertain, Sub-Normal
89 Uncertain, Sub-Normal, Low Limited
90 Uncertain, Sub-Normal, High Limited
91 Uncertain, Sub-Normal, Constant
192 Good
193 Good, Low Limited
194 Good, High Limited
195 Good, Constant
216 Good, Local Override
217 Good, Local Override, Low Limited
218 Good, Local Override, High Limited
219 Good, Local Override, Constant