1

我有两个 Windows 服务,一个服务 (service1) 连接到两个 OPC-UA 服务器,这工作正常。另一个 Windows 服务 (service2) 使用来自 OPC-UA 基金会的 .NET 参考堆栈的相同连接代码连接到相同的两个 OPC-UA 服务器。

Service1 可以连接到两个 OPC-UA 服务器并成功轮询数据。在部署 Service2 期间,Service2 还可以连接并从两个 OPC-UA 服务器读取值。此时一切都很好。

但是,现在过了一会儿,没有对任何代码做任何更改。Service2 无法再连接到其中一台 OPC-UA 服务器,在执行 Session.Create 时,它​​只会回复 ServiceResultException BadSecureChannelClosed(2156265472)。

开始故障排除:在我们的客户站点上,我们还有一个测试服务器,它运行与生产环境中的设置相同的设置,这意味着 Service1 和 Service2 也在测试服务器上运行,并以相同的方式与这两个 OPC-UA 服务器通信.

我注意到,当我关闭测试服务器上的服务时,Service2 的 BadSecureChannelClosed 错误消失了(但是 Service2 仍然可以与两个 OPC-UA 服务器中的另一个进行通信)。使生产服务器上的一切都按预期工作。

这让我想知道 OPC-UA 服务器上有哪些会话和连接限制。OPC-UA 服务器的类型为 SINUMERIK 840d。我问过西门子是否可以激活 ServerDiagnostics 对象来解决会话数量等问题,但他们回答说这是不可能的。我认为这个对象是必须启用的?

谁能给我暗示什么可能导致这种情况,以及在建立联系时我应该考虑哪些限制和事情,例如什么需要是独一无二的?应用名称?会话名称?等什么可能导致这个 - 看似 - “随机” BadSecureChannelClosed 错误。请注意,我在 Create Session 调用中使用了 updateBeforeConnect=true。我使用带有硬编码用户名和密码的 UserIdentity。

另一个奇怪的症状是,对于这个回复 BadSecureChannelClosed 的 OPC-UA 服务器,它在使用 UaExpert 连接到它时会出现 Discovery 错误(几周前不存在的错误):

16:58:41.806 | 自动更新 | 检索当前版本信息时出错:找不到 Host updates.unified-automation.com

16:58:35.404 | 发现小部件 | opc.tcp://192.168.0.200:4840 上的发现 GetEndpoints 失败 (BadCommunicationError)

16:58:35.401 | 发现小部件 | 在 opc.tcp://192.168.0.200:4840 上发现 FindServers 失败 (BadCommunicationError)

4

1 回答 1

2

当前的 Sinumerik OPC UA 服务器有问题,并且不提供正确编码的 ExtensionObjects。一旦可用,您将需要向 Siemens 请求对服务器进行更新。

请注意,您可以使用 UaExpert 毫无问题地访问它,它可以解码错误编码的 ExtesionObjects。这使他们能够首先发布这样一个错误的版本。

编辑:关于 ExtensionObjects 的注意事项:如果您尝试将其作为完整结构读取,则 ServerStatus 作为 ExtensionObject 传输。PublishResponse(用于提供订阅数据)还包括编码为 ExtensionObjects 的数据更改。因此,如果您仅通过 ServerState 监控状态,它可能会起作用。但无论如何,订阅将不起作用。

于 2017-02-21T20:27:55.550 回答