【QT】opcuaServer 的构建

【QT】opcuaServer 的构建

  • 前言
  • opcuaServer
  • 实现
  • 测试


前言

在博文【opcua】从编译文件到客户端的收发、断连、节点查询等实现 中,我们已经介绍了如何在QT 中创建opucaClient 。在本期的博文中,我们基于之前的部署环境,介绍一下如何构建opcuaServer,所用的第三方库依旧是open62541

opcuaServer

OPC UA(Open Platform Communications Unified Architecture)是一种开放的工业通信标准,用于在各种工业自动化系统和设备之间进行通信和数据交换。OPC UA Server是一个实现了OPC UA协议的服务器,用于接收、处理和传输数据。它可以提供一个统一的接口,使不同类型的设备和系统能够相互通信。

OPC UA Server具有以下特点和功能:

  1. 强大的安全性:OPC UA Server支持多种安全机制,包括用户认证、访问控制和数据加密,以确保数据的安全性和完整性。
  2. 灵活的数据模型:OPC UA Server使用基于对象的数据模型,可以根据实际需求定义和组织数据,使数据在不同设备和系统之间的传输更加灵活和高效。
  3. 高性能和可扩展性:OPC UA Server具有优化的通信协议和异步处理机制,可以处理大量的数据和请求,同时支持水平和垂直的扩展。
  4. 多平台支持:OPC UA Server可以运行在不同的操作系统和硬件平台上,包括Windows、Linux和嵌入式系统等。
  5. 历史数据存储和查询:OPC UA Server可以将历史数据存储在数据库中,并支持灵活的查询和检索功能,使用户可以方便地分析和使用历史数据。

OPC UA Server可以用于各种工业应用领域,包括制造业、能源管理、楼宇自动化、物联网等。它为不同的设备和系统提供了统一的数据通信和集成方案,促进了工业自动化的发展和应用。

实现

我们基于官方示例server.cpp,在qt中进行QMainWindow 的创建,(由于是基于之前客户端的文件中进行再次创建,因此需要在main.cpp 文件中切换新的cpp 文件)

#include "mainwindow.h"
#include "opcserversht.h"#include <QApplication>
#include "QJsonObject"
int main(int argc, char *argv[])
{QApplication a(argc, argv);//client
//    MainWindow w;
//    w.show();//serveropcserversht w;w.show();return a.exec();
}

然后就可以在opcserversht 类中进行服务端创建,代码如下:

#include "opcserversht.h"
#include "ui_opcserversht.h"
#include <open62541.h>#include <signal.h>
#include <stdlib.h>
//static void ostopHandler(int sign) {
//    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
    running = false;
//}
opcserversht::opcserversht(QWidget *parent) :QMainWindow(parent),ui(new Ui::opcserversht)
{ui->setupUi(this);////    signal(SIGINT, stopHandler);
//    signal(SIGTERM, stopHandler);UA_Server *server = UA_Server_new();UA_ServerConfig_setDefault(UA_Server_getConfig(server));// add a variable node to the adresspaceUA_VariableAttributes attr = UA_VariableAttributes_default;UA_Int32 myInteger = 42;UA_Variant_setScalarCopy(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US","the answer");attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US","the answer");UA_NodeId myIntegerNodeId = UA_NODEID_STRING_ALLOC(1, "the.answer");UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME_ALLOC(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_NULL, attr, NULL, NULL);/* allocations on the heap need to be freed */UA_VariableAttributes_clear(&attr);UA_NodeId_clear(&myIntegerNodeId);UA_QualifiedName_clear(&myIntegerName);UA_StatusCode retval = UA_Server_run(server, &running);UA_Server_delete(server);qDebug() << (retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE);
}opcserversht::~opcserversht()
{delete ui;
}

测试

运行qt 文件,然后在应用程序输出中可以查看对应的网址
在这里插入图片描述
这里就是opc.tcp://ZW-B-169:4840/

通过UaExpert 创建客户端进行连接,可以查看创建的节点信息
在这里插入图片描述

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

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

相关文章

springboot与Elasticsearch版本兼容对比

首先 大家在下载 Elasticsearch 时 最好先弄清楚版本 因为 如果 Spring Boot 版本 不兼容 Elasticsearch 那就是到头一场空了 Elasticsearch 版本 6.x 可以兼容 Spring Boot 2.x Elasticsearch 版本 7.x 可以兼容 Spring Boot 2.x 3.x 4x Elasticsearch 版本 7.x 以及 8.x 可以…

Flask 入门4:Flask 模板

1. 前言 Flask 拥有丰富的扩展方法&#xff0c;且都有统一的特点&#xff1a;简单和即学即用。当我们要实现某个功能之前&#xff0c;可以提前去搜一搜这个功能包是否已经存在&#xff0c;这样也能帮助我剩下很多时间。那么要去哪里找到这些扩展包呢&#xff0c;这里推荐两个方…

MySQL重要进程

MySQL的主要进程包括以下几种&#xff1a; 1.mysqld&#xff08;也称mysqld_safe&#xff09;&#xff1a;这是MySQL服务器的守护进程。它负责接收客户端连接、处理查询并管理数据库文件等操作。可通过命令行或配置文件来指定其运行参数。 2.mysqladmin&#xff1a;用于管理M…

模拟队列(数组实现)

题目 实现一个队列&#xff0c;队列初始为空&#xff0c;支持四种操作&#xff1a; push x – 向队尾插入一个数x&#xff1b;pop – 从队头弹出一个数&#xff1b;empty – 判断队列是否为空&#xff1b;query – 查询队头元素。 现在要对队列进行M个操作&#xff0c;其中的…

5G智能卷烟工厂数字孪生可视化平台,推进烟草行业数字化转型

5G智能卷烟工厂数字孪生可视化平台&#xff0c;推进烟草行业数字化转型。随着5G技术的不断发展&#xff0c;智能卷烟工厂数字孪生可视化平台成为了推进烟草行业数字化转型的重要手段。该平台将5G技术与数字孪生技术相结合&#xff0c;实现了对卷烟生产全过程的实时监控、数据分…

JAVA面试题之四谈谈你对RPC框架的理解

面试题之四 谈谈你对RPC框架的理解 难度指数&#xff1a;4星 考察频率&#xff1a;55-60% 开发年限&#xff1a;3年以上 一.RPC是什么&#xff1f; 远程过程调用&#xff1a;Remote Procedure call.可以跨进程&#xff0c;跨越同一个计算机的多个进程、多个JVM或多台计算…

ROE是什么?如何用ROE来分析企业?

ROE是什么&#xff1f; ROE&#xff0c;即净资产收益率&#xff08;Return on Equity&#xff09;&#xff0c;又称作股东权益报酬率、权益利润率&#xff0c;是净利润与平均股东权益的百分比&#xff0c;也称为净值报酬率、权益报酬率、权益利润率、净资产利润率&#xff0c;…

Knot Server XDP原理分析

目录 Knot Server XDP原理分析一、Kernel层代码分析1. kernel层源码的编译2. bpf-kenerl.c源码的分析 二、 User层代码分析 Knot Server XDP原理分析 xdp部分的代码分为Kernel层和User层两部分&#xff0c;Kernel层代码由User层代码调用linux bpf接口加载到网卡内核驱动&#…

网络选择流程分析(首选网络类型切换流程)

首先是界面,我在此平台的界面如下: 对应的入口源码位置在Settings的UniEnabledNetworkModePreferenceController中,当然其他平台可能在PreferredNetworkModePreferenceController中,流程上都是大同小异 然后点击切换按钮会调用到UniEnabledNetworkModePreferenceControlle…

为什么说Python语法简单?

Python被广泛认为是一种语法简单、易学易用的编程语言&#xff0c;这种观点有几个关键的原因&#xff1a; 1、清晰简洁的语法结构&#xff1a; Python采用了清晰而简洁的语法结构&#xff0c;使得代码易于阅读和理解。Python的语法设计强调代码的可读性&#xff0c;采用了清晰…

用的到的linux-删除文件-Day3

前言&#xff1a; 上一节&#xff0c;我们讲到了怎么去移动文件&#xff0c;其中使用到两大类的脚本命令即cp和mv。各两种命令都可以完成移动&#xff0c;但是cp是复制粘贴的方式&#xff0c;可以选择原封不动的复制粘贴过来&#xff0c;即不修改文件及文件夹的创建时间等&…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(五)NodeJS入门——http模块

044_http模块_创建HTTP服务端 hello&#xff0c;大家好&#xff0c;那这个小节我们来使用 nodejs 创建一个 http 的服务&#xff0c;有了这个 http 服务之后&#xff0c;我们就可以处理浏览器所发送过来的请求&#xff0c;并且还可以给这个浏览器返回响应。 顺便说一下&#x…

【Linux】线程Pthread的概念 | NPTL线程库函数

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;Linux系列专栏&#xff1a;Linux基础 &#x1f525; 给大家…

华为、清华等开源超高清、精准文生图模型,0.5秒极速生成!

华为诺亚方舟实验室、清华大学信息科技学院、大连理工、香港大学和Hugging Face的研究人员&#xff0c;联合开源了超高清文生图模型——PIXART-δ。 研究人员将潜在一致性模型&#xff08;LCM&#xff09;和创新控制架构ControlNet-Transformer集成在PIXART-δ中&#xff0c;在…

docker 部署springboot项目详细步骤

Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。在本教程中&#xff0c;我…

【LeetCode: 73. 矩阵置零 + 矩阵】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【XR806开发板试用】基于鸿蒙L0系统的智能WIFI台灯开发(简易版)

【XR806开发板试用】基于鸿蒙L0系统的智能WIFI台灯开发&#xff08;简易版&#xff09; 本文参与极术社区的《基于安谋科技STAR-MC1的XR806开发板试用》活动。 一、环境搭建及固件编译 环境搭建的过程就不说了&#xff0c;参考官方的教程,以下提及需要注意的几个点。 1.在wind…

spring boot学习第十一篇:发邮件

1、pom.xml文件内容如下&#xff08;是我所有学习内容需要的&#xff0c;不再单独分出来&#xff0c;包不会冲突&#xff09;&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…

使用Python语言生成区块链地址

# 单次运行 import binascii import sha3 from ecdsa import SigningKey, SECP256k1priv SigningKey.generate(curveSECP256k1) # 生成私钥 pub priv.get_verifying_key() # 生成公钥keccak sha3.keccak_256() keccak.update(pub.to_string()) # keccak_256哈希运算 addr…

【高频SQL基础题】1084.销售分析Ⅲ

题目&#xff1a; 表&#xff1a; Product ----------------------- | Column Name | Type | ----------------------- | product_id | int | | product_name | varchar | | unit_price | int | ----------------------- product_id 是该表的主键&#xff08…