
open62541
文章平均质量分 75
爱就是恒久忍耐
纸上谈来终觉浅,绝知此事要躬行
展开
-
华为云云耀云服务器L实例评测 | 开启OPC UA之旅
在华为云云耀服务器L实例上开启OPCUA之旅。原创 2023-09-10 00:08:13 · 1600 阅读 · 1 评论 -
学习open62541 --- [78] 单线程和多线程的使用场景
单线程和多线程的使用场景原创 2023-06-18 19:11:04 · 1988 阅读 · 8 评论 -
学习open62541 --- [77] 修改String类型变量的注意点
修改String类型变量的注意点原创 2023-05-21 15:51:50 · 1743 阅读 · 0 评论 -
学习open62541 --- [76] 使用智能指针处理内存释放问题
使用智能指针处理内存释放问题原创 2023-05-20 20:28:56 · 1771 阅读 · 2 评论 -
学习open62541 --- [1] 初始
万事开头难原创 2019-08-11 15:22:18 · 38213 阅读 · 62 评论 -
学习open62541 --- [2] 使用UaExpert
UA Expert是OPC UA Client的GUI工具,本文主要学习使用UaExpert原创 2019-08-17 11:16:46 · 29340 阅读 · 17 评论 -
学习open62541 --- [3] 类型系统初探
OPC UA类型系统原创 2019-08-25 22:11:44 · 13427 阅读 · 21 评论 -
学习open62541 --- [4] Server添加变量
本教程主要讲述如何在OPC UA Server端添加一个变量,并修改其值,以及OPC UA Client端如何与这个变量交互。一 Server添加变量原创 2019-09-23 22:36:45 · 14029 阅读 · 66 评论 -
学习open62541 --- [7] Server添加对象和对象类型
上一节里,我们在OPC UA Server端添加了一个变量,本节主要讲述如何给变量添加回调函数。原创 2019-10-19 21:50:47 · 8497 阅读 · 60 评论 -
学习open62541 --- [5] Server连接变量和物理过程
在基于OPC UA的架构里,servers一般都是和信息资源靠的很近,也就意味着在工业环境中,servers和物理过程靠的很近,而clients在运行时不断的消费数据。以上是open62541官方教程中翻译过来的,其原文如下,In OPC UA-based architectures, servers are typically situated near the source of info...原创 2019-10-20 22:56:28 · 9545 阅读 · 46 评论 -
学习open62541 --- [6] Server添加变量类型
变量类型有三种功能:约定该类型变量的数据类型,取值范围和数组维度。通用类型也是有这样的约束(如UA_UInt32,会有允许的数据类型、取值范围等),所以编写代码来自定义类型时,这个类型可以适用于所有的实例;提供一个合理的默认值;使能基于该类型的变量的一个语义解释。(这个不太懂是什么意思)一 自定义2D空间坐标类型本节通过代码自定义一个2D空间的坐标类型,即{x, y}这样,2个do...原创 2019-10-21 22:35:57 · 5882 阅读 · 13 评论 -
学习open62541 --- [8] Server添加方法
在OPC UA信息模型中,有些对象可能会包含方法,这个和面向对象编程中对象包含方法是类似的。方法使用方法节点表示,多个不同的对象可能会引用相同的方法节点。方法和对象之间的关系我们用C++举个例子了来阐述下,#include <iostream>typedef int (*func)(int, int);int test(int data1, int data2){...原创 2019-10-28 23:02:13 · 6533 阅读 · 3 评论 -
学习open62541 --- [9] Server监测变量值
本文讲述OPC UA Server如何监测(monitor)变量值。原创 2019-11-03 11:51:27 · 8686 阅读 · 35 评论 -
学习open62541 --- [10] Client监测变量值
本文主要讲述OPC UA Client如何监测Server端变量节点。原创 2019-11-09 12:15:20 · 12447 阅读 · 44 评论 -
学习open62541 --- [11] 产生事件
本文讲述如何在OPC UA Server端产生事件(event)。一 为何要使用事件上2篇文章中我们讲述了监测变量值,其优点就是可以提高效率节约资源,但是也有缺点:有一定的延迟,这个和采样时间的设置有关假如监测多个互相有关联的变量,当只有一个发生变化时,回调函数里只会输出这一个变量的值,但是这个时候我们想看到所有其它变量的值(虽然没有发生变化),来综合分析这些数据事件(event)...原创 2019-11-16 11:15:35 · 6843 阅读 · 19 评论 -
学习open62541 --- [12] 加密(使用mbedTLS)
使用mbedTLS进行加密通信。原创 2019-11-27 23:19:38 · 10975 阅读 · 70 评论 -
学习open62541 --- [13] 历史数据
当我们使用OPC UA时,有时想观察一个变量的变化情况,就需要记录其历史数据,最后呈现出一个随时间变化的趋势图,下面就讲述如何在open62541里历史数据功能。一 配置open62541在open62541源码目录下的CMakeLists.txt里找到下面2个option,把默认值改为ON,UA_ENABLE_AMALGAMATIONUA_ENABLE_HISTORIZING第2...原创 2020-01-12 15:10:04 · 4971 阅读 · 14 评论 -
学习open62541 --- [14] 路径搜索
本文主要讲述open62541里的路径搜索,这功能具体是干啥的呢?用过UaExpert的都看过如下这个界面,这是OPC UA Server的地址空间可以看出OPC UA Server的地址空间是用层级目录组织的,英文叫hierarchy,根节点是Root。每个节点都会有个路径,如Server的路径就是/Root/Objects/Server。而open62541的路径搜索就是通过路径去获取目标...原创 2020-01-18 17:49:30 · 6363 阅读 · 36 评论 -
学习open62541 --- [15] 使用建模工具UaModeler
讲述如何使用建模工具UaModeler原创 2020-01-31 17:05:06 · 14002 阅读 · 80 评论 -
学习open62541 --- [16] 修改默认端口
这篇比较简单。一 问题我们在使用open62541时,server启动时默认端口都是4840,下面是典型的server启动代码int main(void) { UA_Server *server = UA_Server_new(); UA_ServerConfig_setDefault(UA_Server_getConfig(server)); UA_Statu...原创 2020-02-06 14:12:57 · 3083 阅读 · 3 评论 -
学习open62541 --- [17] DisplayName和BrowseName的区别
本文主要讨论OPC UA中DisplayName和BrowseName的区别一 问题以变量为例,当我们添加变量时,在变量属性里会设置其DisplayName,接着调用UA_Server_addVariableNode()时会传递其BrowseName,典型代码如下,static void addVariable(UA_Server *server) { /* Define the...原创 2020-02-17 22:16:13 · 3255 阅读 · 0 评论 -
学习open62541 --- [18] Server与Server间交互
在之前的文章中,讲述的都是一个client和一个server,组合成一个C/S架构,但是在实际工程中,可能会出现多个OPC UA Server,如下图,展示的是OPC UA在IIOT中的应用,可以看出有的Server既充当Server也充当Client,只有这样才能让多个Server互联,最后形成一个大的OPC UA网络。对于这种情况,OPC UA文档已经描述了这种架构,先是简单的Serve...原创 2020-02-18 22:56:41 · 3357 阅读 · 13 评论 -
学习open62541 --- [19] 使用Visual Studio编译及使用open62541
Windows下如何使用Visual Studio来编译open62541,以及基于open62541去开发OPCUA程序原创 2020-02-28 21:57:45 · 15167 阅读 · 54 评论 -
学习open62541 --- [20] 标准Reference类型
在OPC UA Server中,所有Node之间都是使用Reference进行连接的。Reference是分类的,在之前的系列文章中,我们也已经见过几种Reference了,本文就专门讨论所有标准Rference类型。一 Reference的使用方式如果看过前面的系列文章,那么就会对Reference的使用方式有一定的理解,如下图,节点A通过一个Reference指向B,那么对于这个Re...原创 2020-02-29 14:01:03 · 4007 阅读 · 3 评论 -
学习open62541 --- [21] 使用用户名和密码登录
本文主要讲述如何关闭匿名登录,以及如何使用用户名和密码去连接Server。原创 2020-03-08 15:29:15 · 9621 阅读 · 65 评论 -
学习open62541 --- [22] 再谈事件
之前已经写了一篇文章简单讲述了事件的产生,本文继续探讨事件。一 事件基类型BaseEventType事件有很多种,每一种都有对应的类型,它们共同的基类型是BaseEventType,这个类型定义了一个事件所有的通用特性,它是一个Abstract类,不能直接实例化对象,只能被继承。BaseEventType的定义如下,这里只需BaseEventType使用HasProperty指向的变量...原创 2020-03-11 23:03:31 · 4288 阅读 · 8 评论 -
学习open62541 --- [23] 使用View
当地址空间中Node比较多时,在地址空间中去寻找需要的Node,就可能会比较慢,另外,地址空间中的Node可能大部分都不是我们需要的,我们只关心一部分Node,这个时候就可以使用View来简化操作。View可以从地址空间中抽出感兴趣的Node作为子集,然后每次在这个view下就可以访问我们感兴趣的Node了。另外,整个地址空间本身就是一个默认的View。下面就来看看如何使用View (整体代码...原创 2020-03-17 23:07:10 · 2156 阅读 · 5 评论 -
学习open62541 --- [24] 定时执行任务
open62541提供定时执行任务功能,这个功能很实用,在前面的文章中,有时我们想定时的去修改一些变量节点的值,都是开一个线程去做的,相对来说有点小麻烦。使用open62541自带的定时器就会简单很多。下面来看下如何使用open62541提供定时功能。一 相关api首先要知道一些关于定时任务的简单知识,定时任务分为定时执行一次(也叫one shot)和定时循环执行(有个定时周期)2种...原创 2020-03-22 16:24:38 · 2788 阅读 · 0 评论 -
学习open62541 --- [25] 使用建模工具SiOME
讲述如何使用建模工具SiOME原创 2020-03-24 23:05:32 · 7470 阅读 · 30 评论 -
学习open62541 --- [26] Discovery(使用LDS)
Discovery中文的意思是发现,在OPC UA中Discovery是用来发现网络中的存在OPC UA Server,是个比较实用的功能。在之前的系列文章中,使用Client去连接Server,必须事先知道Server的地址和端口号,然后去连接Server,如果网络中存在多个Server,且Client不知道它们的地址和端口号,那么如何进行连接呢?这就需要Discovery功能了。下面就介绍...原创 2020-04-05 13:48:04 · 4485 阅读 · 4 评论 -
学习open62541 --- [27] Discovery(使用LDS-ME)
在上一篇文章中,我们讲述了如何使用LDS进行Discovery,本章讲述如何使用LDS-ME进行Discovery,ME是Multicast Extension的缩写,即多播扩展。既然使用LDS可以Discovery,那么为何还要使用LDS-ME呢?这个和应用场景有关,LDS:Client不知道网内有哪些Server,但是知道LDS地址,而且只有一个LDS,于是通过LDS去获取注册过的Ser...原创 2020-04-08 22:18:01 · 2146 阅读 · 1 评论 -
学习open62541 --- [28] NodeSet释义
NodeSet就是节点集合的意思,NodeSet可以提供一套设置好的节点,用户可以直接拿来使用,不用自己去重新创建,每个NodeSet有一个自己的NameSpace。本文主要讲述NodeSet在open62541里是如何起作用的以及使用方法。一 open62541默认提供的NodeSet打开open62541源码根目录下的CMakeLists.txt,找到如下语句set(UA_NAMES...原创 2020-04-25 14:53:10 · 4224 阅读 · 8 评论 -
学习open62541 --- [29] 数据源的使用细节
数据源(data source)的使用细节原创 2020-05-23 14:09:43 · 4886 阅读 · 22 评论 -
学习open62541 --- [30] StatusCode便捷查看
OPC UA提供了很多服务,当使用这些服务时,一般都会有个返回值,表示使用过程中是否发生错误,这个返回值就是StatusCode,在open62541里其类型是UA_StatusCodetypedef uint32_t UA_StatusCode;从定义可以看出其实际类型是一个32位无符号整型数,每一个StatusCode都有一个特定值。下面就看下在open62541里其实如何定义和查看的。open62541中的情况在编译open62541时,会通过tools\schema\StatusCod原创 2020-05-27 20:56:04 · 2319 阅读 · 7 评论 -
学习open62541 --- [31] 正确显示中文字符
本文主要讲述在win10下如何正确的显示中文字符。原创 2020-06-08 21:18:40 · 2323 阅读 · 2 评论 -
学习open62541 --- [32] 正确获取系统时间
client和server进行通信时,有时会要求获取server的系统时间,如用来查看某一事件发生的具体时间。在之前的系列文章中获取系统时间一直用的是UA_DateTime_now(),这个API获取的时间是UTC时间,即世界协调时间,而我们身处中国,其具体时间为:中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。PS:这个8是指8小时下面首先让我们看下UTC时间的打印表现,以及如何获取正确的系统时间。一 现原创 2020-06-13 12:02:18 · 1923 阅读 · 2 评论 -
学习open62541 --- [33] 加密(使用OpenSSL)
使用openssl进行加密原创 2020-07-12 15:33:52 · 10664 阅读 · 99 评论 -
学习open62541 --- [34] 保持连接
如何实现Client在安全通道超时前自动重新创建安全通道,然后保持与Server的连接。原创 2020-08-13 21:29:13 · 5138 阅读 · 26 评论 -
学习open62541 --- [35] Server异步执行method
本文主要讲述Server端如何异步(async)执行method原创 2020-08-16 11:58:28 · 2056 阅读 · 3 评论 -
学习open62541 --- [36] Client异步执行method
讲述Client如何异步执行Server提供的方法原创 2020-08-23 23:12:18 · 2344 阅读 · 2 评论