香橙派AIpro是香橙派联合华为推出的开发板,功能非常强大,其部分参数表如下,

在这里插入图片描述


CPU里集成了AI处理器,非常适合做AI应用,但遗憾的是本人不是做这个方向的,后续等学习了相关AI知识后再来研究 :)

PS:比较奇怪的是CPU的具体型号没有提及,只写着4核64位处理器...


一 初始

收到CSDN邮寄的香橙派AIpro后打开,有以下几个东西,

在这里插入图片描述

  1. 电源适配器
  2. 电源线
  3. 32G TF卡,已经烧好华为的Linux系统 (基于Ubuntu22.04.3 LTS)
  4. 香橙派AIpro开发板

把TF卡插入开发板的卡槽,然后把电源适配器通过电源线接到板子的电源接口,接着把适配器插入插座,此时板子就会启动,风扇启动时会发出比较大的噪音,等启动好了之后就安静了。

然后通过HDMI线接到显示器上,显示如下,

开机界面


PS:板子上有2个HDMI接口,只有靠近网口的那个是可以用的,另外一个用不了,原因未知。

此时可以看到系统登陆界面,默认用户是HwHiAiUser,密码是Mind@123,输入密码后登录系统,

由于本人喜欢用SSH连接开发板,然后做开发,所以这里先把板子连上家里的WIFI,并获取其IP,如下红框,

在这里插入图片描述


接着自己的电脑也连上这个WIFI,最后配置下SSH,这样电脑和开发板之间就可以通过SSH通信了,连接好后显示如下,

在这里插入图片描述


输入df -h查看存储空间,

在这里插入图片描述


可以看到还有11G的存储空间供用户使用。

PS:这里要赞一下板子上安装的系统,基本所有必须的软件都安装好了,不用用户操心。


二 运行OPCUA服务器

首先尝试在香橙派AIpro上运行OPCUA服务器,并测试性能。

OPC UA(Open Platform Communications Unified Architecture)是一种先进的工业通信协议,设计用于实现设备与设备之间、设备与应用程序之间的安全、可靠、平台无关的数据交互。它是OPC基金会推出的新一代标准,旨在改进和替代早期的OPC规范,如OPC DA(Data Access)、OPC HDA(Historical Data Access)和OPC AE(Alarms and Events)等。

1. 搭建工程

OPCUA使用开源库open62541,其地址是https://github.com/open62541/open62541,进入后选择1.3.9版本,然后进行下载,

在这里插入图片描述

下载到Ubuntu里后解压,创建目录prj,并在这个目录里添加一个软链接指向open62541源码目录,同时创建CMakeLists.txt,build目录和main.c,最后工程结构如下,

在这里插入图片描述


CMakeLists.txt内容如下,

cmake_minimum_required(VERSION 3.5)

project(demo)


set(OPEN62541_VERSION "v1.3.9") 
set(UA_NAMESPACE_ZERO "FULL" CACHE STRING "xxx" FORCE)
set(UA_ENABLE_AMALGAMATION ON CACHE BOOL "xxx" FORCE)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/open62541)


include_directories(${CMAKE_CURRENT_SOURCE_DIR}/build/open62541)

add_executable(demo ${CMAKE_CURRENT_SOURCE_DIR}/main.c)


target_link_libraries(demo open62541)

这里开启了 Full Namespace0,这样会让open62541库变得很大,需要消耗的内存也很多,启动时会变慢,这样设置为了测试性能。

main.c内容如下,

#include "open62541.h"

#include <signal.h>
#include <stdlib.h>
#include <stdint.h>

UA_Boolean running = true;

static void stopHandler(int sign) {
    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
    running = false;
}

bool addOneNode(uint32_t index, UA_Server *server)
{
    UA_StatusCode ret = UA_STATUSCODE_GOOD;
    UA_VariableAttributes attr = UA_VariableAttributes_default;
    UA_UInt32 myInteger = index;
    char name[16] = {0};
    snprintf(name, 16, "Data%d", index);
    UA_Variant_setScalarCopy(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_UINT32]);
    attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", name);
    attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", name);
    UA_NodeId myIntegerNodeId = UA_NODEID_STRING_ALLOC(1, name);
    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME_ALLOC(1, name);
    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASORDEREDCOMPONENT);
    ret = UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
                              parentReferenceNodeId, myIntegerName,
                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), 
                              attr, NULL, NULL);
    
    /* allocations on the heap need to be freed */
    UA_VariableAttributes_clear(&attr);
    UA_NodeId_clear(&myIntegerNodeId);
    UA_QualifiedName_clear(&myIntegerName);

    if (UA_StatusCode_isBad(ret))
    {
        return false;
    }
    else
    {
        return true;
    }
}


int main() 
{
    signal(SIGINT, stopHandler);
    signal(SIGTERM, stopHandler);

    UA_Server *server = UA_Server_new();
    UA_ServerConfig_setDefault(UA_Server_getConfig(server));


    for (uint32_t i = 0; i < 25000; ++i)
    {
        if (addOneNode(i, server) == false)
        {
            printf("==> add node fail, index %d\n", i);
            break;
        }
    }

    UA_StatusCode retval = UA_Server_run(server, &running);

    UA_Server_delete(server);
    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
}

这里在OPCUA服务器里创建25000个变量节点,这个数量很庞大,可以通过这个来简单测试下香橙派AIpro的性能。

2. 运行和测试

执行下面命令进行编译,

cd build
cmake ... && make -j4

在板子上编译Full Namespace0的open62541库会发现很慢,大概要20s才能编好,最后链接的时候也很慢。

生成的可执行文件demo有8M多,

在这里插入图片描述


然后运行,

在这里插入图片描述


实测发现程序启动很快,没有遇到卡顿,另外看到其默认所使用的端口号是4840,这样OPCUA服务器就启动好了。

接着是OPCUA客户端,本人电脑里安装了UaExpert,这是一个OPCUA客户端工具,可以用来连接OPCUA服务器。

打开后点击工具栏里的这个“+”号,

在这里插入图片描述

弹出窗口后点击Advanced,然后输入服务器的ip和端口号,

在这里插入图片描述


最后点击OK进行,得到如下显示,

在这里插入图片描述

选中这个服务器,然后点击工具栏的连接按钮,连接成功后如下,

在这里插入图片描述


可以看到变量节点都在Objects目录下。

由于OPCUA服务器里有25000个变量节点,所以连接时会有卡顿,这里点击Objects目录,然后再点击其它节点,然后再点回Objects目录,这样可以让其不停的刷新,可以看出有明显的延迟,因为这需要不停的浏览服务器上的节点,如下log,

在这里插入图片描述

不过这是跟数据传输有关,因为节点很多,就需要传输大量数据,本来OPCUA就不是一个轻量级的协议。而在开发板上的服务器程序则运行很好,使用htop来查看服务器的消耗,可以看出很低,

在这里插入图片描述


三 运行DDS

DDS,全称Data Distribution Service(数据分发服务),是一个中间件协议和API标准,主要用于满足各种分布式实时通信应用需求,目前由对象管理组(OMG)发布和维护。

CycloneDDS是DDS的C++开源实现,是Eclipse下的 IoT项目,license是Eclipse Public License - v 2.0,可以免费使用,其Github地址是https://github.com/eclipse-cyclonedds/cyclonedds

这一节展示如何在香橙派AIpro运行CycloneDDS

1. 搭建工程并编译

打开CyloneDDS网页,然后在右侧找到最新release的版本,

在这里插入图片描述


点进去后,下载源码的zip包,

在这里插入图片描述


下载好之后拷贝到开发板里并解压,然后进入源码目录去创建build目录,最后执行下面命令编译源码,

cd build
cmake -DCMAKE_INSTALL_PREFIX=/home/HwHiAiUser/work/dds_test/dds_install -DBUILD_EXAMPLES=ON. .
cmake --build .

编译完成后,如果想执行安装,那么就运行下面的命令,

cmake --build . --target install

这样就可以把CyloneDDS的头文件,库以及例子都安装到指定的目录里了,这里是/home/HwHiAiUser/work/dds_test/dds_install

在这里插入图片描述

2. 运行例子

CycloneDDS的例子在编译时就已经编好了,

在这里插入图片描述


这里运行Roundtrip的例子,先运行RoundtripPong,然后再开一个终端运行RoundtripPing,最后得到以下显示,

在这里插入图片描述


可以看出比较稳定,而且延时也很低。


四 总结

本文讲述了如何在香橙派AIpro上运行OPCUA服务器和DDS,可以看出香橙派AIpro运行OPCUA服务器和DDS毫无压力,整体性能很强,用于工业控制完全没有问题,就是系统可能要改成实时的,毕竟工控领域讲究稳定。

体验过程中发现有2个缺点:

  1. 散热不好,应该是芯片性能太强造成的,功耗高,即使开着系统什么也不做,也会发热厉害
  2. SSH连接有时会有迟钝,输入了命令要过几秒才会显示,应该也是和温度过高有关
Logo

昇腾万里,让智能无所不及

更多推荐