工业的

OPC UA c++ for VxWorks 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的固定大小。
尝试发送或接收更大的消息将产生错误。尝试通过将太大的服务调用拆分给几个较小的配置选项或特定的配置选项来限制最大消息大小(如订阅:: setmaxitemsperpublish()或应用程序:: setmaxmonitoredItemsperservice())。

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

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

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

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

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

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

  • 消息大小
  • 时机
  • 资源

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

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

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

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

关于可选数据,尝试剥离不需要可选信息以减少消息大小并提高速度。
例如,当读取值时,您可以通过不请求值的服务器和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还可以与跨编译器一起使用。代码本身以平台独立的方式编写。

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

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

集成项目包括为目标平台生成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内容的大小将导致问题!

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

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

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

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

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

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

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

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

IA支持反馈

我需要更多的帮助

VxWorks的OPC UA C ++ SDK

DataFeed OPC UA C ++服务器和客户端SDK for VxWorks

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

X

Softing Industrial Specurant.

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

«