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

news2025/1/10 2:51:53

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并创建实例,本人创建的实例如下,
在这里插入图片描述
因为本人对Ubuntu比较熟悉,所以选择创建了Ubuntu系统实例。然后就是在华为云官网修改登录密码,修改好之后就才可以使用ssh进行远程登录。登录后状态如下,默认是root账户,
在这里插入图片描述


二 安装需要的程序

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

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

三 搭建项目工程

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

打开后,点击红框按钮,然后往下拉,找到最新的版本,即pack/v1.3.7,然后点击它,
在这里插入图片描述
在新界面里先点击右侧的绿色Code,然后在弹出的界面里点击Download ZIP,
在这里插入图片描述
这样就把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命令查看工程结构,
在这里插入图片描述

这样工程就创建好了。


四 编写代码并编译运行

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

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

#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,
在这里插入图片描述
PS: 红框里显示该服务器的地址

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


五 使用UaExpert连接服务器

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

打开软件后点击“+”号,如下图,
在这里插入图片描述
在弹出的界面里点击“Advanced”栏,然后在Endpoint Url里输入OPCUA服务器地址,
在这里插入图片描述
由于本人的云服务器的公网IP是60.204.136.232,所以这里服务器的地址是“opc.tcp://60.204.136.232:4840”,填写好之后点击OK按钮。

然后在主界面里点击连接,即下图中的那个插座,
在这里插入图片描述
点击之后就会连接成功,我们就可以看到服务器的地址空间了,如下图,
在这里插入图片描述
“the answer”变量就是我们服务器代码在地址空间里添加的,单击该变量,可以在右侧Attributes窗口里看到其值,和预期一致,
在这里插入图片描述


六 遇到的问题及解决办法

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

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

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

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

2. TCP端口4840无法使用

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


七 总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/994736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis中动态SQL标签和内置参数介绍

Mybatis中动态SQL标签和内置参数 一、MyBatis动态SQL 1.1、sql标签 sql标签用于抽取公用的SQL代码&#xff0c;定义sql标签的时候需要通过【id】属性设置唯一标识。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-…

CocosCreator3.8研究笔记(十二)CocosCreator 字体资源理解

Cocos Creator 常用的字体资源有三种&#xff1a;系统字体、动态字体、位图字体。 一、系统字体 系统字体是调用运行平台自带的系统字体来渲染文字&#xff0c;不需要用户在项目中添加任何相关资源。 使用系统字体&#xff0c; Label 组件 Use System Font 属性需要勾选。 Fo…

使用Spring Security保障你的Web应用安全

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

用户权限数据转换为用户组列表(3/3) - Excel PY公式

最近Excel圈里的大事情就是微软把PY塞进了Excel单元格&#xff0c;可以作为公式使用&#xff0c;轻松用PY做数据分析。系好安全带&#xff0c;老司机带你玩一把。 实例需求&#xff1a;如下是AD用户的列表,每个用户拥有该应用程序的只读或读写权限&#xff0c;现在需要创建新的…

迅软DSE文档权限管理:实现受限访问,确保重要机密绝不外泄

在现代办公中&#xff0c;文档已经成为信息存储、使用以及流转的重要载体&#xff0c;这些文档在企业内外共享和流转&#xff0c;期间若是谁都可以对其进行访问、复制、删除、截屏、打印……会给企业的信息安全带来许多隐患。 对文档实行差异化管理已经成为企业机密保护一部分&…

智能小车之蓝牙控制并测速小车、wife控制小车、4g控制小车、语音控制小车

目录 1. 蓝牙控制小车 2. 蓝牙控制并测速小车 3. wifi控制测速小车 4. 4g控制小车 5. 语音控制小车 1. 蓝牙控制小车 使用蓝牙模块&#xff0c;串口透传蓝牙模块&#xff0c;又叫做蓝牙串口模块 串口透传技术&#xff1a; 透传即透明传送&#xff0c;是指在数据的传输过…

【数据结构】堆排序和Top-k问题

【数据结构】堆 堆排序 如果只是将待排数组建立一个大堆或者小堆是无法得到一个升序或者降序的数组&#xff0c;因为对与一个堆&#xff0c;我们没法知道同一层的大小关系。 但是&#xff0c;如果建立了一个大堆&#xff0c;那么堆顶元素一定是这个数组中最大的&#xff0c;…

使用Spring WebSocket实现实时通信功能

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

SpringMVC实现增删改查(CRUD)--从头到尾全面详细讲解

一&#xff0c;实现CRUD前准备工作 1.1 pom.xml依赖的配置 创建Model项目并导入相关pom.xml依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><m…

BIOS < UEFI

Basic Input Output System &#xff08;BIOS&#xff09; Unified Extensible Firmware Interface &#xff08;UEFI&#xff09;

Redis3.2.1如何设置远程连接?允许局域网访问

背景&#xff1a; 电脑A的redis需要开放给电脑B使用&#xff0c;二者处于同一局域网 【后面会补充更详细的踩坑历程&#xff0c;先发出来作为记录】 过程&#xff1a; 在你查了很多方法后&#xff0c;如果还是没有解决&#xff0c; 尝试考虑一下你的redis配置文件是不是修…

Linux安装kibana

相关链接 https://www.elastic.co/cn/downloads/kibana https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz 官网下载可能比较慢&#xff0c;下面提供下载地址 百度云链接&#xff1a;https://pan.baidu.com/s/1d9Cqr9EwHF94op90F57bww 提取码…

【EKF】EKF原理

原理简述 卡尔曼滤波可以在线性模型&#xff0c;误差为高斯模型的情况下&#xff0c;对目标状态得出很好的估计效果&#xff0c;但如果系统存在非线性的因素&#xff0c;其效果就没有那么好了。比较典型的非线性函数关系包括平方关系&#xff0c;对数关系&#xff0c;指数关系…

第 2 章 线性表 ( 具有实用意义的线性链表(带头结点)实现)

1. 背景说明 链表中携带尾指针信息能够在插入新结点时提高效率。 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H#define CHECK_NULL(pointer) if (!(pointer)) { \printf("FuncName: %-15s Line: %-5d ErrorCo…

Matlab之创建空数组的多种方法汇总

一、matlab空数组是什么&#xff1f; 在MATLAB中&#xff0c;空数组是指没有元素的数组对象。它可以用于占位或者作为容器&#xff0c;等待后续添加元素。 二、创建空数组的多种方法 1、使用空方括号 [] 创建空矩阵 A []; % 创建一个空双精度矩阵 B logical([]); % 创建一…

Unity Shader 溶解带描边

一、效果图 二、原理分析 实现原理就是在片元着色器中&#xff0c;对像素点进行渐进丢弃不显示。借助美术做的噪点图(利用噪点图中rgb中r值来做计算)。比如噪点图r值从0-1。我们从小到大让r值逐渐丢弃&#xff0c;比如刚开始r < 0.1丢弃&#xff0c;然后t < 0.2丢弃...知…

【GO语言基础】控制流

系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 【GO语言基础】控制流 文章目录 系列文章目录条件语句if-else 结构判断一个字符串是否为空&#xff1a;switch结构 循环结构for 循环&#xff08;C风格&#xff…

CSS 实现让最后一排元素向左对齐并且整体要居中的几种方式

背景 好久没写 CSS 了&#xff0c;最近产品提了个样式需求&#xff0c;让列表最后一排的元素要向左对齐&#xff0c;而不是居中分配&#xff0c;如图&#xff1a; 由于项目采用 flex 布局&#xff0c;一开始想到的是直接给容器加个 justify-content: flex-start 看起来确实…

【C++】day3学习成果:类

1.自行封装一个栈的类&#xff0c;包含私有成员属性&#xff1a;栈的数组、记录栈顶的变量 成员函数完成&#xff1a;构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 头文件stack.h: #ifndef STACK_H #define STACK_H#include …

计算机专业毕业设计项目推荐01-生产管理系统(JavaSpringBoot+原生Js+Mysql)

生产管理系统&#xff08;JavaSpringBoot原生JsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现****最后想说的****联系方式** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以…