Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo

news/2024/12/16 20:29:18/文章来源:https://www.cnblogs.com/qq21497936/p/18611064

前言

  本篇介绍OPC协议,相关开源库、编译并搭建Qt开发OPC的基础环境。

 

Demo

  在这里插入图片描述

 

OPC

  OPC(OLE for Process Control)是一个工业标准,用于实现工业自动化系统中的不同设备和应用软件之间的数据交换和互操作性。以下是关于OPC的详细介绍:

OPC的起源与发展

  OPC起源于上世纪90年代,随着工业自动化技术的不断发展,不同厂商的设备和应用软件之间的数据交换和互操作性成为了一个亟待解决的问题。为了解决这个问题,OPC基金会(OPC Foundation)应运而生,并推出了OPC标准。经过多年的发展,OPC已经从一个简单的数据交换标准演变成了一个完整的工业自动化通信体系架构。
  OPC的核心特性

  • 跨平台性:OPC标准不依赖于特定的操作系统或硬件平台,可以在不同的操作系统和硬件平台上实现互操作性。
  • 实时性:OPC标准支持实时数据交换,可以满足工业自动化系统对实时性的要求。
  • 安全性:OPC标准提供了多种安全机制,如数据加密、身份验证等,确保数据传输的安全性和完整性。
  • 易用性:OPC标准提供了简单的接口和协议,使得开发人员可以轻松地实现设备之间的数据交换和互操作性。

OPC的体系架构

  OPC的体系架构主要包括以下几个部分:

  • OPC服务器:OPC服务器是工业自动化系统中的数据源,它负责采集和存储设备的数据,并提供给OPC客户端进行访问。
  • OPC客户端:OPC客户端是工业自动化系统中的数据消费者,它可以从OPC服务器获取数据,并进行处理和分析。
  • OPC接口:OPC接口是OPC服务器和OPC客户端之间进行数据交换的桥梁,它定义了数据交换的格式和协议。

OPC的应用场景

  OPC广泛应用于工业自动化领域,包括但不限于以下几个方面:

  • 监控系统:OPC可以用于构建监控系统,实时采集和显示设备的运行状态和参数。
  • 控制系统:OPC可以用于构建控制系统,实现对设备的远程控制和调节。
  • 数据采集系统:OPC可以用于构建数据采集系统,采集设备的实时数据,并进行存储和分析。
  • 历史数据访问系统:OPC支持历史数据访问功能,可以查询和分析设备的历史数据,为优化生产和管理提供决策支持。

OPC UA(Unified Architecture)

  随着工业自动化技术的发展和物联网的兴起,OPC基金会推出了OPC UA标准。OPC UA是OPC标准的升级版,它采用了面向服务的架构和统一的数据模型,提供了更加灵活和强大的数据交换和互操作性功能。OPC UA还支持跨平台、跨系统的数据交换和远程监控功能,为工业自动化领域带来了更加广泛和深入的应用。

OPC UA开源库

  基于C/C++的开源库有如下两个:

open62541

  • 主要功能:一个轻量级的、嵌入式C/C++ OPC UA实现。
  • 编程语言:C/C++。
  • 特点:支持跨平台;遵循Mozilla Public License v2.0许可证;提供完整的OPC UA协议栈实现,包括服务器、客户端、订阅和发布等功能;易于集成和扩展;有详细的文档和教程。

FreeOpcUa

  • 主要功能:一个功能齐全的C++ OPC UA服务器和客户端库。
  • 编程语言:C++。
  • 特点:遵循LGPL-3.0许可证;支持数据变化事件、状态变化事件和过滤功能;提供基本的身份验证和证书处理功能;支持自动代码生成;有详细的文档和示例代码;最近新增了Python绑定和自动化工具等功能。
 

open62541

概述

  open62541是一个开源的OPC UA(OPC统一架构)协议栈实现,open62541用C99和C++98语言的通用子集编写,可与所有主要编译器一起使用,并提供实现专用OPC UA客户端和服务器的必要工具,或将基于OPC UA的通信集成到现有应用程序中。open62541库与平台无关,所有特定于平台的功能都是通过可交换的插件实现的,且为主要操作系统提供了插件实现。

功能特点

  • 开源免费:open62541根据Mozilla Public License v2.0获得许可,因此open62541库可用于非开源项目。只有对open62541库本身的更改才需要在同一许可下发布。插件以及服务器和客户端示例都属于公共域(CC0许可证),可以在任何许可下重复使用,并且不必发布更改。
  • 跨平台:open62541支持多种操作系统和平台,包括Windows、Linux、macOS等,具有良好的可移植性。
  • 高性能:open62541采用了基于事件的架构和异步I/O机制,具有非常好的性能和伸缩性,适用于实时性要求较高的应用场景。
  • 安全性:OPC UA协议提供了多种安全机制,包括身份验证、加密传输等,open62541作为OPC UA协议栈的实现,也继承了这些安全特性。
  • 扩展性:open62541支持灵活的数据模型和服务扩展,可以根据具体需求进行定制和扩展。同时,它还支持插件式开发,可以方便地增加协议扩展、认证机制、加密协议等功能。

应用场景

  open62541可以应用于各种工业自动化和物联网场景,例如:

  • 工业控制系统:实现不同设备之间的数据交换和控制,实现工业自动化系统的集成和优化。
  • 智能制造:实现设备之间的数据共享和协同,提高生产效率和质量。
  • 智能建筑:实现建筑设备的监控和管理,提高能源利用效率和舒适度。
  • 物联网应用:实现物联网设备之间的数据传输和通信,实现智能家居、智能城市等应用场景。

源码下载

  在这里插入图片描述

  在这里插入图片描述

 

编译open62541

步骤一:下载解压

  在这里插入图片描述

步骤二:配置configure

  使用cmake进行配置:
  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  配置顺利通过,记住配置下安装install的路径,然后还需要重新配置生效:
  在这里插入图片描述

步骤三:生成工程Generate

  在这里插入图片描述
  在这里插入图片描述

  至此,CMake使用完成。

步骤四:编译

  在这里插入图片描述

  在这里插入图片描述

  开始编译:
  在这里插入图片描述

  在这里插入图片描述

  编译完成
  在这里插入图片描述

步骤五:安装install

   在这里插入图片描述

  在这里插入图片描述

步骤六:检查安装目录

  在这里插入图片描述

  在这里插入图片描述

  .a是静态库的方式,可以configre配置成动态库的方式,这里不管了。
  修改为release版本,只有1.2MB了:
  在这里插入图片描述

 

模块化

  在这里插入图片描述

 

Demo源码

QString OpcClientManager::getVersion()
{UA_Client *client;LOG << client;client = UA_Client_new();LOG << client;UA_ClientConfig_setDefault(UA_Client_getConfig(client));return QString(UA_OPEN62541_VERSION);
}

  在这里插入图片描述

 

工程模板v1.0.0

  在这里插入图片描述

 

入坑

入坑一:找不到库

问题

  函数报错
   在这里插入图片描述

  在这里插入图片描述

原因

  这是少了一些windows的基础库。

解决

  补上

LIBS += -lws2_32

  在这里插入图片描述

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

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

相关文章

vue 上传组件 vxe-upload 图片和附件拖拽调整顺序

vue 上传组件 vxe-upload 图片和附件拖拽调整顺序,通过设置 drag-sort 参数就可以启用拖拽排序功能 官网:https://vxeui.com/ 图片拖拽排序<template><div><vxe-upload v-model="imgList" mode="image" multiple drag-sort></vxe-u…

arm安装数据库

https://blog.csdn.net/wochunyang/article/details/132883654https://blog.csdn.net/qq_43690482/article/details/132168349https://www.cnblogs.com/wshisboy/p/16374015.htmlhttps://www.cnblogs.com/windandchimes/p/18344463 首先先看麒麟系统的版本CPU对应版本。 cat /p…

12月做题记录

whk恐怖如斯,仅补两周即可让呆猫失去大脑12月做题记录✩ trick ✯ 会大部分,要\(tj\)提示 ✬ 会小部分/完全没想到,看了\(tj\)才会 ◈ 脑电波 ✡ 有某一算法的神秘通用性质 ⊗ 待补目录12月做题记录CF1725K Kingdom of CriticismCF1446D2 Frequency Problem (Hard Version)根…

Vulnhub nxy

0x01:端口扫描 主机发现 nmap -sn 10.10.10.0/24全端口扫描 nmap --min-rate 10000 -p- 10.10.10.132UDP扫描 nmap -sU --top=20 10.10.10.132详细端口扫描 nmap -sT -sC -sV -O --min-rate 10000 -p22,80 10.10.10.132漏洞扫描 nmap --script=vuln -p22,80 10.10.10.1320x02:…

2024ciscn 逆向ezCsky和dump详解

ezCsky Exeinfo看了不是exeIDA分析不了,使用鸡爪Ghidra进行分析。这边顺带讲一下Ghidra的基础操作方法 下载Ghidra:https://gitcode.com/gh_mirrors/gh/ghidra_installer 下载java11(对版本有要求) 打开.bat文件第一次用需要先输入jar文件所在的地址,比如我的就是 C:\Pro…

如何将java私有库(jar)提交至公服/公共仓库(central repository)-手动版

如何将java私有库(jar)提交至公服/公共仓库(central repository)-手动版 准备GunPG(用于asc签名) 项目代码(建议是maven结构的) sonatype账号(https://central.sonatype.com/api/auth/login) Maven Helper(Idea插件,maven命令快捷插件) github或gitee账号(用于注册sonatype的N…

如何设计一个有效曝光的框架

本文主要介绍如何设计一个有效曝光的框架。先阐述有效曝光的概念及产生原因,接着围绕View标识、数据存储、曝光计算、曝光缓存、曝光策略、框架可扩展性等展开,包括View的唯一ID标识、数据存储的作用、曝光的面积和时长计算、缓存处理、框架策略扩展方式等,最后指出实现需考…

QT项目文本编辑器开发(2)

本章节接着上文,实现文本编辑器的新内容创建。 首先我们创建一个新的MyChildWnd 按照以下内容添加我们的代码:class MyChildWnd : public QTextEdit {Q_OBJECTpublic:MyChildWnd();QString myCurDocPath;void newDoc(); //创建新文档QString getCurDocName();bool loadDoc();…

QT 自动伸缩的工具栏和自定义配置的工具栏 QToolBar更多按钮的样式设置

1.实现目标 如下图所示,播放窗口的工具栏,有很多按钮,当窗口的宽度不够时,能够自动生成更多按钮,点击更过按钮就会出现多余按钮的menu菜单;2。实现方法 一开始我还想着加个按钮控件,在播放窗口resize函数中判断工具栏的宽度能容纳几个按钮,判断宽度是否够,如果不够的话…

诊断工具——找到泄漏点

C#若出现内存泄漏时可通过如下方式进行查找。 多次运行后在VS的诊断工具中截取内存快照, 然后点开内存快照,查看托管内存信息,如下图: 上图中PerspectiveViewModel是PerspectiveView页面的VM,理论上只有打开它时才会创建1个,离开这个页面时它会被GC回收。但通过多次进入…

海山数据库(He3DB)源码解读:T_DropRoleSetStmt原理浅析

一、概述DropRoleStmt 表示删除角色的 DDL 语句。。 二、DropRole 命令的执行流程PostgresMain exec_simple_query →执行简单的 SQL 查询; StartTransactionCommand → 开始事务; pg_parse_query →解析为内部的抽象语法树(AST); PortalRun standard_ProcessUtility →权限…

【Adobe Dimension 2024下载与安装】

1、安装包 我用夸克网盘分享了「Dimension 2024」 链接:下载地址 2、安装教程(安装前关闭系统防护) 1) 下载软件安装包,双击Set-up.exe安装2) 修改安装目录,点击继续3) 安装完成,点击启动4) 启动程序