我在“open62541”标题内做了一些研究后解决了这个问题。
在案例0中,我在“UA_Variant_setScalar”函数中使用表达式“& UA_STRING(currentPlc.ip)”,我认为该函数返回“currentPlc.ip”的等效UA_String。
但它实际上返回一个临时对象,该对象在调用函数后被删除。结果,对象的实际地址为空,因此我得到访问冲突。我只添加了一行,我将返回的对象传递给变量,然后使用变量的地址。
case 0: //Setting the ip-address auto value = UA_STRING(currentPlc.ip); UA_Variant_setScalar(&attrAttr.value, &value, &UA_TYPES[UA_TYPES_STRING]); attrAttr.displayName = UA_LOCALIZEDTEXT("en_US", "IPAddress"); attrBrowseName = UA_QUALIFIEDNAME(1, "IPAddress"); //Add the PLC value to the PLC-ObjectType UA_Server_addVariableNode(server, UA_NODEID_NULL, newPlcId, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), attrBrowseName, UA_NODEID_NULL, attrAttr, NULL, &isAvailableNodeId); break;