What's new in QuickOPC 2021.1
Jump to navigation Jump to search
Internal version number: 5.60
- Initial support for .NET 5.0
- Support for macOS
- 1 Targeting
- 2 Packaging
- 3 Component Improvements
- 4 Component Refactorings
- 5 User Interface
- 6 Configuration and Instrumentation
- 7 Tools and Online Services
- .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 feature 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).
- Removed upper revision number restriction on supported .NET Core 2.1 and .NET Core 3.1 frameworks.
- Verified functionality under Raspberry Pi OS.
- 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. 
- 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).
- Added FindByName method to ConfigurationPartCollection. The method allows finding the (plug-in) configuration part using just the unqualified name, and possibly ignoring the case.
- 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 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).
- 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.
- Added RemoveInstanceCertificate method to IEasyUAClientApplication service.
- 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).
- 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.
- Increased default sizes used in HTTP binding so that communication limits are not exceeded with larger number of items.
- Added overloads with more combinations of parameters to IEasyAEClientExtension.SubscribeEvents, and toAEEventsSubscriptionArguments and AESubscriptionFilter constructors.
- 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.
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.
- 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 "Remove Instance Certificate" command (on the "OPC Unified Architecture" connectivity node).
- 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.