参考

OPC UA 状态码

工程师实际会遇到的每一个 OPC UA 状态码,附含义、按出现频率排序的真实成因和解决办法。规范性 StatusCode 列表共 273 个,目前已记录 127 个,按其阻断项目的频率排序。

如何使用本资料。以你实际收到的状态码为准,而不是你以为会收到的那个。OPC UA 会返回它所能给出的最具体的代码,而具体的代码通常直接点名了真正的问题:证书错误几乎从来不是网络错误。如果你根本连不上,请从BadConnectionRejected;如果会话打开后又断开,请从BadSecurityChecksFailed.
127 个页面

证书 14

BadCertificateChainIncomplete尽管根 CA 已被信任,由 CA 签发的证书仍然校验失败,且错误提示的是证书链不完整或无法构建,而不是BadCertificateHostNameInvalid通道打开到足以验证证书的程度,然后因域名或主机名不匹配而失败,通常就发生在你从一个主BadCertificateInvalid握手立即失败且没有任何有用细节,而把证书放进信任库完全不起作用。BadCertificateIssuerRevocationUnknown对端证书校验通过,却在其上层的某个 CA 证书上失败,通常出现在只有子 CA 的 CRLBadCertificateIssuerRevoked所有证书来自某一个特定 CA 的应用程序同时无法连接,而由另一个 CA 签发证书的应用程序则不受影BadCertificateIssuerTimeInvalid由同一个 CA 签发的每个应用在同一时刻全部无法连接,而各个应用证书本身都还远在各自的有效BadCertificateIssuerUseNotAllowed由可用的企业 CA 签发的证书(在企业其他地方受信任、用于 TLS 也没问题)被 OPC UA 应用以颁发者相BadCertificatePolicyCheckFailed一台较旧的设备或一个遗留客户端在握手阶段被拒绝,而现代对端连接同一端点一切正常,证书本身也BadCertificateRevocationUnknown一份链路正确、在有效期内、命名也正确的证书被以吊销相关的错误拒绝,而你 PKI 中的 crl 文件夹是空的或只放着BadCertificateRevoked一个此前正常工作的连接在握手阶段以此状态码失败,对端证书落入被拒绝存储,而它的端点BadCertificateTimeInvalid一个用了几个月的连接一夜之间失败,或者一台全新设备在首次连接时立刻报出证书有效期错误而失败。BadCertificateUntrusted连接在 OpenSecureChannel 阶段中断,客户端弹出信任对话框或证书错误,而出问题的那份证书副本出现在BadCertificateUriInvalid证书校验通过了信任和主机名检查,随后在应用 URI 上失败,往往就发生在有人复制了一份配置BadCertificateUseNotAllowed一份受信任、在有效期内且名称正确的证书仍被拒绝,而消息指向的是密钥用法,而不是信任、证书链或主机

安全 7

身份验证 4

会话 4

通道 4

连接 17

BadConnectionClosed进行中的请求,尤其是长轮询的 Publish 调用,在同一瞬间全部以同一个错误结束,客户端状态转入重连BadConnectionRejected客户端立即以连接错误失败,且没有任何 OPC UA 细节:没有端点列表、没有证书提示、没有会话。BadEndpointUrlInvalid连接在任何证书或用户提示出现之前就失败,通常在一秒之内,客户端报出的是 URL 而不是网络或安全BadProtocolVersionUnsupportedTCP 连接被接受后在几毫秒内被拆除,发生在任何端点列表、证书提示或会话之前,错误信息中会点出BadRequestInterrupted多个进行中的请求在重连开始的同一时刻一起失败,且没有任何一个附带服务器端的故障原因。BadRequestTimeout某一类调用(大批量 Browse、批量 Read、触及现场层的方法)持续超时,而同一会话上的小型调用BadServerHalted连接建立或重建都正常,但每一次服务调用都被同一个代码拒绝,并且会一直持续到有人介入或BadServerNotConnected要么客户端的每次调用都立即失败且完全没有网络活动,要么网关上的一部分标签同时变为坏状态,而其余BadServerTooBusy在其他方面健康的连接上,请求被迅速而干脆地拒绝,成批出现,与工厂启动、服务器重启或BadShutdown所有未完成的请求同时以同一个代码结束,连接随即断开,服务器在短时间内BadTcpEndpointUrlInvalidTCP 连接被接受后立即以一个错误帧关闭,因此客户端在远不到一秒内就报告失败,且没有任何证书BadTcpMessageTooLarge小型操作一切正常,但某一个特定调用每次都失败:一次宽范围 Read、一次大批量 Write、浏览一个大文件夹,或一条订阅通BadTcpMessageTypeInvalid一台配置了 reverse connect 的服务器反复记录来自该客户端地址的拒绝并停止重试,而客户端显示一条意外的消BadTcpNotEnoughResources在已经运行一段时间的服务器上,连接或大请求开始失败,常常伴随订阅和浏览失败,并且常常在BadTcpSecureChannelUnknown在一次看似成功的重连之后,或在服务器重启之后而客户端仍处于某状态时,消息立即在分帧层被拒绝,BadTcpServerTooBusy新连接在握手阶段被拒绝,而已有客户端继续正常工作,拒绝集中出现在工厂启动时或服务器重启之后。BadTimeout操作在一个与某个 SDK 默认值相符的固定时长后失败,且连接往往片刻后自行恢复,形成锯齿状的失

地址空间 12

BadAttributeIdInvalidRead 在服务层面返回 Good,但结果数组中的某一项带有此状态,通常是某个文件夹或对象对应的那一项,而这类节点是被某个通BadBrowseDirectionInvalidBrowse 调用对每个节点都立即以该状态码失败,包括 Objects 文件夹这类知名节点,而同一会话上的 ReadBadContinuationPointInvalid一次大规模浏览或历史查询在最初几页正常,然后中途失败,在负载较高的服务器上或客户端暂停BadNoContinuationPoints在繁忙的服务器上,Browse 或 HistoryRead 开始对每个客户端失败,并且是在客户端重启之后而非任何服务BadNoMatch在一台设备上能解析的浏览路径,在一台看似相同的设备上却无匹配;或者在测试系统中有效的查询返回BadNodeClassInvalid某一个特定操作在一个浏览和读取都完全正常的节点上失败,最常见的是方法 Call 或事件订阅。BadNodeIdInvalid每一个涉及某个特定节点的请求都以完全相同的方式失败,而日志中出错的值往往明显有问题:空的 NodeId、多余的逗BadNodeIdUnknown一个已稳定运行数月的客户端,在控制器下载、固件升级或服务器重新配置之后,突然在部分或全部节点上失BadNotFound浏览路径转换结果中的某一条是坏的而其余都能解析,或者整条路径在某个你一眼就能看见的具体元素上失BadObjectDeleted刚才还正常的一部分节点开始失败,而地址空间的其余部分毫无变化,通常发生在某个作业结束、某个文件被关BadReferenceTypeIdInvalid一个在某台服务器上正常的 Browse 或 AddReferences 调用在另一台上失败,且浏览返回的是空无一物而不是空结果集。BadTooManyMatches路径转换或查询只在最大的设备或最繁忙的服务器上失败,而同一请求在小型测试地址空

数据访问 14

BadDataEncodingInvalid对一个结构化变量的 Read 或 CreateMonitoredItems 以 BadDataEncodingInvalid 失败,而同一台服务器上的标量节点读取正常。BadDataEncodingUnsupported结构化值用默认编码读取正常,但客户端一旦请求 XML 或 JSON 就失败,而该服务器其他方面表现正常BadDecodingError某个特定节点或某次特定服务调用解码失败,而同一会话上的其他一切都正常;或者客户端在读到一半时抛出解码异BadEncodingLimitsExceeded读取或订阅通知在小规模集合上正常,一旦批量增大、加入大数组或尝试导出地址空间就失败。BadIndexRangeInvalid带 IndexRange 的 Read 或 Write 立即失败,而同一请求去掉 IndexRange 就会成功并返回整个数组。BadIndexRangeNoData昨天还能用的范围读取现在返回 BadIndexRangeNoData,通常发生在底层数组变小、或服务器以空缓BadNotReadable浏览时节点及其属性显示正常,但每一次读取 Value 属性、每一次尝试把它加入订阅都返回 BadNotReaBadNotWritableWrite 立即返回 BadNotWritable,没有延迟,也不影响值,而对同一节点的 Read 完全正常。BadOutOfRange一次带有看似合理数值的 Write 被拒绝,而同一节点上更小或更大的数值却写入成功,读取该节点会看到一个范围属BadRequestTooLarge批量 Read、Write 或 CreateMonitoredItems 整体失败且没有逐项结果,而把同样的操作对半拆开后却成功。BadResponseTooLarge对大文件夹的 Browse、长时间窗的 HistoryRead,或突发期间的 Publish 失败,而同一调用在较小范围上正常返BadStructureMissing一次服务调用立即以 BadStructureMissing 失败且没有逐项结果,通常发生在第一次使用手工构造或生成的请求时。BadTypeMismatch一个看起来正确的 Write 对其中一项返回 BadTypeMismatch,而同一请求中的其他项成功,并且把同一节点读回来也正BadWriteNotSupported尽管 AccessLevel 显示 CurrentWrite,Write 仍以 BadWriteNotSupported 失败,而用另一个工具写同一个值却能成功。

设备 6

订阅 13

BadDeadbandFilterInvalid带死区的项被拒绝,而 DeadbandType 为 None 的同样的项被接受,并且拒绝跟随的是节点而不是客户BadEventFilterInvalid在 Server 对象或某个报警区域上订阅事件的尝试立即失败,而且从未收到任何事件,尽管服务器明BadFilterNotAllowedCreateMonitoredItems 或 ModifyMonitoredItems 以此状态码拒绝某一个特定项,而不带过滤器的相同项却被接受。BadFilterOperandInvalid事件订阅被拒绝,响应中携带的 EventFilterResult 对某一个特定的 select 或 where 操作数给出坏状态,而不是BadMonitoredItemFilterUnsupported在一台服务器上可用的同一个过滤器被另一台拒绝,通常是 PLC 或嵌入式网关,而监控项本身创建成BadMonitoredItemIdInvalidModifyMonitoredItems、SetMonitoringMode、SetTriggering 或 DeleteMonitoredItems 对部分项返回此代码,而同一次调用中的其他项成BadMonitoringModeInvalidSetMonitoringMode 或 CreateMonitoredItems 以此状态码拒绝该项,该项要么从不上报,要么保持原有的模式不变。BadNoSubscription在一个能正常连接、能正常读取和浏览的会话上,Publish 循环立即且反复返回此代码。BadSubscriptionIdInvalid原本正常的 Publish 调用开始每次都返回该状态码,不再有数据变化通知到达,而同一会话上的普通 ReadBadTooManyMonitoredItemsCreateMonitoredItems 对一个大批次的前一部分成功,对其余部分返回此代码,于是订阅建立起来时项数偏少BadTooManyOperations一次大批量的 Read、Write、Browse 或 CreateMonitoredItems 调用作为整体请求错误被直接拒绝,而同样这些节点在BadTooManyPublishRequests一个在某台服务器上工作正常的客户端,对另一台持续记录该状态码,有时伴随偶发的数据缺口,而其余一BadTooManySubscriptions系统运行一段时间后,或最后几个客户端投用后,CreateSubscription 开始失败,而已有的订阅仍然正常工

历史 6

方法 5

服务器 9

Uncertain 6

Good 6

最后核对日期 2026 年 9 月 7 日,对照 OPC UA 1.05.07。OPC UA Connect 是教育资源,与 OPC Foundation 无隶属关系。

免费下载
OPC UA 状态码诊断树
一份 15 页的诊断参考,按实际出错点对每一个规范性状态码分组:附每一类的第一步动作,以及在你读任何状态码之前就能解决大多数故障的四个问题。
获取免费诊断树 →
免费,无需课程,无需登录