Open62541 - 在西门子数据块中写入数组

问题描述 投票:0回答:1

在C++中的Open62541中,我在文档中找不到如何在西门子PLC的数据块中写入数据,特别是在数组的情况下。 随着

UA_Client_writeValueAttribute(client, UA_NODEID_STRING(4,"DATABLOCK_NAME"."VARIABLE_NAME"), &value);
我没有收到任何错误消息,变量也没有改变。

PLC 是服务器,代码作为客户端在 Raspberry Pi 4 上运行。

感谢您的帮助!

plc opc siemens open62541
1个回答
0
投票

我能够破解答案!这是:

UA_Variant opcValue;
UA_Variant_init(&opcValue);
// Create an array of Float values
UA_Float dataArray[] = {1.1f, 2.2f, 3.3f, 4.4f, 5.5f};
size_t dataArraySize = sizeof(dataArray) / sizeof(UA_Float);

// Create a variant containing the array
UA_Variant_setArrayCopy(&opcValue, dataArray, dataArraySize, &UA_TYPES[UA_TYPES_FLOAT]);

// Write the array to the OPC UA variable
UA_NodeId nodeId = UA_NODEID("ns=NAMESPACE_INDEX;s=\"DATABLOCK_NAME\".\"VARIABLE_NAME\""); 

UA_StatusCode writeStatus = UA_Client_writeValueAttribute(client, nodeId, &opcValue);
if(writeStatus != UA_STATUSCODE_GOOD) {
    // Handle error
}

所以,对于我的情况是:

  UA_NodeId nodeId = UA_NODEID("ns=4;s=\"opcData\".\"Readings\""); 

© www.soinside.com 2019 - 2024. All rights reserved.