Open62541 NodeSet loader 编译与使用

news2024/10/7 2:22:13

        大多数的OPC UA 建模工具通常是将NodeSet 编译成为C 或者C# 的源代码,然后和Server 程序一起编译。比如uaModeler,Opc foundation 的UA ModelCompiler 以及Open62541 提供的nodeset_Compiler 都是如此,这种方式在载入配套规范的Nodeset 无疑是比较方便的,但是对于用户自定义的信息模型,需要灵活地加载。特别是嵌入式控制器,更需要动态地加载信息模型。

   值得庆幸的是,许多Opc Ua 的协议站提供了导入NodeNet的程序。例如在Python-opcua 中。使用:

   server.import_xml("../schemas/UA-Nodeset/DI/Opc.Ua.Di.NodeSet2.xml")
    server.import_xml("../schemas/UA-Nodeset/Robotics/Opc.Ua.Robotics.NodeSet2.xml")

     在Open62541 中是NodeSetLoader库。但是网络上有关它的编译和使用信息很少,为此,本博文记录编译的过程。

Step 1 编译和安装Open62541

下载Open62541 包,提示的编译方法是:

mkdir build
cd build
cmake ..
make 


        但是值得注意的是 node-loader 的编译过程中,需要引用Open62541 package ,如何实现他们的联系,十分重要。 否则会出现:

 解决的方法是将open62541 安装到usr/local.具体的方法是:make install

                 另一个问题是cmake 时 。UA_ENABLE_AMALGMATION 不能选择,要不然它将会Install 一个单一的open62541.h .无法被open62541_nodeset_loader 应用。

Step 2 下载 Open62541/open62541-nodeset-loader

下载地址:

GitHub - open62541/open62541-nodeset-loader: Library for loading opc ua nodesets from xml and sorting the nodes

安装依赖项。libxml-dev

sudo apt-get  install libxml2-dev

Step3 CMake

mkdir build
cd build
cmake ..
make

编译出来的是一个静态库,为了让应用程序能够使用这个库,也需要sudo make install 才行

yao@T3660:~/yao2023/C++/open62541-nodeset-loader-master/build$ sudo make install

Step 4 应用程序

#include <NodesetLoader/backendOpen62541.h>
#include <NodesetLoader/dataTypes.h>
#include <open62541/plugin/log_stdout.h>
#include <open62541/server.h>
#include <open62541/server_config_default.h>

static volatile UA_Boolean running = true;
static void stopHandler(int sign) {
  UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
  running = false;
}

int main(int argc, const char *argv[]) {
  UA_Server *server = UA_Server_new();
  UA_ServerConfig_setDefault(UA_Server_getConfig(server));
  //provide the server and the path to nodeset
  //returns true in case of successful import
  if(!NodesetLoader_loadFile(server, "../Opc.Ua.Di.NodeSet2.xml", NULL))
  {
    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "importing the xml nodeset failed");
  }
  UA_StatusCode retval = UA_Server_run(server, &running);
  //NodesetLoader is allocating memory for custom dataTypes, user has to manually clean up
  const UA_DataTypeArray *customTypes =
    UA_Server_getConfig(server)->customDataTypes;
  UA_Server_delete(server);
  NodesetLoader_cleanupCustomDataTypes(customTypes);
  return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
}

Step5 编译

 gcc ./OpcUaLoader.c -o OpcUaLoader -lopen62541 -lNodesetLoader -lxml2

显然,open62541 ,nodeset_loader 都是以静态库使用的。

Step 6 运行,使用uaExperter 查看结果。你看到了UA/DI 命名空间以及对象。

现在,我们能够在open62541 Server 中动态倒入NodeSet2 模型了。

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

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

相关文章

使用Jenkins构建发布一个简单的maven项目

上一章&#xff0c;完成了jenkins在ubuntu上的安装&#xff0c;这一章将使用单个Jenkins服务完成一个maven项目的打包和发布。 1、在Jenkins的管理页面中安装相关插件 用到的插件有&#xff1a;Maven Integration、Git、Publish Over SSH三个&#xff0c;在Dashboard -> M…

全国水系与流域(五级)矢量数据下载

1. 全国水系与流域&#xff08;五级&#xff09;矢量数据 全国共计3040条水系&#xff0c;4015个流域 全国水系与流域&#xff08;五级&#xff09;矢量数据 链接 解压密码&#xff1a;rserforum.com 说明&#xff1a;“流域等级划分包括1-5级&#xff0c;其中1-2级为一级支流…

从零开始理解Linux中断架构(12)--硬中断之中断控制器(GICV3)

前面我们搞清楚了elx_irq的外围部分,了解清楚了kernel_enter/kernel_exit大致的作用。本节我们进入到硬中断处理部分。硬中断处理程序的位置见下图: 硬中断处理主要的工作就是判断中断发起源,应答中断控制器,根据中断源查询出并调用该中断源的设备级处理函数。 前面…

pcl matlab 计算平面与空间三角形的交线

一、生成一个平面 过程&#xff1a; 单有法向量不能确定一个平面,至少还要有平面上的一个点的坐标才行 假如知道法向量n(A,B,C) 而平面过某点M(x0,y0,z0) 那么平面的方程为 A(x-x0)B(y-y0)C(z-z0)0 要在图中画出来&#xff0c;那么先要给x&#xff0c;y一个范围 举个离子&#…

Appuploader:常见错误及解决方法指南

目录 前言 一.登录apple官网&#xff0c;注册账号 二.下载Appuploader和登录 三.bundle ID 四.设备管理 五.证书管理 六.描述文件管理 七.打包 八.安装测试 &#xff08;PS&#xff1a;第一次安装成功会显示不受信任&#xff0c;进入设置-通 安全性”界面&#xff0c…

Interactive Natural Language Processing

本文是对《Interactive Natural Language Processing》的翻译。 交互式自然语言处理 摘要1 引言2 交互式对象2.1 人在环2.2 KB在环2.3 模型或工具在环2.4 环境在环 3 交互界面3.1 自然语言3.2 形式语言3.3 编辑3.4 机器语言3.5 共享内存 4 交互方法4.1 预训练语言模型4.2 提示…

Broken Gallery 靶场

主机发现 sudo nmap -sn 192.168.28.0/24 sudo nmap -sT --min-rate 10000 -p- 192.168.28.32 -oA nmapscan/ports sudo nmap -sT -sV -sC -O -p22,80 192.168.28.32 -oA nmapscan/detial sudo nmap --scriptvuln 192.168.28.32 -oA nmapsccan/vuln 访问80 图片下载下来 exift…

如何在 ZBrush 和 UE5 中创建精灵吟游诗人(P2)

小伙伴们大家好&#xff0c;下篇咱们精彩继续&#xff0c;主要是讲解角色建模完成后的重新拓扑、UV、灯光设置和渲染。 纹理的重新拓扑和UV 一切都在 Maya 中完成&#xff0c;重新拓扑是一个漫长的过程&#xff0c;因为角色有很多元素&#xff0c;值得庆幸的是&#xff0c;在…

模型训练-3D并行

1. 数据并行&#xff08;Data Parallel&#xff09; 1.1常规数据并行 有一张显卡&#xff08;例如rank 0显卡&#xff09;专门用于存储模型参数、梯度信息和更新模型参数。将训练数据分成多份&#xff08;份数等于显卡数量&#xff09;&#xff0c;每张卡上的模型参数相同&…

CSS编写的瓶颈在哪里?CSS预处理器登场解决你的燃眉之急!

文章目录 I. 引言解释CSS预处理器是什么提及CSS预处理器的好处 II. 为什么要使用CSS预处理器减少代码量变量Mixin函数 & 条件语句 提升CSS的可读性和维护性嵌套规则继承 方便维护加入Source Map方便调试自动前缀 III. 简介几个流行的CSS预处理器Sass介绍Sass的特性解释Sass…

69、基于51单片机智能交流电表蓝牙远程抄表OLED屏系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元…

404系列之404界面

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>404</title><style>* {border: 0;box-sizing: border-box;margin: 0;padding: 0;}:root {-…

PLC数据采集如何实现远程监控和远程维护上下载?

随着PLC在工业自动化控制领域得到越来越广泛的应用&#xff0c;PLC数据采集是也逐渐成为现代工业自动化的重要组成部分。通过采集PLC内的数据&#xff0c;可以实时监测控制生产过程及工艺参数&#xff0c;提高生产效率和产品质量&#xff0c;能够使企业能够获取关键生产数据&am…

面试中经常问到的线程安全的集合类,这样回答会显得很优雅

前言&#xff1a; 本篇文章主要讲解面试中经常问到的线程安全的集合类的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了&#x1f601; 以…

03【锁、事务原理、MVCC】

文章目录 一、MySQL锁机制1.1 锁的分类1.1.1 按操作分1.1.2 按粒度分1.1.3 按算法划分 1.2 MyIsam引擎锁1.2.1 准备数据1.2.2 MySIAM引擎写锁1.2.3 MySIAM引擎读锁1.2.4 小结1.2.5 表锁应用场景1.2.6 InnoDB的表锁1.2.7 MyISAM 的并发插入1.2.8 MyISAM的锁调度 1.3 InnoDB 引擎…

通达信超跌反弹选股公式,使用筹码函数WINNER

在前面的文章中&#xff0c;已经介绍了WINNER函数&#xff0c;不过对于如何使用函数&#xff0c;当时只进行了简单举例&#xff0c;没有做深入研究。本文将结合WINNER函数的特性&#xff0c;编写通达信超跌反弹选股公式。 WINNER函数表示获利盘比例&#xff0c;取值范围是0-1&…

【Leetcode】17.电话号码的字母组合

一、题目 1、题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例1: 输入:digits = "23" 输出:["ad","ae",…

剑指 Offer 38: 字符串的排列

这道题一看就是使用回溯法&#xff0c;但是由于是排列&#xff0c;所以索引和组合不同&#xff08;组合的索引是从start标志位开始&#xff09;&#xff0c;排列是从下标为0开始&#xff0c;并且需要借助排序&#xff01;所以需要先转化成将String转化为char[]类型&#xff0c;…

微信小程序开发流程

如今微信小程序定制需要一个开发周期和流程&#xff0c;比起模板来说&#xff0c;定制开发的流程更加复杂。做微信小程序定制开发&#xff0c;首先要做的工作就是确定需求和框架的确立&#xff0c;比如一个社交小程序&#xff0c;可能考虑的问题不只是用户之间消息沟通&#xf…