华为云云耀云服务器L实例评测 | 开启OPC UA之旅

OPC Unified Architecture (OPC UA)是一种用于工业自动化的M2M协议(Machine-to-machine),具有平台独立性,在Windows和Linux上都可以运行。随着云服务在工业现场的不断普及,OPCUA服务也开始大量部署在云端。

本文以华为云云耀云服务器L为基础,讲述如何把OPCUA服务器部署在云上,目前OPCUA最流行的开源实现是open62541,本文将使用它来实现OPCUA服务。

文章目录

    • 一 创建云耀云服务器L实例
    • 二 安装需要的程序
    • 三 搭建项目工程
    • 四 编写代码并编译运行
    • 五 使用UaExpert连接服务器
    • 六 遇到的问题及解决办法
      • 1. 本地电脑ping不通云服务实例
      • 2. TCP端口4840无法使用
    • 七 总结


一 创建云耀云服务器L实例

拿到代金券之后,直接去华为云官网购买云耀云服务器L并创建实例,本人创建的实例如下,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第1张图片
因为本人对Ubuntu比较熟悉,所以选择创建了Ubuntu系统实例。然后就是在华为云官网修改登录密码,修改好之后就才可以使用ssh进行远程登录。登录后状态如下,默认是root账户,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第2张图片


二 安装需要的程序

系统默认集成了GNU编译套件,但是还需要安装一些其它程序:

  • 安装cmake: sudo apt install cmake
  • 安装tree: sudo apt install tree

三 搭建项目工程

安装好之后,我们去open62541官网下载最新的release版本,网址是https://github.com/open62541/open62541

打开后,点击红框按钮,然后往下拉,找到最新的版本,即pack/v1.3.7,然后点击它,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第3张图片
在新界面里先点击右侧的绿色Code,然后在弹出的界面里点击Download ZIP,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第4张图片
这样就把open62541的最新版本下载下来了。下载完毕后通过WinSCP把zip包传输到云耀云服务器L实例上,然后用unzip命令去解压,

unzip open62541-pack-v1.3.7

解压后如下,
在这里插入图片描述

此时在work目录下创建project目录,然后依次在project目录里创建build目录,src目录,CMakeLists.txt,最后创建open62541-pack-v1.3.7的软链接,创建软链接的操作如下,
在这里插入图片描述
PS:使用软链接可以保证多个项目只需要一份open62541源码,不用每个工程都复制一份

接着在src目录下创建main.cpp,创建完成后,使用tree命令查看工程结构,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第5张图片

这样工程就创建好了。


四 编写代码并编译运行

首先打开main.cpp,然后编写如下代码,

#include 
#include 

#include "open62541.h"

UA_Boolean running = true;

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


static void addVariable(UA_Server *server) 
{
    /* Define the attribute of the myInteger variable node */
    UA_VariableAttributes attr = UA_VariableAttributes_default;
    UA_Int32 myInteger = 42;
    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
    attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;

    /* Add the variable node to the information model */
    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
    UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
                              parentReferenceNodeId, myIntegerName,
                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), attr, NULL, NULL);
}


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

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

    addVariable(server);
    
    UA_StatusCode retval = UA_Server_run(server, &running);
    
    UA_Server_delete(server);
    
    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
}

PS:该代码主要是创建OPCUA服务器,然后在服务器的地址空间里添加名为“the answer”的变量。

然后打开CMakeLists.txt,然后编写如下代码,

cmake_minimum_required(VERSION 3.5)

project(demo)

set(OPEN62541_VERSION "v1.3.7") 
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}/src/main.cpp )

target_link_libraries(demo open62541 pthread)

最后在终端下cd进入build目录,并执行下面命令进行编译,

cmake .. && make

编译完成后在build目录下运行demo,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第6张图片
PS: 红框里显示该服务器的地址

这样OPCUA服务器就在云端运行起来了。


五 使用UaExpert连接服务器

这里使用Unified Automation公司的UaExpert作为客户端,该软件功能全面且易用,是一个非常好的服务器测试工具。下载及安装过程这里不再描述,使用教程可以参考本人的这篇文章。

打开软件后点击“+”号,如下图,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第7张图片
在弹出的界面里点击“Advanced”栏,然后在Endpoint Url里输入OPCUA服务器地址,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第8张图片
由于本人的云服务器的公网IP是60.204.136.232,所以这里服务器的地址是“opc.tcp://60.204.136.232:4840”,填写好之后点击OK按钮。

然后在主界面里点击连接,即下图中的那个插座,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第9张图片
点击之后就会连接成功,我们就可以看到服务器的地址空间了,如下图,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第10张图片
“the answer”变量就是我们服务器代码在地址空间里添加的,单击该变量,可以在右侧Attributes窗口里看到其值,和预期一致,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第11张图片


六 遇到的问题及解决办法

本人在使用过程中遇到2个问题:

1. 本地电脑ping不通云服务实例

创建好云服务实例后 (Ubuntu 22.04系统),发现ping不通,重装了问题依然存在,在提交工单后得到了华为工程师的帮助,
华为云云耀云服务器L实例评测 | 开启OPC UA之旅_第12张图片
然后按照指示修改了icmp规则的源地址,最后就可以ping通了
在这里插入图片描述

问了一些其它用户,都表示没有遇到这样的问题…,可能创建的系统是不一样的。

2. TCP端口4840无法使用

由于本人的OPCUA服务器启动后默认使用TCP 4840端口,但是使用客户端进行连接时无法连接,最后思考了一下发现需要在入方向规则里添加新规则来允许对4840端口的访问,如下,
在这里插入图片描述
这个应该是出于安全考虑,所以默认是不允许使用的,必须管理员把该端口打开才可以。


七 总结

本文讲述了如何在华为云云耀云服务器L实例上部署OPCUA服务,并使用客户端去连接服务器。总体用下来感觉云耀云服务器L还是很不错的,速度很快,虽然遇到点问题,但都解决了,而且华为的反馈很迅速,这点值得称赞。

最后,祝愿华为云越来越好,也希望越来越多的OPCUA服务可以运行在华为云上。

你可能感兴趣的:(open62541,华为,服务器,运维)