华为云云耀云服务器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并创建实例,本人创建的实例如下,

因为本人对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服务可以运行在华为云上。
相关文章:
华为云云耀云服务器L实例评测 | 开启OPC UA之旅
OPC Unified Architecture (OPC UA)是一种用于工业自动化的M2M协议(Machine-to-machine),具有平台独立性,在Windows和Linux上都可以运行。随着云服务在工业现场的不断普及,OPCUA服务也开始大量部署在云端。 本文以华为云云耀云服务器L为基础…...
帝国CMS灵动标签如何调用$ecms_hashur[‘ehref‘]函数
我们在二次开发时,后台调用链接就需要加上帝国CMS的$ecms_hashur[ehref]函数,这是帝国CMS后台的安全函数,防止外部直接访问后台页面,直接强制访问后台链接就会提示“非法来源”。 我的站长站分享下制作自定义php页面,用帝国CMS灵动标签如何调用$ecms_hashur[ehref]函数方…...
ES6 拓展(下)
一、函数的拓展 1.1、默认参数 在ES5中设置默认参数: function func(words, name) {name name || "闷墩儿";console.log(words, name); } func("大家好!我是"); func("大家好!我是", "憨憨");func(…...
TouchGFX之自定义触发条件和操作
通过TouchGFX Designer,您可以自己定义具有触发条件和操作的交互组件。 自定义容器创建自定义触发条件:通过自定义容器的属性选项卡添加自定义触发条件 使用交互系统发送自定义触发条件: 通过自定义容器的“交互”选项卡,创建新的…...
Linux防火墙(iptables)
一、linux的防火墙组成 linux的防火墙由netfilter和iptables组成。用户空间的iptables制定防火墙规则,内核空间的netfilter实现防火墙功能。 netfilter(内核空间)位于Linux内核中的包过滤防火墙功能体系,称为Linux防火墙的“内核…...
zookeeper教程
zookeeper教程 zookeeper简介zookeeper的特点及数据模型zookeeper下载安装zookeeper客户端命令zookeeper配置文件zookeeper服务器常用命令zookeeper可视化管理工具zkuizookeeper集群环境搭建zookeeper选举机制使用Java原生api操作zookeeper使用java zkclient库操作zookeeper使用…...
杭州快递物流展-2024长三角快递物流供应链与技术装备展览会(杭州)
2024快递物流创新高质量发展论坛暨 2024长三角快递物流供应链与技术装备展览会(杭州) 时间:2024年4月12-14 日 地点:杭州国际博览中心 ESYE长三角快递物流展是亚洲范围内超大规模的快递物流业展示平台,由于展会的需求 及扩大市场的影响力…...
CSP 202203-1 未初始化警告
答题 要注意是xi和yi的范围,yi可以是0为常数。 #include<iostream> using namespace std;int main() {int n,k;cin>>n>>k;bool*initializenew bool[n]{false};int result0,x,y;while(k--){cin>>x>>y;if(y&&!initialize[y-1…...
开发指导—利用组件插值器动画实现 HarmonyOS 动效
一. 组件动画 在组件上创建和运行动画的快捷方式。具体用法请参考通用方法。 获取动画对象 通过调用 animate 方法获得 animation 对象,animation 对象支持动画属性、动画方法和动画事件。 <!-- xxx.hml --><div class"container"> <di…...
树莓派入门
目录 前言系统烧录使用官方烧录工具选择操作系统选择存储卡配置 Win32DiskImager 有屏幕树莓派开机树莓派关机无屏幕树莓派开机获取树莓派IP地址通过路由器获取共享网络方式获取给树莓派配置静态IP地址查找默认网关分盘给树莓派的IP地址修改树莓派DHCP配置文件 ssh登录 让树莓派…...
算法模型嵌入式 Mendix应用的开发示例
一、前言 根据埃森哲最新一项调查,2023年67%的企业持续加大在技术方面的投入,其中数据和AI应用是重中之重。AI在企业内部应用这个话题已经保持了十多年的热度,随着ChatGPT为代表的生成式AI技术的出现,这一话题迎来又一波的高潮。…...
如何使用Cygwin编译最新版的Redis源码,生成适用于Windows的Redis
文章目录 一、准备Cygwin环境二、下载Redis源码三、编译redis-7.2.01. 执行make命令2. 重新执行make命令3. 再次执行make命令4. 将编译后的可执行文件及依赖放到同一个文件夹5. 测试编译生成的可执行程序 四、换其他redis版本重新编译1. 编译redis-7.0.122. 编译redis-6.2.133.…...
Linux 修改SSH端口
如果防火墙,或防火墙已经开启,需要先开放2222端口 firewall-cmd --add-port2222/tcp --permanent --zonepublic firewall-cmd --reload编辑文件 vim /etc/ssh/sshd_config: #Port 22 Port 2222 # 打开注释,并修改为以下值 Clien…...
Redis经典问题:缓存穿透
(笔记总结自《黑马点评》项目) 一、产生原因 用户请求的数据在缓存中和数据库中都不存在,不断发起这样的请求,给数据库带来巨大压力。 常见的解决方式有缓存空对象和布隆过滤器。 二、缓存空对象 思路:当我们客户…...
DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION (论文解析)
DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION 摘要1 介绍2 相关工作3 重新审视 Transformers 和 DETR4 方法4.1 用于端到端目标检测的可变形transformer4.2 Deformable Detr的其他改进和变型5 实验5.1 和DETR 比较5.2 消融实验5.3 与最先进方法的…...
网络连接评分机制之NetworkFactory
在开机时,各个提供网络连接的对象需要向ConnectivityService注册自己,并把自己所提供的网络的分值告诉ConnectivityService。 为了ConnectivityService便于统一管理,每一个具备提供网络服务的对象都需要创建一个NetworkFactory的子类对象,并利用该对象注册自己,以及提供自…...
极致精细的jmeter+ant+jenkins 搭建接口自动化测试
一、jmeter 相信大家对jmeter并不陌生哈,如果没有安装和配置环境的小伙伴,可以直接找到我哈,我发给你。 二、ant 安装ant 第一步:下载ant http://ant.apache.org/ 第二步:配置ant window中设置ant环境变量&…...
Unity物体查找方式
参考资料 cUnity中使用GameObject.Find、Transform.Find查找GameObject_思月行云的博客-CSDN博客 GameObject.Find 通过名字或路径查找游戏对象。 GameObject.Find("GameObject"); GameObject.Find("GameObject/ChildGameObject); 使用规范: 1.无法查找隐藏…...
【Spring容器的启动流程】
Spring容器的启动流程主要分为以下几个步骤: 加载配置文件:Spring容器会从指定的配置文件中读取配置信息,包括bean的定义、依赖关系、AOP切面等。 创建容器:Spring容器启动后会创建一个容器实例,容器负责管理bean的生…...
Python---字符串
字符串特点 1. 只可以存储字符串 2. 长度任意 (取决于内存大小) 3. 支持下标索引 4. 允许重复字符串存在 5. 不可以修改 (增加或删除元素等) 6. 支持for和while循环 字符串的下标索引 # 字符串的下标索引 从前向后,下标从0开始 从后向前,下标从-1开始…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
