工业的

Windows常见问题解答OPC UA C ++

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

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

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

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

不要调用DataValue :: setServervalue and(),也许甚至是甚至没有写入的DataValue :: SetSourcetimeStamp(),分别使用空的DateTime变量分别调用这些方法以清除现有时间戳。

在处理大数据(许多变量时,应阅读,书写或订阅),必须考虑三个一般方面:

- 消息大小
- 时间
- 资源

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

通常,与几个较小的服务呼叫相比,在服务呼叫中处理的节点越多,消息开销越少,性能越好。

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

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

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

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

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

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

在处理大数据(许多变量时,应阅读,书写或订阅),必须考虑三个一般方面:

  • 消息大小
  • 定时
  • 资源

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

通常,与几个较小的服务呼叫相比,在服务呼叫中处理的节点越多,消息开销越少,性能越好。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- Windows,
- Linux.
- VxWorks。


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

此外,soft还可以为特定的操作系统和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内容的大小将导致问题!

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

最接近的方法是使用多个客户机:会话或服务器:端点和配置它们与单个应用程序实例证书(见客户::会话::setInstanceCertificate()和服务器::端点::setInstanceCertificate()),但所有将共享相同的ApplicationDescription和所有服务器将共享相同的地址空间。

笔记:应用程序实例证书应具有与ApplicationDescription相同的应用程序,因此所有证书都必须使用相同的应用程序。
通过将不同的应用分离成几个DLL(Windows)或共享对象(Linux),还有另一种可能的方法来在一个过程中生成多个应用程序。

不同的dll或共享对象有单独的代码,如果它们知道相同名称的符号,就不会发生冲突,但是将SDK作为静态库加载到dll或共享对象中以获得重复实例是很重要的。

笔记:对于Windows,二进制文件只能作为dll使用。为Windows生成静态库需要一个源代码许可。有关如何为静态库配置项目的其他帮助,请与支持部门联系。

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

Reply:循环更新通常意味着向节点提供初始值会有一个小的延迟,因此可能会报告初始的空值。

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

ia支持反馈意见

我需要进一步的帮助

Windows的OPC UA C ++ SDK

sdataFEED OPC UA c++ Server & Client SDK for Windows

基于Windows将OPC UA通信集成到应用程序中

X

Softing Industrial Specurant.

德国总部
+49 89 456 56-326
电子邮件请求
回调

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


«