blob: 2aed9a13a34b5bc027124b0dd51e57c31515fca5 [file] [log] [blame]
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
#include <open62541/client_config_default.h>
#include <open62541/client_highlevel.h>
#include <stdlib.h>
#include "custom_datatype.h"
int main(void) {
/* Make your custom datatype known to the stack */
UA_DataType types[1];
types[0] = PointType;
/* Attention! Here the custom datatypes are allocated on the stack. So they
* cannot be accessed from parallel (worker) threads. */
UA_DataTypeArray customDataTypes = {NULL, 1, types};
UA_Client *client = UA_Client_new();
UA_ClientConfig *cc = UA_Client_getConfig(client);
UA_ClientConfig_setDefault(cc);
cc->customDataTypes = &customDataTypes;
UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
if(retval != UA_STATUSCODE_GOOD) {
UA_Client_delete(client);
return (int)retval;
}
UA_Variant value; /* Variants can hold scalar values and arrays of any type */
UA_Variant_init(&value);
UA_NodeId nodeId =
UA_NODEID_STRING(1, "3D.Point");
retval = UA_Client_readValueAttribute(client, nodeId, &value);
if(retval == UA_STATUSCODE_GOOD) {
Point *p = (Point *)value.data;
printf("Point = %f, %f, %f \n", p->x, p->y, p->z);
}
/* Clean up */
UA_Variant_clear(&value);
UA_Client_delete(client); /* Disconnects the client internally */
return EXIT_SUCCESS;
}