工业的

OPC UA .NET for Windows常见问题解答

如果您将应用程序初始化为客户端(或服务器和客户),请检查。请参阅ApplicationDescription :: setapplicationtype()。
如果没有正确设置,一切似乎都工作得很好,但是没有任何客户端特定的API回调将被调用。
在未来的版本中,我们将为此类问题报告一些配置错误。

我们发现Visual Studio 2013的64位编译器在优化方面有一个bug。在SDK代码中至少有一个地方被检测到,在那里优化器产生了错误的代码。
我们建议使用编译器选项“/ od”(禁用优化“)来避免错误的代码。

有些操作在DllMain中调用是有风险的,比如与其他线程同步,这可能会导致死锁(参见msdn.microsoft.com/en-us/library/windows/desktop/dn633971%28v = vs.85%29.aspx)。SDK执行这种同步会导致死锁。
要解决这个问题,在加载dll之后和通过函数或静态方法卸载dll之前设置和卸载SDK。

SDK安装包安装有限时但完全的SDK包,可用于开发OPC UA应用。如果不输入客户端或服务器许可,基于SDK的应用程序将在运行90分钟后停止工作。在Windows系统上,一个消息框将通知用户演示版本的运行时间。在重新启动应用程序之后,90分钟计时器将重新启动。

要删除应用程序中的运行时限,必须在初始化应用程序期间向SDK提供相应的许可证密钥。可以使用不同的许可证密钥单独启用不同的工具包功能。

许可证键取决于目标系统。这意味着,例如,Windows的服务器许可证将不会在VxWorks服务器应用程序中解锁服务器功能。

笔记:
许可证密钥包含到期日期,具体取决于您的SDK维护合同订阅。只有SDK版本在许可证密钥到期结束前释放,可以激活或可以使用许可证密钥安装源代码。

可用功能是:

UA Server:启用OPC UA服务器的所有必需功能。
UA客户端:启用OPC UA客户端的所有必需功能。

注意:如果不止一个功能应使用(例如,如果你在同一个模块中同时开发客户端和服务器端),所有必需的功能都必须单独启用。

激活一个许可证
以下代码说明了如何激活许可证密钥xxxxx-xxxx-xxxxx-xxxxx-xxxxx:
对象点<应用程序>应用程序=应用程序=应用程序:: instance();
应用程序- > activateLicense (EnumFeature_Server _T (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX "));
应用程序 - > activatelicense(enumfeature_client,_t(“xxxxx-xxxxx-xxxxx-xxxxx-xxxxxx”);

是否有可能在没有应用程序证书的情况下运行OPC UA应用程序?

不,因为当前版本的OPC UA规范要求,所有OPC UA应用程序都有一个在创建会话时交换和验证的证书。

除了参考专用信息之外,浏览服务还仅支持每个节点类型必须具有的强制性基本节点属性(NodeID,NodeClass,Browsename,DisplayName)。

只能通过读取服务处理所有可选和类型特定的属性。

SDK是否支持HTTPS UA二进制和HTTPS UA XML方面?
SDK仅支持HTTPS的二进制编码。

SDK是否支持VPN隧道的HTTPS协议?
SDK无法建立VPN连接。这必须由第三方程序来完成。
一旦建立了VPN连接,目标网络就像本地网络一样,OPC UA通信应该可以工作。我们还没有测试这种VPN连接场景。

SDK如何支持HTTPS证书(客户端和服务器端)?
PKI配置,自签名,CA-Chain等
在OPC UA中,每个应用程序都需要具有应用程序实例证书,该证书用于与安全性相关的任何内容。
这个特定的应用程序实例证书也用于HTTPS通信。
SDK支持所有常见的证书特性(自签名证书、ca链、撤销列表等)。


注意:由于HTTPS始终加密,必须在第一次通信之前建立客户端和服务器之间的信任关系。
其他一些OPC UA客户端在使用通常不安全的服务时可能会出现问题
(如GetEndPoints)在安全的HTTPS通道上。

混合属性和属性是常见的误解。

属性是某些数据,绑定到某个节点类(对象,ObjectType,变量,variableType,引用键,数据类型和视图)。可用的属性是固定的,因此不能扩展它们以包含其他数据。
属性的语法含义与Attributes几乎相同,但属性是完全不同的节点(节点类Variable的节点),具有自己的属性。Property节点通过HasProperty引用从父节点引用。
要读取属性值,您必须获取该属性的NodeID(例如,通过TranslateBrowSpathstonStonds)并在value属性上执行读取。

通常在动态加载DLL库时,在DLLMain函数期间完成整个初始化。没有较少,在dllmain中调用一些操作是非常危险的,如与其他线程同步,这可能导致死锁(请参阅msdn.microsoft.com/en-us/library/windows/desktop/dn633971%28V=VS。85%29.aspx。
LoadToolbox()函数可以实现这种同步,这可能会导致这种死锁。

要解决问题,请在卸载DLL之前分别在加载DLL后调用LoadToolbox()或unloadtoolbox()。这可以通过功能或静态方法完成。还要记住,在调用unloadToolbox()之前,所有SDK类(包括数据类)的实例都会被销毁。

如果您有SDK的源代码,您可以下载所需的OpenSSL的".tar.gz"文件到/ source /Core/OpenSSL,移动/删除该文件夹中的先前的".tar.gz"文件,并尝试使用不同的OpenSSL构建工具包(参见OpenSSL功能)。该工具包应该与大多数OpenSSL版本兼容,否则它将报告编译错误。
如果您有Windows SDK的二进制版本,那么唯一的问题是,两个不同的OpenSL DLL通常希望具有相同的名称。为了解决这个问题,您可以将库libeay32.dll和ssleay32.dll重命名为具有相等长度的名称,例如,libeayua.dll和ssleayua.dll。然后,您可以在编辑器中打开DLLS TB5STACK.dll(或tb5stackx64.dll)和重命名的ssleay32.dll并按新名称搜索并重命名原始DLL名称。

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

OPC UA应用通常有一个“应用实例证书”。

1.如果建立签名或加密连接,则客户端和服务器必须相信彼此应用程序实例证书(证书在信任列表中)。如果是这种情况,则证书用于签名和/或加密通信。

2.如果客户端和服务器希望通过匿名身份验证建立一个未签名、未加密的通信,那么客户端和服务器之间可能存在信任关系,但不一定存在。然后客户端可以决定根本不配置应用程序实例证书,因为没有证书被传输。

3.如果连接是用与匿名不同的认证令牌建立的,那么服务器可能会要求用户令牌安全策略。
这用于加密令牌的某个部分,以防用户名identityToken,否则在不具有消息加密的情况下加密,否则将被运输未加密,并且可以从在网络流量侦听的每个人读取密码。对于此用户令牌加密,再次需要服务器和客户端证书并在应用程序之间传输。
与案例1的差异是,无论是信任,都没有检查证书,只需要在连接建立时加密用户令牌。

您需要应用程序实例证书。请查看我们用于在 \ Source \ PKI \批处理中创建我们测试和示例应用程序的演示存储证书的批处理文件。您可以自由修改满足您的需求。
您还需要设置具有至少配置的信任列表位置的PKIStoreConFiguration。
当您的客户端不需要信任任何服务器证书时,此信任列表可以是一个空文件夹。不幸的是,这个信任列表必须经过配置,并且在任何情况下都必须存在

SDK中状态码的使用
在执行期间可能会遇到错误的所有功能都使用枚举enumstatuscode指定错误条件。statuscode枚举的值由OPC基础定义,也用于表示服务调用中的错误。此外,变量值的质量也由相同的状态码表示。请参阅参考手册以接收所有枚举值的完整列表。
SDK提供全局函数getEnumStatusCodeString()来检索StatusCode的文本描述。此方法对于调试错误条件很有用。
StatusCode类为测试状态代码提供了方便的方法。例如,静态方法StatusCode::isGood()可以用来测试给定的状态码是否为“good”,即不表示错误。

开启SDK组件跟踪功能
如果状态代码不能提供足够的信息来识别问题,则可以启用诊断消息跟踪。可以在Trace单例类中启用诊断消息的跟踪。下面的代码演示了如何启用对日志文件的跟踪:
跟踪:: instance() - > eneratfileLogging(_t(“logging.txt”),10000,5,256);
跟踪:: instance() - > enableTracelevel(enumtracegroup_all,enumtracelevel_warningandhigher);
跟踪输出也可以通过TCP连接进行流传输。请参阅跟踪查看器主题以获得更多参考。
也可以实现单独的跟踪。为此,调用Trace::enableCallbackLogging()。给定的回调将在每个启用的跟踪级别/跟踪组上被调用。

帮助文件未显示任何内容

我从Internet下载了一个帮助文件。然而,
它在右侧窗格中不显示任何内容。在左边的面板上只有一个目录。

此问题是由Windows 7安全处理引起的。它阻碍了
帮助文件(。Chm),从网上下载。

请保存PC上的帮助文件。
要解决这个问题,有两种可能:

  • 取消选中“复选框”在打开之前始终询问
    此文件“在安全警告对话框中或
  • 通过上下文菜单打开.chm文件的属性
    并按下“允许”按钮。
错误消息:“Windows需要数字签名的驱动程序”

一个最近安装的程序试图安装一个未签名驱动程序。驱动程序不可用,使用这个驱动程序的程序可能不能正确工作!

您的Microsoft Windows版本要求新的驱动程序具有具有SHA256证书的有效数字签名。Softing已更改支持新的SHA256证书的驾驶员签名机制。

要在Windows Server 2008 R2和Windows 7 PC上正确处理签名,需要进行SHA256证书支持的Windows更新。

请卸载最近安装的程序,然后安装Windows 7修补程序KB 3033929在Windows Server 2008 R2或Windows 7 PC上。

https://technet.microsoft.com/de-de/library/security/3033929

然后,您将能够成功地执行所需的soft安装。

原因是编译版本之间的ABI中断。请编译测试和示例应用程序
make -f linux.mak machine_type =“armv-6”machine_opt =“ - d_glibcxxx_use_cxx11_abi = 0 -std = gnu ++ 03”

MACHINE_TYPE只是定义了下面的文件夹名称…Source/lib/linux中查找档案的地方。

所有Softing的基于Windows的OPC UA产品(SDK,客户端和服务器)都将OPC Foundation的LDS(本地发现服务器)重新分发为其设置中的单独组件。
不幸的是,OPC Foundation没有为Linux系统提供LDS。

SDK的Windows安装安装LDS,我们提供批处理文件“update_discovery_server_sterver.bat”,该文件将LDS证书复制到服务器PKI存储和LDS PKI商店的服务器证书。
这就是文件“cert_discovery_server.der”的方式如何出现在服务器PKI商店中。

目前,使用LDS在Linux上使用服务器的唯一方法是在远程Windows计算机上安装和注册LDS。
此步骤需要手动交换证书,并将正确的IP地址配置为样本中的LDS。
对于一种快速的方法,只需在Windows机器上安装c++ SDK,然后查看“/Source/PKI/update_discovery_server_store.bat”,从那里获取和插入证书文件。

注意:当有多个服务器且需要一个入口点时(所有现有服务器都可见),使用LDS主要是有意义的。对于一个服务器,自我发现就足够了。当您向该服务器询问哪些服务器可用时,该服务器将使用自身的联系方式数据进行应答。这个特性是由SDK自动提供的,不需要额外的配置。

注意:没有必要为本地发现服务器创建证书。LDS应在本地存在。LDS可以注册。

如何在VxWorks中设置证书?

可以调用批处理文件(对于Windows)或shell脚本(for linux)以使用命令行参数调用pki存储,以配置任何IP地址或主机名的PKI存储(使用--help参数查看选项和所需的选项句法)。
为VxWorks设备创建一个PKI商店,将其复制到设备可以找到它的位置(直接在设备上,网络路径或插入的闪存卡......)。
然后,您还必须配置应用程序代码以使用正确的路径。

注意:当您在不同的计算机上使用客户端和服务器时,两者都需要自己的PKI商店,您必须将“自己的”证书复制到其他PKI商店的“可信”文件夹。

一些OPC UA服务(例如,历史记录read从变量中检索历史值)允许客户端限制每个请求的最大结果数。如果服务器具有更多结果的递送,则返回延延时以及客户端可以用于请求更多结果的结果。服务器应用程序必须能够将剩余的结果与存储在延延时内存中的上下文信息提供。

浏览地址空间
OPC UA提供服务浏览和BrowsEnext以浏览服务器的地址空间。浏览地址空间是通过引用获取连接到另一个节点的所有节点的方法。要检索例如完整的树木或整个地址空间,需要使用先前浏览呼叫的结果的若干浏览呼叫。该服务允许客户端和服务器限制返回结果的数量。如果结果的数量超过此最大值,则在服务器中创建所谓的延延时并传递给客户端。延续可以使用BroundEnext来检索剩余的浏览结果。

如果你不能连接到OPC UA服务器运行在不同的机器上,请检查以下:

- 确保可以访问服务器端点。即,可以通过网络访问服务器计算机,并且没有阻止服务器端口(防火墙)。
- 确保Server应用程序可信Softing OPC UA客户端证书。Softing OPC UA客户端将显示一个弹出窗口,用户可以决定在不信任服务器证书的情况下该做什么。所以没有手动步骤。
-确保客户端和服务器的时钟是同步的(同时也是TimeZone)。OPC UA应用程序要求客户端和服务器时钟同步,有时这可能是拒绝连接的来源。
- 确保至少客户端可以发现可用的服务器端点。在“会话连接”窗口中,您将转到“手动\双击以添加服务器...”。插入服务器地址,然后单击右侧的按钮。如果可以访问服务器,则应查看所有可用的端点。选择其中一个并尝试连接到它。

如果仍然不工作,请检查什么类型的错误,你得到的客户端日志。soft OPC UA Client在主窗口的底部有一个实时消息日志查看器。复制您在客户端日志中得到的准确错误信息,并将其发送给我们,以便进一步调查。

关于冗余的命名可能有点令人困惑,我们不提供对服务器端的服务器冗余的支持,但在客户端服务器冗余——客户端可以与一组冗余服务器通信。

除此之外,SDK仅支持冗余模式冷热。
显示的枚举显示所有可能存在的冗余类型,但不是所有冗余类型都被支持。
客户端隐含透明冗余模式,因为此模式看起来像客户端的单个服务器。

SDK仅在客户端提供对处理冗余服务器的支持。
SDK不提供对服务器端的冗余的支持,因为所有复杂的详细信息都依赖于应用程序。(如何计算服务级别?辅助服务器是否会在主要故障上启动或者它始终运行?服务器之间是否有数据在服务器之间交换?......)。
但当然,可以使用OPC UA C ++ SDK构建冗余服务器。

使用带有激活源代码许可证的soft dataFEED SDK提供了完整的源代码可用性,并允许用户编译SDK的激活免费版本。
源代码许可密钥的激活必须在安装安装程序中完成。激活后,被激活组件/功能的源代码将被安装/提取到您的机器上。根据你购买的SDK有不同的源代码许可。客户端许可证和服务器许可证之间也有区别。
安装带有源代码许可选项的SDK后,必须编译SDK以生成完整的许可库。

如果您没有有效的源代码许可证密钥,请联系Softing的销售部门。

Browse服务可以返回必需基本属性(NodeId、NodeClass、BrowseName和DisplayName)的引用特定信息和节点特定信息。必须通过额外的Read服务调用检索所有可选或特定于类型的属性。

它是一个已知的LDS问题,如果它已安装多次,则可能会发生。
在许多情况下,这可以通过命令行再次注册(可能是必要的管理)来解决这一点:

CD C:\ Program Files(x86)\常见文件\ opc foundation \ ua \ discovery \ bin
opcualds.exe - i系统

根据OPC UA规范,时间戳作为UTC时间传输,以避免客户端和服务器应用程序在不同时区运行时出现不一致。

UA应用程序应该将这些值转换为接收时刻的本地时间(now.ToLocalTime())。

在OPC UA中,服务器的地址空间使用名称空间的概念进行描述。服务器中的所有可寻址实体必须属于一个名称空间。
命名空间必须包含唯一的标识符,并且使用不同的名称空间(服务器的设计者)可以确保即使使用相同的标识符也不会产生名称冲突。
服务器中的名称空间由URI(字符串)唯一表示。服务器在数组中公开它的名称空间uri列表。名称空间URI的index()位置是这个数组非常重要,因为在常规的读/写/订阅操作中,出于性能原因,只有名称空间索引将被使用。(传输一个整数值比传输一个完整的字符串更快。)
在服务器中,名称空间URI可能不会改变,但某个名称空间URI在名称空间数组中的位置可能会改变。这就是所谓的ExpandedNodeID结构存在的原因,除了namespaceID和Identifier之外,这个结构还包含名称空间的URI。这个ExpandedNodeID应该只用于在客户端持久化标识符,并用于验证服务器重启后服务器上的名称空间索引没有更改。Nn为了读/写/监控,API要求应用程序提供一个NodeID。这个结构应该唯一地标识服务器地址空间中的某个资源。
NodeID由NamespaceIndex(NS)和标识符(该标识符(它是一个union,并且可以是字符串或整数,或者bug或bytearray-mopaque)。对于NodeID,不需要命名空间URI(NSU)。NSU仅需要扩展NodeID定义。
Namespace URI字符串从不使用与服务器的实际交互中,只是使用命名空间索引。
名称空间索引总是强制性的,名称空间URI是可选的,在使用NodeID类时实际上不是必需的。

ServerIndex是一个高级字段,如果所寻址的NodeID位于本地服务器上,或者位于远程服务器上,则该字段提供信息。这与充当聚合服务器并从底层OPC服务器检索其数据的服务器相关。因此,存在标识包含TargetNode的服务器的ServerIndex。此服务器可以是本地服务器或远程服务器。

该索引是该服务器在本地服务器的Server表中的索引。
服务器表中本地服务器的索引始终为0。
所有远程服务器都具有大于0的索引。

服务器表包含在Addressspace中的服务器对象中。客户端可以读取服务器表变量以访问目标服务器的描述。

使用普通的非聚合服务器/服务器链接解决方案,参数始终为0。

OPC基金会提供了OPC UA本地发现服务器的实现。LDS确保了OPC UA客户端和服务器之间的第一个互操作性步骤。LDS将开放OPC UA规范中指定的知名端口(4840),以响应服务器注册各自的客户端询问呼叫,因此不可能在同一台机器上运行多个变种的LDS服务器。soft和其他供应商决定支持OPC Foundation的LDS实现,并建议客户使用它。
所有Softing基于Windows的OPC UA产品(sdk、客户端和服务器)都将OPC Foundation的LDS作为一个单独的组件重新分发到他们的设置中。
我们也鼓励客户自己从OPC基金会网站下载和部署LDS。最新版本可以在这里找到:
opcfoundation.org/developer-tools/developer-kits-unified-architecture/local-discovery-server-lds/

并非所有OPC UA服务器都支持编写时间戳。这不是DataFeed OPC UA C ++ SDK或第三方服务器的错误,它是服务器的官方方式,即它不支持编写时间戳。不要调用DataValue :: setServervalue and(),也许甚至是甚至没有写入的DataValue :: SetSourcetimeStamp(),分别使用空的DateTime变量分别调用这些方法以清除现有时间戳。

一些OPC UA服务(例如,历史记录read从变量中检索历史值)允许客户端限制每个请求的最大结果数。如果服务器具有更多结果的递送,则返回延延时以及客户端可以用于请求更多结果的结果。服务器应用程序必须能够将剩余的结果与存储在延延时内存中的上下文信息提供。

浏览地址空间
OPC UA提供服务浏览和BrowsEnext以浏览服务器的地址空间。浏览地址空间是通过引用获取连接到另一个节点的所有节点的方法。要检索例如完整的树木或整个地址空间,需要使用先前浏览呼叫的结果的若干浏览呼叫。该服务允许客户端和服务器限制返回结果的数量。如果结果的数量超过此最大值,则在服务器中创建所谓的延延时并传递给客户端。延续可以使用BroundEnext来检索剩余的浏览结果。

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

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

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

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

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

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

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

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

ia支持反馈意见

我需要进一步的帮助

面向Windows的OPC UA .NET SDK

dataFEED OPC UA .NET服务器和客户端SDK for Windows

根据Windows将OPC UA通信集成到.NET应用程序

x

软化的工业支持

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

«