工业的

OPC UA c++ for Windows faq

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

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

将操作写入某些第三方服务器拒绝使用状态“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的固定大小。
试图发送或接收更大的消息将产生错误。尝试通过将太大的服务调用拆分为几个较小的服务调用或通过特定的配置选项(如Subscription::setMaxItemsPerPublish()或Application::setMaxMonitoredItemsPerService())来限制最大消息大小。

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

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

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

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

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

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

  • 消息大小
  • 时机
  • 资源

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

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

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

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

关于可选数据,尝试剥离不需要可选信息以减少消息大小并提高速度。
例如,在读取值时,可以通过不请求值的Server-和SourceTimestamps来减少每个传输值的大小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,你可以选择购买源代码许可,这使得它很容易移植到其他平台。make-file还可以与跨编译器一起使用。代码本身以平台独立的方式编写。

此外,softting还可以为特定的操作系统和硬件平台提供一个小型的集成项目。
此类集成项目的预先要求是:

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

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

如果您有该工具包的源代码,您可以下载所需的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:循环更新通常意味着为节点提供初始值会有较小的延迟,因此可能会报告初始NULL值。

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

IA支持反馈

我需要更多的帮助

OPC UA c++ SDK for Windows

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

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

X

Softing Industrial Specurant.

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

«