问题标签 [open62541]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
846 浏览

c++ - 使用 CMake 将 open62541 库构建为外部库

我想使用 CMake 在 Visual Studio中将 open62541库包含到我现有的 C++ 项目中。open62541 本身使用 CMake 作为构建工具。项目结构:

我想与我的项目一起构建 open62541,以便生成 open62541.h 文件。如何使用 CMake 做到这一点?

0 投票
1 回答
454 浏览

libev - 将 open62541 集成到现有的 libev 事件循环中

我有一个现有的应用程序,它广泛使用 libev 的事件循环。我现在想添加 OPC UA 服务器功能,但不确定如何最好地将 open62541 事件循环集成到 libev 中。

想到以下可能性:

  1. UA_Server_run_iterate从时间为 0 的 libev 事件循环中调用。waitInternal这意味着服务器永远不会休眠(在 中轮询 open62541 ev_idle),或者来自 OPC UA 客户端的请求将经历高达 50 毫秒的额外延迟(默认open62541 的最大等待时间)。
  2. 修补 open62541 以允许服务器网络层检索当前正在使用的文件描述符(serverSockets 和连接)。这将允许为这些文件描述符添加 libev 事件,而这些事件又可以UA_Server_run_iterate仅在必要时轮询。
  3. 实现一个使用 libev 的自定义服务器网络层。这似乎意味着相当多的代码重复......是否有任何示例/教程用于实现自定义网络层?
  4. 在单独的线程中运行 open62541 事件循环。我真的真的很想避免这种情况,因为像 libev 这样的事件系统的全部目的是避免与异步操作相关的问题。例如,来自 open62541 的所有回调都必须与主 libev 线程同步。

就复杂性和性能而言,您认为上述哪个选项“最好”?

您能想到上面未列出的任何其他选项吗?


也张贴在 open62541 邮件列表上。

0 投票
1 回答
118 浏览

c - “UA_ReadRequest_deleteMembers”错误问题的 OPC-UA 函数

大家好我有一个问题

我为客户端使用 OPC-UA,我有一些问题

这是问题代码

我想清除UA_ReadRequest requestPos;,所以我使用UA_ReadRequest_deleteMembers(&requestPos);,但编译器说:“****.exe 导致断点。发生”。我无法理解这个错误。

在此处输入图像描述

0 投票
1 回答
3393 浏览

c# - 使用 Visual Studio 2017 构建 open62541 DLL

您好社区我想使用 open62541 lib 为 OPC UA 服务器编写 UI。输入关闭软件应该读取文本文件并将数据通过服务器投射到已经可用的客户端。

卡在需要编译 dll 文件以便在 windows 窗体项目中进一步使用它的阶段。

有一些信息提到 Davy Triponney 使用 Visual C++ 2013 https://github.com/open62541/open62541/wiki/Using-open62541-from-C%23编译它

但我对 VS 2017 没有运气。

我的进步顺序是:

  • 已经从https://open62541.org/下载了 .h 和 .c windows 64 位文件
  • 创建动态链接库(DLL)项目。
  • 将.h和.c文件附加到项目中,选择64编译器:

项目

在构建时收到很多警告和错误:

问题是我如何使用 Visual Studio 2017 编译 open62541 c 代码 dll 文件以在 Windows 窗体 C# 应用程序中将其用作服务器?

0 投票
1 回答
682 浏览

gcc - open62541:构建 PubSub 示例时出错

目前,我正在尝试构建 open62541 实现的 PubSub 示例。我已经多次阅读有关如何构建示例的文档,但我无法弄清楚。

我试图编译 PubSub 教程示例。这包括 tutorial_pubsub_publish.c 和 tutorial_pubsub_subscribe.c 文件。克隆存储库后,我按如下方式构建了库:

首先,我编译了有效的发布示例:

然后,我尝试以同样的方式编译订阅示例:

这产生了很多错误-都说“没有这样的文件或目录(第一个错误是#include“ua_architecture_base.h”)然后我尝试用ua_architecture_base.h编译它并得到其他丢失的文件或目录错误等等...

我也尝试编译 open62541 的整个包含文件夹,但我也得到“没有这样的文件或目录”错误:

我还注意到在 open62541 master 提供的所有示例中,tutorial_pubsub_subscribe.c 文件是唯一不包含 open62541.h 文件夹的示例。相反,它包含一些其他头文件:

那么如何编译和运行 tutorial_pubsub_subscribe.c 示例,为什么订阅者示例不包含 open62541 头文件?

0 投票
2 回答
1287 浏览

c++ - OPC-UA open62541 sdk 运行服务器后动态添加变量节点

阅读 OPC-UA 基础和 OPC-UA open62541 sdk 的文档和示例,变量节点总是添加在开始运行服务器的语句之前。是否可以在服务器启动后添加它们?如果我更改不起作用的语句的顺序。

和我一起想想以下情况:一旦我们开始异步运行应用程序/软件(而不是服务器),我需要做一些 http 请求。然后服务器启动,在我的http请求完成后,我根据网络返回的信息添加了变量节点。

我对代码发表了一些评论,以阐明我想要做什么。

0 投票
1 回答
542 浏览

server - open62541:发布温度值

我目前正在尝试使用名为 open62541 的 OPC UA 实现发布日期时间值和温度值。

为此,我一直在使用来自 open62541 github 存储库的测试示例,因为它已经发布了当前日期时间。我试图为温度值添加另一个 DSF(DataSetField),就像它与日期时间一起显示的那样。但它不会发布它。

以下代码片段显示了我如何定义添加 DataSetFields 的方法:

在主函数中,然后我调用这两个方法将它们添加到 PDS(PublishedDataSet):

温度值是一个简单的双精度值,那么我在这里做错了什么?也许错误在订阅的客户端应用程序中?

为了订阅已发布的值,我还使用了 github 上的示例(文件名为 tutorial_pubsub_subscribe.c),我正在尝试按如下方式解析值:

有什么建议么?非常感谢您,如果您需要有关此问题的更多详细信息,请告诉我,我将进一步编辑问题!

编辑:如果您想查看整个示例代码,请查看以下链接:对于发布应用程序: https ://github.com/open62541/open62541/blob/master/examples/pubsub/tutorial_pubsub_publish 。C

对于订阅应用程序:https ://github.com/open62541/open62541/blob/master/examples/pubsub/tutorial_pubsub_subscribe.c

0 投票
1 回答
402 浏览

raspberry-pi - Wireshark 接收 UDP 多播包,但订阅客户端应用程序没有?

描述

我目前正在尝试在树莓派上发布时间戳并在基于 Windows 的 PC 上订阅它们。为此,我将 Raspberry Pi 和 Windows PC 都连接到了 Switch。因此,如果我在 Raspberry Pi 上启动发布示例,我已经可以在我的 Windows PC 上的 Wireshark 中看到传入的 UDP 多播包。所以理论上,订阅应用程序也应该能够接收包并将它们打印到控制台。但事实并非如此。订阅示例不会向控制台打印任何时间戳,这意味着它不会接收任何 UDP 多播包。这是为什么?如果我在 Windows PC 上同时运行发布和订阅示例,它可以工作......

我可能有一个线索可能是什么问题:如果我在我的 windows pc 上运行两个发布/订阅示例,它们都会在控制台中打印出来,它们正在监听 opc.tcp://mypc:4801/ 但是当我运行它说 raspi 上的发布示例正在侦听 opc.tcp://raspberrypi:4840/ 但订阅示例仍在侦听 opc.tcp://mypc:4801/ 。

有什么建议么?防火墙可能是这里的问题吗?任何建议都非常感谢!

附加信息

在下图中,您可以看到树莓派的 IP 地址: 在此处输入图像描述

下面你可以看到在 Wireshark 中传输的 UDP 多播包。它们确实来自树莓派,因为 IP 地址匹配: 在此处输入图像描述

0 投票
0 回答
390 浏览

c - 将变量更新/写入到 ObjectNode

我正在尝试构建一个监控 REST API 的 OPC UA 服务器。对象类的代码是从 XML 文件生成的,如 open62541 的文档中所述。

我也尝试使用父 ID,我还尝试浏览两个节点的引用并在 write 函数中使用这些 NodeId,但没有任何效果。尽管 nodeIter() 中的 retval 始终为 0,但我总是收到错误“写入请求返回状态代码 BadNodeClassInvalid”。

0 投票
1 回答
745 浏览

linux - 如何编译 Open62541 教程中的示例 xml 文件?

我在open62541库官方指南的第 11 章。html 版本在这里。在尝试任何自定义之前,我只想以最基本的方式尝试此功能,方法是将他们的示例 xml 文件“编译”成 C 代码,然后可以使用 GCC 编译并作为 OPC 服务器运行。(如果您想继续学习,请从主页下载完整的源代码——nodeset 编译器工具就在其中。)

我在基于 Debian 的环境中(仅限 CLI)。我复制了一份 myNS.xml 并将其直接保存在路径~/code/open62541-open62541-6249bb2/tools/nodeset_compiler/中,这也是本示例中我当前的工作目录。我尝试使用与教程中使用的完全相同的命令来使用节点集编译器:python ./nodeset_compiler.py --types-array=UA_TYPES --existing ../../deps/ua-nodeset/Schema/Opc .Ua.NodeSet2.xml --xml myNS.xml myNS

我得到的错误信息是这样的:

知道我可能做错了什么吗?

更新:

好的,我发现我的 Opc.Ua.NodeSet2.xml 文件有问题,我已更正。如果您跟随并想获取我拥有的文件的版本,您可以在此处获取。

但现在我有这个问题:

更新_2:

我尝试在我的 Windows 笔记本电脑上做同样的事情,这是我得到的错误: