What's new in QuickOPC 2022.1: Difference between revisions

From OPC Labs Knowledge Base
 
(19 intermediate revisions by the same user not shown)
Line 5: Line 5:
''Key changes: ''
''Key changes: ''
* Initial support for .NET 6.0
* Initial support for .NET 6.0
* COM management updates
<br/>
<br/>


Line 15: Line 16:
= Licensing =  
= Licensing =  
* The default format of the distributed license key file is now .TXT (Base64 encoded), instead of .BIN. This is intended to prevent issues with mail/antivirus filters which sometimes reject to let through binary files. License Manager accepts the .TXT format since version 2018.2.
* The default format of the distributed license key file is now .TXT (Base64 encoded), instead of .BIN. This is intended to prevent issues with mail/antivirus filters which sometimes reject to let through binary files. License Manager accepts the .TXT format since version 2018.2.
* COM development now requires Enterprise Edition or higher (previously, it required Professional Edition or higher). This is valid for license keys issued from the release date of software version 2022.1. Behavior of license keys issued earlier is not affected, even with software version 2022.1 or later. Note: "COM development" means using the toolkit from COM-based development tools (such as VB6, Delphi, PHP etc.); it does *not* refer to the usage of COM/DCOM-based OPC specification (OPC Classic), this aspect remains unchanged.
* '''Licenses from the registry (Registry License Store, i.e. those handled by the License Manager utility) are now recognized when running under .NET Core/.NET 5+ on Windows (previously, they were only recognized when you were targeting .NET Framework).'''
* Added {{Style=Identifier|LicensingManagement.RegisterManagedResourceWithExistenceCheck}} method. In comparison with the preexisting {{Style=Identifier|LicensingManagement.RegisterManagedResource}} method, this new method checks upfront whether the specified license resource exists, and throws an exception if it does not exist or is not accessible. This allows easier troubleshooting of the process of embedding the license key into your project.
<!--
<!--
= Packaging =
= Packaging =
= Delivery =
= Delivery =
Line 31: Line 36:
* The {{Style=Identifier|DANodeDescriptor}} and {{Style=Identifier|AENodeDescriptor}} classes have been extended by a {{Style=Identifier|BrowsePathStartingNodeDescriptor}} property. This allows to specify a node other than the root node as a starting node for the browse path.
* The {{Style=Identifier|DANodeDescriptor}} and {{Style=Identifier|AENodeDescriptor}} classes have been extended by a {{Style=Identifier|BrowsePathStartingNodeDescriptor}} property. This allows to specify a node other than the root node as a starting node for the browse path.
* Added {{Style=Identifier|HasBrowsePath}} and {{Style=Identifier|HasNodeId}} properties to the {{Style=Identifier|DANodeDescriptor}} and {{Style=Identifier|AENodeDescriptor}} classes.
* Added {{Style=Identifier|HasBrowsePath}} and {{Style=Identifier|HasNodeId}} properties to the {{Style=Identifier|DANodeDescriptor}} and {{Style=Identifier|AENodeDescriptor}} classes.
* Added {{Style=Identifier|HasClsid}} and {{Style=Identifier|HasProgId}} properties to the {{Style=Identifier|ObjectDescriptor}} and {{Style=Identifier|ServerDescriptor}} classes.
* The native OPC DA and A&E clients no longer attempt to connect to remote registry and/or OPCEnum, if the server descriptor specifies a CLSID. This can reduce the time needed to connect to the OPC server.
* Added "ProgID Database" optimization to the OPC DA Optimizer. It recognizes ProgIDs of some common OPC servers, and resolves them directly to CLSIDs, bypassing the need to search through registry or use OPCEnum. This results in faster connection times, especially in remote scenarios with slow network connections. It can also allow connection to an OPC server that would otherwise be unreachable, due to ProgID resolution issues.
* Added OPC A&E Optimizer plugin, with the ProgID database optimization (same functionality as described for OPC DA).
* Enhanced error messages.
* Enhanced error messages.
<!--
<!--
Line 38: Line 47:
== OPC UA ==
== OPC UA ==
-->
-->
== OPC UA Client-Server ==
== OPC UA Client-Server ==
* Added {{Style=Identifier|StartingNodeDescriptor}} property to the {{Style=Identifier|UABrowsePath}}. This is a generalization of the existing {{Style=Identifier|StartingNodeId}} property, allowing the starting node be specified not just by its node ID, but by any node descriptor (which can then contain a browse path, etc., recursively).
* Added {{Style=Identifier|StartingNodeDescriptor}} property to the {{Style=Identifier|UABrowsePath}}. This is a generalization of the existing {{Style=Identifier|StartingNodeId}} property, allowing the starting node be specified not just by its node ID, but by any node descriptor (which can then contain a browse path, etc., recursively).
Line 48: Line 58:
* Added ability to load and resolve PubSub configurations from Web resources, using FTP, HTTP or HTTPS.
* Added ability to load and resolve PubSub configurations from Web resources, using FTP, HTTP or HTTPS.
* Added {{Style=Identifier|UADataSetData}}.{{Style=Identifier|FieldDataDictionaryById}} property. When metadata is available, this property contains field data for each field in the dataset, keyed by the dataset field Id (a GUID).
* Added {{Style=Identifier|UADataSetData}}.{{Style=Identifier|FieldDataDictionaryById}} property. When metadata is available, this property contains field data for each field in the dataset, keyed by the dataset field Id (a GUID).
* Added {{Style=Identifier|Origin}} property to the {{Style=Identifier|UADataSetHeader}} (and therefore also to the derived {{Style=Identifier|UADataSetData}}) class. The property contains origin of the dataset. The type and semantics of the origin depends on the transport used. For example, it is a string containing topic name in MQTT transport. It is an {{Style=Identifier|IPEndpoint}} object in the UDP transport, and a {{Style=Identifier|PhysicalAddress}} object in the Ethernet transport.
* Replaced the {{Style=Identifier|EasyUASubscribeDataSetFieldArguments}}.{{Style=Identifier|FieldName}} property by a {{Style=Identifier|DataSetFieldDescriptor}} property, which can contain either a field name, or a dataset field Id (a GUID). Also, the various overloads of the {{Style=Identifier|IEasyUASubscriberExtension}}.{{Style=Identifier|SubscribeDataSetField}} method now take the {{Style=Identifier|UADataSetFieldDescriptor}} object as an input, instead of just the field name. Implicit conversions exist from a string (representing the field name) or a GUID (representing the dataset field Id) to the {{Style=Identifier|UADataSetFieldDescriptor}}.
* Replaced the {{Style=Identifier|EasyUASubscribeDataSetFieldArguments}}.{{Style=Identifier|FieldName}} property by a {{Style=Identifier|DataSetFieldDescriptor}} property, which can contain either a field name, or a dataset field Id (a GUID). Also, the various overloads of the {{Style=Identifier|IEasyUASubscriberExtension}}.{{Style=Identifier|SubscribeDataSetField}} method now take the {{Style=Identifier|UADataSetFieldDescriptor}} object as an input, instead of just the field name. Implicit conversions exist from a string (representing the field name) or a GUID (representing the dataset field Id) to the {{Style=Identifier|UADataSetFieldDescriptor}}.
* Added recognition of cases when a JSON message is being parsed as UADP, or vice versa, and generate specific errors with messages properly identifying the cause of the problem.
* In JSON message mapping, added support for DataSetWriterName and ReversibleFieldEncoding flags, introduced in OPC UA specification 1.05.01.
* In JSON message mapping, added support for DataSetWriterName and ReversibleFieldEncoding flags, introduced in OPC UA specification 1.05.01.


Line 57: Line 69:
-->
-->
== Services ==  
== Services ==  
* Added the {{Style=Identifier|IEasyUAClientConnectionControl}} service on the {{Style=Identifier|EasyUAClient}} component (Professional Edition and higher). It provides methods to control the OPC UA client connections to the server, and contains methods like {{Style=Identifier|LockConnection}} and {{Style=Identifier|UnlockConnection}}. When the connection is locked, the component will attempt to open it and keep open, and will not automatically disconnect from the server after the connection is unused for certain time. The service is also available via COM, as {{Style=Identifier|_EasyUAClientConnectionControl}} interface. In .NET, it is also possible to use the {{Style=Identifier|DisposableLockConnection}} extension method, which works nicely with "using" statements in C# and VB.NET.
* '''Added the {{Style=Identifier|IEasyUAClientConnectionControl}} service on the {{Style=Identifier|EasyUAClient}} component (Professional Edition and higher). It provides methods to control the OPC UA client connections to the server, and contains methods like {{Style=Identifier|LockConnection}} and {{Style=Identifier|UnlockConnection}}. When the connection is locked, the component will attempt to open it and keep open, and will not automatically disconnect from the server after the connection is unused for certain time. The service is also available via COM, as {{Style=Identifier|_EasyUAClientConnectionControl}} interface. In .NET, it is also possible to use the {{Style=Identifier|DisposableLockConnection}} extension method, which works nicely with "using" statements in C# and VB.NET.'''
* Added the {{Style=Identifier|IEasyUAClientNodeRegistration}} service on the {{Style=Identifier|EasyUAClient}} component (Professional Edition and higher). It provides methods to register and unregister nodes, using the corresponding OPC UA services. Node registration (with OPC UA servers that support it) can improve performance with repeatedly accessed nodes. The service is also available via COM, as {{Style=Identifier|_EasyUAClientNodeRegistration}} interface.  
* '''Added the {{Style=Identifier|IEasyUAClientNodeRegistration}} service on the {{Style=Identifier|EasyUAClient}} component (Professional Edition and higher). It provides methods to register and unregister nodes, using the corresponding OPC UA services. Node registration (with OPC UA servers that support it) can improve performance with repeatedly accessed nodes. The service is also available via COM, as {{Style=Identifier|_EasyUAClientNodeRegistration}} interface.'''
<!--
<!--
== Specialized Client Objects ==
== Specialized Client Objects ==
Line 66: Line 78:
= Component Refactorings =
= Component Refactorings =
== OPC Classic ==
== OPC Classic ==
* The {{Style=Identifier|ServerClass}} property (in {{Style=Identifier|ObjectDescriptor}}, {{Style=Identifier|ServerDescriptor}}, and {{Style=Identifier|OpcServerDialog}} classes) now contains the {CLSID} of the OPC server, if available; otherwise, it contains its ProgID (or is empty, if no ProgID present either). Previously, the {{Style=Identifier|ServerClass}} property "preferred" the ProgID before the CLSID. This is potentially a breaking change. If you need the previous behavior, use the new {{Style=Identifier|ServerProgram}} property instead.
* Properties {{Style=Identifier|ExecutionContext}} and {{Style=Identifier|TurnOffActivationSecurity}} have from {{Style=Identifier|EasyMachineParameters}} (for OPCEnum operations) and {{Style=Identifier|EasyClientParameters}} (for target OPC server operation) have been moved into a new class, {{Style=Identifier|ComInstantiationParameters}}, and a corresponding {{Style=Identifier|ComInstantiationParameters}} property has been added to the {{Style=Identifier|EasyMachineParameters}} and {{Style=Identifier|EasyClientParameters}} classes.  
* Properties {{Style=Identifier|ExecutionContext}} and {{Style=Identifier|TurnOffActivationSecurity}} have from {{Style=Identifier|EasyMachineParameters}} (for OPCEnum operations) and {{Style=Identifier|EasyClientParameters}} (for target OPC server operation) have been moved into a new class, {{Style=Identifier|ComInstantiationParameters}}, and a corresponding {{Style=Identifier|ComInstantiationParameters}} property has been added to the {{Style=Identifier|EasyMachineParameters}} and {{Style=Identifier|EasyClientParameters}} classes.  
* The effective COM instantiation parameters are now determined by taking the value from {{Style=Identifier|ComManagement.Instance.Configuration.InstantiationParameters}}, and possibly overriding them by values from {{Style=Identifier|EasyXXClient.SharedParameters.ClientParameters.ComInstantiationParameters}}, or {{Style=Identifier|EasyXXClient.SharedParameters.MachineParameters.ComInstantiationParameters}}.
* The effective COM instantiation parameters are now determined by taking the value from {{Style=Identifier|ComManagement.Instance.Configuration.InstantiationParameters}}, and possibly overriding them by values from {{Style=Identifier|EasyXXClient.SharedParameters.ClientParameters.ComInstantiationParameters}}, or {{Style=Identifier|EasyXXClient.SharedParameters.MachineParameters.ComInstantiationParameters}}.
* Properties {{Style=Identifier|UseCustomSecurity}} and {{Style=Identifier|TurnOffCallSecurity}} have been moved from {{Style=Identifier|EasyMachineParameters}} (for OPCEnum operations) and {{Style=Identifier|EasyClientParameters}} (for target OPC server operation) and merged into a single set of properties in a new class, {{Style=Identifier|ComSecurityParameters}}, available in the {{Style=Identifier|ComManagement.SecurityParameters}} property.  
* Properties {{Style=Identifier|UseCustomSecurity}} and {{Style=Identifier|TurnOffCallSecurity}} have been moved from {{Style=Identifier|EasyMachineParameters}} (for OPCEnum operations) and {{Style=Identifier|EasyClientParameters}} (for target OPC server operation) and merged into a single set of properties in a new class, {{Style=Identifier|ComSecurityParameters}}, available in the {{Style=Identifier|ComManagement.SecurityParameters}} property.  
* The default timeout values for OPC DA, OPC XML-DA and OPC A&E operation have been increased from 60 seconds to 90 seconds.
<!--
<!--
== OPC XML-DA ==
== OPC XML-DA ==
Line 76: Line 90:
== OPC UA ==
== OPC UA ==
* The {{Style=Identifier|ServerConditionChanged}} event, previously available on the {{Style=Identifier|IEasyUAClient}} interface, has been moved to a new service, {{Style=Identifier|IEasyUAClientConnectionMonitoring}}, available from the {{Style=Identifier|EasyUAClient}} component. The service is also available via COM, as {{Style=Identifier|_EasyUAClientConnectionMonitoring}} interface.
* The {{Style=Identifier|ServerConditionChanged}} event, previously available on the {{Style=Identifier|IEasyUAClient}} interface, has been moved to a new service, {{Style=Identifier|IEasyUAClientConnectionMonitoring}}, available from the {{Style=Identifier|EasyUAClient}} component. The service is also available via COM, as {{Style=Identifier|_EasyUAClientConnectionMonitoring}} interface.
* Types renamed: {{Style=Identifier|UAComplexDataPluginParameters}} to {{Style=Identifier|UAComplexDataClientPluginParameters}}, {{Style=Identifier|_UAComplexDataPluginParameters}} to {{Style=Identifier|_UAComplexDataClientPluginParameters}}. When retrieving the OPC UA Complex Data plugin (for OPC UA client-server model) setup from {{Style=Identifier|EasyUAClient.InstanceParameters.PluginSetups}} using the {{Style=Identifier|FindName}} method, use "UAComplexDataClient" instead of "UAComplexData".
== OPC UA PubSub ==
== OPC UA PubSub ==
* The {{Style=Identifier|ResolverDescriptor}} property has been moved from the {{Style=Identifier|UASubscribedataSetArguments}} class to the {{Style=Identifier|UADataSetSubscriptionDescriptor}} class.
* The {{Style=Identifier|ResolverDescriptor}} property has been moved from the {{Style=Identifier|UASubscribedataSetArguments}} class to the {{Style=Identifier|UADataSetSubscriptionDescriptor}} class.
Line 86: Line 102:
* In OPC UA browse controls and dialogs, when an endpoint configuration has been changed from its initial state (e.g. when the user has modified the user identity, or the endpoint selection policy), the OPC UA endpoint icon now indicates that by showing an additional overlay in the upper left corner.
* In OPC UA browse controls and dialogs, when an endpoint configuration has been changed from its initial state (e.g. when the user has modified the user identity, or the endpoint selection policy), the OPC UA endpoint icon now indicates that by showing an additional overlay in the upper left corner.
* Object editor dialogs now contain a ">>> More" checkbox in the tab header area. When checked, an additional Serialization tab is shown. The Serialization tab shows how to create currently the edited object, including all its configured content, in C# and VB.NET.
* Object editor dialogs now contain a ">>> More" checkbox in the tab header area. When checked, an additional Serialization tab is shown. The Serialization tab shows how to create currently the edited object, including all its configured content, in C# and VB.NET.
* Added Origin field to the OPC UA PubSub dataset header and dataset data controls.
<!--
<!--
== Windows Forms Dialogs ==
== Windows Forms Dialogs ==
Line 116: Line 133:
* Added '''--OutputFieldsById|-ofbi''' option to the '''uaSubscriber subscribeDataSet''' command. When used, the fields in the dataset messages are outputted with their dataset field Ids, instead of field names.
* Added '''--OutputFieldsById|-ofbi''' option to the '''uaSubscriber subscribeDataSet''' command. When used, the fields in the dataset messages are outputted with their dataset field Ids, instead of field names.
* Added '''--DataSetFieldId|-dsfi <guid>''' option to the '''uaSubscriber subscribeDataSetField''' command. The option allows to specify the dataset field Id (a GUID) of the field to be subscribed to (as an alternative to specifying the field name), when metadata is available.
* Added '''--DataSetFieldId|-dsfi <guid>''' option to the '''uaSubscriber subscribeDataSetField''' command. The option allows to specify the dataset field Id (a GUID) of the field to be subscribed to (as an alternative to specifying the field name), when metadata is available.
* Added '''plugins setup''' command, allowing to access (view and modify) the setup of a specified plugin.
* More dense output of trace entries, by shortening the trace event type column to a 3-letter symbol.
* More dense output of trace entries, by shortening the trace event type column to a 3-letter symbol.
<!--
<!--
Line 132: Line 150:
* Added a C# example showing how to register an unregister nodes in an OPC UA server, using the new {{Style=Identifier|IEasyUAClientNodeRegistration}} service.
* Added a C# example showing how to register an unregister nodes in an OPC UA server, using the new {{Style=Identifier|IEasyUAClientNodeRegistration}} service.
* Added a VBScript example showing how to connections to and disconnections from the OPC UA server, using the {{Style=Identifier|IEasyUAClientConnectionMonitoring}} service and the event pull mechanism.
* Added a VBScript example showing how to connections to and disconnections from the OPC UA server, using the {{Style=Identifier|IEasyUAClientConnectionMonitoring}} service and the event pull mechanism.
* Added a VB.NET example showing how to store current state of the subscribed items in a dictionary.
* Added a C# example showing how to obtain "data nodes" under the "Objects" node, recursively.
<!--
<!--
== OPC UA PubSub ==
== OPC UA PubSub ==

Latest revision as of 11:31, 15 March 2022

See also: Versions; Previous version: What's new in QuickOPC 2021.3

Internal version number: 5.63

Key changes:

  • Initial support for .NET 6.0
  • COM management updates


Targeting

  • .NET 6.0 is now a supported .NET runtime. Note: When you develop for .NET 6, use .NET Standard 2.1 as target framework. Windows-specific technologies (Windows Forms, WPF) and features that depend on them (Live Binding, Browse Dialogs and Browse Controls, ...) are not yet supported.
  • Maximum supported Windows 10 version is now 21H2.

Licensing

  • The default format of the distributed license key file is now .TXT (Base64 encoded), instead of .BIN. This is intended to prevent issues with mail/antivirus filters which sometimes reject to let through binary files. License Manager accepts the .TXT format since version 2018.2.
  • COM development now requires Enterprise Edition or higher (previously, it required Professional Edition or higher). This is valid for license keys issued from the release date of software version 2022.1. Behavior of license keys issued earlier is not affected, even with software version 2022.1 or later. Note: "COM development" means using the toolkit from COM-based development tools (such as VB6, Delphi, PHP etc.); it does *not* refer to the usage of COM/DCOM-based OPC specification (OPC Classic), this aspect remains unchanged.
  • Licenses from the registry (Registry License Store, i.e. those handled by the License Manager utility) are now recognized when running under .NET Core/.NET 5+ on Windows (previously, they were only recognized when you were targeting .NET Framework).
  • Added LicensingManagement.RegisterManagedResourceWithExistenceCheck method. In comparison with the preexisting LicensingManagement.RegisterManagedResource method, this new method checks upfront whether the specified license resource exists, and throws an exception if it does not exist or is not accessible. This allows easier troubleshooting of the process of embedding the license key into your project.

Component Improvements

OPC Classic

  • Added ComSecurityParameters.EnsureDataIntegrity property (defaults to false). You can set this property in ComManagement.Instance.Configuration.SecurityParameters. When true (and ComSecurityParameters.UseCustomSecurity is also true, which is the default), it sets the security so that COM verifies that none of the data transferred between client and server has been modified, by specifying RPC_C_AUTHN_LEVEL_PKT_INTEGRITY for the authentication level. Using this authentication level might be necessary on systems with hardening changes for CVE-2021-26414 vulnerability. For related guidance, see COM management.
  • It is possible to enforce early initialization of COM security by calling ComManagement.Instance.AssureSecurityInitialization(). The ComManagement.Instance.AssureSecurityInitializationAndRunOnStaThread method makes it easier to rewrite programs that were originally written to start on an STA thread, but had to be switched to an MTA thread in order to avoid premature COM security initialization.
  • Added ComSecurityParameters.AllowImpersonateClient property (defaults to false). Controls whether the the server is allowed to impersonate the client.
  • COM security initialization success or failure is now logged through the EasyDAClient.LogEntry or EasyAEClient.LogEntry events.
  • COM security initialization success or failure events are now written to the system log. This can be turned on/off by the ComManagement.Instance.LogToSystem property.
  • COM configuration can now be set externally to the program, using Intrinsic Component Configuration.
  • The DANodeDescriptor and AENodeDescriptor classes have been extended by a BrowsePathStartingNodeDescriptor property. This allows to specify a node other than the root node as a starting node for the browse path.
  • Added HasBrowsePath and HasNodeId properties to the DANodeDescriptor and AENodeDescriptor classes.
  • Added HasClsid and HasProgId properties to the ObjectDescriptor and ServerDescriptor classes.
  • The native OPC DA and A&E clients no longer attempt to connect to remote registry and/or OPCEnum, if the server descriptor specifies a CLSID. This can reduce the time needed to connect to the OPC server.
  • Added "ProgID Database" optimization to the OPC DA Optimizer. It recognizes ProgIDs of some common OPC servers, and resolves them directly to CLSIDs, bypassing the need to search through registry or use OPCEnum. This results in faster connection times, especially in remote scenarios with slow network connections. It can also allow connection to an OPC server that would otherwise be unreachable, due to ProgID resolution issues.
  • Added OPC A&E Optimizer plugin, with the ProgID database optimization (same functionality as described for OPC DA).
  • Enhanced error messages.

OPC UA Client-Server

  • Added StartingNodeDescriptor property to the UABrowsePath. This is a generalization of the existing StartingNodeId property, allowing the starting node be specified not just by its node ID, but by any node descriptor (which can then contain a browse path, etc., recursively).

OPC UA PubSub

  • Added ability to load and resolve PubSub configurations from Web resources, using FTP, HTTP or HTTPS.
  • Added UADataSetData.FieldDataDictionaryById property. When metadata is available, this property contains field data for each field in the dataset, keyed by the dataset field Id (a GUID).
  • Added Origin property to the UADataSetHeader (and therefore also to the derived UADataSetData) class. The property contains origin of the dataset. The type and semantics of the origin depends on the transport used. For example, it is a string containing topic name in MQTT transport. It is an IPEndpoint object in the UDP transport, and a PhysicalAddress object in the Ethernet transport.
  • Replaced the EasyUASubscribeDataSetFieldArguments.FieldName property by a DataSetFieldDescriptor property, which can contain either a field name, or a dataset field Id (a GUID). Also, the various overloads of the IEasyUASubscriberExtension.SubscribeDataSetField method now take the UADataSetFieldDescriptor object as an input, instead of just the field name. Implicit conversions exist from a string (representing the field name) or a GUID (representing the dataset field Id) to the UADataSetFieldDescriptor.
  • Added recognition of cases when a JSON message is being parsed as UADP, or vice versa, and generate specific errors with messages properly identifying the cause of the problem.
  • In JSON message mapping, added support for DataSetWriterName and ReversibleFieldEncoding flags, introduced in OPC UA specification 1.05.01.

COM Components

  • Updated QuickOpc.h include file (Microsoft C++) for use with ISO C++ 20 Standard.

Services

  • Added the IEasyUAClientConnectionControl service on the EasyUAClient component (Professional Edition and higher). It provides methods to control the OPC UA client connections to the server, and contains methods like LockConnection and UnlockConnection. When the connection is locked, the component will attempt to open it and keep open, and will not automatically disconnect from the server after the connection is unused for certain time. The service is also available via COM, as _EasyUAClientConnectionControl interface. In .NET, it is also possible to use the DisposableLockConnection extension method, which works nicely with "using" statements in C# and VB.NET.
  • Added the IEasyUAClientNodeRegistration service on the EasyUAClient component (Professional Edition and higher). It provides methods to register and unregister nodes, using the corresponding OPC UA services. Node registration (with OPC UA servers that support it) can improve performance with repeatedly accessed nodes. The service is also available via COM, as _EasyUAClientNodeRegistration interface.

Component Refactorings

OPC Classic

  • The ServerClass property (in ObjectDescriptor, ServerDescriptor, and OpcServerDialog classes) now contains the {CLSID} of the OPC server, if available; otherwise, it contains its ProgID (or is empty, if no ProgID present either). Previously, the ServerClass property "preferred" the ProgID before the CLSID. This is potentially a breaking change. If you need the previous behavior, use the new ServerProgram property instead.
  • Properties ExecutionContext and TurnOffActivationSecurity have from EasyMachineParameters (for OPCEnum operations) and EasyClientParameters (for target OPC server operation) have been moved into a new class, ComInstantiationParameters, and a corresponding ComInstantiationParameters property has been added to the EasyMachineParameters and EasyClientParameters classes.
  • The effective COM instantiation parameters are now determined by taking the value from ComManagement.Instance.Configuration.InstantiationParameters, and possibly overriding them by values from EasyXXClient.SharedParameters.ClientParameters.ComInstantiationParameters, or EasyXXClient.SharedParameters.MachineParameters.ComInstantiationParameters.
  • Properties UseCustomSecurity and TurnOffCallSecurity have been moved from EasyMachineParameters (for OPCEnum operations) and EasyClientParameters (for target OPC server operation) and merged into a single set of properties in a new class, ComSecurityParameters, available in the ComManagement.SecurityParameters property.
  • The default timeout values for OPC DA, OPC XML-DA and OPC A&E operation have been increased from 60 seconds to 90 seconds.

OPC UA

  • The ServerConditionChanged event, previously available on the IEasyUAClient interface, has been moved to a new service, IEasyUAClientConnectionMonitoring, available from the EasyUAClient component. The service is also available via COM, as _EasyUAClientConnectionMonitoring interface.
  • Types renamed: UAComplexDataPluginParameters to UAComplexDataClientPluginParameters, _UAComplexDataPluginParameters to _UAComplexDataClientPluginParameters. When retrieving the OPC UA Complex Data plugin (for OPC UA client-server model) setup from EasyUAClient.InstanceParameters.PluginSetups using the FindName method, use "UAComplexDataClient" instead of "UAComplexData".

OPC UA PubSub

  • The ResolverDescriptor property has been moved from the UASubscribedataSetArguments class to the UADataSetSubscriptionDescriptor class.

User Interface

  • In OPC UA browse controls and dialogs, when an endpoint configuration has been changed from its initial state (e.g. when the user has modified the user identity, or the endpoint selection policy), the OPC UA endpoint icon now indicates that by showing an additional overlay in the upper left corner.
  • Object editor dialogs now contain a ">>> More" checkbox in the tab header area. When checked, an additional Serialization tab is shown. The Serialization tab shows how to create currently the edited object, including all its configured content, in C# and VB.NET.
  • Added Origin field to the OPC UA PubSub dataset header and dataset data controls.

Tools and Online Services

Connectivity Explorer

  • The Connectivity Explorer now has a node for OPC UA PubSub, and it allows the user to browse the relevant parts of the Publish/Subscribe model in the servers, selected dataset fields form published datasets, and display their values in the Live Point Data view.
  • In various property grids, the property name in the description area is now clickable (underlined), and shows a contextual online help associated with that property. Also, a Help command has been added to the context menu on the property grids.
  • Added Lock Connection action on OPC UA endpoints. It allows the user to lock or unlock the connection to the specified endpoint, assuring that the component will attempt to keep the connection open until unlocked. Endpoints nodes with locked connections are marked with a little "lock" overlay icon.
  • Added a little overlay icon to OPC UA endpoint nodes that are "dirty", i.e. modified from their original state (e.g. their endpoint selection policy, or user identity, has been changed by the user).

Demo Servers and Publishers

OpcCmd Utility

  • Using the new --!inputFile|--!if <fileName> command option, it is now possible to switch the tool input to the specified file.
  • The .opccmd file extension is now associated with executing the file using the OpcCmd utility.
  • Added uaClient getService uaClientConnectivityControl command, with lockConnection and unlockConnection subcommands.
  • Added uaClient getService uaClientNodeRegistration command, with registerNode and unregisterNode subcommands.
  • Added interopServices comManagement command, allowing the user to view and change the COM configuration, and assureSecurityInitialization subcommand.
  • Added --OutputFieldsById|-ofbi option to the uaSubscriber subscribeDataSet command. When used, the fields in the dataset messages are outputted with their dataset field Ids, instead of field names.
  • Added --DataSetFieldId|-dsfi <guid> option to the uaSubscriber subscribeDataSetField command. The option allows to specify the dataset field Id (a GUID) of the field to be subscribed to (as an alternative to specifying the field name), when metadata is available.
  • Added plugins setup command, allowing to access (view and modify) the setup of a specified plugin.
  • More dense output of trace entries, by shortening the trace event type column to a 3-letter symbol.

Examples

OPC UA Client-Server

  • Added a C# example showing how to lock and unlock connections to an OPC UA server, using the new IEasyUAClientConnectionControl service.
  • Added a C# example showing how to register an unregister nodes in an OPC UA server, using the new IEasyUAClientNodeRegistration service.
  • Added a VBScript example showing how to connections to and disconnections from the OPC UA server, using the IEasyUAClientConnectionMonitoring service and the event pull mechanism.
  • Added a VB.NET example showing how to store current state of the subscribed items in a dictionary.
  • Added a C# example showing how to obtain "data nodes" under the "Objects" node, recursively.