1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- /* 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.h"
- #include "custom_datatype.h"
- int main(void) {
- UA_ClientConfig config = UA_ClientConfig_default;
- /* 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 = {config.customDataTypes, 1, types};
- config.customDataTypes = &customDataTypes;
- UA_Client *client = UA_Client_new(config);
- 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_deleteMembers(&value);
- UA_Client_delete(client); /* Disconnects the client internally */
- return UA_STATUSCODE_GOOD;
- }
|