opc ua定义了一套类型系统来操作数据,这是opcua的基础,open62541对这个类型系统进行了实现,如下简单介绍:
用过stdint.h的话都应该知道一些基本数据类型,如int32_t,是表示一个32位有符号整型数,而在open62541里把int32_t重新命名为UA_Int32,下面
对于字符串,open62541定义了一个结构体UA_String,其定义如下:
通过length可以知道这个data指针指向的数据长度。还有个结构体叫UA_ByteString,是对UA_String的重命名,这个结构体是用来存放一段字节流。
还有很多其它类型,具体可以到源码目录include/open62541/types.h里查看,下面是一段操作一些数据类型的代码(来自官网例子):
static void variables_basic(void)
UA_Int32 *ip = UA_Int32_new();
UA_String_init(&s); /* _init zeroes out the entire memory of the datatype */
UA_String_clear(&s2); /* Copying heap-allocated the dynamic content */
UA_String s3 = UA_STRING("test2");
UA_String s4 = UA_STRING_ALLOC("test2"); /* Copies the content to the heap */
UA_Boolean eq = UA_String_equal(&s3, &s4);
UA_init(&rr, &UA_TYPES[UA_TYPES_READREQUEST]); /* Generic method */
UA_ReadRequest_init(&rr); /* Shorthand for the previous line */
rr.requestHeader.timestamp = UA_DateTime_now(); /* Members of a structure */
rr.nodesToRead = (UA_ReadValueId *)UA_Array_new(5, &UA_TYPES[UA_TYPES_READVALUEID]);
rr.nodesToReadSize = 5; /* Array size needs to be made known */
UA_ReadRequest *rr2 = UA_ReadRequest_new();
UA_copy(&rr, rr2, &UA_TYPES[UA_TYPES_READREQUEST]);