A framework to implement OPC UA conform client / server applications.
This framework does provide all mechanisms required to implement OPC UA conform client / server applications with just a few lines of code.
The framework is based on the latest version of the OPC UA Stack V1.03.351.0 released by the OPC Foundation.
Works very well with: SIMATIC S7-1500 / S7-1200, SIMOTION, SINUMERIC and other OPC UA Servers from Siemens.
- EASY - FAST - PROFESSIONAL-
See the version list below for details.
Install-Package Opc.UaFx.Advanced -Version 22.214.171.124
dotnet add package Opc.UaFx.Advanced --version 126.96.36.199
<PackageReference Include="Opc.UaFx.Advanced" Version="188.8.131.52" />
paket add Opc.UaFx.Advanced --version 184.108.40.206
= 220.127.116.11 (released 2018-07-23) =
FIXED: InvalidCastException when the assembly was loaded with Assembly.LoadFrom().
= 18.104.22.168 (released 2018-07-13) =
FIXED: DllNotFoundException when trying to use specific types before creating an OpcClient or OpcServer.
= 22.214.171.124 (released 2018-07-06) =
NEW: Activated .NET Standard licensing support.
= 126.96.36.199 (released 2018-07-03) =
NEW: Renewed the demo license to provide a new license period.
= 188.8.131.52 (released 2018-06-15) =
NEW: MimeType-Support in OpcFileNode and OpcFileInfo.
NEW: Improved performance when accessing OpcContext references in OpcNodes (internally).
NEW: Improved performance / memory usage when accessing the children of a OpcNode (internally).
NEW: Removed inline and by default always prepared history configuration nodes for all variable nodes. Instead it is now created on-demand.
NEW: Removed internal cross-references and use of heavy OnXy callbacks defined by the foundation. Instead we use now a provider pattern.
NEW: Introduced IOpcNodeInfo to not longer create temporary OpcNode instances. This improves performance and memory usage.
NEW: IOpcNodeInfo which is used in scenarios there a reference to the origin node is not required. This also reduces the amount of memory required to process internal node operations / evaluations.
NEW: Introduced cache for custom data types to not longer repeatedly reflect their attribute to improve performance.
NEW: Exceptions which are thrown during the execution of CreateNodes(...) are now passed to the source there OpcServer.Start has been called.
CHANGED: IsNodeAccessible(..., IOpcNode node) to IsNodeAccessible(..., IOpcNodeInfo node)
= 184.108.40.206 (released 2018-05-24) =
FIXED: Issue with not working external references when using multiple node managers which share the same custom node as the root of the nodes provided.
= 220.127.116.11 (released 2018-05-23) =
FIXED: Issue with missing nodes when using multiple node managers referencing the same system node.
= 18.104.22.168 (released 2018-05-16) =
FIXED: NullReferenceException in OpcMethodNode when using a predefined node as the parent of the method node.
FIXED: Not longer displayed OpcDataVariableNode in servers address space, when using the ctor(parent : IOpcNode, name : OpcName).
CHANGED: Downgraded sample projects to C# language version 6.0 to ensure that the samples will compile in older versions of Visual Studio.
= 22.214.171.124 (released 2018-05-10) =
NEW: Added support for creating nodes using a custom node identifier.
NEW: Streamlined constructor overloads in all node classes.
NEW: Added many so far missed code documentation on node classes.
NEW: Implemented for each property of a node a according XyNode property which provides the reference to the property-node that represents the value of the so far available Xy properties.
NEW: Implemented support for lazy initialiation of nodes which allows to define the Xy property-values to be set-up while they are applied to their property-nodes on server-startup.
CHANGED: Corrected misspelled members.
CHANGED: Streamlined API through added additional descriptive parts to class and delegates names. In general changed the naming of Data to DataSet, DataItem to DataSetItem and EventRaise to Event.
NEW: Completely reviewed implementation of OpcNodeId and OpcNamespace. Partially re-implemented both classes to ensure a maximum of compatibility to foundation defined node identifier standards including the features provided by this framework.
NEW: The OpcNodeId now supports identifiers using byte-arrays, Guid's and unsigned integers.
NEW: The OpcNodeId now expresses the type of identifier value in its string representations generated using OpcNodeId.ToString.
NEW: The OpcNodeId now supports UTF8 encoded special characters in an url-formatted node identifier.
NEW: The OpcNodeId now support parsing a foundation formatted node identifiers.
NEW: The OpcNodeId now provides additional properties like OriginalString and OriginalFormat.
CHANGED: OpcNodeId.ToString formats now by default using the OpcNodeIdFormat.Foundation format.
FIXED: Wrong name of method GetOutpuArguments to GetOutputArguments in OpcMethodNodeInfo class.
FIXED: Issue with DBNull values used in case there is no default value for an argument specified in method nodes.
NEW: Reworked OpcName implementation to not longer combine the BrowseName, DisplayName and SymbolicName into one instance / class.
NEW: IOpcNode, OpcNode and OpcNodeInfo now provide direct properties for the DisplayName (and SymbolicName) of a node.
NEW: OpcNodeInfo now supports the Children and Parent browsing using a combination of the OpcNodeCateogry enum members.
NEW: OpcClient.SubscribeEventRaise methods and OpcSubscribeEventRaise now support an OpcEventFilter instance for event filtering.
NEW: Reviewed existing API regarding UA Alarm + Events and adjusted it for a more fluent / intuitive interface including some changes to use lazy initialization to improve performance.
CHANGED: Order of subscription events from MonitoredItem -> Client -> Subscription to Monitored -> Subscription -> Client. To ensure a more logic event order using bubbling.
NEW: Reworked OpcEventRaiseEventArgs to define the Event property for EventNode snapshot information using event raw data.
CHANGED: Renamed OpcMonitoredItem.ReceivedDataChange to OpcMonitoredItem.DataChangeReceived.
CHANGED: Renamed OpcMonitoredItem.ReceivedEventRaise to OpcMonitoredItem.EventRaiseReceived.
NEW: Added MonitoredItem property to OpcDataChangeEventArgs and OpcEventRaiseEventArgs.
NEW: Added events DataChangedReceived and EventRaiseReceived to OpcSubscription.
NEW: Implemented OpcEventType enumeration and OpcEventTypes to simplify access to the different event types supported.
NEW: Implemented different state machine and state / transition variable nodes.
NEW: Implemented DialogRequested event in OpcClient to provide a simple way to process OpcDialogConditionNode instances.
NEW: Implemented support for foundation specified event types. This are: OpcConditionNode, OpcAcknowledgeableConditionNode, OpcDialogConditionNode, OpcAlarmConditionNode, OpcDiscreteAlarmNode, OpcLimitAlarmNode, OpcOffNormalAlarmNode, OpcSystemOffNormalAlarmNode, OpcTripAlarmNode, OpcExclusiveLimitAlarmNode, OpcNonExclusiveLimitAlarmNode, OpcExclusiveDeviationAlarmNode, OpcExclusiveLevelAlarmNode, OpcExclusiveRateOfChangeAlarmNode, OpcNonExclusiveDeviationAlarmNode, OpcNonExclusiveLevelAlarmNode and OpcNonExclusiveRateOfChangeAlarmNode.
BREAKING CHANGES (through renaming):
* OpcSubscribeEventRaise -> OpcSubscribeEvent
* OpcDataChangeEventArgs -> OpcDataChangeReceivedEventArgs
* OpcDataChangeEventHandler -> OpcDataChangeReceivedEventHandler
* OpcEventRaiseEventArgs -> OpcEventReceivedEventArgs
* OpcEventRaiseEventHandler -> OpcEventReceivedEventHandler
* OpcNotificationEventArgs -> OpcNotificationReceivedEventArgs
* OpcNotificationEventHandler -> OpcNotificationReceivedEventHandler
* OpcDataChangeCallback -> OpcDataChangeReceivedCallback
* OpcEventRaiseCallback -> OpcEventReceivedCallback
* IOpcNotificationData -> IOpcNotificationDataSet
* OpcNotificationData -> OpcNotificationDataSet
* OpcNotificationDataCollection -> OpcNotificationDataSetCollection
* OpcNotificationDataReadOnlyCollection -> OpcNotificationDataSetReadOnlyCollection
* OpcNotificationDataItem -> OpcNotificationDataSetItem
* OpcNotificationDataItemCollection -> OpcNotificationDataSetItemCollection
* OpcNotificationDataItemReadOnlyCollection -> OpcNotificationDataSetItemReadOnlyCollection
* OpcDataChange -> OpcDataChangeSet
* OpcDataChangeItem -> OpcDataChangeSetItem
* OpcEventRaise -> OpcEventDataSet
* OpcEventRaiseItem -> OpcEventDataSetItem
* .EventRaiseReceived -> EventReceived
* .LastEventRaise -> LastEvent
* .OnEventRaiseReceived -> OnEventReceived
* .EventRaiseReceived -> EventReceived
* .ReceivedEventRaiseCallback -> ReceivedEventCallback
* .OnEventRaiseReceived -> OnEventReceived
* .EventRaiseReceived -> EventReceived
* .OnEventRaiseReceived -> OnEventReceived
* .SubscribeEventRaise -> SubscribeEvent
= 126.96.36.199 (released 2018-03-13) =
FIXED: Issue with wrong use of DebuggerDisplayAttribute in OpcVariableNode and OpcNodeInfo.
FIXED: Issue with reading / writing custom DataType attribute values on OpcVariableNodes.
CHANGED: OpcVariableNode to define an abstract base class.
CHANGED: Removed multiple local foundation node references to reduce memory usage.
NEW: Enhanced implementation of OpcVariableNode especially for enumeration types.
NEW: Implemented new nodes OpcTypeNode and OpcDataTypeNode. The OpcDataTypeNode does support the definition of custom enumeration types.
NEW: Implemented enhanced support to simplify browsing of enumerated data types. Using the new OpcTypeNodeInfo.GetEnumMembers() method provides all the information available on an enumerated type (also see the new OpcTypeNodeInfo.IsEnum property).
= 188.8.131.52 (released 2018-02-26) =
FIXED: Issue with loading the OpcApplicationConfiguration from a file, because of a required DataContract attribute on the OpcApplicationConfiguration class which was not required in older framework versions.
NEW: Implemented additional ctor overloads in OpcEngineeringUnitInfo to simplify initialization of a specific unit.
NEW: Implemented ToString overloads in OpcEngineeringUnitInfo and OpcValueRange.
NEW: CommonCode property in OpcEngineeringUnitInfo + static GetCommonCode(int unitId) method.
NEW: DefaultNamespaceUri in OpcEngineeringUnitInfo when using a constructor without an explicit namespace parameter. This is not the case using the default constructor.
= 184.108.40.206 (released 2018-02-22) =
ATTENTION: Starting with this version a reference to the NuGet package Portable.BouncyCastle (at least V220.127.116.11) or BouncyCastle.Crypto assembly (at least V18.104.22.168) is required.
ATTENTION: Using a server address with the scheme 'https' requires references to the NuGet packages 'Microsoft.AspNetCore.Server.Kestrel (1.1.3)' and 'Microsoft.AspNetCore.Server.Kestrel.Https (1.1.3)'.
NEW: Implemented the Range DataType as OpcValueRange.
NEW: Implemented the EUInformation DataType as OpcEngineeringUnitInfo.
NEW: Implemented new node type AnlogItemType as OpcAnalogItemNode.
NEW: Support of DataValues using the data types Range and EUInformation.
NEW: Advanced support for browsing nodes using the AnalogItemType-Definition thorugh the new OpcAnalogItemNodeInfo.
NEW: Updated to target framework .NET Framework 4.6.
= 22.214.171.124 (released 2018-02-13) =
NEW: Updated to foundation stack V1.03.351.0.
NEW: Implemented new Security option for client / server to define additional certificate validation rules (see OpcClient/OpcServer.Security.CertificateValidationRules).
CHANGED: The framework does not longer support Windows based authentication using WinLogon-API for OPC UA server authentication.
CHANGED: Application certificates a now created using SHA256 (the default defined by the foundation). This does not influence any running code. This change will only have an effect when a new certificate is generated.
= 126.96.36.199 (released 2017-12-11) =
FIXED: Issue with missing use of configured operation timeout using OpcClient.Connect() while discovering the server endpoints.
NEW: Enhanced filter construction using operator overloads to get a more natural API.
CHANGED: OpcValue -> Simplified ToString implementation to just provide "null" for null references or the Value.ToString().
NEW: Introduced OpcText to represent localized human readable string values.
= 188.8.131.52 (released 2017-09-06) =
NEW: Added support for incomplete certificate chains in cases when the opponent provides a certificate which is signed by an unknown issuer. This is for example the case when trying to connect to a Siemens SIMOTION.
NEW: Enhanced support for failed certificate validations using the CertificateValidationFailed events in the OpcClient and OpcServer class.
= 184.108.40.206 (released 2017-09-01) =
NEW: Added the GetReferenceType to resolve the according OpcReferenceType for a given OpcNodeId of the type of reference.
CHANGED: Removed special handling of the attribute DataType in the OpcNodeInfo.Attribute(). This means that there is no longer an OpcDataType value provided. Instead, the data type dependent OpcNodeId is provided.
NEW: Implemented basic support for object Nodes and extended support for variable Nodes, also implemented generic support for type Nodes (including ObjectTypes, VariableTypes and DataTypes) while browsing Nodes.
NEW: Using the OpcVariableNodeInfo, OpcObjectNodeInfo and OpcTypeNodeInfo, it is now possible to browse the address space using additional information about the Nodes provided. This also includes e.g. the type information of a variable Node including all its type specific metadata including super- und subtypes.
NEW: Prepared the framework for use under .NET Standard and .NET Core 2.0.
NEW: Introduced the LicenseInfo property on all Licenser classes to provide some information about the license conditions used.
= 220.127.116.11 (released 2017-08-01) =
NEW: Updated to OPC UA Foundation stack V1.3.342.0.
= 18.104.22.168 (released 2017-06-05) =
NEW: RegisterAddress / UnregisterAddress methods and new Addresses method to maintain the different base addresses of an OpcServerBase instance.
FIXED: Wrong naming of IsNodeAccessable in OpcNodeManager to IsNodeAccessible.
FIXED: Issue with malformed Node namespaces using a namespace URI just built from a scheme in case the OpcNamespace.ToString() is called (= FormatException).
FIXED: Issue with wrong implicit interpretation of status codes to result information.
= 22.214.171.124 (released 2017-05-24) =
NEW: Added much more details to the message of an OpcException and to the description of an OpcStatus / OpcResult instance to better indicate the source / reason / outcome of an operation.
= 126.96.36.199 (released 2017-05-21) =
NEW: Changed the Assembly Version to 188.8.131.52.
NEW: Implemented OpcCertificateSettings to configure an application instance certificate which can be created through the OpcCertificateManager.
FIXED: Issue with wrongly configured application certificates using a store path in cases when the certificate can not be located under such a path.
FIXED: Issue with wrongly stored username-password pair in the UserName ACL that led to unsuccessful user authentication.
FIXED: Issue when creating an OpcNodeId using the string+int32 pair, where the int32 was not used for the namespace index of the new Node identifier.
FIXED: Issue with OpcServerBase.Certificate and OpcClient.Certificate in the case that the certificate is not stored in the ApplicationStore of the certificate stores.
NEW: Introduced OpcClientCertificateStores (available through OpcClient.CertificateStores) and OpcServerCertitificateStores (available through OpcServerBase.CertificateStores) to provide a fluent API for Client and Server to manage and maintain their certificate stores.
NEW: Introduced OpcClientServices (available through OpcClient.Services) to provide a service based API to set up the different services used by the Client.
REMOVED: "OpcValue.SourceLabel" and "OpcValue.ServerLabel". This also includes that the "OpcValueLabel" class does no longer exist. The provided properties are now provided directly via the "OpcValue" class. Just make use of the "OpcValue.ServerXy" and "OpcValue.SourceXy" properties.
NEW: IOpcWriteNodesService does now support an automatic discovery of which value the Server does expect for the SourceTimestamp of an OpcValue. The automatic determination can be disabled by setting an explicit OpcTimestampSource using the IOpcWriteNodesService.TimestampSource property. Note: The IOpcWriteNodesService instance can be accessed using the OpcClient.Services.WriteNodes property.
NEW: Removed usage of the obsolete ResolveNodeId method and implemented the new Resolve method on the OpcNodeId instead to determine the fully qualified Node identifier using the Server's namespaces array on demand. This does now support the Node access using the fully qualified Node identifier without the need to know the index of the dedicated Node namespace.
NEW: Implemented an additional overload of the UpdateCertificate method to manually define whether a certificate is to be created in case there is a certificate missing or not valid. So far this was only possible by using the static AutoCreateCertificate property.
NEW: Implemented the new properties OpcClient.Certificate (to directly the define a custom Client certificate) and OpcClient.Security (to set up Client security options within one class).
CHANGED: Renamed property "OpcSecurity.Policies" to "OpcSecurity.EndpointPolicies" to match the "OpcClientSecurity.EndpointPolicy" model.
CHANGED: Defined the default value of "OpcCertificateManager.AutoCreateCertificate" as true.
NEW: Implemented the new properties in Opc.UaFx.Server.OpcSecurity: AutoAcceptUntrustedCertificates and AutoCreateCertificate.
NEW: Implemented the new OpcServer.Certificate property to match the same API model as the OpcClient implements.
CHANGED: Behavior used to select an endpoint to connect to in order to no longer to be negotiable in case there is an explicit endpoint policy defined.
CHANGED: Default of AutoAcceptUntrustedCertificates in SecurityConfiguration to true.
NEW: Implemented support for a DefaultNodeManager - this is either the first manager in the list of managers defined or the internally defined default Node manager which defines the namespace as "<serveraddress>/nodes/". There is now also the possibility to define just a callback method to provide the Nodes for the default Node manager's address space.
MOVED: "OpcClient.PreferredPolicy" property to "OpcClient.Security.EndpointPolicy".
MOVED: "OpcClient.UseDomainChecks" property to "OpcClient.Security.VerifyServersCertificateDomains" and changed its default value to false.
MOVED: "OpcClient.UserIdentity" property to "OpcClient.Security.UserIdentity" and changed its type from the foundation type IUserIdentity to OpcUserIdentity.
MOVED: "OpcClient.UseOnlySecureEndpoints" property to "OpcClient.Security.UseOnlySecureEndpoints" and changed its default value to false.
REMOVED: Obsolete "OpcClient.UseAutoNodeIdResolution" property.
NEW: Reworked / reviewed OpcIdentity derivates and defined the OpcCertificateIdentity, OpcWindowsIdentity, OpcServerIdentity and OpcClientIdentity as new derivates of OpcUserIdentity (so far they just used the OpcIdentity as their base class). Also changed their construction behavior to simplify the process of identity creation on Client and Server side.
FIXED: OpcRequestType.Call has been defined as OpcRequestType.Cancel so far. This lead to a nonfunctional use of the OpcRequestType.Call, because it has then been used like the OpcRequestType.Cancel.
REMOVED: OpcCertificateManager.AutoCreateCertificate property, because it is now used per instance using OpcClient.Security.AutoCreateCertificate or OpcServer.Security.AutoCreateCertificate. Also these properties are by default set to the value true.
REMOVED: OpcServer.Security.Owner property to reduce redundant reference information and simplify the API.
RENAMED: "Server.OpcSecurity" to "Server.OpcServerSecurity".
RENAMED: "OpcServerSecurity.Anonymous" to "OpcServerSecurity.AnonymousAcl"
RENAMED: "OpcServerSecurity.Certificate" to "OpcServerSecurity.CertificateAcl"
RENAMED: "OpcServerSecurity.IssuedToken" to "OpcServerSecurity.IssuedTokenAcl"
RENAMED: "OpcServerSecurity.UserName" to "OpcServerSecurity.UserNameAcl"
RENAMED: "OpcClient.PreferredLocales" to "OpcClient.Locales"
RENAMED: "OpcClient.ReceivedNotification" to "OpcClient.NotificationReceived"
RENAMED: "OpcClient.OnReceivedNotification" to "OpcClient.OnNotificationReceived"
RENAMED: "OpcSubscription.ReceivedNotification" to "OpcSubscription.NotificationReceived"
RENAMED: "OpcSubscription.OnReceivedNotification" to "OpcSubscription.OnNotificationReceived"
MOVED: OpcNodeCommand from Opc.UaFx.Client to Opc.UaFx.Services.
MOVED: OpcNodeAttributeCommand from Opc.UaFx.Client to Opc.UaFx.Services.
RENAMED: "OpcNodeCommand" to "OpcNodeServiceCommand".
RENAMED: "OpcNodeAttributeCommand" to "OpcNodeAttributeServiceCommand".
RENAMED: OpcStatusCode members with "Bad", "Good" and "Uncertain" prefixes like the OPC Foundation does use them to differ status codes into these three categories.
NEW: Implemented additional ReadNode overloads to define a numeric Node identifier together with a namespace index and attribute to read.
NEW: Implemented new ReadNodes methods to read multiple Nodes using a specific attribute.
= 184.108.40.206 (released 2017-02-07) =
CHANGED: Removed implicit interpretation of a numeric Node identifier encoded as string.
= 220.127.116.11 (released 2016-12-08) =
NEW: Implemented enhanced timeout handling for read history requests produced by the OpcClient. This is necessary to give the Server additional time to collect the historical data in case it will take more time than usual and the Server does provide successive continuation points until the data collection has been completed.
= 18.104.22.168 (released 2016-12-07) =
NEW: Enhanced Node History Navigation in case of a fixed time window (there StartTime and EndTime are not equals to MinDate). Therefore Node history values are collected on each page request as long as the Server provides a continuation point either until the Server does no longer provide a continuation point or until the page has reached its page size.
= 22.214.171.124 (released 2016-10-12) =
NEW: Updated IOpcNode interface definition in respect to the current public OpcNode API.
NEW: Implemented new method Children() : IEnumerable<IOpcNode> in IOpcNode to determine physical children in the Node tree.
= 126.96.36.199 (released 2016-10-06) =
NEW: Implemented the new method OpcFileMethods.IsFileNode to determine if a Node is accessible in the manner of a FileType.
FIXED: Out of memory issue when using OpcFile.ReadAllText and OpcFile.ReadAllLines.
NEW: Improved performance of OpcFile.ReadAllText to no longer construct the text using the lines of the file, instead it now uses the binary stream of the file.
NEW: Generally optimized the speed of reading and writing file contents by using the Client configured MaxByteStringLength.
FIXED: Issue when browsing Nodes containing remote Nodes which led to the exception: 'Cannot cast an absolute ExpandedNodeId to a NodeId. Use ExpandedNodeId.ToNodeId instead.'
= 188.8.131.52 (released 2016-10-04) =
NEW: Implemented the new method CreateTempCertificate which is also used in cases where AutoCreateCertificate is set to true and where the certificate generator utiltity is not installed. Therefore there is no longer a need to have the certificate generator utility implemented for testing / development besides OPC applications.
FIXED: Issue with opening files for writing - the access mask has been verified in the wrong way.
NEW: Implemented a new Session Resource Manager to dispose of any session related resources whenever a session times out or closes. Such a resource is the internal file handle when accessing file Nodes via OPC. In case the Client discards the connection to the Server upon any reason the Session Manager now releases all resources by the session acquired.
= 184.108.40.206 (released 2016-09-14) =
NEW: Implemented the OpcNodeManager.Browse method to support custom browsing in subclassing scenarios.
= 220.127.116.11 (released 2016-08-25) =
NEW: Excluded non-value attributes from automatically updating the source label of the value when writing Node values. Workarounds to use an explicit OpcValue are now obsolete.
NEW: Introduced new derivate OpcBrowseNodeContext especially for Node browsing and reduced previous OpcNodeContext to a more generic implementation for further subclassing. The new OpcBrowseNodeContext does now also include the Node identifier of the Node from which the browsing operation has been originally introduced.
NEW: Introduced OpcValue.As<T> method to retrieve the represented value as a specific type by converting the value to the type specified by T.
NEW: Implemented the new OpcResult class to represent ServiceResult instances.
NEW: Implemented the subclass OpcMethodContext of OpcContext to determine method call sensitive system information including the method Node being called and its target. This does also include storing the outcome of the callback routine invocation.
NEW: Implemented file system accessibility support for OpcFileNode objects from the Client point of view. This does include a simple 1:1 API layer implemented by the OpcFileMethods class, a SafeOpcFileHandle to ensure allocated file handles are freed, the OpcFile class to implement an OPC based System.IO.File class like set of service methods, the OpcFileInfo class to implement an OPC based System.IO.FileInfo class like object and the OpcFileStream class to implement an OPC based System.IO.FileStream like object which is a derivated of the System.IO.Stream class and can therefore used by all StreamReader and StreamWriter classes provided by the .NET Framework.
NEW: Implemented the new OpcPropertyNode and OpcPropertyNode<T>.
CHANGED: The type OpcVariableValue does now require a generic type parameter for the type of value represented. The OpcVariableNode class has been adopted regarding this type parameter.
NEW: Implemented the new OpcFileNode including its child Nodes like the method Nodes Open, Close, GetPosition, SetPosition, Read and Write.
= 18.104.22.168 (released 2016-07-28) =
FIXED: Issue with remote Node identifiers in OpcNodeId.
FIXED: Issue with comparing Node identifiers of different types in OpcNodeId.
= 22.214.171.124 (released 2016-06-17) =
NEW: Implemented the Child method on OpcNodeInfo to retrieve the successors of a Node using its OpcName. This does include the BrowseName, DisplayName and SymbolicName of a Node.
NEW: Implemented the Parent method on OpcNodeInfo to retrieve the ancestors of a Node using its OpcName. This does include the BrowseName, DisplayName and SymbolicName of a Node.
NEW: Implemented the Children method on OpcNodeInfo to retrieve successors of a Node of a specific OpcNodeCategory.
NEW: Implemented the Parents method on OpcNodeInfo to retrieve ancestors of a Node of a specific OpcNodeCategory.
= 126.96.36.199 (released 2016-06-13) =
NEW: Implemented implicit cast operator for ExpandedNodeId's.
NEW: Implemented additional Get method overload on OpcNamespace to retrieve Node namespaces using an Uri and Index.
FIXED: Issue with ExpandedNodeId's in OpcValue's and simplified the handling of them.
= 188.8.131.52 (released 2016-05-30) =
NEW: Minimized lock conditions when reading / writing Nodes.
= 184.108.40.206 (released 2016-05-02) =
NEW: Renewed the demo license to provide a new license period.
= 220.127.116.11 (released 2016-04-18) =
FIXED: Issue with monitored items when reading the initial value of a Node (the Server ran into a NullReferenceException in case of unfiltered monitored items).
= 18.104.22.168 (released 2016-03-31) =
NEW: Implemented the Changed event on OpcStatus.
FIXED: Issue with the not synchronized OPC Status from SDK to the foundation stack (on OpcValue and OpcVariableNode).
= 22.214.171.124 (released 2016-03-23) =
NEW: OpcNamespace which represents the whole namespace information of a Node identifier (Namespace Index and Namespace Uri).
NEW: IOpcNamespaceResolver which is implemented by OpcNodeManager, OpcClient and OpcServer. This interface does provide late bound namespace resolution after the OpcServer is started or the OpcClient is connected. Each OpcNodeId whose namespace has been resolved does provide the fully qualified URL of the namespace together with the Node identifier.
NEW: OpcNodeId.Namespace property to provide the associated OpcNamespace.
CHANGED: Renamed OpcAttribute.Historizing to OpcAttribute.IsHistorizing.
NEW: OpcNode: Implemented Node change tracking through the properties HasPendingChanges and PendingChanges including the method IsChangePending.
NEW: Implemented history support for OpcVariableNode and its subclasses.
NEW: Enhanced constructor overloads of OpcStatusCollection to much simpler setup of a new instance using OpcStatusCodes.
NEW: HDA methods on the Client to read and update Node history.
NEW: HDA interface on the Server to provide the required logic to handle historical data access.
NEW: HDA services: IOpcReadNodesHistoryService and IOpcUpdateNodesHistoryService.
NEW: HDA commands: OpcCreateNodeHistory, OpcDeleteNodeHistory, OpcDeleteNodeHistoryAtTime, OpcDeleteNodeHistoryModified, OpcReadNodeHistory, OpcReplaceNodeHistory and OpcUpdateNodeHistory. All of them are subclasses of the OpcNodeHistoryCommand.
= 126.96.36.199 (released 2016-02-03) =
ADDED: OPC Watch application to assembly archive.
= 188.8.131.52 (released 2016-01-25) =
FIXED: Issue with wrongly released session although it can be reused in case of a reconnect.
= 184.108.40.206 (released 2016-01-21) =
FIXED: Possible multithreading issues in session keep alive in OpcClient.
CHANGED: The BreakDetected event is now being raised only if the reconnect timeout equals zero.
FIXED: In case of releasing an OPC Client session which has already been disposed of in some cases it could lead to an undesired reconnect to the Server upon a thrown ObjectDisposedException by the already disposed Client session.
= 220.127.116.11 (released 2016-01-18) =
NEW: Updated the licensing logic.
= 18.104.22.168 (released 2016-01-14) =
FIXED: Issue with the minimum possible PublishingInterval in the OpcSubscription class.
= 22.214.171.124 (released 2016-01-09) =
FIXED: Issue with the null reference exception in OpcCertificateManager.CreateCertificate when passing an applicationUri as a null reference (Nothing in Visual Basic).
FIXED: Issue with not uniquely generated OpcNodeId's for InputArguments and OutputArguments of OpcMethodNode instances. This led to the behavior that only the arguments of the most recently provided OpcMethodNode were published when browsing / reading the method argument properties.
CHANGED: The OpcNodeId for InputArgument and OutputArgument Nodes of OpcMethodNode instances, for more information see the topic before.
CHANGED: The OpcReadOnlyNodeCollection class does now provide IOpcNode instances instead of the internal foundation NodeState instances.
NEW: An OpcNodeId can now be constructed from OpcName instances whose SymbolicName is a null reference (Nothing in Visual Basic). In this case the BrowseName is used instead of the SymbolicName.
NEW: The OpcReadNodesRequest does now by default return both timestamps (source and Server).
NEW: Implemented new OpcNodeManager methods: AddNode, RemoveNode and IsNodeAccessable.
FIXED: Issue with duplicate ACEs some of the time in case of requesting an ACE which has been already added to an ACL.
= 126.96.36.199 (released 2015-12-17) =
FIXED: Issue with missed TimeStamp update on writing Node values.
FIXED: Issue with missed TimeStamp data on reading Node values.
= 188.8.131.52 (released 2015-12-17) =
NEW: Implemented the ChangePassword method on OpcServerIdentity to change the user password after an identity has been created.
NEW: Implemented the protected SystemContext property on OpcNodeManager to provide an alternative context within system internal changes can be performed.
NEW: The OpcWriteNode class does now automatically set the source label timestamp when writing a Node.
CHANGED: The OpcValueLabel is now no longer defined as a struct, instead it is now a class.
= 184.108.40.206 (released 2015-12-16) =
NEW: Implemented AddNode and RemoveNode in OpcNodeManager to support dynamically providing Nodes after CreateNodes has been called.
= 220.127.116.11 (released 2015-12-10) =
NEW: Added additional session information to OpcOperationContext calling IsNodeAccessable on OpcNodeManager.
= 18.104.22.168 (released 2015-12-09) =
NEW: Implemented IsNodeAccessable method on OpcNodeManager to customly specify whether a Node is accessible within the view.
= 22.214.171.124 (released 2015-12-08) =
FIXED: Issue with duplicate ACE's when manually adding additional entries on demand.
= 126.96.36.199 (released 2015-10-12) =
FIXED: Issue with reading and writing OpcValue instances and arrays as Node values on Client and Server sides.
FIXED: Issue with anonymous user login on Server side when creating an OpcSession object.
NEW: Implemented redirection in case the string value passed to the constructor (string, int) of the OpcNodeId class does indicate a numeric identifier. Now an OpcNodeId will be initialized with the numeric identifier instead of using the string value.
= 188.8.131.52 (released 2015-09-08) =
FIXED: Issue with Anonymous and UserName ACL's enabled at the same time.
NEW: Implemented additional CreateCertificate overloads in OpcCertificateManager.
= 184.108.40.206 (released 2015-09-07) =
CHANGED: Renamed BuiltInType property to DataType on OpcAttributeInfo.
NEW: Browsing the DataType attribute does now result into a member of the OpcDataType enumeration value.
NEW: Implemented OpcValue as a surrogate of the DataValue class.
NEW: Implemented the static CreateCertificate method on OpcCertificateManager to create certificates out of the box.
NEW: OpcStatus class does not provide the new OpcStatusCode enumeration as Code.
NEW: Implemented support for OpcDataTypes: ExtensionObject, Value and Variant.
CHANGED: Renamed DataValue to Value in OpcDataTypes.
NEW: Implemented support to directly start browsing using a method Node.
CHANGED: Moved OpcDiscoveryClient to Opc.UaFx.Client namespace.
FIXED: Issue with NullReferenceException when noncached Nodes are browsed.
NEW: Implemented support using a null reference for an application URI to create certificates.
NEW: Implemented a new abstraction layer for different OPC Server types (OpcServerBase).
NEW: Implemented a new OPC Server specialization: OPC Discovery Server.
FIXED: Issue in OPC Client with accessing the internal session instance although it has been disposed of.
= 220.127.116.11 (released 2015-08-25) =
NEW: Simplified the use of OpcVariableClass in Read / Write callbacks through determining the status and timestamp (if no other has been specified) from the Node instance.
= 18.104.22.168 (released 2015-08-24) =
FIXED: Issue with Anonymous and UserName ACL's enabled at the same time.
NEW: Removed OpcAccessControlMode member 'Default' and replaced its use with Blacklist.
= 22.214.171.124 (released 2015-08-24) =
FIXED: Issue with Null DataType in VariableNodes.
= 126.96.36.199 (released 2015-08-24) =
NEW: Implemented different callback properties to read / write OpcNode attributes.
NEW: Implemented protected virtual methods to read / write OpcNode attributes.
NEW: Implemented specific callback properties to read / write OpcVariableNode attributes.
NEW: Implemented protected virutal methods to read / write OpcVariableNode value attributes.
NEW: The OpcSession class does now provide the properties UsedIdentity and SuppliedIdentity.
NEW: Implemented the Update method on OpcStatus.
NEW: The OpcContext does now provide an Identity property.
NEW: Implemented the new OpcMonitoredItem class in the Server namespace.
NEW: OnMonitoredItemCreated/Deleted/Modified does now provide non-foundation classes.
CHANGED: Moved Identity and ImpersonationContext classes from Opc.UaFx.Server to Opc.UaFx namespace.
= 188.8.131.52 (released 2015-06-18) =
NEW: Excluded the auto update of the endpoint before the connect in cases where a preferred endpoint is defined in OpcClient.
NEW: Implemented new endpoint identity security on OpcSecurity to enable / disable different endpoints for one or more ACEs. Additionally renamed some existing methods.
NEW: Implemented StateChanged events in OpcClient.
= 184.108.40.206 (released 2015-06-16) =
NEW: Implemented InvokeService method in OpcClient to invoke service routines using a try-catch-finally block to ensure that the Client's state property does also handle its connection state in case of an exception, which indicates that the connection has been timeout, lost, etc.
FIXED: Issue with null references as DisplayName and BrowseName in OpcReferenceDescription.
= 220.127.116.11 (released 2015-06-15) =
NEW: Implemented the SaveCertificate method on OpcCertificateManager.
NEW: Reworked the complete argument binding to also support out and ref parameters in OpcMethodNode.
NEW: Implemented ByRef Type support in OpcMethodNode.
NEW: Implemented the local Server CertificateValidationFailed event to support custom failed certificate validation actions.
NEW: Implemented the new OpcNodeInfo derivated from OpcMethodNodeInfo to browse the method Nodes arguments.
NEW: Implemented the new OpcCertificateValidationFailedEventArgs and OpcCertificateValidationFailedEventHandler.
NEW: Implemented the DataType property on OpcDataVariableNode.
NEW: Implemented InputArguments and OutputArguments properties on OpcMethodNode class. Additionally extended the support of OpcArgument instances with the OpcArgumentAttribute on custom delegates.
NEW: Implemented support for null references in all implicit cast operators which are working with reference types.
= 18.104.22.168 (released 2015-06-10) =
NEW: Implemented logic to generate Server fulfilled configuration on start.
NEW: Completely reworked the endpoint selection using the OpcDiscoveryClient and custom preferred OpcSecurityPolicy.
NEW: Improved the auto complete of the configuration depending on its application type.
NEW: Introduced transport profile information.
NEW: Moved the configuration of UserTokenPolicies to OpcServer on startup and improved the transparency of the IsEnabled property.
FIXED: Issue with empty certificate store paths.
NEW: Completely reworked the Node referencing mechanism to provide more information while building the Node references and to also remove OPC internals from the user API.
NEW: Completely reworked existing Node implementations and moved their base class reference to an internal reference to improve the experience with the framework and become more CLSCompliant by also providing more useful APIs.
NEW: Implemented support for discovery Server base address configuration.
NEW: Improved configuration defaults, also when loading configuration through one of the Load methods. Additionally implemented default support for DiscoveryServerConfigurations.
NEW: Simplified the API further.
NEW: Introduced replacement for StatusCode -> OpcStatus.
NEW: Reworked OpcDiscoveryClient from factory methods to constructor use to provide a fluent interface between all Server and Client classes.
= 22.214.171.124 (released 2015-06-09) =
NEW: Merged Opc.ClientFx.Advanced and Opc.ServerFx.Advanced together to Opc.UaFx.Advanced.
= 126.96.36.199 (released 2015-01-11) =
NEW: Created Opc.ClientFx.Advanced and Opc.ServerFx.Advanced.
- Microsoft.AspNetCore.Server.Kestrel (>= 2.0.1)
- Microsoft.AspNetCore.Server.Kestrel.Https (>= 2.0.1)
- Newtonsoft.Json (>= 10.0.3)
- Portable.BouncyCastle (>= 188.8.131.52)
- System.Data.Common (>= 4.3.0)
- System.Diagnostics.Process (>= 4.3.0)
- System.Net.NameResolution (>= 4.3.0)
- System.Reflection.TypeExtensions (>= 4.3.0)
- System.Runtime.Loader (>= 4.3.0)
- System.ServiceModel.Primitives (>= 4.3.0)
- System.Xml.XmlDocument (>= 4.3.0)
- System.Xml.XmlSerializer (>= 4.3.0)