工业的

OPC UA .NET标准SDK常见问题解答

请检查您是否将应用程序初始化为客户端(或服务器和客户端)。看到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做出这种同步,导致这种死锁。
要解决问题,请在加载后设置和拆除SDK,然后通过函数或静态方法卸载DLL之前。

SDK安装包安装时间有限但完全完全的SDK包,可用于开发OPC UA应用程序。在不输入客户端或服务器许可证的情况下,基于SDK的应用程序将在运行时停止工作90分钟。在Windows系统上,消息框将通知用户Demo版本的已过去的运行时。重新启动应用程序后,90分钟计时器再次重新启动。

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

许可证密钥依赖于目标系统。这意味着,例如,Windows的服务器许可证不会解锁VxWorks服务器应用程序中的服务器特性。

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

可用功能是:

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

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

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

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

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

除了特定于引用的信息,浏览服务只支持每个节点类型必须具有的必选基本节点属性(NodeId, NodeClass, BrowseName, DisplayName)。

所有可选的和特定于类型的属性只能通过Read Service处理。

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

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

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


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

混淆属性和属性是一种常见的误解。

属性是某些数据,绑定到某个节点类(对象,ObjectType,变量,variableType,引用键,数据类型和视图)。可用的属性是固定的,因此不能扩展它们以包含其他数据。
属性与属性几乎相同的语法含义,但属性是具有自己属性的完全不同的节点(节点类变量的节点变量)。属性节点通过HasProperty Reference从父节点引用。
要读取属性值,您必须获取该属性的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的源代码,则可以将所需的opensl“.tar.gz”文件下载到 / source / core / openssl,从该文件夹中移动/删除先前的“.tar.gz”文件尝试使用不同的openssl构建工具包(请参阅openssl功能)。该工具包应该与大多数openssl版本兼容,否则它将报告编译错误。
如果您有Windows SDK的二进制版本,那么唯一的问题是,两个不同的OpenSSL dll通常希望具有相同的名称。为了解决这个问题,你可以将libeay32.dll和ssleay32.dll重命名为相同长度的名称,例如libeayua.dll和ssleayua.dll。然后在编辑器中打开DLL TB5STACK.dll(或TB5STACKx64.dll)和重命名的ssleay32.dll,搜索并将原来的DLL名称重命名为新名称。

注意:这将工作,只有旧的和新的DLL名称有相同的大小,改变大小的DLL内容将导致问题!

OPC UA应用程序通常具有应用程序实例证书。

1.如果需要建立签名或加密的连接,那么客户端和服务器必须相互信任应用程序实例证书(证书在信任列表中)。如果是这种情况,则使用证书对通信进行签名和/或加密。

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

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

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

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

启用S​​DK组件的跟踪
如果状态代码没有提供足够的信息来标识问题,则可能会打开诊断消息的跟踪。可以在跟踪单级类中启用诊断消息的跟踪。以下代码说明了如何使跟踪到日志文件:
跟踪::instance()->enableFileLogging(_T("logging.txt"), 10000, 5,256);
跟踪::实例()- > enableTraceLevel (EnumTraceGroup_All EnumTraceLevel_WarningAndHigher);
跟踪输出也可以通过TCP连接流式传输。请参阅跟踪查看器主题以获取进一步参考。
也可以实现单独的跟踪。为此,请调用跟踪:: enablecallbacklogging()。将在每个已启用的跟踪级别/跟踪组上调用给定的回调。

帮助文件不显示任何内容

我从网上下载了一个帮助文件。然而,
它不会显示右窗格上的任何内容。只是左窗格上的目录。

此问题是由Windows 7安全处理引起的。它阻止了
帮助从Internet下载的文件(.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.

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

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

machine_type只是在搜索归档的源/ lib / linux下面定义文件夹名称。

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

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

目前,在Linux上使用带有LDS的服务器的唯一方法是在远程Windows机器上安装和注册LDS。
此步骤需要手动交换证书,并将正确的IP地址配置为样本中的LDS。
对于快速的方法,只需在那台Windows机器上安装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提供了Browse和BrowseNext服务来浏览服务器的地址空间。浏览地址空间是一种获取通过引用连接到另一个节点的所有节点的方法。例如,为了检索完整的树或整个地址空间,需要使用以前的浏览调用的结果进行几个浏览调用。该服务允许客户机和服务器限制返回结果的数量。如果结果的数量超过这个最大值,则在服务器中创建一个所谓的延续点并传递给客户端。可以通过BrowseNext传递continuation以检索其余的浏览结果。

如果您无法连接到不同机器上运行的OPC UA服务器,请查看以下内容:

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

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

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

除此之外,SDK只支持冷、热两种冗余方式。
显示的枚举显示所有可能存在的冗余类型,但并非所有可能都支持所有可能的冗余类型。
客户端隐式支持透明冗余模式,因为这种模式对客户端来说就像一个服务器。

SDK仅在客户端提供支持以处理冗余服务器。
SDK在服务器端不提供冗余支持,因为所有复杂的细节都取决于应用程序。(如何计算服务水平?次要服务器是在主要故障时启动还是一直运行?服务器之间是否需要交换数据以及如何交换数据……)。
但当然,可以使用OPC UA C ++ SDK构建冗余服务器。

使用Softing DataFeed SDK具有激活的源代码许可证提供完整的源代码可用性,并使用户可以编译他的SDK的激活版本。
必须在安装设置中进行源代码许可证密钥的激活。激活后,将在机器上安装/提取激活组件/功能的源代码。根据您购买的SDK,有不同的源代码许可证。客户端和服务器许可之间也有区别。
使用源代码许可证选项安装SDK后,必须编译SDK以生成完整的许可库。

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

浏览服务可以返回强制基本属性的参考特定信息和节点特定信息(NodeID,NodeClass,Browsename和DisplayName)。必须通过额外的读取服务调用来检索所有可选或类型特定属性。

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

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

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

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

在OPC UA中,服务器的地址空间是使用名称空间概念来描述的。服务器中的所有可寻址实体必须属于一个名称空间。
命名空间必须包含唯一标识符并使​​用不同的名称空间,服务器的设计者可以确保即使在使用相同的标识符时,也可以确保即使在使用相同的标识符的情况下也可以确保突破免费寻址。
服务器中的命名空间由URI(String)唯一表示。服务器在数组中公开它的命名空间URI列表。命名空间URI的索引()位置是此阵列非常重要,因为在常规读/写/订阅操作上只有命名空间索引将用于性能原因。(运输整数值比完整吹串更快。)
在服务器中,名称空间URI可能不会改变,但某个名称空间URI在名称空间数组中的位置可能会改变。这就是所谓的ExpandedNodeID结构存在的原因,除了名称空间id和标识符外,它还包含名称空间的URI。这个ExpandedNodeID应该只用于在客户端持久化标识符,并用于验证在服务器重启后名称空间索引没有在服务器上更改。为了读/写/监控,API需要应用程序提供一个NodeID。该结构被认为是唯一标识服务器地址空间中的某个资源。
NodeID由一个NamespaceIndex (ns)和一个Identifier(它是一个联合,可以是字符串、整数、GUID或byteArray - opaque)组成。对于NodeID,不需要Namespace URI (nsu)。nsu仅用于ExpandedNodeID定义。
在与服务器的实际交互中不会使用名称空间URI字符串,只使用名称空间索引。
名称空间索引总是强制性的,名称空间URI是可选的,在使用NodeID类时实际上不是必需的。

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

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

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

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

OPC基金会提供了OPC UA本地发现服务器的实现。LDS确保了OPC UA客户端和服务器之间的第一个互操作性步骤。LDS期望打开OPC UA规范中指定的众所周知的端口(4840),以响应服务器注册各自的客户端询问调用,因此不可能在同一台机器上运行多个版本的LDS服务器。soft与其他供应商一起决定支持OPC基金会的LDS实现,并使用并推荐给客户使用。
所有Softing的基于Windows的OPC UA产品(SDK,客户端和服务器)都将OPC Foundation的LDS重新分发为其设置中的单独组件。
我们也鼓励客户从OPC基金会网站下载并自行部署LDS。最新版本可在此找到:
opcfound.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提供了Browse和BrowseNext服务来浏览服务器的地址空间。浏览地址空间是一种获取通过引用连接到另一个节点的所有节点的方法。例如,为了检索完整的树或整个地址空间,需要使用以前的浏览调用的结果进行几个浏览调用。该服务允许客户机和服务器限制返回结果的数量。如果结果的数量超过这个最大值,则在服务器中创建一个所谓的延续点并传递给客户端。可以通过BrowseNext传递continuation以检索其余的浏览结果。

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

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

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

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

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

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

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

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

ia支持反馈意见

我需要进一步的帮助

OPC UA .NET标准SDK

dataFEED OPC UA .NET标准sdk

将OPC UA通信集成到.NET标准应用程序中

X

Softing Industrial Specurant.

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

«