What’s New in QuickOPC 5.22: Difference between revisions
From OPC Labs Knowledge Base
(Created page with "''Key changes: Improvements in OPC Unified Architecture'' == User Interface == === OPC Unified Architecture === * A new node, labeled “Any”, appears in UABrowseDialog, UA...") |
No edit summary |
||
(12 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
[[Category:.NET]] [[Category:COM]] [[Category:OPC UA]] [[Category:What's New]] | |||
Previous: [[What’s New in QuickOPC 5.21]] | |||
''Key changes: Improvements in OPC Unified Architecture'' | ''Key changes: Improvements in OPC Unified Architecture'' | ||
== User Interface == | == User Interface == | ||
=== OPC Unified Architecture === | === OPC Unified Architecture === | ||
* A new node, labeled “Any”, appears in UABrowseDialog, UADataDialog and UAHostAndEndpointDialog, under the “Hosts” node. The user can manually add any server endpoint under this node (by typing its endpoint URL), even for hosts that are not exposed through discovery. | * A new node, labeled “Any”, appears in '''UABrowseDialog''', '''UADataDialog''' and '''UAHostAndEndpointDialog''', under the “Hosts” node. The user can manually add any server endpoint under this node (by typing its endpoint URL), even for hosts that are not exposed through discovery. | ||
* The UADataDialog now supports a different mode, activated by setting the UserPickEndpoint property to true. In this mode, the user is not limited to nodes from a pre-set OPC-UA server; instead, the user starts with choosing the host and server endpoint. | * The '''UADataDialog''' now supports a different mode, activated by setting the '''UserPickEndpoint''' property to true. In this mode, the user is not limited to nodes from a pre-set OPC-UA server; instead, the user starts with choosing the host and server endpoint. The '''EndpointDescriptor''' property in this mode contains the chosen endpoint, or (in case of multi-select) there is a new '''EndpointDescriptors''' property, with endpoint information for each selected node. | ||
=== OPC Alarms and Events === | === OPC Alarms and Events === | ||
* The OpcBrowseDialog component now supports two new values for its SelectElementType property: OpcElementType.SourceCondition and OpcElementType.SourceSubcondition. These settings allow browsing for conditions and subconditions associated with an event source node. | * The '''OpcBrowseDialog''' component now supports two new values for its '''SelectElementType''' property: '''OpcElementType.SourceCondition''' and '''OpcElementType.SourceSubcondition'''. These settings allow browsing for conditions and subconditions associated with an event source node. | ||
== Components Core == | == Components Core == | ||
=== All Supported OPC Specifications === | === All Supported OPC Specifications === | ||
* The Isolated flag of EasyDAClient.ClientMode, EasyAEClient.ClientMode and EasyUAClient.ClientMode becomes EasyDAClient.Isolated, EasyAEClient.Isolated and EasyUAClient.Isolated. | * The '''Isolated''' flag of '''EasyDAClient.ClientMode''', '''EasyAEClient.ClientMode''' and '''EasyUAClient.ClientMode''' becomes '''EasyDAClient.Isolated''', '''EasyAEClient.Isolated''' and '''EasyUAClient.Isolated'''. | ||
* The LicensingException class has been removed, and Microsoft’s System.ComponentModel.LicenseException is used instead. | * The '''LicensingException''' class has been removed, and Microsoft’s '''System.ComponentModel.LicenseException''' is used instead. | ||
=== OPC Unified Architecture === | === OPC Unified Architecture === | ||
* The OPC Unified Architecture components are based on version 1.02 of the .NET Stack from OPC Foundation. | * The OPC Unified Architecture components are based on version 1.02 of the .NET Stack from OPC Foundation. | ||
* The component now attempts to detect whether a debugger is attached to the application, and if so, it uses a different, much slower keep-alive interval (this keep-alive interval is controlled by the UASessionParameters.KeepAliveIntervalDebug property, and defaults to 1 day). This allows the developer to break into the debugger and examine the status of the program, without causing the OPC-UA sessions be disconnected due to the fact that keep-alives are not being exchanged while the execution is suspended. | * The component now attempts to detect whether a debugger is attached to the application, and if so, it uses a different, much slower keep-alive interval (this keep-alive interval is controlled by the '''UASessionParameters.KeepAliveIntervalDebug''' property, and defaults to 1 day). This allows the developer to break into the debugger and examine the status of the program, without causing the OPC-UA sessions be disconnected due to the fact that keep-alives are not being exchanged while the execution is suspended. | ||
* The AttributeType (AttributeTypeCode) property of UAWriteArguments and UAWriteValueArguments has been removed. The component now determines the type based on the AttributeId. This works for all attributes except the Value attribute. When writing to a Value attribute, the type is given by a new ValueType (or ValueTypeCode) property. | * The '''AttributeType''' ('''AttributeTypeCode''') property of '''UAWriteArguments''' and '''UAWriteValueArguments''' has been removed. The component now determines the type based on the '''AttributeId'''. This works for all attributes except the '''Value''' attribute. When writing to a '''Value''' attribute, the type is given by a new '''ValueType''' (or '''ValueTypeCode''') property. | ||
* Similarly, the AttributeType (AttributeTypeCode) property in UADataBinding has been made obsolete. The new developments should use ValueType (ValueTypeCode) property instead, and it is only needed when the Value attribute is being bound. | * Similarly, the '''AttributeType''' ('''AttributeTypeCode''') property in '''UADataBinding''' has been made obsolete. The new developments should use '''ValueType''' ('''ValueTypeCode''') property instead, and it is only needed when the Value attribute is being bound. | ||
* When writing to the Value attribute, unless the value type is given explicitly in the code, QuickOPC-UA now reads the DataType and ValueRank attributes of the given node, and determines the value type from the OPC-UA server. This gives more convenience, as the value type does not have to be specified in wider range of cases, but the developer should be aware of possible negative performance implications. | * When writing to the '''Value''' attribute, unless the value type is given explicitly in the code, QuickOPC-UA now reads the '''DataType''' and '''ValueRank''' attributes of the given node, and determines the value type from the OPC-UA server. This gives more convenience, as the value type does not have to be specified in wider range of cases, but the developer should be aware of possible negative performance implications. | ||
* Added overloads of EasyUAClient.Write and WriteValue methods that accept the attribute Id argument. | * Added overloads of '''EasyUAClient.Write''' and '''WriteValue''' methods that accept the attribute Id argument. | ||
* The WriteMultiple and WriteMultipleValues | * The '''WriteMultiple''' and '''WriteMultipleValues''' methods of '''EasyUAClient''' now return '''UAWriteResult''' instead of '''OperationResult'''. The '''UAWriteResult''' contains additional information in case of Write success: the '''Clamped''' flag and the '''CompletesAsynchronously''' flag. | ||
* The new IncludeSubtypes flag in UABrowseParameters determines whether subtypes of the specified reference type should be returned by the browsing. | * The new '''IncludeSubtypes''' flag in '''UABrowseParameters''' determines whether subtypes of the specified reference type should be returned by the browsing. | ||
* A new LocaleId property on the EasyUAClient.SessionParameters allows the developer to specify the Locale id to be used by the OPC-UA server for localized strings. | * A new '''LocaleId''' property on the '''EasyUAClient.SessionParameters''' allows the developer to specify the Locale id to be used by the OPC-UA server for localized strings. | ||
* You can now call a static method EasyUAClient.CloseAll to close all unused sessions that are open to OPC-UA servers. | * You can now call a static method '''EasyUAClient.CloseAll''' to close all unused sessions that are open to OPC-UA servers. | ||
* Added a new overload of the EasyUAClient.DiscoverServers method that takes an input array or URL strings to attempt discovery on, and a flag indicating whether the discovery should be made in parallel. | * Added a new overload of the '''EasyUAClient.DiscoverServers''' method that takes an input array or URL strings to attempt discovery on, and a flag indicating whether the discovery should be made in parallel. | ||
* The component now internally subscribes to and monitors the State value in the ServerStatus of the OPC-UA server. If the server indicates that it is being shut down, the component disconnects from the server. A reconnection attempt will be made after a period configurable by the EasyUAClient.SessionParameters.ServerShutdownRetrialPeriod property. | * The component now internally subscribes to and monitors the State value in the '''ServerStatus''' of the OPC-UA server. If the server indicates that it is being shut down, the component disconnects from the server. A reconnection attempt will be made after a period configurable by the '''EasyUAClient.SessionParameters.ServerShutdownRetrialPeriod''' property. | ||
* The UAObjectIds class now contains much more objects – in fact, it contains all objects defined by the OPC-UA Specification. Some objects have been renamed in order to keep 100% alignment with the standard OPC-UA Information Model, e.g. Objects is now ObjectsFolder, Root is now RootFolder, etc. The old names have been preserved but made obsolete. | * The '''UAObjectIds''' class now contains much more objects – in fact, it contains all objects defined by the OPC-UA Specification. Some objects have been renamed in order to keep 100% alignment with the standard OPC-UA Information Model, e.g. '''Objects''' is now '''ObjectsFolder''', '''Root''' is now '''RootFolder''', etc. The old names have been preserved but made obsolete. | ||
* Completed parsing support for extended OPC-UA browsing paths (with the use of [] notation, and namespaces specified by their URI; both for references and for targets). | * Completed parsing support for extended OPC-UA browsing paths (with the use of [] notation, and namespaces specified by their URI; both for references and for targets). | ||
* Added a ‘+’ operator to BrowsePath and UABrowsePath. Consequently, a ‘+=’ (in C#) is available as well. This allows easy appending of browse name (or browse element) to the browse path. | * Added a ‘+’ operator to '''BrowsePath''' and '''UABrowsePath'''. Consequently, a ‘+=’ (in C#) is available as well. This allows easy appending of browse name (or browse element) to the browse path. | ||
* There is now an implicit conversion from UAQualifiedName to UABrowsePathElement, resulting in shorter code for creation of OPC-UA browse paths in some cases. | * There is now an implicit conversion from '''UAQualifiedName''' to '''UABrowsePathElement''', resulting in shorter code for creation of OPC-UA browse paths in some cases. | ||
* There is now an implicit conversion from an integer (Int32) to a UAIndexRange, therefore an index range containing just a single element can be written simply as the element index, without explicitly constructing the UAIndexRange object. | * There is now an implicit conversion from an integer ('''Int32''') to a '''UAIndexRange''', therefore an index range containing just a single element can be written simply as the element index, without explicitly constructing the '''UAIndexRange''' object. | ||
* One-dimensional index range lists can now be easily constructed using the UAIndexRangeList.OneDimension static method, passing it either the single index, or minimum and maximum indices. | * One-dimensional index range lists can now be easily constructed using the '''UAIndexRangeList.OneDimension''' static method, passing it either the single index, or minimum and maximum indices. | ||
* Added EasyUAClient.HostParameters and DiscoveryParameters properties. Moved parts (mainly discovery-related) of EasyUAEngine.EngineParameters to these new objects. Also, added corresponding EasyUAClient.IsolatedHostParameters and IsolatedDiscoveryParameters properties. | * Added '''EasyUAClient.HostParameters''' and '''DiscoveryParameters''' properties. Moved parts (mainly discovery-related) of '''EasyUAEngine.EngineParameters''' to these new objects. Also, added corresponding '''EasyUAClient.IsolatedHostParameters''' and '''IsolatedDiscoveryParameters''' properties. | ||
* The SessionHoldPeriod of EasyUAClient.EngineParameters becomes a HoldPeriod of EasyUAClient.SessionParameters. | * The '''SessionHoldPeriod''' of '''EasyUAClient.EngineParameters''' becomes a '''HoldPeriod''' of '''EasyUAClient.SessionParameters'''. | ||
=== OPC Data Access === | === OPC Data Access === | ||
* By checking the “Non-variant arrays” box in EasyOPC Options Utility -> OPC-DA Globals -> Engine Parameters, the developer indicates that the hosting application does not want all arrays | * By checking the “Non-variant arrays” box in EasyOPC Options Utility -> OPC-DA Globals -> Engine Parameters, the developer indicates that the hosting application does not want all arrays provided by OPC-DA servers be converted to arrays of VARIANTs. | ||
=== OPC Alarms and Events === | === OPC Alarms and Events === | ||
* A new method on EasyAEClient object, QuerySourceConditions, allows to obtain the event conditions associated with the givens source. This new method is available both in COM and .NET components. | * A new method on '''EasyAEClient''' object, '''QuerySourceConditions''', allows to obtain the event conditions associated with the givens source. This new method is available both in COM and .NET components. | ||
* By checking the “Non-variant arrays” box in EasyOPC Options Utility -> OPC-A&E Globals -> Engine Parameters, the developer indicates that the hosting application does not want all arrays | * By checking the “Non-variant arrays” box in EasyOPC Options Utility -> OPC-A&E Globals -> Engine Parameters, the developer indicates that the hosting application does not want all arrays provided by OPC-A&E servers be converted to arrays of VARIANTs. | ||
== Development Models == | == Development Models == | ||
=== All Supported OPC Specifications === | === All Supported OPC Specifications === | ||
* Live Mapping: Added support for mapping tags (using the MappingTag attribute). Mapped members can be tagged with one or more tags. When performing operations, the developer can specify that only members with certain tag, or combination of tags, will be affected. | * Live Mapping: Added support for mapping tags (using the '''MappingTag''' attribute). Mapped members can be tagged with one or more tags. When performing operations, the developer can specify that only members with certain tag, or combination of tags, will be affected. | ||
* Live Mapping: Added support for deferred mapping (the mapped object does not have to exist at the time of mapping, but instead a deferred mapping function provides it dynamically, when it is referenced). | * Live Mapping: Added support for deferred mapping (the mapped object does not have to exist at the time of mapping, but instead a deferred mapping function provides it dynamically, when it is referenced). | ||
=== OPC Unified Architecture === | === OPC Unified Architecture === | ||
* Added OPC-UA Modelling (preliminary). This development model automatically provides .NET objects that logically correspond to OPC-UA information model. The operative parts of this model are internally implemented using Live Mapping. Currently, only certain standard OPC-UA variable types are supported; custom types are not yet available. Supported concrete classes include: UAPropertyNode, UABaseDataVariableNode; for UA Data Access: UADataItemNode, UAAnalogItemNode, UATwoStateDiscreteNode, UAMultiStateDiscreteNode. | * Added OPC-UA Modelling (preliminary). This development model automatically provides .NET objects that logically correspond to OPC-UA information model. The operative parts of this model are internally implemented using Live Mapping. Currently, only certain standard OPC-UA variable types are supported; custom types are not yet available. Supported concrete classes include: '''UAPropertyNode''', '''UABaseDataVariableNode'''; for UA Data Access: '''UADataItemNode''', '''UAAnalogItemNode''', '''UATwoStateDiscreteNode''', '''UAMultiStateDiscreteNode'''. | ||
== Security == | == Security == | ||
=== OPC Unified Architecture === | === OPC Unified Architecture === | ||
* Added property UACertificateAcceptancePolicy.AllowUserAcceptCertificate (defaults to true). When the component is run in user-interactive mode, the user can be prompted to accept a server certificate that have otherwise failed the certificate validation process. | * Added property '''UACertificateAcceptancePolicy.AllowUserAcceptCertificate''' (defaults to true). When the component is run in user-interactive mode, the user can be prompted to accept a server certificate that have otherwise failed the certificate validation process. | ||
* Added static methods to UAUserIdentity object for easy creation of various user tokens: CreateAnonymousIdentity, CreateKerberosIdentity, CreateUserNameIdentity, and CreateX509Certificate. | * Added static methods to '''UAUserIdentity''' object for easy creation of various user tokens: '''CreateAnonymousIdentity''', '''CreateKerberosIdentity''', '''CreateUserNameIdentity''', and '''CreateX509Certificate'''. | ||
* The subject name of the application instance certificate that is used or created by the component can now be set using the EasyUAClient.EngineParameters.ApplicationCertificateSubject property. Other properties of the certificate, as well as client description used when opening a session, can be changed using EasyUAClient.EngineParameters.ApplicationName, ApplicationUriString, and ProductUriString properties. | * The subject name of the application instance certificate that is used or created by the component can now be set using the '''EasyUAClient.EngineParameters.ApplicationCertificateSubject''' property. Other properties of the certificate, as well as client description used when opening a session, can be changed using '''EasyUAClient.EngineParameters.ApplicationName''', '''ApplicationUriString''', and '''ProductUriString''' properties. | ||
* The new AllowedMessageSecurityModes property of the UAEndpointSelectionPolicy gives you a possibility to completely enable or disable certain classes of endpoints from selection, based on their security mode. You can combine the value of this property from SecurityNone, SecuritySign, and SecuritySignAndEncrypt flags. The default value allows all types of endpoints be selected. | * The new '''AllowedMessageSecurityModes''' property of the '''UAEndpointSelectionPolicy''' gives you a possibility to completely enable or disable certain classes of endpoints from selection, based on their security mode. You can combine the value of this property from '''SecurityNone''', '''SecuritySign''', and '''SecuritySignAndEncrypt''' flags. The default value allows all types of endpoints be selected. | ||
* The PreferMessageSecurity property of the UAEndpointSelectionPolicy has been renamed to MessageSecurityPreference, and it now has three possible values: Negative (to prefer non-secure endpoints), None (to follow server-provided endpoint security level), and Positive (to prefer secure endpoints). | * The '''PreferMessageSecurity''' property of the '''UAEndpointSelectionPolicy''' has been renamed to '''MessageSecurityPreference''', and it now has three possible values: '''Negative''' (to prefer non-secure endpoints), '''None''' (to follow server-provided endpoint security level), and '''Positive''' (to prefer secure endpoints). | ||
== Diagnostics == | == Diagnostics == | ||
=== All Supported OPC Specifications === | === All Supported OPC Specifications === | ||
* The OperationResult object (and therefore all result objects derived from it as well) now has a Diagnostics property, which contains a collection of warning and informational diagnostics entries gathered, performing the requested operation. Currently, the diagnostics information is only filled in for OPC-UA operations. | * The '''OperationResult''' object (and therefore all result objects derived from it as well) now has a '''Diagnostics''' property, which contains a collection of warning and informational diagnostics entries gathered, performing the requested operation. Currently, the diagnostics information is only filled in for OPC-UA operations. | ||
* The additional OperationResult.DiagnosticsSummary string contains a textual summary of diagnostics information, one message per line. | * The additional '''OperationResult.DiagnosticsSummary''' string contains a textual summary of diagnostics information, one message per line. | ||
OPC Unified Architecture | === OPC Unified Architecture === | ||
* A new DiagnosticsMasks property on the EasyUAClient.SessionParameters allows the developer to specify the types of vendor-specific diagnostics to be returned by the OPC-UA server in the responses. The information from the server responses is then made available in the Diagnostics collection of OperationResult objects. | * A new '''DiagnosticsMasks''' property on the '''EasyUAClient.SessionParameters''' allows the developer to specify the types of vendor-specific diagnostics to be returned by the OPC-UA server in the responses. The information from the server responses is then made available in the '''Diagnostics''' collection of '''OperationResult''' objects. | ||
* EasyUAClient now detects stale timestamps. | * '''EasyUAClient''' now detects stale timestamps. | ||
* EasyUAClient now detects missing timestamps. | * '''EasyUAClient''' now detects missing timestamps. | ||
* EasyUAClient now checks the server signature. | * '''EasyUAClient''' now checks the server signature. | ||
* EasyUAClient now checks the server nonce. | * '''EasyUAClient''' now checks the server nonce. | ||
* EasyUAClient now thoroughly checks the outcomes of the CreateSession. | * '''EasyUAClient''' now thoroughly checks the outcomes of the '''CreateSession'''. | ||
* EasyUAClient now performs many other checks required by OPC compliance test. | * '''EasyUAClient''' now performs many other checks required by OPC compliance test. | ||
== Instrumentation == | == Instrumentation == | ||
=== OPC Unified Architecture === | === OPC Unified Architecture === | ||
* The EasyUAClient component now has a static LogEntry event. This event is raised for loggable entries originating in the OPC-UA client engine and the EasyUAClient component. Each event notification carries a LogEntryEventArgs object, which contains information such as the source of the event, the event message, event type | * The '''EasyUAClient''' component now has a static '''LogEntry''' event. This event is raised for loggable entries originating in the OPC-UA client engine and the '''EasyUAClient''' component. Each event notification carries a '''LogEntryEventArgs''' object, which contains information such as the source of the event, the event message, event type, timestamp, etc. The component does not store log the events on itself, but the developer can receive the notifications and implement any kind of logging with them. | ||
== Performance == | == Performance == | ||
* Build 397.1: Significantly improved speed of EasyDAClient.GetPropertyValue and GetMultiplePropertyValues methods. | * Build 397.1: Significantly improved speed of '''EasyDAClient.GetPropertyValue''' and '''GetMultiplePropertyValues''' methods. | ||
== Examples == | == Examples == | ||
* The OPC-UA Demo Application now uses the UAHostAndEndpointDialog, making it possible for the user to also browse for servers on hosts other than the local host. | * The OPC-UA Demo Application now uses the '''UAHostAndEndpointDialog''', making it possible for the user to also browse for servers on hosts other than the local host. | ||
* Added new VBA examples in Excel (using QuickOPC-COM): ReadAndWriteValue.xls, ReadAndDisplayMultipleValues.xls, | * Added new VBA examples in Excel (using QuickOPC-COM): '''ReadAndWriteValue.xls''', '''ReadAndDisplayMultipleValues.xls''', '''SubscribeToMultipleItems.xls'''. | ||
== Tools == | == Tools == | ||
* Test Tools for .NET have been added to the installation. There are two separate testing tools: One for OPC “Classic”, and one for OPC Unified Architecture. The tools allow exploration of various API objects and members, testing of the UI dialogs, live data view with multiple items, etc. The test tools are not installed by default; you need to select “Custom Install”, and then specifically enable them on the “Select Components” page in in the installation wizards. After installation, the test tools can be reached through the Start menu, in the “Test Tools” group under product menu. | * Test Tools for .NET have been added to the installation. There are two separate testing tools: One for OPC “Classic”, and one for OPC Unified Architecture. The tools allow exploration of various API objects and members, testing of the UI dialogs, live data view with multiple items, etc. The test tools are not installed by default; you need to select “Custom Install”, and then specifically enable them on the “Select Components” page in in the installation wizards. After installation, the test tools can be reached through the Start menu, in the “Test Tools” group under product menu. | ||
== Documentation and Help == | == Documentation and Help == | ||
* Added a document describing the Test Tools. | * Added a document describing the Test Tools. |
Latest revision as of 06:04, 14 August 2016
Previous: What’s New in QuickOPC 5.21
Key changes: Improvements in OPC Unified Architecture
User Interface
OPC Unified Architecture
- A new node, labeled “Any”, appears in UABrowseDialog, UADataDialog and UAHostAndEndpointDialog, under the “Hosts” node. The user can manually add any server endpoint under this node (by typing its endpoint URL), even for hosts that are not exposed through discovery.
- The UADataDialog now supports a different mode, activated by setting the UserPickEndpoint property to true. In this mode, the user is not limited to nodes from a pre-set OPC-UA server; instead, the user starts with choosing the host and server endpoint. The EndpointDescriptor property in this mode contains the chosen endpoint, or (in case of multi-select) there is a new EndpointDescriptors property, with endpoint information for each selected node.
OPC Alarms and Events
- The OpcBrowseDialog component now supports two new values for its SelectElementType property: OpcElementType.SourceCondition and OpcElementType.SourceSubcondition. These settings allow browsing for conditions and subconditions associated with an event source node.
Components Core
All Supported OPC Specifications
- The Isolated flag of EasyDAClient.ClientMode, EasyAEClient.ClientMode and EasyUAClient.ClientMode becomes EasyDAClient.Isolated, EasyAEClient.Isolated and EasyUAClient.Isolated.
- The LicensingException class has been removed, and Microsoft’s System.ComponentModel.LicenseException is used instead.
OPC Unified Architecture
- The OPC Unified Architecture components are based on version 1.02 of the .NET Stack from OPC Foundation.
- The component now attempts to detect whether a debugger is attached to the application, and if so, it uses a different, much slower keep-alive interval (this keep-alive interval is controlled by the UASessionParameters.KeepAliveIntervalDebug property, and defaults to 1 day). This allows the developer to break into the debugger and examine the status of the program, without causing the OPC-UA sessions be disconnected due to the fact that keep-alives are not being exchanged while the execution is suspended.
- The AttributeType (AttributeTypeCode) property of UAWriteArguments and UAWriteValueArguments has been removed. The component now determines the type based on the AttributeId. This works for all attributes except the Value attribute. When writing to a Value attribute, the type is given by a new ValueType (or ValueTypeCode) property.
- Similarly, the AttributeType (AttributeTypeCode) property in UADataBinding has been made obsolete. The new developments should use ValueType (ValueTypeCode) property instead, and it is only needed when the Value attribute is being bound.
- When writing to the Value attribute, unless the value type is given explicitly in the code, QuickOPC-UA now reads the DataType and ValueRank attributes of the given node, and determines the value type from the OPC-UA server. This gives more convenience, as the value type does not have to be specified in wider range of cases, but the developer should be aware of possible negative performance implications.
- Added overloads of EasyUAClient.Write and WriteValue methods that accept the attribute Id argument.
- The WriteMultiple and WriteMultipleValues methods of EasyUAClient now return UAWriteResult instead of OperationResult. The UAWriteResult contains additional information in case of Write success: the Clamped flag and the CompletesAsynchronously flag.
- The new IncludeSubtypes flag in UABrowseParameters determines whether subtypes of the specified reference type should be returned by the browsing.
- A new LocaleId property on the EasyUAClient.SessionParameters allows the developer to specify the Locale id to be used by the OPC-UA server for localized strings.
- You can now call a static method EasyUAClient.CloseAll to close all unused sessions that are open to OPC-UA servers.
- Added a new overload of the EasyUAClient.DiscoverServers method that takes an input array or URL strings to attempt discovery on, and a flag indicating whether the discovery should be made in parallel.
- The component now internally subscribes to and monitors the State value in the ServerStatus of the OPC-UA server. If the server indicates that it is being shut down, the component disconnects from the server. A reconnection attempt will be made after a period configurable by the EasyUAClient.SessionParameters.ServerShutdownRetrialPeriod property.
- The UAObjectIds class now contains much more objects – in fact, it contains all objects defined by the OPC-UA Specification. Some objects have been renamed in order to keep 100% alignment with the standard OPC-UA Information Model, e.g. Objects is now ObjectsFolder, Root is now RootFolder, etc. The old names have been preserved but made obsolete.
- Completed parsing support for extended OPC-UA browsing paths (with the use of [] notation, and namespaces specified by their URI; both for references and for targets).
- Added a ‘+’ operator to BrowsePath and UABrowsePath. Consequently, a ‘+=’ (in C#) is available as well. This allows easy appending of browse name (or browse element) to the browse path.
- There is now an implicit conversion from UAQualifiedName to UABrowsePathElement, resulting in shorter code for creation of OPC-UA browse paths in some cases.
- There is now an implicit conversion from an integer (Int32) to a UAIndexRange, therefore an index range containing just a single element can be written simply as the element index, without explicitly constructing the UAIndexRange object.
- One-dimensional index range lists can now be easily constructed using the UAIndexRangeList.OneDimension static method, passing it either the single index, or minimum and maximum indices.
- Added EasyUAClient.HostParameters and DiscoveryParameters properties. Moved parts (mainly discovery-related) of EasyUAEngine.EngineParameters to these new objects. Also, added corresponding EasyUAClient.IsolatedHostParameters and IsolatedDiscoveryParameters properties.
- The SessionHoldPeriod of EasyUAClient.EngineParameters becomes a HoldPeriod of EasyUAClient.SessionParameters.
OPC Data Access
- By checking the “Non-variant arrays” box in EasyOPC Options Utility -> OPC-DA Globals -> Engine Parameters, the developer indicates that the hosting application does not want all arrays provided by OPC-DA servers be converted to arrays of VARIANTs.
OPC Alarms and Events
- A new method on EasyAEClient object, QuerySourceConditions, allows to obtain the event conditions associated with the givens source. This new method is available both in COM and .NET components.
- By checking the “Non-variant arrays” box in EasyOPC Options Utility -> OPC-A&E Globals -> Engine Parameters, the developer indicates that the hosting application does not want all arrays provided by OPC-A&E servers be converted to arrays of VARIANTs.
Development Models
All Supported OPC Specifications
- Live Mapping: Added support for mapping tags (using the MappingTag attribute). Mapped members can be tagged with one or more tags. When performing operations, the developer can specify that only members with certain tag, or combination of tags, will be affected.
- Live Mapping: Added support for deferred mapping (the mapped object does not have to exist at the time of mapping, but instead a deferred mapping function provides it dynamically, when it is referenced).
OPC Unified Architecture
- Added OPC-UA Modelling (preliminary). This development model automatically provides .NET objects that logically correspond to OPC-UA information model. The operative parts of this model are internally implemented using Live Mapping. Currently, only certain standard OPC-UA variable types are supported; custom types are not yet available. Supported concrete classes include: UAPropertyNode, UABaseDataVariableNode; for UA Data Access: UADataItemNode, UAAnalogItemNode, UATwoStateDiscreteNode, UAMultiStateDiscreteNode.
Security
OPC Unified Architecture
- Added property UACertificateAcceptancePolicy.AllowUserAcceptCertificate (defaults to true). When the component is run in user-interactive mode, the user can be prompted to accept a server certificate that have otherwise failed the certificate validation process.
- Added static methods to UAUserIdentity object for easy creation of various user tokens: CreateAnonymousIdentity, CreateKerberosIdentity, CreateUserNameIdentity, and CreateX509Certificate.
- The subject name of the application instance certificate that is used or created by the component can now be set using the EasyUAClient.EngineParameters.ApplicationCertificateSubject property. Other properties of the certificate, as well as client description used when opening a session, can be changed using EasyUAClient.EngineParameters.ApplicationName, ApplicationUriString, and ProductUriString properties.
- The new AllowedMessageSecurityModes property of the UAEndpointSelectionPolicy gives you a possibility to completely enable or disable certain classes of endpoints from selection, based on their security mode. You can combine the value of this property from SecurityNone, SecuritySign, and SecuritySignAndEncrypt flags. The default value allows all types of endpoints be selected.
- The PreferMessageSecurity property of the UAEndpointSelectionPolicy has been renamed to MessageSecurityPreference, and it now has three possible values: Negative (to prefer non-secure endpoints), None (to follow server-provided endpoint security level), and Positive (to prefer secure endpoints).
Diagnostics
All Supported OPC Specifications
- The OperationResult object (and therefore all result objects derived from it as well) now has a Diagnostics property, which contains a collection of warning and informational diagnostics entries gathered, performing the requested operation. Currently, the diagnostics information is only filled in for OPC-UA operations.
- The additional OperationResult.DiagnosticsSummary string contains a textual summary of diagnostics information, one message per line.
OPC Unified Architecture
- A new DiagnosticsMasks property on the EasyUAClient.SessionParameters allows the developer to specify the types of vendor-specific diagnostics to be returned by the OPC-UA server in the responses. The information from the server responses is then made available in the Diagnostics collection of OperationResult objects.
- EasyUAClient now detects stale timestamps.
- EasyUAClient now detects missing timestamps.
- EasyUAClient now checks the server signature.
- EasyUAClient now checks the server nonce.
- EasyUAClient now thoroughly checks the outcomes of the CreateSession.
- EasyUAClient now performs many other checks required by OPC compliance test.
Instrumentation
OPC Unified Architecture
- The EasyUAClient component now has a static LogEntry event. This event is raised for loggable entries originating in the OPC-UA client engine and the EasyUAClient component. Each event notification carries a LogEntryEventArgs object, which contains information such as the source of the event, the event message, event type, timestamp, etc. The component does not store log the events on itself, but the developer can receive the notifications and implement any kind of logging with them.
Performance
- Build 397.1: Significantly improved speed of EasyDAClient.GetPropertyValue and GetMultiplePropertyValues methods.
Examples
- The OPC-UA Demo Application now uses the UAHostAndEndpointDialog, making it possible for the user to also browse for servers on hosts other than the local host.
- Added new VBA examples in Excel (using QuickOPC-COM): ReadAndWriteValue.xls, ReadAndDisplayMultipleValues.xls, SubscribeToMultipleItems.xls.
Tools
- Test Tools for .NET have been added to the installation. There are two separate testing tools: One for OPC “Classic”, and one for OPC Unified Architecture. The tools allow exploration of various API objects and members, testing of the UI dialogs, live data view with multiple items, etc. The test tools are not installed by default; you need to select “Custom Install”, and then specifically enable them on the “Select Components” page in in the installation wizards. After installation, the test tools can be reached through the Start menu, in the “Test Tools” group under product menu.
Documentation and Help
- Added a document describing the Test Tools.