前言

  本篇介绍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的更多相关文章

  1. Qt+ECharts开发笔记(三):ECharts的柱状图介绍、基础使用和Qt封装Demo

    前言   上一篇成功是EChart随着Qt窗口变化而变化,本篇将开始正式介绍柱状图介绍.基础使用,并将其封装一层Qt.  本篇的demo实现了隐藏js代码的方式,实现了一个条形图的基本交互方式,即Qt ...

  2. Qt+ECharts开发笔记(四):ECharts的饼图介绍、基础使用和Qt封装百分比图Demo

    前言   前一篇介绍了横向柱图图.本篇将介绍基础饼图使用,并将其封装一层Qt.  本篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口.   Demo演示 ...

  3. Qt+ECharts开发笔记(五):ECharts的动态排序柱状图介绍、基础使用和Qt封装Demo

    前言   上一篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口.  本篇的demo实现了自动排序的柱状图,实现了一个自动排序柱状图的基本交互方式,即Qt ...

  4. 【搜索引擎Jediael开发笔记1】搜索引擎初步介绍及网络爬虫

    详细可参考 (1)书箱:<这就是搜索引擎><自己动手写网络爬虫><解密搜索引擎打桩实践> (2)[搜索引擎基础知识1]搜索引擎的技术架构 (3)[搜索引擎基础知识2 ...

  5. Qt+ECharts开发笔记(二):Qt窗口动态调整大小,使ECharts跟随Qt窗口大小变换而变换大小

    前言   上一篇将ECharts嵌入Qt中,在开始ECharts使用之前,还有一个很重要的功能,就是在窗口变换大小的时候,ECharts的图表尺寸也要跟随Qt窗口变换大小而变换大小.   Demo演示 ...

  6. Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试

    前言   mysql驱动版本msvc2015x32版本调好, mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5 ...

  7. 张高兴的 Xamarin.Forms 开发笔记:TapGestureRecognizer 的简单介绍与应用

    最近很少写应用了,一直在忙关于 ASP.NET 的东西(哈欠...).抽点时间对 TapGestureRecognizer 做点总结. 一.简介 TapGestureRecognizer 就是对 Ta ...

  8. 玩转Android Camera开发(二):使用TextureView和SurfaceTexture预览Camera 基础拍照demo

    Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...

  9. ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境

    首先你得注册并认证一个个人或企业的微信公众号===服务号从而确保获得以下接口权限: 然后打开公众号设置里的功能设置里找到业务域名和网页授权域名分别填上你的域名(注:已备案的域名),如下图所示: 到这里 ...

  10. 【转】玩转Android Camera开发(三):国内首发---使用GLSurfaceView预览Camera 基础拍照demo

    http://blog.csdn.net/yanzi1225627/article/details/33339965 GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而 ...

随机推荐

  1. 《Vue.js 设计与实现》读书笔记 - 第9章、简单 Diff 算法

    第9章.简单 Diff 算法 9.1 减少 DOM 操作的性能开销 在之前的章节,如果新旧子节点的类型都是数组,我们会先卸载所有旧节点,再挂载所有新的子节点.但是如果存在相同类型的节点,我们完全可以复 ...

  2. redis 配置文件 - 启动redis 使用文件配置启动

    # Redis configuration file example. # # Note that in order to read the configuration file, Redis mus ...

  3. WPF中为Popup和ToolTip使用WindowMaterial特效 win10/win11

    先看效果图: 大致思路是:通过反射获取Popup内部的原生窗口句柄,然后通过前文已经实现的WindowMaterial类来应用窗口特效:对于ToolTip,为了保持其易用性,我使用了附加属性+全局样式 ...

  4. 云原生周刊:Knative 1.15 版本发布|2024.8.5

    开源项目推荐 helm-secrets helm-secrets 是一个 Helm 插件,用于动态解密加密的 Helm 值文件. Tofu Controller Tofu Controller(以前称 ...

  5. 运营商业务系统基于 KubeSphere 的容器化实践

    本篇文章是 KubeSphere 2020 年度 Meetup 上讲师宋磊分享内容整理而成. 大家好,我是宋磊,在运营商的一个科技子公司任职,主要做大数据业务.我主要负责公司的 IaaS 层和 Paa ...

  6. burpsuit无法启动

    在安装burpsuit时,最难的并不是找带有注册机的burpsuit安装包. 而是因为一些底层的原因,无法打开 burpsuit. 提示 Your JRE appears to be version ...

  7. 使用pandas进行数据分析

    目录 1.pandas的特点 2.Series 2.1新建Seriws 2.2使用标签来选择数据 2.3 通过指定位置选择数据 2.4 使用布尔值选择数据 2.5 其他操作 2.5.1 修改数据 2. ...

  8. UE4纯C++实现游戏快捷栏

    要想创建一个游戏中的快捷栏我们往往通过以下几步来实现(目录导航): 1.创建UI:我们首先需要有在游戏视口中添加一个快捷栏UI界面,以供玩家看到自身的快捷栏. 2.物品读取:其次有了界面之后我们需要往 ...

  9. .NetCore+Mysql+Vue+MVC+SqlSugar开源WMS仓库管理系统

    今天给大家推荐一个开源免费WMS仓库管理系统.仓库管理系统,可以有效控制并跟踪仓库业务的物流和成本管理全过程,实现或完善企业的仓储信息管理. 项目功能列表 基础数据 系统设置 物料管理 客户管理 供应 ...

  10. 案例分享-导致MySQL崩溃的SQL语句

    背景 周一刚上班一个开发小哥火急火燎的过来找我,黑龙江某客户私有化环境的服务过一阵就报数据库连接失败,不知道是什么原因导致的,我以为是客户调整了网络,但是客户说并没有做任何调整,我使用ping测试也看 ...