es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice DI Nodeset en lugar de Standard Nodeset http://opcfoundation.org/UA/

Trabajo con Open62541-Lib. Cuando creo objetos con UAServeraddObjectNode() o UAServeraddVariableNode(), siempre obtienen el Namespace 0 y pertenecen a http://opcfoundation.org/UA/. ¿Puedo definir otro Namespace en el código para que cada Nodo creado se refiera al conjunto de nodos DI? Usé NodesetCompiler, que crea datos .c y .h como esquema de DI-Nodeset, pero solo puedo cargarlos como Nodos vacíos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible definir otro espacio de nombres en el código para que los nodos creados se refieran al Nodeset DI. Puede utilizar la función UA_Server_addObjectNodeWithAlias() o UA_Server_addVariableNodeWithAlias() en lugar de la función UA_Server_addObjectNode() o UA_Server_addVariableNode(). La función UA_Server_addObjectNodeWithAlias() y UA_Server_addVariableNodeWithAlias() permiten especificar el índice del espacio de nombres y la URI del espacio de nombres para los nodos creados.

    Por ejemplo, para crear un nodo de objeto que se refiera al Nodeset DI, puede utilizar el siguiente código:

    UA_ObjectAttributes object_attr = UA_ObjectAttributes_default;
    object_attr.displayName = UA_LOCALIZEDTEXT("en-US", "Mi objeto");
    UA_NodeId myObjectNodeId = UA_NODEID_NUMERIC(1, 1001); //índice del espacio de nombres 1, identificador 1001
    UA_Server_addObjectNodeWithAlias(server, myObjectNodeId,
                                     UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
                                     UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
                                     UA_QUALIFIEDNAME(1, "MiObjeto"),
                                     UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
                                     object_attr, NULL, NULL);
    

    En este ejemplo, no se especifica el índice del espacio de nombres 1 ni la URI del espacio de nombres. En su lugar, se asume que un índice del espacio de nombres 1 corresponde al Nodeset DI, y el servidor utilizará automáticamente la URI definida en el Nodeset DI.

    Tenga en cuenta que la función UA_Server_addObjectNodeWithAlias() y UA_Server_addVariableNodeWithAlias() espera que el id de nodo alias ya exista en el espacio de direcciones del servidor. Por lo tanto, también deberá agregar los nodos generados por NodesetCompiler para el Nodeset DI.

    Puede agregar los nodos generados por NodesetCompiler para el Nodeset DI utilizando la función UA_Server_addNode(). Por ejemplo:

    UA_ByteString di_nodeset_bs = UA_BYTESTRING_NULL;
    loadDiNodesetBinary(&di_nodeset_bs); //cargar el binario Nodeset DI del archivo o memoria
    
    UA_Boolean res = UA_Server_addNode(server,
                                       UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
                                       UA_NODEID_NUMERIC(0, 12345), //cualquier identificador válido y único
                                       UA_QUALIFIEDNAME(0, "Nodeset DI"),
                                       UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE),
                                       NULL, //utilice los atributos predeterminados
                                       NULL); //no establecer la referencia de padre
    
    res = UA_Server_addNodesFromNamespaceZero(server, di_nodeset_bs.data, di_nodeset_bs.length, NULL);
    

    En este ejemplo, los nodos generados por NodesetCompiler para el Nodeset DI se agregan como un nodo de carpeta debajo de la carpeta de objetos raíz. Los nodos se agregan utilizando la función UA_Server_addNodesFromNamespaceZero() con los datos binarios cargados del archivo o memoria del Nodeset DI.

    Después de que tanto el Nodeset DI como los nodos personalizados se agregan al espacio de direcciones del servidor, puede crear nodos de objeto o variable que se refieran al Nodeset DI utilizando las funciones UA_Server_addObjectNodeWithAlias() y UA_Server_addVariableNodeWithAlias().

Comments are closed.