- 博客(25)
- 资源 (3)
- 收藏
- 关注
原创 单例(Singleton)
单例模式(Singleton Pattern)是一种创建型设计模式,它保证一个类只有一个实例,并提供了一种全局访问点。这意味着无论在程序的哪个位置都可以通过该全局访问点访问这个唯一的实例。Singleton 模式在需要共享某些资源的情况下非常有用,例如数据库连接、日志记录器等。
2024-03-14 22:37:28
357
原创 原型(Prototype)
原型模式(Prototype Pattern)是一种创建型设计模式,它用于创建对象的一种机制,通过复制原型对象来创建新的对象,而不是通过实例化类来创建。这种方式可以在运行时动态获取新对象的类型,并且避免了子类和客户端的耦合。
2024-03-13 21:52:43
321
原创 工厂方法(Factory Method)
工厂方法模式(Factory Method Pattern)是一种常用的创建型设计模式。它通过定义一个创建对象的接口,但是将具体的实例化工作延迟到子类中去完成。这种方式可以使得一个类的实例化延迟到其子类。
2024-03-13 20:07:11
371
原创 生成器(Builder)
生成器(Builder)模式是一种常用的设计模式,用于创建复杂对象。该模式将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。在本文中,我们将详细介绍C++中生成器模式的实现方式,包括其设计原理、优缺点以及适用性。
2024-03-12 21:38:50
835
原创 抽象工厂(Abstract Factory)
本文介绍了C++中的抽象工厂模式,重点讨论了其设计原理、优点和应用示例。通过详细的代码示例,可以清晰地了解如何使用抽象工厂模式来实现灵活的对象创建和管理,提高代码的可扩展性和可维护性。
2024-03-12 21:00:23
305
原创 open62541 client读取server端自定义数据类型
平常我们客户端都是读取服务器中的标准数据类型,比如UA_Float、UA_String、UA_Int32…本章主要讲述客户端如何去读取服务器中的自定义数据类型。从open62541中提供的例程来看,在服务器和客户端中都添加了自定义的数据类型,这样操作很方便可以根据对应的数据类型直接获取其值。但实际上在大部分的使用场景中服务器和客户端都不是同一个人写的,所以如果服务端自定了某种数据类型,我们这边是没办法通过这种方式去获取的。......
2022-08-12 20:02:20
3355
2
原创 open62541 Alarm&Condition
编译open62541这里使用cmake进行编译,勾选选项如下这里需要将UA_NAMESPACE_ZERO选择为FULL选项。点击Generate后会发现生成不成功,如下可以看到提示信息我们缺少Opc.Ua.NodeSet2.xml这个NodeSet文件。这里我们去下载官方提供的一些NodeSet,其中就包括我们需要的这个NodeSet。NodeSet集下载地址下载完毕后可以看到其内容如下其中Schema文件夹中就含有我们需要的Opc.Ua.NodeSet2.xml,将Schema整个文件夹
2022-06-18 13:55:48
1001
原创 open62541 事件
监控项目能够监测到数据的变化,但是有时候并不能传递足够的信息,使用事件可以带有信息以及其可以在任何时候进行触发,同时其属性可以被客户端进行过滤,只接收自己感兴趣的特定属性。本文将描述server端事件的触发以及client端事件的过滤及接收。在使用之前我们需要编译open62541,我们使用CMake勾选对应的选项进行编译即可得到对应的.h和.c文件,勾选选项如下重新编译后即可得到对应.h和.c文件。这里以例程tutorial_server_events.c为例,描述server端去触发事件,代码如下
2022-06-18 09:58:23
1593
原创 opcua62541 历史数据存储与访问
概述open62541中提供了了历史访问服务,服务端可以暂存一些节点历史数据供客户端进行访问使用。本文将介绍一下服务端开启历史数据访问服务以及客户端访问历史数据的操作。编译在使用之前我们需要编译open62541,我们使用CMake勾选对应的选项进行编译即可得到对应的.h和.c文件,勾选选项如下这样我们的open62541.h和open62541.c中就有相对应的接口。服务端开启服务这里以提供的示例tutorial_server_historicaldata.c进行说明,其代码如下/* Th
2022-05-16 20:30:18
1739
原创 open62541 浏览服务器中节点
概述本文将讲述客户端连接服务器后使用UA_Client_Service_browse去浏览服务器中某个节点下的子节点示例首先我们创建一个简单的服务器#include "open62541.h"UA_Boolean running = true;int main(){ UA_Server *server = UA_Server_new(); UA_ServerConfig_setDefault(UA_Server_getConfig(server)); UA_Sta
2022-04-24 14:04:23
1335
原创 open62541 基于UDP发布订阅(二)
概述在基于UDP发布订阅(一)一文中讲述了基于无代理的OPCUA订阅/发布,在订阅过程中会发现我们需要知道发布的每一个节点信息,自己填充数据集元数据,包括设定名称、数据类型等信息,这样如果发布节点一多很容易发生问题。那有没有方法让我们订阅方能够知道发布方指定数据集下所有节点信息呢?答案是有的,opcua中提供了这样的一个操作,...
2022-04-22 19:07:12
2672
3
原创 阿里云MQTT使用教程
概述本篇主要讲述使用MQTTX软件与阿里云进行连接,上篇文章open62541 基于mqtt订阅发布中有有关MQTTX软件的下载以及使用。建立连接这里我们使用MQTTX与阿里云建立连接,阿里云地址:https://iot.console.aliyun.com/lk/summary/new这里我们进行注册以及实名认证后进行登录,登录后界面如下所示:一定要实名认证后才可以使用,使用支付宝实名认证很快也很简单登录后我们就可以开始操作了。添加产品点击公共用例后就会跳转到添加产品界面,如下图所
2022-04-20 20:54:24
11107
6
原创 open62541 基于mqtt订阅发布
windows下mosquitto使用1、下载mosquitto链接:https://mosquitto.org/download/2、安装安装完毕后进入安装目录,如下:3、配置在这个目录中打开命令行输入cmd,回车,命令行就弹出来了。设置用户名密码命令:mosquitto_passwd.exe -c pwfile.example -u mqtt这里使用123456作为密码设置端口默认端口:1883指定端口启动:mosquitto.exe -p < por
2022-04-19 21:07:56
1945
2
原创 open62541 基于UDP发布订阅(一)
概述PubSub在OPC UA应用程序中分为Publishers(发布者)和Subscribers(订阅者)。发布者是数据的来源,订阅者使用这些数据。PubSub中的通信是基于消息的,Publishers将消息发送给面向消息的中间件,PubSub支持两种不同的消息中间件变体,broker-less和broker-based两种形式。broker-less面向消息的中间件是能够路由基于数据报的消息的网络基础设备,Publishers和Subscribers使用数据报协议,如UDP;broker-based面
2022-04-13 18:24:43
3636
10
原创 QPainter绘图基本使用
简述QT中与绘图相关的类主要有QPainter和QPaintDeviceQPainter:绘制器,用来执行绘图的操作,如绘制线、圆、矩形… 可以类比成在黑板上使用的工具集合,比如尺子、圆规、粉笔…QPaintDevice:绘图设备,是一个抽象出来的绘图设备,实例化有QWidget、Qimage… 可以类比于一块黑板,可以在画圆,直线、矩形、写字…使用1、继承QWidget,重写paintEvent方法。2、在paintEvent函数中创建一个QPainter对象,并将该类指定为父对象。3、设置
2022-03-22 20:00:10
8127
1
原创 QT事件处理
一、QT事件管理在Qt中主要由QApplication、QGUIApplication、QCoreApplication三个类来管理处理事件,具体的继承关系如下QCoreApplication:主要用于提供无GUI程序的事件循环。QGUIApplication:主要用于管理GUI程序的控制流和主要设置。QApplication:该类专门为 QGuiApplication 提供基于 QWidget 的程序所需的一些功能,主要用于处理部件的初始化、最终化。二、事件传递Qt中的事件循环捕获各种事件,
2022-03-16 11:38:11
562
原创 qBreakPad使用(windows)
一、介绍Google breakpad是一个跨平台的崩溃转储和分析框架和工具集合。而且BreakPad本来就是为了解决C、C++异常捕获而开发的。BreakPad支持跨平台,很容易在Qt项目中使用,使跨平台的应用实现跨平台异常捕获。这里介绍一下Qt中qBreakPad的使用。二、编译源码获取链接:qBreakPad、BreakPad步骤1、下载qBreakPad源码进行解压,目录如下:2、下载BreakPad源码放入qBreakPad源码目录third_party\breakpad下,如
2022-03-15 16:35:55
1922
6
原创 QThread使用
QThread目前有两种使用方法1、继承QThread类,重写run方法2、使用movetoThread接下来大概讲讲其使用。继承QThread方式这种方式比较原始,也相对来说比较简单,继承后重写一下run函数,再启动线程就好了,废话不多说了,看下实例代码:class myThread : public QThread{ Q_OBJECTpublic: explicit myThread(QObject *parent = nullptr);signals:
2022-03-12 19:07:11
1366
原创 QT信号与槽
连接信号与槽接口QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)QT中绑定信号与槽的方式有两种:其一:connect(sender, SIGNAL(signal), receiver, SLOT(slot));其二:connect(sende
2022-03-09 09:06:02
1380
原创 open62541client保持与server端连接
问题描述Server与Client通过安全通道去进行通讯,在Server端有一个安全通道存活时间的设定,超时后安全通道会close导致Server会断开与Client端的连接。参数的定义如下: struct UA_ServerConfig { UA_Logger logger; ...... /* Limits for SecureChannels */ UA_UInt16 maxSecureChannels; UA_UInt32 maxSecurity
2022-03-08 15:11:58
2872
2
原创 open62541 client批量监测
添加监测变量接口:UA_Client_MonitoredItems_createDataChanges使用:服务器添加两个UA_UInt32类型变量节点,the.answer和myself#include "open62541.h"UA_Boolean running = true;UA_NodeId addTheAnswerVariable(UA_Server *server){ /* Define the attribute of the myInteger variable n
2022-03-07 14:17:26
1525
12
原创 PLOG使用
PLOG开源日志库使用获取PLOG下载地址:https://github.com/SergiusTheBest/plog下载好后进行解压出来的目录如下所示其中include目录就是我们需要加入到我们工程中的,samples目录存放PLOG的使用例程,具体的PLOG介绍和使用可以读README.md文件。使用第一步:添加头文件#include <plog\Log.h>第二步:初始化Loggerplog::init(plog::debug, “Hello.txt”);第三步:
2022-03-02 20:55:24
1248
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人