OPC UA提供了很多服务,当使用这些服务时,一般都会有个返回值,表示使用过程中是否发生错误,这个返回值就是StatusCode,在open62541里其类型是UA_StatusCode
typedef uint32_t UA_StatusCode;
从定义可以看出其实际类型是一个32位无符号整型数,每一个StatusCode都有一个特定值。
下面就看下在open62541里其实如何定义和查看的。
open62541中的情况
在编译open62541时,会通过tools\schema\StatusCode.csv来生成statuscodes.h和statuscodes.c,
这个csv文件的第一列是StatusCode名称,第二列是StatusCode对应的uint32_t值,第三列是StatusCode的描述,如下,
编译成功后可以去build\src_generated\open62541\下查看这2个文件。
在statuscodes.c里定义了一个数组statusCodeDescriptions,如下,总共有237个状态,
static const size_t statusCodeDescriptionsSize = 237;
static const UA_StatusCodeName statusCodeDescriptions[237] = {
{UA_STATUSCODE_GOOD, "Good"},
{UA_STATUSCODE_BADUNEXPECTEDERROR, "BadUnexpectedError"},
{UA_STATUSCODE_BADINTERNALERROR, "BadInternalError"},
{UA_STATUSCODE_BADOUTOFMEMORY, "BadOutOfMemory"},
{UA_STATUSCODE_BADRESOURCEUNAVAILABLE, "BadResourceUnavailable"},
{UA_STATUSCODE_BADCOMMUNICATIONERROR, "BadCommunicationError"},
{UA_STATUSCODE_BADENCODINGERROR, "BadEncodingError"},
... ...,
{UA_STATUSCODE_BADMAXCONNECTIONSREACHED, "BadMaxConnectionsReached"},
{0xffffffff, "Unknown StatusCode"}
};
通过statusCodeDescriptions,可以获取每个StatusCode对应的字符串,open62541同时也提供了一个函数把UA_StatusCode转为对应的字符串(其内部就是使用了statusCodeDescriptions),如下,
const char * UA_StatusCode_name(UA_StatusCode code);
这样debug时就很方便了。
小结
通过函数UA_StatusCode_name(),可以让我们获取StatusCode对应的字符串,方便debug