Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo
前言
本篇介绍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

Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo的更多相关文章
- Qt+ECharts开发笔记(三):ECharts的柱状图介绍、基础使用和Qt封装Demo
前言 上一篇成功是EChart随着Qt窗口变化而变化,本篇将开始正式介绍柱状图介绍.基础使用,并将其封装一层Qt. 本篇的demo实现了隐藏js代码的方式,实现了一个条形图的基本交互方式,即Qt ...
- Qt+ECharts开发笔记(四):ECharts的饼图介绍、基础使用和Qt封装百分比图Demo
前言 前一篇介绍了横向柱图图.本篇将介绍基础饼图使用,并将其封装一层Qt. 本篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口. Demo演示 ...
- Qt+ECharts开发笔记(五):ECharts的动态排序柱状图介绍、基础使用和Qt封装Demo
前言 上一篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口. 本篇的demo实现了自动排序的柱状图,实现了一个自动排序柱状图的基本交互方式,即Qt ...
- 【搜索引擎Jediael开发笔记1】搜索引擎初步介绍及网络爬虫
详细可参考 (1)书箱:<这就是搜索引擎><自己动手写网络爬虫><解密搜索引擎打桩实践> (2)[搜索引擎基础知识1]搜索引擎的技术架构 (3)[搜索引擎基础知识2 ...
- Qt+ECharts开发笔记(二):Qt窗口动态调整大小,使ECharts跟随Qt窗口大小变换而变换大小
前言 上一篇将ECharts嵌入Qt中,在开始ECharts使用之前,还有一个很重要的功能,就是在窗口变换大小的时候,ECharts的图表尺寸也要跟随Qt窗口变换大小而变换大小. Demo演示 ...
- Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试
前言 mysql驱动版本msvc2015x32版本调好, mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5 ...
- 张高兴的 Xamarin.Forms 开发笔记:TapGestureRecognizer 的简单介绍与应用
最近很少写应用了,一直在忙关于 ASP.NET 的东西(哈欠...).抽点时间对 TapGestureRecognizer 做点总结. 一.简介 TapGestureRecognizer 就是对 Ta ...
- 玩转Android Camera开发(二):使用TextureView和SurfaceTexture预览Camera 基础拍照demo
Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...
- ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境
首先你得注册并认证一个个人或企业的微信公众号===服务号从而确保获得以下接口权限: 然后打开公众号设置里的功能设置里找到业务域名和网页授权域名分别填上你的域名(注:已备案的域名),如下图所示: 到这里 ...
- 【转】玩转Android Camera开发(三):国内首发---使用GLSurfaceView预览Camera 基础拍照demo
http://blog.csdn.net/yanzi1225627/article/details/33339965 GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而 ...
随机推荐
- Flutter将视频或图文分享到抖音
如何在 Flutter 中分享视频到抖音 话不多说,先上效果: 原理 发布内容至抖音 H5 场景_移动/网站应用_抖音开放平台 (open-douyin.com) 本教程没有接入抖音原生 SDK 以及 ...
- iOS开发中UITextView使用小结
最近项目开发中用到了多行文本框限制文字输入个数限制,之前的话在textViewDidChange方法中截取超出字数就可以.测试人员发现在拼音转汉字的过程中,YYTextView不会二次确认textVi ...
- 云原生周刊:12 个容易忽略的 Kubernetes 安装错误
文章推荐 12 个容易忽略的 Kubernetes 安装错误 这篇文章总结了 12 个在 Kubernetes 安装过程中容易忽略但却必须注意的错误.这些错误包括: 没有正确安装 kubectl. 没 ...
- KubeSphere 3.3.0 发布:全面拥抱 GitOps
2022 年 6 月 27 日,KubeSphere 开源社区激动地向大家宣布,KubeSphere 3.3.0 正式发布! CNCF 发布的 2021 年度调查报告指出,容器和 K8s 的事实地位已 ...
- C++ 命令行传参 参数使用 坐标参数的转换
目录 1. 什么是命令行传参 2. 如何传参 3. 应用实例 4. 问题 1. 什么是命令行传参 命令行传参就是在 cmd 命令提示符, 或者 Linux shell 中使用可执行程序时, 可以添加 ...
- Django运行服务报NameError: name ‘os‘ is not defined
出现Bug: 原因:这里调用了os模块,但是文件头并没引用os模块 解决办法:在settings.py文件头加上:
- mysql清理异常字符
目前主要是清理 Mysql有时候会有一些异常字符导致数据导出失败. 发现异常字符的文字 通过如下脚本,数据库异常字符和正常字符的差异.得到异常字符的编号 SELECT hex(name),name,h ...
- 基于Java+SpringBoot心理测评心理测试系统功能实现五
一.前言介绍: 1.1 项目摘要 心理测评和心理测试系统在当代社会中扮演着越来越重要的角色.随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态.诊断心理问题.制定心理治疗方案的工 ...
- python岭迹图绘制函数
一.岭迹图是什么? 岭迹图(Ridge Trace Plot)是一种可视化工具,用于展示岭回归中正则化参数($\alpha$)对回归系数的影响.它能帮助我们理解特征的稳定性和正则化在控制模型复杂度中的 ...
- 云开发实践:从 0 到 1 带你玩 AI
今天我们将深入分析云开发的 AI 能力.这次的讨论焦点不再是之前提到的云端IDE编写代码的能力,而是更为广泛和实际的内容--如何利用云平台提供的各种模块化能力,快速高效地开发.今天的主题依然围绕AI展 ...