ZBLOG

UA_NodeId_parse使用有误

抱歉,对于 UA_NodeId_parse 的使用方式有误。以下是修正后的代码示例:

#include <iostream>
#include "open62541/client_config_default.h"
#include "open62541/client_highlevel.h"

class OPCUAClient {
public:
    OPCUAClient(const std::string& serverUrl) : serverUrl(serverUrl) {
        client = UA_Client_new();
        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
    }

    ~OPCUAClient() {
        UA_Client_disconnect(client);
        UA_Client_delete(client);
    }

    bool connect() {
        UA_StatusCode status = UA_Client_connect(client, serverUrl.c_str());
        if (status != UA_STATUSCODE_GOOD) {
            std::cout << "连接到服务器失败" << std::endl;
            return false;
        }
        return true;
    }

    void disconnect() {
        UA_Client_disconnect(client);
    }

    bool addNode(const std::string& nodeName, const std::string& parentNodeId) {
        // 创建节点配置对象
        UA_NodeId parentNodeIdParsed = UA_NODEID_STRING_ALLOC(1, parentNodeId.c_str());

	    // 设置新节点的属性
	    UA_VariableAttributes attr;
	    UA_VariableAttributes_init(&attr);

	    attr.displayName = UA_LOCALIZEDTEXT("en-US", nodeName.c_str());
	    attr.description = UA_LOCALIZEDTEXT("en-US", "This is a new node");

	    // TODO: 根据需求设置其他属性

	    // 添加新节点
	    UA_NodeId newNodeId;
	    if (UA_Client_addVariableNode(
	    	client,
	    	parentNodeIdParsed,
	    	UA_NODEID_NUMERIC(0, 0),
	    	UA_QUALIFIEDNAME(1, nodeName.c_str()),
	    	UA_NODEID_NUMERIC(0, 0),
	    	attr,
	    	NULL,
	    	&newNodeId) == UA_STATUSCODE_GOOD) {
		    std::cout << "添加节点成功" << std::endl;
            UA_NodeId_deleteMembers(&newNodeId);
            return true;
	    } else {
		    std::cout << "添加节点失败" << std::endl;
            return false;
	    }
    }

private:
    std::string serverUrl;  // OPC UA 服务器地址
    UA_Client* client;      // OPC UA 客户端对象
};

int main() {
    std::string serverUrl = "opc.tcp://localhost:4840";  // OPC UA 服务器地址

    OPCUAClient opcuaClient(serverUrl);

    if (opcuaClient.connect()) {
        if (opcuaClient.addNode("MyNode", "ns=2;i=1234")) {
            // 添加节点成功,进行其他操作...
        }
        opcuaClient.disconnect();
    }

    return 0;
}

在代码中使用 UA_NODEID_STRING_ALLOC 函数将字符串格式的父节点 ID 解析为 UA_NodeId 类型。这样可以正确地解析和使用节点 ID。同样,请确保编译时链接了 open62541 库,并根据需要进行修改和扩展。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=15575

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?