QT学习笔记-QT5.15.2使用qtopcua5.15.2实现与PLC通讯(上)

news2024/11/18 1:23:48

QT学习笔记-QT5.15.2使用qtopcua5.15.2实现与PLC通讯(上)

  • 环境说明
  • 背景
  • 思路
  • perl依赖安装
  • qtopcua插件编译
  • 解决编译报错问题
  • 解决安装mingw32-make install报错问题

环境说明

操作系统:Windows10 专业版 64位
开发工具:Qt 5.15.2
OPCUA Server:KEPServerEx6
OPCUA Client Test Tools:UaExpert

背景

QT程序要实现与各种PLC通讯最简单的方式就是QT实现OPC客户端,然后通过访问OPC Server实现与PLC的通讯。下面就介绍一下在QT中如何实现OPC UA客户端功能。

思路

1、通过查阅资料了解到了OPC UA的C开源库open62541,这是一个使用cmake进行构建的开源c语言库,可以跨平台使用。
其官网地址为:https://www.open62541.org/
github地址为:https://github.com/open62541/open62541
2、qt为了让程序员更方便的使用open62541,官方开发了opcua插件,在插件中集成了opcua。
官方的插件源码git浏览地址为:https://code.qt.io/cgit/qt/qtopcua.git
官方的插件源码下载地址为:https://code.qt.io/qt/qtopcua.git
可以通过在https://code.qt.io/cgit/网址的搜索框中搜索opcua找到,如下图:
在这里插入图片描述
点击上图中Name列中的qt/qtopcua.git,就调到了qtopcua的配置库浏览界面了,如下图:
在这里插入图片描述
3、通过git获取qtopcua插件源码,然后进行编译,把编译后生成的库放入编译套件的插件目录中就可以在qt程序中进行调用了。

perl依赖安装

1、qtopcua源码编译是要依赖Perl的,因此需要先安装Perl才能正确编译qtopcua。
Perl的下载地址为:https://www.activestate.com/products/perl/
如下图:
在这里插入图片描述
2、根据自己的系统选择对应的Perl版本进行下载,我这里选择的是Windows平台下的下载链接,如下图:
在这里插入图片描述
3、这一步可以选择Sign up with GitHub,或者自己注册一个账户也可以,我选择的是使用GitHub账户进行登录,如下图:
在这里插入图片描述
4、出现下图:
在这里插入图片描述
5、点击Authorize ActiveState,出现下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6、点击 Finish & Install Perl,如下图:
在这里插入图片描述
6.1 这个图中给出了2种安装Per的方式,一种是在cmd.exe中执行安装命令(Install via Command Prompt (cmd.exe)),一种是下载安装包后再通过安装包安装(Install via.exe File)。
这里我选择的事在cmd中安装,直接点击 Copy to Clipboard,然后以管理员方式运行cmd.exe,把剪贴板中的内容粘贴到cmd命令窗口中执行,如下图:
在这里插入图片描述
安装完毕如下图:
在这里插入图片描述
通过

perl -v

命令查看版本信息入下:
在这里插入图片描述

6.2 下载离线安装包如下在这里插入图片描述
点击Download CLI Installer。下载后如下图:
在这里插入图片描述
以管理员身份运行state-remote-installer.exe,如下图:
在这里插入图片描述
根据提示输入Y,继续安装,安装完毕后,在cmd中执行

state activate --default zhenglibing-org/Perl-5.36.0-Windows

在这里插入图片描述
7、Per安装完毕之后需要配置环境变量才能在cmd或power shell中直接输入perl识别。
我用的第一种方式在cmd中通过命令安装的,perl的安装路径为:C:\Users\zheng\AppData\Local\ActiveState\cache\bin
如下图:
在这里插入图片描述
把上面的路径添加到PATH环境变量中,如下图(用户环境变量和系统环境变量都加上了):
在这里插入图片描述
在这里插入图片描述

qtopcua插件编译

1、先在本地电脑上建立一个工作目录qt_workspace,如果已有此目录则略过此步。
2、然后打开这个目录,然后开启Power Shell或者CMD
3、通过git下载qtopcua插件源码,如下:

git clone https://code.qt.io/qt/qtopcua.git
cd qtopcua
git checkout 5.15.2
mkdir build
cd build
qmake ..
mingw32-make
mingw32-make install

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

mingw32-make为编译代码
mingw32-make install为安装到编译好的库。

上图中的安装过程可以看到,主要是:
1、复制编译生成的lib\Qt5OpcUa.dll到D:\Qt\5.15.2\mingw81_64\bin\目录下
2、复制Qt5OpcUa.dll.debug到D:\Qt\5.15.2\mingw81_64\lib目录下
3、复制Qt5OpcUa.prl到D:\Qt\5.15.2\mingw81_64\lib目录下

解决编译报错问题

1、如果编译出现fatal error: openssl/asn1.h: No such file or directory错误,这里git checkout 5.12是没问题的,如果大于这个这版本就有这个问题。
如下为PowerShell的错误截图:
在这里插入图片描述

如下为qt Creator中的错误截图
在这里插入图片描述
2、这是qt安装时没有选择openssl组件导致,可以D:\Qt\MaintenanceTool.exe工具添加openssl组件如下图:
在这里插入图片描述
3、这选择最新OpenSSL 3.0.8 Toolkit,OpenSSL source code不是必须的。
4、安装完毕后,需要复制D:\Qt\Tools\OpenSSLv3\Win_x64\include下的openssl目录到D:\Qt\5.15.2\mingw81_64\include目录下,或者修改qtopcua源码中x509.pri文件内容,把D:\Qt\Tools\OpenSSLv3\Win_x64\include添加到包含路径中,如下图:
在这里插入图片描述
然后就可以成功编译了。

解决安装mingw32-make install报错问题

1、在执行mingw32-make install时报错:…\build\lib\pkgconfig\Qt5OpcUa.pc: No such file or directory
如下图:
在这里插入图片描述
2、其实安装就是把mingw32-make编译生成的内容复制到qt对应的目录下去,既然后安装失败,我们可以手动复制这些文件,具体包括:

1、build\lib\Qt5OpcUa.dll 复制到 D:\Qt\5.15.2\mingw81_64\bin\ 目录下
2、build\lib\Qt5OpcUa.dll.debug 复制到 D:\Qt\5.15.2\mingw81_64\lib\ 目录下
3、build\lib\Qt5OpcUa.prl 复制到 D:\Qt\5.15.2\mingw81_64\lib\ 目录下
4、build\lib\libQt5OpcUa.a 复制到 D:\Qt\5.15.2\mingw81_64\lib\ 目录下
5、build\lib\pkgconfig\Qt5OpcUa.pc 复制到 D:\Qt\5.15.2\mingw81_64\lib\pkgconfig\ 目录下
6、build\lib\cmake\Qt5OpcUa文件夹 复制到 D:\Qt\5.15.2\mingw81_64\lib\cmake\ 目录下
7、build\mkspecs\modules-inst* 复制到 D:\Qt\5.15.2\mingw81_64\mkspecs\modules\ 目录下
8、build\plugins\opcua文件夹 复制到 D:\Qt\5.15.2\mingw81_64\plugins\目录下
9、build\include\QtOpcUa文件夹(从qtopcua源码中找到所有头文件替换一下,这里比较麻烦) 复制到 D:\Qt\5.15.2\mingw81_64\include\目录下

3、复制完毕这些文件,就可以在qt项目的.pro文件中通过QT += opcua 引入opcua模块了。

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

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

相关文章

Python提取PDF文字的10个方法,OCR识别扫描版pdf,图片pdf格式的10种ocr汉字识别方法

Python 读取扫描版 PDF、图片 PDF 并进行 OCR 识别的方法: pytesseract:一种基于 Python 的 OCR 库,可用于识别扫描版 PDF 和图片 PDF 中的文本。 它可以使用 Google 的 OCR 引擎进行识别,也可以使用本地的 OCR 引擎进行识别。使…

阿里云免费ssl证书申请与部署

一、证书申请 1、找到 ssl 证书 2、点击选择SSL 证书 进入其管理控台 3、如果你还没有免费证书,选择购买即可,一个自然年内每个账号可以领取一次数量为20的免费单域名试用证书额度,我的已经购买过来,今年的,所以无法…

网络安全各类WAF绕过技巧

一、WAF绕过 1、脏数据绕过 即传入一段长数据使waf失效,从而实现绕过waf。某些waf处理POST的数据时,只会检测开头的8K,后面选择全部放过。 例如,当发现某网站存在一个反序列化漏洞时,但是无回显,被waf拦…

MQTT中间件Eclipse Mosquitto安装和使用(.asc文件)MQTT监控命令mosquitto_sub(mosquitto C++库源码编译)

昨天弄的,今天忘了不少。。。 文章目录 参考链接安装MQTT服务中间件安装启动与查询卸载与清理 MQTT C支持库安装(使C能使用相关库函数)离线安装(通过源码)ubuntu官网下载软件包编译mosquitto客户端库 mosquitto Docker…

后端SpringBoot应用向云原生K8S平台迁移

目录 一、引言二、方式1:在K8S上部署Spring Cloud Alibaba三、方式2:在K8S上部署Spring Cloud K8S3.1 第1次优化:移除Spring Cloud K8S DiscoveryClient 四、方式3:在K8S上部署SpringBoot应用4.1 第2次优化:移除Spring…

acwing提高--DFS之剪枝与优化

剪枝与优化的方法 1.优化搜索顺序 大部分情况下,我们应该优先搜索分支较少的节点 2.排除等效冗余 3.可行性剪枝 4.最优性剪枝 5.记忆化搜索(DP) 1.小猫爬山 题目https://www.acwing.com/problem/content/description/167/ 1.优化搜索顺…

《操作系统》期末最全复习题及解析

文章目录 选择题填空题简答题程序题综合题1.银行家算法2.页面置换算法3.进程调度算法4.磁盘调度算法5.求物理/逻辑地址6.分页存储管理7.可变分区分配算法 选择题 若信号量S的初值为2,且有3个进程共享此信号量,则S的取值范围是(B )…

单词长度统计,统计数据放入列表

输入一段英文计算每个单词长度,统计不含非英文字符,列表输出。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 地址…

AI与税务管理:新技术带来的新机遇和新挑战

本文作者:王伊琳 人工智能(Artificial Intelligence,AI)是指由计算机系统或机器人模拟人类智能的过程和结果,包括感知、理解、学习、推理、决策等能力。近年来,随着计算机技术、互联网平台、大数据分析等的…

AI工具 ChatGPT-4 vs Google Bard , PostgreSQL 开发者会pick谁?

在人工智能 (AI) 进步的快节奏世界中,开发人员正在寻找最高效和突破性的解决方案来加快和提高他们的工作质量。对于 PostgreSQL 开发人员来说,选择理想的 AI 支持的工具以最专业的方式解决他们的查询至关重要。 近年来,人工智能工具的普及率…

Redis如何做到内存高效利用?过期key删除术解析!

大家好,我是小米,一个热衷于分享技术的小伙伴。今天我要和大家探讨一个关于 Redis 的话题:删除过期key。在使用 Redis 进行数据存储和缓存时,我们经常会遇到过期数据的处理问题。接下来,我将为大家介绍为什么要删除过期…

很多人都在考的PMP认证到底有什么用?考试内容难不难?

工作几年之后,很多人都会选择提升自己,从而达到升职加薪的目的,而除了学习专业的技能外,考取一份含金量高的证书,也是非常重要的途径,PMP的证书在业界内的名气很大,该证书是由美国项目管理协会&…

JSP工作原理

一、JSP--一门远古的技术 JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。 JSP这门技术的最大特点在于,写JSP就行html,但是html只能提供静态数据,而Jsp技术可以嵌套…

【C++】容器篇(二)——List的基本概述以及模拟实现

前言: 在上期,我们学习了STL库中的第一个容器--vector ,今天我将给大家介绍的是 库中的另外一个容器--List。其实,有了之前学习 vector 的知识,对于List 的学习成本就很低了。 目录 (一)基本介…

Windows古老Bug损坏SSD/HDD,Win7到Win11全遭殃

去年微软确认了 Windows 12 将在2024年发布,Win11 的更新变为了小的功能更新。 今年3月 Win11 Moment 2 带来了包括任务栏在内的小更新,Moment 3 在这两天就会出来。 Win11 的更新明显放缓,也让用户松了口气。 因为自古以来 Windows 更新大…

5.7 文件I/O(文件IO打开和关闭)

目录 文件描述符 open open-示例1 open-示例2 close 笔记 文件描述符 每个打开的文件都对应一个文件描述符。 文件描述符是一个非负整数。Linux为程序中每个打开的文件分配一个文件描述符。 文件描述符从0开始分配,依次递增。 文件IO操作通过文件描述符来完…

【多线程】常见面试题

1.你知道线程与进程的区别吗? 进程是系统进行资源分配和调度的一个独立单位,线程是程序执行的最小单位,一个进程必然有一条线程(主线程)。进程有自己的内存地址空间,线程只独享指令流执行的必要资源&#…

毫米波雷达信号处理中的静止目标(静态杂波)滤除问题

说明 杂波及其消除是雷达信号处理中的一个很重要的话题,不过对于车载毫米波雷达,考虑到其应用场景和作用范围,关于杂波我们需要考虑的东西其实并没有比如预警雷达、机载SAR雷达等那么多。特别是车载4D雷达的出现,杂波这个概念已经…

【Linux系统编程(文件编程)】之创建、打开文件

文章目录 一、前言二、打开文件、创建文件1. man手册使用起来2. open函数参数 三、文件权限四、打开、创建 的代码示例五、文件创建、打开的补充O_EXCLO_APPENDO_TRUNCcreat创建文件函数 一、前言 linux下,一切皆文件。学好对文件的操作是很重要的,会在…