2

我正在使用文档中的示例代码,并且正在尝试使用 Prosys OPC UA 客户端连接到服务器。我已经尝试过 opcua-commander 和集成对象 opc ua 客户端,看起来服务器工作得很好。

这是正在发生的事情:

  1. 输入 endpointUrl 后,客户端添加到 url -- urn:NodeOPCUA-Server-default
  2. 客户要求指定安全设置。
  3. 客户端要求选择服务器 - 只有 1 个选项,它是 urn:NodeOPCUA-Server-default。

它一遍又一遍地回到第 2 步和第 3 步。

如果我只是在一段时间后最小化 prosys 客户端而不关闭配置,我会在终端中获得以下信息: Server: closing SESSION new ProsysOpcUaClient Session15 because of timeout = 300000 has expired without a keep alive \x1B[46mchannel = \x1B[49m ::ffff:10.10.13.2 port = 51824

我已经尝试过这个项目并且它可以工作 -> node-opcua-htmlpanel。那么示例代码中缺少什么?

打开调试器后,我注意到每次选择安全设置并点击 OK,server_publish_engine 报告:

server_publish_engine:179 Cencelling pending PublishRequest with statusCode BadSecureChannelClosed (0x80860000) length = 0

4

2 回答 2

2

这是由于 node-opcua@0.2.2 中引入的特定互操作性问题。这将在下一版本的 node-opcua 中修复。可以在此处跟踪解决方案https://github.com/node-opcua/node-opcua/issues/464

于 2018-03-23T09:15:39.393 回答
1

Prosys OPC 论坛已处理该问题:

发生错误是因为服务器在 GetEndpointsResponse 和 CreateSessionResponse 中发送不同的 EndpointDescriptions。

在 GetEndpoints 中,返回的 EndpointDescriptions 包含 TransportProfileUri= http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary。在 CreateSessionResponse 中,对应的 TransportProfileUri 为空。

原则上,服务器应用程序没有按照规范工作。OPC UA 规范的第 4 部分规定“服务器应返回一组可用于请求中指定的 serverUri 的 EndpointDescriptions。…如果客户端使用 DiscoveryEndpoint 来获取 EndpointDescriptions,则客户端应使用 DiscoveryEndpoint 中的列表验证此列表。建议服务器只包含 server.applicationUri、endpointUrl、securityMode、securityPolicyUri、userIdentityTokens、transportProfileUri 和 securityLevel,所有其他参数设置为 null。客户只需要验证推荐的参数。”</p>

于 2018-03-23T08:47:05.680 回答