参考
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
BadApplicationSignatureInvalid安全通道打开、CreateSession 成功,随后 ActivateSession 立即失败,因此客户端看起来几乎就要连上却又断开。BadNonceInvalid某一对特定的客户端与服务器组合在 OpenSecureChannel 或 ActivateSession 阶段失败,而这两个应用与其他所有对端都工作正常。BadSecurityChecksFailed握手通过了端点列表阶段,随后在 OpenSecureChannel、CreateSession 或 ActivateSession 期间以一个未指名BadSecurityModeInsufficient读取和浏览都正常,但某一个特定的方法调用或某一个特定节点失败,而且对你试过的每个用户都同样失败。BadSecurityModeRejected一次快速的非安全测试连接被直接拒绝;或者配置为 Sign 的客户端连接一台只发布 SignAndEncrypt 的服务器时失败。BadSecurityPolicyRejected一个能正常连接某台服务器的客户端拒绝连接另一台,故障在通道打开时立即发生,没有任何证书对话BadUserSignatureInvalid对同一台服务器使用匿名或用户名登录都正常,只有基于证书的用户身份失败,而且总是在 ActivateSession 阶段。
身份验证 4
BadIdentityChangeNotSupported一个先匿名连接、随后为执行特权操作而用用户凭据重新激活的应用,在重新激活时被拒绝,而BadIdentityTokenInvalid无论你试哪个用户名和密码,ActivateSession 都立即失败,而用匿名方式连接同一端点可能完全正常。BadIdentityTokenRejected一个用户的凭据被拒绝,而另一个用户用同样的客户端和设置连接同一端点却能成功。BadUserAccessDenied浏览正常,部分节点读取正常,而某个特定的读、写或方法调用对某个用户被拒绝,管理员却可以执行。
会话 4
BadSessionClosed调用不是超时,而是立即以 BadSessionClosed 失败,常常就发生在关闭流程或重连与正常工作并行之后BadSessionIdInvalid一个已经顺利读取了数分钟或数小时的客户端突然对每一次服务调用都返回 BadSessionIdInvalid,并持续失败直到它重BadSessionNotActivated连接看起来建立成功(没有证书错误,没有超时)但第一个真正的请求,通常是对根文件夹的 Browse,以 BadBadTooManySessions新客户端无法连接,而已有客户端仍正常工作,故障出现在 CreateSession 阶段,而不是套接字或证书阶段。
通道 4
BadRequestHeaderInvalid在一条本来健康的通道上,每一次服务调用都以同一个报文头错误失败,连 Read 这样简单的调用也不例外,因此问题显然不在BadSecureChannelClosed通道一断,请求就成组失败,通常是未完成的 Publish 请求先返回,客户端的连接状态BadSecureChannelIdInvalid请求被立即以通道级错误拒绝,常常就发生在一次在 TCP 层看似成功的重连尝试之后。BadSecureChannelTokenUnknown一个长时间运行的连接会以固定周期失败(常常是整点或固定的分钟倍数)重连后恢复,随后又再次
连接 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
BadDeviceFailure来自某一台设备或某一个 I/O 模块的标签变为坏值,而服务器其余部分保持正常,并且该设备本身正在显示故障指示。BadNoCommunication会话保持连接、浏览也正常,但一组标签在同一时刻全部翻转为坏状态,并一直保持到底层设BadNotConnected节点浏览正常,DisplayName 和 DataType 也合理,但每次读取都返回 bad 状态,而且从来没有收到过任何值:一次也没有BadOutOfService一个标签在与维护作业相关、而与任何设备或网络事件无关的时刻变为坏值,并在作业BadSensorFailure某一个测量值变为坏状态,而来自同一设备的其他数值都保持 Good,通常原始信号明显处于欠量程或超BadWaitingForInitialData刚创建订阅之后,部分或全部监控项的第一条通知带着该状态且没有数值,随后才是真实的值
订阅 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
BadAggregateInvalidInputs处理后读取对大多数区间返回良好的聚合值,却对零星几个区间返回该状态码,通常是覆盖设备停机或BadAggregateNotSupported原始历史读取可用,TimeAverage 可用,而同一台服务器上的 PercentGood 或 WorstQuality 返回该状态码。BadBoundNotFound在固定时间戳上的读取会返回班次中间的值,却在请求的第一个和最后一个时刻失败。BadDataUnavailable历史读取对最近几天成功,一旦请求的时间窗回溯到更早的数据就以该状态码失败。BadHistoryOperationInvalid历史服务调用本身完成了,但每个节点都返回此状态码,而把时间窗口改动几秒有时又能让它正BadHistoryOperationUnsupported在一台服务器上可用的原始或处理后历史读取,在另一台上只返回该状态码,尽管该变量显然有实时
方法 5
BadArgumentsMissing一个在 UaExpert 的 Call 对话框中能正常执行的方法,从你自己的客户端调用却返回此代码,而加入一个占位参数改变的是错误BadInvalidArgument调用到达了方法并立即失败,相同的数值用厂商工具可以成功,用你的客户端却不行。BadMethodInvalid该方法在地址空间中清晰可见,在 UaExpert 中也读得到,但每次 Call 都返回该状态码。BadNotExecutable同一个调用在机器处于本地模式空闲时成功、一旦运行就失败,或者对一个登录账号成功、对另一个失败。BadTooManyArguments一个原本正常的方法调用在客户端升级或服务器降级后开始失败,而发送的数值没有任何变化。
服务器 9
BadInternalError一个可复现的请求失败,而同一会话上的其他一切正常,并且服务器日志在同一时刻记录了异常或堆栈BadInvalidState同一个调用有时成功有时失败,差异与当时设备或对象正在做什么相关。BadNotImplemented一个规范中已定义、在你的 SDK 中也可见的服务或操作,每次尝试都返回相同的拒绝,对每个节点都如此,从BadNotSupported一个用默认参数正常工作的服务,一旦你设置某个特定选项、过滤器、编码或标志就失败。BadNothingToDo服务调用立即失败,完全没有逐操作的结果,通常就发生在客户端加载配置或执行过滤步骤之后。BadOutOfMemory请求在负载下开始失败,而较小的请求仍然成功;一旦客户端退让,服务器可能会自行恢复。BadResourceUnavailable地址空间的一部分正常工作,而某一个分支、某一项服务或某一台设备持续失败,起始时间往往与某次重BadServiceUnsupported某一个特定调用在每个客户端上每次都以相同方式失败,而会话、浏览和读取都正常。BadUnexpectedError一个操作以一个没有任何具体信息的状态失败,有时是间歇性的,客户端也没有可据以行动的额外信息。
Uncertain 6
UncertainEngineeringUnitsExceeded某个标签以 uncertain 状态报告一个略微超出其声明限值的数值,最常见于零点、最大值,或刚越过量程一UncertainInitialValue订阅创建后,许多项的第一条通知带有此状态,随后在一两个周期内会跟上带 Good 状态的真实值UncertainLastUsableValue一个标签持续显示一个看似合理、纹丝不动的值,而时间戳停止前进,下游趋势变成直线而不是变为坏值。UncertainNoCommunicationLastUsableValue某一台设备的所有标签在同一瞬间冻结在看似合理的数值上并带有 uncertain 状态,而同一服务器上其他设备的标签继续更UncertainSensorNotAccurate某一个模拟量标签报告 uncertain 状态,同时它的数值处于或接近量程端点,而它周围的标签都是 Good。UncertainSubstituteValue某个标签以 uncertain 状态报告一个可疑地整齐或像默认值的数字(零、标称设定值、量程中值)而且它并不
Good 6
GoodClamped写入返回成功,但把同一节点读回来得到的是另一个数字(通常正好是量程上限)并且机器的表现就像GoodCompletesAsynchronously一次方法调用对一个显然不可能已经完成的操作立即返回成功(配方下载、软件更新、一次长距离移动)而GoodMoreData一次历史查询返回一段看似合理但偏短的序列,且总是止于同一点,而一个天真的客户端就断定数据到此为止。GoodNoData对一个你预期有数据的时段做历史查询,返回的是 Good 状态的空结果,报表中显示的是空白区间而不是GoodOverload数据看起来连续且合理,但有采样缺失(计数器跳变、缺少一个周期、快速瞬态从未出现)而且没有任何错误GoodSubscriptionTransferred在网络中断或通道续期之后,客户端为每一个被转移的订阅记录一次此代码,随后数据恢复,且没有任何 monitored
最后核对日期 2026 年 9 月 7 日,对照 OPC UA 1.05.07。OPC UA Connect 是教育资源,与 OPC Foundation 无隶属关系。