12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /* 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;
- }
|