工业的

适用于Linux常见问题解答的OPC UA C ++

BadhostunkNown错误表示无法解析主机名。操作系统无法解析主机名,或者主机名不正确。
DNS没有正确配置。
“ping ”通常也不起作用。

在这种情况下,使用带有IP地址的URL来配置会话,或配置名称解析(或编辑“主机”文件)。

将操作写入某些第三方服务器拒绝使用状态“enumstatuscode_badwriteNotePported”拒绝。

并非所有OPC UA服务器都支持编写时间戳。这不是Softing OPC C ++ UA SDK或第三方服务器的错误,它是服务器所说的官方方式,它不支持编写时间戳。

不要调用DataValue::setServerTimestamp(),甚至也不要调用DataValue::setSourceTimestamp(),分别使用空的DateTime变量调用这些方法来清除现有的时间戳。

在处理大数据(大量变量,需要读取、写入或订阅)时,一般需要考虑三个方面:

——消息大小
- 时间
- 资源

所有OPC UA服务都旨在处理多个节点的请求和响应(如读取,写入和订阅),其中许多可以包含可选数据。

通常,与几个较小的服务调用相比,在服务调用中处理的节点越多(消息越大),消息开销就越少,性能就越好。

另一方面,要知道OPC UA堆栈有一个最大的消息大小,例如OPC UA c++ SDK的C堆栈有一个固定的16 MB大小。
尝试发送或接收更大的消息将产生错误。尝试通过将太大的服务调用拆分给几个较小的配置选项或特定的配置选项来限制最大消息大小(如订阅:: setmaxitemsperpublish()或应用程序:: setmaxmonitoredItemsperservice())。

将操作分成几个较小的可能会增加所需时间的总需要,但可能有助于防止超时问题,因为每个服务都可以更快地处理。

关于可选数据,尝试剥离不需要可选信息以减少消息大小并提高速度。
例如,当读取值时,您可以通过不请求值的服务器和SourcetimeStamps将每个传输值的大小缩小为16个字节。

传输的数据越多,处理数据的时间就越长。查看已配置的服务超时,它们可能需要增加以防止超时。

客户端本身不应该具有任何资源问题,因为客户端通常没有大的内存存储或价值监视器,但它会影响服务器的资源,如内存和CPU使用情况。

从理论上讲,服务器应该定义适当的限制以防止资源问题,但即使是客户机也可能考虑正确的使用方法。
例如,订阅服务需要一些存储器,用于缓冲和某些CPU用于在服务器上观察,其中读取服务只需要复制一次电流值,但不能仅收集更改的值。
尝试使用订阅仅用于定期更改节点或者尽快收到重要的数据(如警报和事件)。
更喜欢读取服务以接收必须收到的值很少。

在处理大数据(大量变量,需要读取、写入或订阅)时,一般需要考虑三个方面:

  • 消息大小
  • 定时
  • 资源

所有OPC UA服务都旨在处理多个节点的请求和响应(如读取,写入和订阅),其中许多可以包含可选数据。

通常,与几个较小的服务调用相比,在服务调用中处理的节点越多(消息越大),消息开销就越少,性能就越好。

另一方面,注意OPC UA堆栈有一个最大的消息大小,例如OPC UA c++工具包的C堆栈有一个固定的大小为16mb。
尝试发送或接收更大的消息将产生错误。尝试通过将太大的服务调用拆分给几个较小的配置选项或特定的配置选项来限制最大消息大小(如订阅:: setmaxitemsperpublish()或应用程序:: setmaxmonitoredItemsperservice())。

将操作分成几个较小的可能会增加所需时间的总需要,但可能有助于防止超时问题,因为每个服务都可以更快地处理。

关于可选数据,尝试剥离不需要可选信息以减少消息大小并提高速度。
例如,当读取值时,您可以通过不请求值的服务器和SourcetimeStamps将每个传输值的大小缩小为16个字节。

传输的数据越多,处理数据的时间就越长。查看已配置的服务超时,它们可能需要增加以防止超时。

客户端本身不应该具有任何资源问题,因为客户端通常没有大的内存存储或价值监视器,但它会影响服务器的资源,如内存和CPU使用情况。

从理论上讲,服务器应该定义适当的限制以防止资源问题,但即使是客户机也可能考虑正确的使用方法。
例如,订阅服务需要一些存储器,用于缓冲和某些CPU用于在服务器上观察,其中读取服务只需要复制一次电流值,但不能仅收集更改的值。
尝试使用订阅仅用于定期更改节点或者尽快收到重要的数据(如警报和事件)。
更喜欢读取服务以接收必须收到的值很少。

丢失发布通知或一个发布通知超过先前通知时发生此错误。这可能发生在网络上,例如,当包裹在不同的网络路由或包完全丢失时发送包时。对于此类情况,SDK提供了一个自动重新发布功能,可以由客户端::订阅:: setRepullOnterEnabled()启用。Republishing服务请求服务器重新发送缺少的发布响应以及SDK,然后确保以正确的顺序报告对API的发布响应。如果应用程序仅对最新通知感兴趣,则可以简单地忽略错误enumstatuscode_badequenceNvalid。

关闭期间调试断言指出工具包类实例仍然在unloadToolbox()期间存在。一般时,当卸载Toolbox()后工具包类实例被销毁时,这可能会导致内存泄漏或崩溃(访问释放资源)。

确保在unloadToolbox()之前销毁所有工具箱实例。

如果使用工具包类作为全局变量,则应更好地将它们替换为指针,该指针可以在LoadToolbox()和UnloadToolbox()之前分配和发布。

在调用unloadToolbox()之前也应该调用Application::stop()和Application::uninitialize()。
应用程序:: stop()将关闭端点,以这种方式也将关闭客户端连接。

关闭期间调试断言指出工具包类实例仍然在unloadToolbox()期间存在。一般时,当卸载Toolbox()后工具包类实例被销毁时,这可能会导致内存泄漏或崩溃(访问释放资源)。

确保在unloadToolbox()之前销毁所有工具箱实例。

如果使用工具包类作为全局变量,则应更好地将它们替换为指针,该指针可以在LoadToolbox()和UnloadToolbox()之前分配和发布。

在调用unloadToolbox()之前也应该调用Application::stop()和Application::uninitialize()。
应用程序:: stop()将关闭端点,以这种方式也将关闭客户端连接。

我们的SDKS基本架构是平台独立的。使用相同的代码基础,我们支持三个操作系统作为参考实现:

——窗户,
——Linux
- VxWorks。


这三层的唯一区别是一个小平台抽象层。SDK可以轻松移植在各种其他操作系统各自的硬件平台上。
对于我们的SDK,您可以选择购买源代码许可证,这使得它可以轻松地携带到其他平台。制作文件也准备准备好与交叉编译器使用一起使用。代码本身以平台独立的方式编写。

此外,Softing还可以为特定操作系统和HW平台提供小的集成项目。
这种综合项目的先决条件是:

- 访问安装的构建工具链(交叉编译器),并使用示例示例的刀具链使用
-对执行测试和的目标平台的访问
- 技术联系,协助我们有关构建工具链和测试平台的详细信息。

Integration项目包括为目标平台生成SDK二进制文件,构建客户端和服务器测试应用程序以在此平台上运行,并在目标平台上执行系统测试。测试期间发现的潜在问题将通过Softing解决和修复。如果您对一体化项目感兴趣,请联系我们的销售部门[电子邮件受保护]关于商业方面。

如果您有工具包的源代码,则可以将所需的openssl“.tar.gz”文件下载到 / source / core / openssl,从该文件夹中移动/删除先前的“.tar.gz”文件尝试使用不同的openssl构建工具包(请参阅openssl功能)。该工具包应该与大多数openssl版本兼容,否则它将报告编译错误。

如果您有Windows Toolkit的二进制版本,那么唯一的问题是,两个不同的OpenSSL DLL通常希望具有相同的名称。为了解决这个问题,您可以将库libeay32.dll和ssleay32.dll重命名为具有相等长度的名称,例如,libeayua.dll和ssleayua.dll。然后,您可以在编辑器中打开DLLS TB5STACK.dll(或tb5stackx64.dll)和重命名的ssleay32.dll并按新名称搜索并重命名原始DLL名称。

注意:只有在旧的和新的DLL名称具有相同的大小,更改DLL内容的大小将导致问题!

如果您有工具包的源代码,则可以将所需的openssl“.tar.gz”文件下载到 / source / core / openssl,从该文件夹中移动/删除先前的“.tar.gz”文件尝试使用不同的openssl构建工具包(请参阅openssl功能)。该工具包应该与大多数openssl版本兼容,否则它将报告编译错误。

如果您有Windows Toolkit的二进制版本,那么唯一的问题是,两个不同的OpenSSL DLL通常希望具有相同的名称。为了解决这个问题,您可以将库libeay32.dll和ssleay32.dll重命名为具有相等长度的名称,例如,libeayua.dll和ssleayua.dll。然后,您可以在编辑器中打开DLLS TB5STACK.dll(或tb5stackx64.dll)和重命名的ssleay32.dll并按新名称搜索并重命名原始DLL名称。

注意:只有在旧的和新的DLL名称具有相同的大小,更改DLL内容的大小将导致问题!

默认情况下,不可能在相同的过程中具有多个应用程序,因此限制是由几个单例引起的,这些单例是可从整个过程访问的。

最接近的方法是使用多个客户端:: Sessions或Server :: Endpoints并将其与单个应用程序实例证书配置(请参阅客户端:: session :: setInstanceCertificate()和服务器:: endpoint :: setInstanceCertificate()),但所有人都将共享相同的ApplicationDescription,所有服务器都将共享相同的地址空间。

注意:应用实例证书必须具有与ApplicationDescription相同的ApplicationUri,因此所有的证书必须使用相同的ApplicationUri。
还有一种可能的方法可以在一个进程中生成多个应用程序,方法是将不同的应用程序分离到多个dll (Windows)或共享对象(Linux)中。

不同的DLL或共享对象具有单独的代码,如果他们知道相同名称的符号,则不会冲突,但是要将SDK加载为DLL或共享对象的静态库以具有重复实例非常重要。

注意:对于Windows,二进制文件仅用为DLL。需要源代码许可证来为Windows生成静态库。有关如何为静态库配置项目的其他帮助,请联系支持。

问题:当相关节点循环更新时,服务器受监控的项目可能会报告无效的初始值。

回复:循环更新通常意味着向节点提供初始值可以具有小的延迟,因此可以报告初始空值。

您可以覆盖方法服务器订阅提供初始值以配置相关服务器受监视项,以从下一个数据更改中取出初始值而不是使用当前高速缓存值。

ia支持反馈意见

我需要进一步的帮助

OPC UA c++ SDK for Linux

dataFEED OPC SDK | dataFEED OPC UA c++ Server & Client SDK for Linux

OPC UA通信集成到基于Linux的应用程序中

x

软化的工业支持

美国,加拿大,墨西哥
(865)251-5244
(TN,诺克斯维尔)
电子邮件请求
打回来

«