学习open62541 --- [30] StatusCode便捷查看

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

猜你喜欢

转载自blog.csdn.net/whahu1989/article/details/106389647