ZBLOG

请给出使用UA_Client_readValueAttribute_async读取数据的客户端案例

以下是一个使用ua-client-sdk库中的UA_Client_readValueAttribute_async函数读取数据的简单客户端案例:

#include <open62541/client_highlevel_async.h>
#include <open62541/plugin/log_stdout.h>

int main(void) {
    UA_Client* client = UA_Client_new();
    UA_ClientConfig_setDefault(UA_Client_getConfig(client));

    // 连接到OPC UA服务器
    UA_StatusCode status = UA_Client_connect(client, "opc.tcp://localhost:4840");
    if(status != UA_STATUSCODE_GOOD) {
        printf("无法连接到服务器\n");
        return -1;
    }

    // 创建请求结构体
    UA_ReadRequest request;
    UA_ReadRequest_init(&request);
    
    // 设置要读取的节点信息
    request.nodesToRead = UA_ReadValueId_new();
    request.nodesToReadSize = 1;
    
    // 设置节点ID和属性ID(这里以Node ID为"ns=2;i=1234",属性为Value)
    request.nodesToRead[0].nodeId = UA_NODEID_NUMERIC(2, 1234);
	request.nodesToRead[0].attributeId = UA_ATTRIBUTEID_VALUE;

	// 发送异步读取请求
	UA_UInt32 requestId;
	status = UA_Client_readValueAttributeAsync(client, &request, &requestId);
	if (status != UA_STATUSCODE_GOOD) {
		printf("异步读取请求发送失败\n");
		return -1;
	}

	// 等待响应结果
	UA_DataValue* value;
	status = UA_Client_waitForResponse(client, requestId, &value);
	if (status != UA_STATUSCODE_GOOD || !value) {
		printf("未能获取响应结果\n");
		return -1;
	}

	// 输出读取结果
	if (value->hasValue) {
		UA_String valueString = UA_STRING_NULL;
		UA_Variant_toScalar(&value->value, &valueString);
		printf("读取到的数据:%.*s\n", (int)valueString.length, valueString.data);
	}

	// 释放资源
	UA_DataValue_deleteMembers(value);
	UA_ReadRequest_deleteMembers(&request);
	UA_Client_disconnect(client);
    UA_Client_delete(client);

    return 0;
}

请注意,这只是一个简单的示例代码,具体使用方法可能因实际情况而有所不同。在实际使用时,请根据OPC UA服务器的地址和节点信息进行适当修改。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?