Difference between revisions of "What's new in QuickOPC 2021.1"

From OPC Labs Knowledge Base
Jump to navigation Jump to search
 
(52 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:.NET Core]] [[Category:Configuration]] [[Category:Instrumentation]] [[Category:OPC A&E]] [[Category:OPC Classic]] [[Category:OpcCmd Utility]] [[Category:Packaging]] [[Category:What's New]]  
+
[[Category:.NET]] [[Category:.NET 5]] [[Category:.NET Core]] [[Category:Configuration]] [[Category:Instrumentation]] [[Category:macOS]] [[Category:OPC A&E]] [[Category:OPC Classic]] [[Category:OPC UA]] [[Category:OPC XML-DA]] [[Category:OpcCmd Utility]] [[Category:Packaging]] [[Category:Raspberry Pi]] [[Category:Raspberry Pi OS]] [[Category:What's New]]  
 
 
 
<div style="text-align: right; direction: ltr; margin-left: 1em;">See also: [[Versions]]; Previous version: [[What's new in QuickOPC 2020.3]]</div>
 
<div style="text-align: right; direction: ltr; margin-left: 1em;">See also: [[Versions]]; Previous version: [[What's new in QuickOPC 2020.3]]</div>
 
 
Internal version number: 5.60
 
Internal version number: 5.60
  
 
''Key changes: ''
 
''Key changes: ''
*  
+
* Initial support for .NET 5.0
 +
* Support for macOS
 +
* OPC A&E under .NET Standard
 
<br>
 
<br>
  
 +
== Targeting ==
 +
* '''.NET 5.0 is now a supported .NET runtime.''' Note: When you develop for .NET 5, 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.
 +
* '''QuickOPC now runs and is supported on macOS''' (in .NET Core 2.1, .NET Core 3.1 or .NET 5.0+, targeting .NET Standard). Features supported are practically the same as for Linux. Most importantly: Supports only OPC XML-DA and OPC Unified architecture (no OPC Classic).
 +
[[File:Opccmd-in-macos-daclient.png|thumb]]
 +
* Removed upper revision number restriction on supported .NET Core 2.1 and .NET Core 3.1 frameworks.
 +
* Verified functionality under Raspberry Pi OS.
 +
* '''OPC Alarms and Events (A&E) is now supported under .NET Standard'''; on Windows only.
 
<!--
 
<!--
== Targeting ==
 
 
 
== Technology ==
 
== Technology ==
  
Line 17: Line 22:
  
 
-->
 
-->
 +
 
== Packaging ==
 
== Packaging ==
 
* In .NET Framework, there is now a dependency on various assemblies from [https://docs.microsoft.com/en-us/dotnet/api/?view=dotnet-plat-ext-5.0 Microsoft Platform Extensions]. These assemblies are also installed into the '''Assemblies/net47''' folder. QuickOPC NuGet packages properly reference the corresponding Microsoft Platform Extensions NuGet packages (they do not contain the individual referenced assemblies). This increases the number of files you need to deploy. <ref name="referencedAssemblies">Until this version, we have attempted to keep the number of product assemblies, and referenced assemblies that are not part of the shared framework, to minimum. We tried hard, but it was not really feasible to keep following this principle, if we wanted to move the product forward. We understand that deploying a larger number of assemblies can be a nuisance for some users, but believe us, we have not taken the decision lightly.</ref>
 
* In .NET Framework, there is now a dependency on various assemblies from [https://docs.microsoft.com/en-us/dotnet/api/?view=dotnet-plat-ext-5.0 Microsoft Platform Extensions]. These assemblies are also installed into the '''Assemblies/net47''' folder. QuickOPC NuGet packages properly reference the corresponding Microsoft Platform Extensions NuGet packages (they do not contain the individual referenced assemblies). This increases the number of files you need to deploy. <ref name="referencedAssemblies">Until this version, we have attempted to keep the number of product assemblies, and referenced assemblies that are not part of the shared framework, to minimum. We tried hard, but it was not really feasible to keep following this principle, if we wanted to move the product forward. We understand that deploying a larger number of assemblies can be a nuisance for some users, but believe us, we have not taken the decision lightly.</ref>
 
* Assemblies that are only used internally are no longer embedded inside the QuickOPC assemblies (this mechanism was used under .NET Framework to reduce the number of files that need to be deployed).<ref name="referencedAssemblies"/>
 
* Assemblies that are only used internally are no longer embedded inside the QuickOPC assemblies (this mechanism was used under .NET Framework to reduce the number of files that need to be deployed).<ref name="referencedAssemblies"/>
{{Note|When upgrading from earlier QuickOPC versions, you may have to add a reference to '''Microsoft.Extensions.Configuration.Abstractions''' and possibly also '''Microsoft.Extensions.DependencyInjection.Abstractions''' assembly (both available under Assemblies\net47 under the product installation directory) to your project. Affected are projects where the QuickOPC components have been instantiated by a code generated by Visual Studio designer, e.g. Windows Forms projects where you have placed some QuickOPC components from the VS Toolbox onto the design area.}}
+
{{Note|When upgrading from earlier QuickOPC versions, you may have to add a reference to '''Microsoft.Extensions.Configuration.Abstractions''' and possibly also '''Microsoft.Extensions.DependencyInjection.Abstractions''' assembly (both available under '''Assemblies\net47''' under the product installation directory) to your project. Affected are projects where the QuickOPC components have been instantiated by a code generated by Visual Studio designer, e.g. Windows Forms projects where you have placed some QuickOPC components from the VS Toolbox onto the design area. When instantiating new components in this way in QuickOPC 2021.1, the necessary assembly references are added automatically.}}
 
<!--
 
<!--
 
== Delivery ==
 
== Delivery ==
Line 28: Line 34:
  
 
== Component Improvements ==
 
== Component Improvements ==
 +
* Added {{Style=Identifier|FindByName}} method to {{Style=Identifier|ConfigurationPartCollection}}. The method allows finding the (plug-in) configuration part using just the unqualified name, and possibly ignoring the case.
 +
=== OPC Classic ===
 +
* Common errors related to server connection are now annotated with explanations and possible causes and remedies.
 +
=== OPC Data Access and OPC XML-DA ===
 +
* Many common errors are now annotated with details showing additional pieces of information that have relevance for the error, such as server class, machine name, item ID, property ID, data type, or browse filter.
 +
* Errors created from OPC NET API results are now extended with descriptive error messages (for errors defined in OPC specifications).
 
<!--
 
<!--
=== OPC Classic ===
+
=== OPC XML-DA ===
 
-->
 
-->
 +
 
=== OPC Alarms&Events ===
 
=== OPC Alarms&Events ===
 
* It is now possible to specify {{Style=Identifier|AEBrowseFilter}}.{{Style=Identifier|All}} in browse parameters passed to {{Style=Identifier|IEasyAEClient}}.{{Style=Identifier|BrowseNodes}}, which allows you to obtain both sources and areas in one call.
 
* It is now possible to specify {{Style=Identifier|AEBrowseFilter}}.{{Style=Identifier|All}} in browse parameters passed to {{Style=Identifier|IEasyAEClient}}.{{Style=Identifier|BrowseNodes}}, which allows you to obtain both sources and areas in one call.
Line 37: Line 50:
 
-->
 
-->
 
=== OPC UA Client-Server ===
 
=== OPC UA Client-Server ===
 +
* Made many OPC UA error messages more dense, and their content more relevant to the problem.
 +
* Textual description of OPC UA status code, based on a list of status codes defined in OPC UA specifications, is automatically added to the message, if the description was not provided by the server or SDK.
 +
* Error messages related to operations on UA nodes are now annotated with the value of the node descriptor used (and, for method calls, also with the method descriptor).
 +
* Greatly improved all error messages related to parsing of OPC UA node IDs and qualified names.
 
* The new OPC-UA Optimizer plugin improves performance of certain OPC UA operations. It is enabled by default.
 
* The new OPC-UA Optimizer plugin improves performance of certain OPC UA operations. It is enabled by default.
 
* Calls to OPC UA Browse, Read and Write and GetProperty operations that contain identical (except for the State property) arguments are now merged to perform just a operation (request merging). This behavior can be turned off in the OPC-UA Optimizer plugin parameters.
 
* Calls to OPC UA Browse, Read and Write and GetProperty operations that contain identical (except for the State property) arguments are now merged to perform just a operation (request merging). This behavior can be turned off in the OPC-UA Optimizer plugin parameters.
 +
* Added {{Style=Identifier|ExportApplicationConfiguration}} method to the {{Style=Identifier|IEasyUAClientApplication}} interface. This method exports the application configuration data in the format used by the .NET SDK from OPC Foundation.
 +
 +
=== OPC UA PubSub ===
 +
* Added {{Style=Identifier|EasyUASubscriberConfiguration}} component. Similarly to other such components, allows the static (shared) parameters of the subscriber be configured through a non-visual component in Visual Studio designer, or from COM tools.
 
<!--
 
<!--
=== OPC UA PubSub ===
 
 
=== COM Components ===
 
=== COM Components ===
 
=== OPC UA Complex Data ===
 
=== OPC UA Complex Data ===
 
=== OPC UA PubSub ===
 
=== OPC UA PubSub ===
=== OPC XML-DA ===
+
-->
  
-->
 
 
=== Services ===  
 
=== Services ===  
 
* Added {{Style=Identifier|RemoveInstanceCertificate}} method to {{Style=Identifier|IEasyUAClientApplication}} service.  
 
* Added {{Style=Identifier|RemoveInstanceCertificate}} method to {{Style=Identifier|IEasyUAClientApplication}} service.  
Line 56: Line 75:
 
== Component Refactorings ==
 
== Component Refactorings ==
 
=== OPC Classic ===
 
=== OPC Classic ===
 +
* {{Style=Identifier|ReadItemValue}} and {{Style=Identifier|ReadMultipleItemValues}} are now more strict: previously, they accepted any VTQ that had value in it. Now it requires that the quality must be Good (i.e. they longer accept Uncertain qualities). This may be a breaking change.
 
* Boxing of client-side OPC proxies/stubs is now also available in .NET Core (on Windows), not just in .NET Framework. This means that if your .NET Core application is using OPC Classic, it does not require "OPC Core Components" as a prerequisite.
 
* Boxing of client-side OPC proxies/stubs is now also available in .NET Core (on Windows), not just in .NET Framework. This means that if your .NET Core application is using OPC Classic, it does not require "OPC Core Components" as a prerequisite.
 
* Further aligned the details of behavior between the native and NET API implementations of OPC DA client, especially in the browsing methods.
 
* Further aligned the details of behavior between the native and NET API implementations of OPC DA client, especially in the browsing methods.
  
 +
=== OPC XML-DA ===
 +
* Increased default sizes used in HTTP binding so that communication limits are not exceeded with larger number of items.
 
=== OPC Alarms&Events ===
 
=== OPC Alarms&Events ===
 
* Added overloads with more combinations of parameters to {{Style=Identifier|IEasyAEClientExtension}}.{{Style=Identifier|SubscribeEvents}}, and to{{Style=Identifier|AEEventsSubscriptionArguments}} and {{Style=Identifier|AESubscriptionFilter}} constructors.
 
* Added overloads with more combinations of parameters to {{Style=Identifier|IEasyAEClientExtension}}.{{Style=Identifier|SubscribeEvents}}, and to{{Style=Identifier|AEEventsSubscriptionArguments}} and {{Style=Identifier|AESubscriptionFilter}} constructors.
Line 64: Line 86:
 
* Certificate obtained from GDS is now also stored into the trusted peers certificate store.
 
* Certificate obtained from GDS is now also stored into the trusted peers certificate store.
 
* Improved exceptions from the global discovery client by wrapping them and adding a text explaining which operation has failed, and its main parameters.
 
* Improved exceptions from the global discovery client by wrapping them and adding a text explaining which operation has failed, and its main parameters.
 +
* Introduced a new object, {{Style=Identifier|UAApplicationManifest}}, which holds the application registration information together with data related to PKI administration, such as paths to the certificate stores used.
 +
* Replaced several properties in {{Style=Identifier|UAClientApplicationParameters}} object by a single {{Style=Identifier|ApplicationManifest}} property. Use the following table to upgrade your source code that uses these {{Style=Identifier|UAClientApplicationParameters}} properties:
 +
{| class="wikitable"
 +
|-
 +
!Old!!New
 +
|-
 +
|ApplicationName||ApplicationManifest.ApplicationName
 +
|-
 +
|ApplicationUriString||ApplicationManifest.ApplicationUriString
 +
|-
 +
|ProductUriString||ApplicationManifest.ProductUriString
 +
|-
 +
|ApplicationCertificateSubject||ApplicationManifest.InstanceCertificateSubject
 +
|-
 +
|ApplicationCertificateStore||ApplicationManifest.InstanceOwnStorePath
 +
|-
 +
|}
 +
* Certificate store paths that were previously specified in {{Style=Identifier|UACertificateAcceptancePolicy}} are now set in the {{Style=Identifier|UAClientApplicationParameters}}.{{Style=Identifier|ApplicationManifest}}, with slightly different property names.
 
<!--
 
<!--
 
=== COM Components ===
 
=== COM Components ===
 
-->
 
-->
 +
 
== User Interface ==  
 
== User Interface ==  
 
=== Windows Forms Dialogs ===
 
=== Windows Forms Dialogs ===
Line 78: Line 119:
 
-->
 
-->
 
== Configuration and Instrumentation ==  
 
== Configuration and Instrumentation ==  
* High-level [[Built-in Component Configuration]]: You can set parameters of QuickOPC components externally (using e.g. environment variables, or appsettings.json files), and your software does not have to be prepared upfront.
+
* High-level [[Intrinsic Component Configuration]]: You can set parameters of main QuickOPC components externally (using e.g. environment variables, or appsettings.json files), and your software does not have to be prepared upfront.
 
* High-level programmatic component configuration: You can instantiate the components while passing them a configuration to use.
 
* High-level programmatic component configuration: You can instantiate the components while passing them a configuration to use.
 
* Configuration of diagnostics switches and trace sources is now also possible using the XML ".config" file in .NET Core.
 
* Configuration of diagnostics switches and trace sources is now also possible using the XML ".config" file in .NET Core.
 
* Migrated most event tracing to the new event source mechanism, allowing finer control of the tracing and more distinguished contents in the traces.
 
* Migrated most event tracing to the new event source mechanism, allowing finer control of the tracing and more distinguished contents in the traces.
 +
* Made it possible to configure parameters of HTTP binding for OPC XML-DA in .NET Core/.NET 5.0+ using intrinsic configuration.
 
<!--
 
<!--
 
=== OPC Classic ===
 
=== OPC Classic ===
Line 87: Line 129:
  
 
== Tools and Online Services ==
 
== Tools and Online Services ==
 +
* Made the OpcCmd utility and UADemoPublisher downloads available also for .NET Core 3.1.
 +
* Made the OpcCmd utility and UADemoPublisher downloads available also for .NET 5.0.
 
<!--
 
<!--
 
=== License Manager ===
 
=== License Manager ===
 
-->
 
-->
 
=== OpcCmd Utility ===
 
=== OpcCmd Utility ===
 +
* On first start in interactive mode, the OpcCmd Utility runs an automated application setup. The user is given a choice to select from standard application configurations, such as "OPC Compliance", "Interoperability", or "Testing - Insecure". The default choice is "OPC Compliance".
 +
* Added '''!application setup''' command, which either restarts the interactive application setup (choice of standard configuration), or it can be given a name of a standard configuration non-interactively. Added '''--applicationSetup''' option to force the initial application setup on or off.
 
* Added commands that allow operations on the (read-only) PubSub configuration.
 
* Added commands that allow operations on the (read-only) PubSub configuration.
 
* Added commands that allow operations on the (read-only) PubSub security key service.
 
* Added commands that allow operations on the (read-only) PubSub security key service.
Line 117: Line 163:
 
* More colorized output.
 
* More colorized output.
 
* Added ability to configure the component parameters for OpcCmd externally, using environment variables, JSON files, INI files or XML files.
 
* Added ability to configure the component parameters for OpcCmd externally, using environment variables, JSON files, INI files or XML files.
 +
* Added option to view values as a tree of properties.
 +
* Added option to view values as a nested table of properties.
 +
* Added commands '''aeClient manage''', '''daClient manage''', '''uaClient manage''' and '''uaSubscriber manage''', allowing access (viewing and/or modifications) of static (shared) component parameters.
 +
* Added commands to manage plugin configurations: '''plugin configuration parts?''' and '''plugin configuration part'''.
 +
* Added '''get''' and '''set''' commands for easier work with properties of target objects. Added '''--property''' option for setting the target properties on-the-fly.
 +
* Added '''multiple''' subcommands to '''daClient readItem''', '''daClient subscribeItem''', '''uaClient read''' and '''uaClient subscribe''' commands. The subcommands allow to perform the operation on the same item repeated specified number of times, and for '''uaClient read''' and '''uaClient subscribe''', for specified or all node attributes.
 +
* Added '''aeClient acknowledgeCondition''' command, with ability to select the condition to be acknowledged from events generated by the previous '''subscribeEvents''' command.
 +
* Event output (from various commands) now includes an incrementing event index with each entry.
 +
* Added program options and command options to influence whether events are collected, and whether the collected events are cleared before the command is executed.
 +
* Added '''option''' command to display or set program options, and '''--option''' command option to set the program options for a duration of single command only.
 +
* Added '''--!foregroundColor''' and '''--!backgroundColor''' options to the root command, allowing the user to choose the primary colors used on the console.
 +
* Added '''uaAdministration pki''' command, with subcommands allowing work with certificate store groups, certificate stores, and individual certificates. It is possible to view their contents, import, export and remove certificates, copy and move them, and also easily trust a rejected certificate or reject a previously trusted certificate.
 +
* Added '''applicationStoreGroup''' subcommand under '''uaClientApplication''', allowing to access the certificate store group for the OPC UA client application.
 +
* Added '''exportApplicationConfiguration''' subcommand under '''uaClientApplication'''. The command exports the application configuration in the XML format used by OPC Foundation UA .NET SDK.
 +
* Added '''uaClientApplication getApplicationManifest''' command. The command displays information from the application manifest, i.e. the application registration information together with data related to PKI administration, such as paths to the certificate stores used.
 +
* Added '''uaClientApplication exportApplicationManifest''' command. The command exports the application manifest into an XML file (in format specific to QuickOPC).
 
<!--
 
<!--
 
=== Demo Servers and Publishers ===
 
=== Demo Servers and Publishers ===

Latest revision as of 20:33, 10 March 2021

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

Internal version number: 5.60

Key changes:

  • Initial support for .NET 5.0
  • Support for macOS
  • OPC A&E under .NET Standard


Targeting

  • .NET 5.0 is now a supported .NET runtime. Note: When you develop for .NET 5, 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.
  • QuickOPC now runs and is supported on macOS (in .NET Core 2.1, .NET Core 3.1 or .NET 5.0+, targeting .NET Standard). Features supported are practically the same as for Linux. Most importantly: Supports only OPC XML-DA and OPC Unified architecture (no OPC Classic).
Opccmd-in-macos-daclient.png
  • Removed upper revision number restriction on supported .NET Core 2.1 and .NET Core 3.1 frameworks.
  • Verified functionality under Raspberry Pi OS.
  • OPC Alarms and Events (A&E) is now supported under .NET Standard; on Windows only.

Packaging

  • In .NET Framework, there is now a dependency on various assemblies from Microsoft Platform Extensions. These assemblies are also installed into the Assemblies/net47 folder. QuickOPC NuGet packages properly reference the corresponding Microsoft Platform Extensions NuGet packages (they do not contain the individual referenced assemblies). This increases the number of files you need to deploy. [1]
  • Assemblies that are only used internally are no longer embedded inside the QuickOPC assemblies (this mechanism was used under .NET Framework to reduce the number of files that need to be deployed).[1]
Note2-icon.png

Note: When upgrading from earlier QuickOPC versions, you may have to add a reference to Microsoft.Extensions.Configuration.Abstractions and possibly also Microsoft.Extensions.DependencyInjection.Abstractions assembly (both available under Assemblies\net47 under the product installation directory) to your project. Affected are projects where the QuickOPC components have been instantiated by a code generated by Visual Studio designer, e.g. Windows Forms projects where you have placed some QuickOPC components from the VS Toolbox onto the design area. When instantiating new components in this way in QuickOPC 2021.1, the necessary assembly references are added automatically.

Component Improvements

  • Added FindByName method to ConfigurationPartCollection. The method allows finding the (plug-in) configuration part using just the unqualified name, and possibly ignoring the case.

OPC Classic

  • Common errors related to server connection are now annotated with explanations and possible causes and remedies.

OPC Data Access and OPC XML-DA

  • Many common errors are now annotated with details showing additional pieces of information that have relevance for the error, such as server class, machine name, item ID, property ID, data type, or browse filter.
  • Errors created from OPC NET API results are now extended with descriptive error messages (for errors defined in OPC specifications).

OPC Alarms&Events

  • It is now possible to specify AEBrowseFilter.All in browse parameters passed to IEasyAEClient.BrowseNodes, which allows you to obtain both sources and areas in one call.

OPC UA Client-Server

  • Made many OPC UA error messages more dense, and their content more relevant to the problem.
  • Textual description of OPC UA status code, based on a list of status codes defined in OPC UA specifications, is automatically added to the message, if the description was not provided by the server or SDK.
  • Error messages related to operations on UA nodes are now annotated with the value of the node descriptor used (and, for method calls, also with the method descriptor).
  • Greatly improved all error messages related to parsing of OPC UA node IDs and qualified names.
  • The new OPC-UA Optimizer plugin improves performance of certain OPC UA operations. It is enabled by default.
  • Calls to OPC UA Browse, Read and Write and GetProperty operations that contain identical (except for the State property) arguments are now merged to perform just a operation (request merging). This behavior can be turned off in the OPC-UA Optimizer plugin parameters.
  • Added ExportApplicationConfiguration method to the IEasyUAClientApplication interface. This method exports the application configuration data in the format used by the .NET SDK from OPC Foundation.

OPC UA PubSub

  • Added EasyUASubscriberConfiguration component. Similarly to other such components, allows the static (shared) parameters of the subscriber be configured through a non-visual component in Visual Studio designer, or from COM tools.

Services

  • Added RemoveInstanceCertificate method to IEasyUAClientApplication service.

Component Refactorings

OPC Classic

  • ReadItemValue and ReadMultipleItemValues are now more strict: previously, they accepted any VTQ that had value in it. Now it requires that the quality must be Good (i.e. they longer accept Uncertain qualities). This may be a breaking change.
  • Boxing of client-side OPC proxies/stubs is now also available in .NET Core (on Windows), not just in .NET Framework. This means that if your .NET Core application is using OPC Classic, it does not require "OPC Core Components" as a prerequisite.
  • Further aligned the details of behavior between the native and NET API implementations of OPC DA client, especially in the browsing methods.

OPC XML-DA

  • Increased default sizes used in HTTP binding so that communication limits are not exceeded with larger number of items.

OPC Alarms&Events

  • Added overloads with more combinations of parameters to IEasyAEClientExtension.SubscribeEvents, and toAEEventsSubscriptionArguments and AESubscriptionFilter constructors.

OPC UA

  • Certificate obtained from GDS is now also stored into the trusted peers certificate store.
  • Improved exceptions from the global discovery client by wrapping them and adding a text explaining which operation has failed, and its main parameters.
  • Introduced a new object, UAApplicationManifest, which holds the application registration information together with data related to PKI administration, such as paths to the certificate stores used.
  • Replaced several properties in UAClientApplicationParameters object by a single ApplicationManifest property. Use the following table to upgrade your source code that uses these UAClientApplicationParameters properties:
Old New
ApplicationName ApplicationManifest.ApplicationName
ApplicationUriString ApplicationManifest.ApplicationUriString
ProductUriString ApplicationManifest.ProductUriString
ApplicationCertificateSubject ApplicationManifest.InstanceCertificateSubject
ApplicationCertificateStore ApplicationManifest.InstanceOwnStorePath
  • Certificate store paths that were previously specified in UACertificateAcceptancePolicy are now set in the UAClientApplicationParameters.ApplicationManifest, with slightly different property names.

User Interface

Windows Forms Dialogs

  • Added ClientSelector property to DAItemDialog and DAPropertyDialog classes. This property allows the developer to set the parameters of the EasyDAClient object used to perform the browsing operations of the dialog.

Configuration and Instrumentation

  • High-level Intrinsic Component Configuration: You can set parameters of main QuickOPC components externally (using e.g. environment variables, or appsettings.json files), and your software does not have to be prepared upfront.
  • High-level programmatic component configuration: You can instantiate the components while passing them a configuration to use.
  • Configuration of diagnostics switches and trace sources is now also possible using the XML ".config" file in .NET Core.
  • Migrated most event tracing to the new event source mechanism, allowing finer control of the tracing and more distinguished contents in the traces.
  • Made it possible to configure parameters of HTTP binding for OPC XML-DA in .NET Core/.NET 5.0+ using intrinsic configuration.

Tools and Online Services

  • Made the OpcCmd utility and UADemoPublisher downloads available also for .NET Core 3.1.
  • Made the OpcCmd utility and UADemoPublisher downloads available also for .NET 5.0.

OpcCmd Utility

  • On first start in interactive mode, the OpcCmd Utility runs an automated application setup. The user is given a choice to select from standard application configurations, such as "OPC Compliance", "Interoperability", or "Testing - Insecure". The default choice is "OPC Compliance".
  • Added !application setup command, which either restarts the interactive application setup (choice of standard configuration), or it can be given a name of a standard configuration non-interactively. Added --applicationSetup option to force the initial application setup on or off.
  • Added commands that allow operations on the (read-only) PubSub configuration.
  • Added commands that allow operations on the (read-only) PubSub security key service.
  • Added aeClient command, providing access to OPC A&E functionality. Available subcommands are browseNodes, browseServers, getConditionState, subscribeEvents, queryEventCategories and querySourceConditions.
  • Added ability to obtain browse results as a tree (with --tree|-t command option).
  • Made OpcCmd utility available as ClickOnce application (in addition to existing formats).
  • Structured values are, by default, outputted with a formatted dump of their properties.
  • Sequences are now outputted as formatted, colorized tables.
  • Added commands and options to allow influencing how values, sequences and forests are displayed.
  • Improved usage examples in the utility.
  • Added ua nodeId and ua qualifiedName commands, with ability to look up standard names, and print out tables of standard OPC UA node IDs and qualified names.
  • Added daClient browseAccessPaths command.
  • Added commands that allow to interrogate the PubSub configuration model in the server.
  • Added ... getService licenseInfoProvider command, with licenseInfo? subcommand, for displaying license information.
  • Made OpcCmd option values case insensitive by default, and allowed the case sensitivity be controlled by using the property Options.CaseSensitive.
  • Allowed enumerated names (in arguments and options) be abbreviated to an unambiguous prefix, shortening the command if the user prefers that. Whether abbreviations are allowed can be controlled by using the property Options.Abbreviations.
  • Added command (events?, shortened: ev?) to show the events collected during the last command.
  • Added command (result?, shortened: r?) to show the result of the last command.
  • Added possibility to browse sequences element by element, controlled by the keyboard.
  • Added commands (under !diagnostics switches) to view the trace switches and obtain and modify their values (names?, infos?, getInfo, getValue, setValue subcommands).
  • Added commands to display (!diagnostics trace entries?) and clear (!diagnostics trace clear) the trace entries collected by the program.
  • Added standard subcommand to display trace entries collection during the last command (traceEntries?, shortened: te?).
  • Added command to replay the collected trace to a selected listener (!diagnostics trace entries? replayTo).
  • Added commands (under !diagnostics sources) to view the trace sources and obtain and modify their associated values (names?, infos?, getInfo, getSwitchValue, setSwitchValue subcommands).
  • In interactive mode, the console window is now automatically resized to a larger size. Added options to control the minimum window height and width.
  • More colorized output.
  • Added ability to configure the component parameters for OpcCmd externally, using environment variables, JSON files, INI files or XML files.
  • Added option to view values as a tree of properties.
  • Added option to view values as a nested table of properties.
  • Added commands aeClient manage, daClient manage, uaClient manage and uaSubscriber manage, allowing access (viewing and/or modifications) of static (shared) component parameters.
  • Added commands to manage plugin configurations: plugin configuration parts? and plugin configuration part.
  • Added get and set commands for easier work with properties of target objects. Added --property option for setting the target properties on-the-fly.
  • Added multiple subcommands to daClient readItem, daClient subscribeItem, uaClient read and uaClient subscribe commands. The subcommands allow to perform the operation on the same item repeated specified number of times, and for uaClient read and uaClient subscribe, for specified or all node attributes.
  • Added aeClient acknowledgeCondition command, with ability to select the condition to be acknowledged from events generated by the previous subscribeEvents command.
  • Event output (from various commands) now includes an incrementing event index with each entry.
  • Added program options and command options to influence whether events are collected, and whether the collected events are cleared before the command is executed.
  • Added option command to display or set program options, and --option command option to set the program options for a duration of single command only.
  • Added --!foregroundColor and --!backgroundColor options to the root command, allowing the user to choose the primary colors used on the console.
  • Added uaAdministration pki command, with subcommands allowing work with certificate store groups, certificate stores, and individual certificates. It is possible to view their contents, import, export and remove certificates, copy and move them, and also easily trust a rejected certificate or reject a previously trusted certificate.
  • Added applicationStoreGroup subcommand under uaClientApplication, allowing to access the certificate store group for the OPC UA client application.
  • Added exportApplicationConfiguration subcommand under uaClientApplication. The command exports the application configuration in the XML format used by OPC Foundation UA .NET SDK.
  • Added uaClientApplication getApplicationManifest command. The command displays information from the application manifest, i.e. the application registration information together with data related to PKI administration, such as paths to the certificate stores used.
  • Added uaClientApplication exportApplicationManifest command. The command exports the application manifest into an XML file (in format specific to QuickOPC).

Connectivity Explorer

  • Added "Remove Instance Certificate" command (on the "OPC Unified Architecture" connectivity node).


  1. 1.0 1.1 Until this version, we have attempted to keep the number of product assemblies, and referenced assemblies that are not part of the shared framework, to minimum. We tried hard, but it was not really feasible to keep following this principle, if we wanted to move the product forward. We understand that deploying a larger number of assemblies can be a nuisance for some users, but believe us, we have not taken the decision lightly.