OPCUA open62541连接西门子840d sl出现错误,有偿求解

采用open62541连接连接西门子840d sl服务器,连接代码如下:

   OpcuaClient* opcClient = new OpcuaClient();  
    UA_ClientConfig* clientConfig = UA_Client_getConfig(opcClient->m_Client);
    UA_ClientConfig_setDefault(clientConfig);
    clientConfig->timeout =10000;
    clientConfig->securityMode = UA_MESSAGESECURITYMODE_NONE;
    clientConfig->securityPolicyUri = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#None");
    //连接OPCUA Server
    opcClient->ConnectServer("192.168.1.201", 4840, "OpcUaClient", "OpcUaClient");

连接后出现的问题,可能是安全策略的问题 ,想向大家请教一下如何解决~

img

根据您提供的代码和错误描述,连接问题可能与安全策略有关。在您的代码中,您设置了安全模式为"UA_MESSAGESECURITYMODE_NONE",并且安全策略为"http://opcfoundation.org/UA/SecurityPolicy#None%22%EF%BC%8C%E8%BF%99%E8%A1%A8%E7%A4%BA%E6%82%A8%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%AE%89%E5%85%A8%E7%9A%84%E8%BF%9E%E6%8E%A5%E6%96%B9%E5%BC%8F%E3%80%82%E4%BD%86%E6%98%AF%EF%BC%8C%E5%A6%82%E6%9E%9COPC UA服务器需要安全连接,您将无法连接并获得连接错误。

要解决此问题,您需要了解OPC UA服务器的安全配置,并相应地更改客户端的安全配置。如果OPC UA服务器需要安全连接,则必须使用安全模式和安全策略来设置客户端。通常,安全模式将设置为"UA_MESSAGESECURITYMODE_SIGNANDENCRYPT",而安全策略将设置为服务器所支持的策略之一。

以下是示例代码,用于使用安全模式和安全策略连接OPC UA服务器:

OpcuaClient* opcClient = new OpcuaClient();  
UA_ClientConfig* clientConfig = UA_Client_getConfig(opcClient->m_Client);
UA_ClientConfig_setDefault(clientConfig);
clientConfig->timeout = 10000;
clientConfig->securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;

// 设置支持的安全策略之一,例如:http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256
UA_String securityPolicy = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256");
clientConfig->securityPolicyUri = securityPolicy;

// 连接OPCUA服务器
opcClient->ConnectServer("192.168.1.201", 4840, "OpcUaClient", "OpcUaClient");

注意,您需要使用服务器支持的安全策略之一,否则连接仍然将失败。另外,您还需要正确设置OPC UA服务器的证书和密钥,以确保安全连接的成功。

重新刷新一下配置后重新启动,检查你的连接的配置

参考GPT和自己的思路:根据日志信息看,连接成功但是客户端拒绝了服务器端提供的安全策略,因此客户端无法选择一个合适的用户令牌策略,最终导致连接失败。

为了解决这个问题,您可以尝试以下方法:

1 确认服务器的安全策略是否正确设置,并与客户端的安全策略一致。您可以在代码中将客户端的安全策略修改为与服务器端一致,例如:

clientConfig->securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;
clientConfig->securityPolicyUri = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256");

2 确认用户令牌策略是否正确设置。您可以在代码中尝试禁用所有策略:

UA_ClientConfig_setDefault(clientConfig);
clientConfig->timeout = 10000;
clientConfig->securityMode = UA_MESSAGESECURITYMODE_NONE;
clientConfig->securityPolicyUri = UA_STRING_NULL;


如果仍然无法解决问题,建议您尝试参考open62541的官方文档,以了解更多关于安全策略和用户令牌策略的详细信息。

参考GPT和自己的思路,根据错误提示,连接失败的原因是未找到合适的用户令牌策略。用户令牌策略用于验证客户端的用户身份和权限,必须与服务器配置匹配才能建立连接。

建议您检查以下几个方面以解决此问题:

1.确认使用的西门子840d sl服务器支持的安全策略和模式。可以在服务器文档或配置中查找。

2.确认客户端连接的安全策略和模式与服务器配置相匹配。在代码中,您将安全模式设置为了“UA_MESSAGESECURITYMODE_NONE”,并且安全策略为“http://opcfoundation.org/UA/SecurityPolicy#None%E2%80%9D%E3%80%82%E5%A6%82%E6%9E%9C%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%94%AF%E6%8C%81%E5%85%B6%E4%BB%96%E5%AE%89%E5%85%A8%E7%AD%96%E7%95%A5%E5%92%8C%E6%A8%A1%E5%BC%8F%EF%BC%8C%E5%88%99%E9%9C%80%E8%A6%81%E7%9B%B8%E5%BA%94%E5%9C%B0%E6%9B%B4%E6%94%B9%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BB%A3%E7%A0%81%E3%80%82

3.确认在服务器上配置了允许匿名访问的用户令牌策略。在代码中,您的用户令牌策略为“anonymous”,但是服务器拒绝了此策略。可以通过检查服务器配置或与管理员联系来确认服务器上允许的用户令牌策略。

4.确认在客户端代码中使用了正确的用户名和密码。在代码中,您将用户名和密码设置为“OpcUaClient”,但是如果服务器需要使用其他凭据,则需要相应地更改代码。

希望这些提示可以帮助您解决连接问题。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的代码和错误信息,可能有以下几个问题:

  1. 安全策略不匹配:根据错误信息,服务器拒绝了匿名用户令牌策略(UserTokenPolicy 0),并且拒绝了 Basic128Rsa15 安全策略(SecurityPolicy http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15%EF%BC%89%E3%80%82

  2. 终端点不匹配:根据错误信息,客户端在检查服务器终端点时发现没有合适的安全策略。

为了解决这些问题,您可以考虑以下几个方面:

  1. 尝试使用其他安全策略。如果您的服务器支持其他安全策略,则可以尝试更改客户端的安全策略来匹配服务器。

  2. 检查服务器配置。如果服务器没有正确配置,则可能导致连接失败。请确保服务器配置正确,并且客户端可以通过网络访问服务器。

  3. 检查客户端代码。如果客户端代码存在错误,则可能导致连接失败。请确保客户端代码正确,并且与服务器设置相匹配。

另外,建议您在客户端代码中添加日志,以便更好地理解连接过程中发生的问题。

根据报错信息显示,您的客户端拒绝了服务器发送的某些安全策略,可能是由于服务器配置的安全策略与客户端配置的不匹配导致的。建议您检查一下服务器端的安全策略设置,并根据需要在客户端代码中进行相应的修改,以满足服务器的要求。此外,建议您尝试更换安全模式和策略,以寻找可用的匹配项。如果还有问题,可以提供更多的详细信息和代码,以便更好地进行分析和解决。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,如果连接失败并且您确定不是网络问题,则可能是由于安全策略不匹配导致的。首先要检查的是您的OPC UA服务器是否使用了安全策略,如果是,请确认其安全策略URI。

如果您的OPC UA服务器使用了安全策略,例如Basic256Sha256或Basic128Rsa15,则您的客户端应该在连接到服务器时启用相应的安全策略。在您的连接代码中,可以使用以下代码启用Basic256Sha256安全策略:

```C++
// 启用Basic256Sha256安全策略
UA_ClientConfig* clientConfig = UA_ClientConfig_new_default();
clientConfig->securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;
clientConfig->securityPolicyUri = UA_STRING_ALLOC("http://o/

从您提供的代码和截图来看,问题可能与安全策略或安全模式有关。请尝试以下方法:
首先,检查服务器的IP地址和端口是否正确。确保您的设备和OPC UA服务器之间的网络连接正常。
您可以尝试在创建客户端配置时禁用证书验证:

clientConfig->securityMode = UA_MESSAGESECURITYMODE_NONE;
clientConfig->securityPolicyUri = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#None");
clientConfig->verifyServerCertificate = false; // 添加此行禁用证书验证

检查是否需要用户名和密码进行身份验证。如果需要,您需要设置正确的用户名和密码。如下所示:

UA_StatusCode retval = UA_Client_connect_username(opcClient->m_Client, endpointUrl, username, password);

如果仍然出现问题,请使用诸如UAExpert之类的OPC UA客户端工具测试您的连接。这将帮助您诊断问题,并了解是否需要调整连接参数。

如果问题仍然存在,建议查看open62541的文档和示例以获取更多关于连接和配置的信息。还可以在open62541的GitHub issue页面上查找类似问题和解决方案。

尝试以上建议,希望能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。