PLCcom.Opc.Ua.Sdk 10.5.6

dotnet add package PLCcom.Opc.Ua.Sdk --version 10.5.6
                    
NuGet\Install-Package PLCcom.Opc.Ua.Sdk -Version 10.5.6
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PLCcom.Opc.Ua.Sdk" Version="10.5.6" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PLCcom.Opc.Ua.Sdk" Version="10.5.6" />
                    
Directory.Packages.props
<PackageReference Include="PLCcom.Opc.Ua.Sdk" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PLCcom.Opc.Ua.Sdk --version 10.5.6
                    
#r "nuget: PLCcom.Opc.Ua.Sdk, 10.5.6"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PLCcom.Opc.Ua.Sdk@10.5.6
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PLCcom.Opc.Ua.Sdk&version=10.5.6
                    
Install as a Cake Addin
#tool nuget:?package=PLCcom.Opc.Ua.Sdk&version=10.5.6
                    
Install as a Cake Tool

PLCcom.Opc.Ua.Sdk

A comprehensive .NET SDK for building OPC UA client and server applications. The SDK is delivered as a single assembly — no API calls or COM registration necessary. It runs cross-platform on .NET Framework 4.7.2+, .NET Standard 2.1, .NET 8, .NET 9, and .NET 10.


What PLCcom.Opc.Ua.Sdk has to offer

The PLCcom.Opc.Ua.Sdk is a highly optimized library for .NET developers that provides both a full OPC UA Client SDK and a full OPC UA Server SDK in a single assembly.

Key advantages:

  • Easy to use — many operations require just a single line of code
  • Path-based node addressing — access nodes by browse path instead of cryptic NodeIds (see below)
  • Automatic connect, reconnect, and disconnect — no manual connection state management needed
  • Active keep-alive monitoring of the server state
  • opc.tcp and opc.https transport protocols supported

Supported OPC UA specifications:

  • Data Access (read, write, browse, monitor)
  • Alarm and Conditions
  • Historical Data and Historical Events
  • Complex / Structured Data Types
  • Simple Events
  • Reverse Connect

Path-based Node Addressing

A unique feature of PLCcom.Opc.Ua.Sdk is the ability to address nodes by their browse path — just like navigating a folder structure — instead of using numeric NodeIds:

// Resolve a node by path — no cryptic NodeId needed
NodeId nodeId = client.GetNodeIdByPath("Objects.Plant.Line1.Machine1.Temperature");

// Read a value
DataValue value = client.ReadValue(nodeId);

// Write a value
client.WriteValue(nodeId, 23.5);
' Resolve a node by path
Dim nodeId As NodeId = client.GetNodeIdByPath("Objects.Plant.Line1.Machine1.Temperature")

' Read a value
Dim value As DataValue = client.ReadValue(nodeId)

' Write a value
client.WriteValue(nodeId, 23.5)

This makes your code readable, maintainable, and independent of server-specific NodeId assignments. Classic NodeId-based access (ns=2;i=12345) is of course fully supported too.


OPC UA Client SDK

Getting started

1. Install the NuGet package

Install-Package PLCcom.Opc.Ua.Sdk

2. Import namespaces

using PLCcom.Opc.Ua;
using PLCcom.Opc.Ua.Client.Sdk;

3. Discover endpoints and connect

string LicenseUserName = "<Enter your UserName here>";
string LicenseSerial   = "<Enter your Serial here>";

// Discover available endpoints
EndpointDescriptionCollection endpoints = UaClient.GetEndpoints(
    new Uri("opc.tcp://localhost:48410"));

// Build a session configuration from the selected endpoint
SessionConfiguration sessionConfig = SessionConfiguration.Build(
    "MyApplication", endpoints[0]);

// Create the client
UaClient client = new UaClient(LicenseUserName, LicenseSerial, sessionConfig);

// Register events
client.ServerConnected      += (s, e) => Console.WriteLine("Connected");
client.ServerConnectionLost += (s, e) => Console.WriteLine("Connection lost");
client.CertificateValidation += (sender, e) => e.Accept = true;

// Connect (auto-reconnects on connection loss)
client.Connect();

Reading data

// Read a single value by path
DataValue value = client.ReadValue(
    client.GetNodeIdByPath("Objects.Plant.Machine1.Temperature"));

// Read multiple values in one call
ReadValueIdCollection nodesToRead = new ReadValueIdCollection
{
    new ReadValueId
    {
        NodeId      = client.GetNodeIdByPath("Objects.Plant.Machine1.Temperature"),
        AttributeId = Attributes.Value
    },
    new ReadValueId
    {
        NodeId      = client.GetNodeIdByPath("Objects.Plant.Machine1.RPM"),
        AttributeId = Attributes.Value
    }
};
DataValueCollection results = client.Read(nodesToRead);

Writing data

// Write a single value by path
client.WriteValue(client.GetNodeIdByPath("Objects.Plant.Machine1.Setpoint"), 42.0);

// Write multiple values in one call
WriteValueCollection nodesToWrite = new WriteValueCollection
{
    new WriteValue
    {
        NodeId      = client.GetNodeIdByPath("Objects.Plant.Machine1.Setpoint"),
        AttributeId = Attributes.Value,
        Value       = new DataValue(42.0)
    },
    new WriteValue
    {
        NodeId      = client.GetNodeIdByPath("Objects.Plant.Machine1.Running"),
        AttributeId = Attributes.Value,
        Value       = new DataValue(true)
    }
};
StatusCodeCollection writeResults = client.Write(nodesToWrite);

Subscribing to data changes

// Create a subscription
Subscription subscription = new Subscription
{
    PublishingInterval = 1000,
    DisplayName        = "MySubscription"
};
client.AddSubscription(subscription);

// Add a monitored item
NodeId nodeId = client.GetNodeIdByPath("Objects.Plant.Machine1.Temperature");
MonitoredItem monitoredItem = new MonitoredItem(subscription.DefaultItem)
{
    StartNodeId      = nodeId,
    SamplingInterval = 500,
    DisplayName      = "Temperature"
};
monitoredItem.Notification += (item, e) =>
{
    var notification = e.NotificationValue as MonitoredItemNotification;
    Console.WriteLine($"{item.DisplayName} = {notification.Value.Value}");
};

subscription.AddItem(monitoredItem);
subscription.ApplyChanges();
subscription.SetPublishingMode(true);
subscription.Modify();

OPC UA Server SDK

Getting started

1. Import the server namespace

using PLCcom.Opc.Ua.Server.Sdk;

2. Configure and start the server

string LicenseUserName = "<Enter your UserName here>";
string LicenseSerial   = "<Enter your Serial here>";

var config = new UaServerConfiguration
{
    ApplicationName = "My OPC UA Server",
    ApplicationUri  = "urn:mycompany:myserver",
    BaseAddresses   = new List<string>
    {
        "opc.tcp://localhost:48410",
        "opc.https://localhost:48411"
    },
    SecurityPolicies  = UaServer.GetRecommendedSecurityPolicies(),
    UserTokenPolicies = new List<UserTokenPolicy>
    {
        new UserTokenPolicy { TokenType = UserTokenType.Anonymous }
    }
};

using var server = new UaServer(LicenseUserName, LicenseSerial);
server.CertificateValidation += (sender, e) => e.Accept = true;
server.Start(config);

3. Build the address space

// Create a folder hierarchy
UaFolder plant   = server.CreateFolder("Plant", UaRolePermissions.WITHOUT_RESTRICTIONS);
UaFolder machine = server.CreateFolder(plant, "Machine1", UaRolePermissions.WITHOUT_RESTRICTIONS);

// Create typed variables — the generic parameter sets the OPC UA DataType
UaVariable<double> temperature = server.CreateVariable<double>(
    machine, "Temperature", UaRolePermissions.WITHOUT_RESTRICTIONS, initialValue: 20.0);
UaVariable<int>    rpm         = server.CreateVariable<int>(
    machine, "RPM", UaRolePermissions.WITHOUT_RESTRICTIONS, initialValue: 1500);
UaVariable<bool>   running     = server.CreateVariable<bool>(
    machine, "Running", UaRolePermissions.WITHOUT_RESTRICTIONS, initialValue: true);

// Push value changes — subscribed clients are notified automatically
temperature.Value = 23.5;

4. Add methods

server.CreateMethod(machine, "Reset",
    handler: (session, context, objectId, inputArgs, outputArgs) =>
    {
        temperature.Value = 0.0;
        rpm.Value         = 0;
        running.Value     = false;
        return ServiceResult.Good;
    },
    UaRolePermissions.WITHOUT_RESTRICTIONS);

5. User authentication with roles

// Disable anonymous access and add named users
config.UserTokenPolicies = new List<UserTokenPolicy>
{
    new UserTokenPolicy { TokenType = UserTokenType.UserName }
};

server.AddUser("operator", "secret123", Role.Operator);  // read + write
server.AddUser("admin",    "admin456",  Role.Engineer);  // full access

6. React to client writes

server.ValuesWritten += (s, e) =>
{
    foreach (var item in e.Items)
        Console.WriteLine($"Client wrote: {item.Path} = {item.Value}");
};

Server SDK features

  • Folders, Variables (scalar + array), Objects, Methods
  • Custom ObjectTypes, VariableTypes and structured DataTypes (Structs)
  • NodeSet2 XML import (OPC UA companion specifications)
  • Alarm & Conditions (AlarmCondition, ExclusiveLimitAlarm, DiscreteAlarm, Dialog)
  • Historical Data Access and Historical Events
  • Simple Events
  • Reverse Connect (server-initiated connections through firewalls)
  • User authentication with roles (Observer, Operator, Engineer)
  • Custom credential and permission validators
  • Multiple namespaces
  • Configurable security policies and endpoint host normalization
  • Integrated logging via LogMessage event

System Requirements

Supported platforms:

  • Microsoft .NET Framework 4.7.2 or higher (up to 4.8.1)
  • Microsoft .NET 5.0 to 7.0 via .NET Standard 2.1
  • Microsoft .NET 8.0
  • Microsoft .NET 9.0
  • Microsoft .NET 10.0

To build and run the included examples:

  • Visual Studio 2022 or higher (VS2026 recommended)

Additional Documentation

Online class reference: https://docs.plccom.net/help_opc_ua_sdk/net/help/html/R_Project_PLCcom_Opc_Ua_Sdk_Documentation.htm

Quick-start examples on GitHub: https://github.com/indi-an-gmbh/PLCcom-OpcUaSdk-examples-dotnet

Feedback

To provide feedback or report issues, please write to: support@indi-an.com

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
.NET Framework net472 is compatible.  net48 is compatible.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on PLCcom.Opc.Ua.Sdk:

Package Downloads
PLCcom.Opc.Ua.PubSub

PLCcom.Opc.Ua.PubSub is a high-level .NET library for building OPC UA PubSub publisher and subscriber applications. It supports brokerless UDP/UADP (unicast and multicast) and broker-based MQTT transport with both UADP binary and JSON encoding, including MQTT TLS (mqtts://) and mutual TLS (mTLS). The fluent API requires only a few lines of code to publish or subscribe to OPC UA data sets. Runs cross-platform on .NET Framework 4.7.2+, .NET Standard 2.1, .NET 8, .NET 9, and .NET 10. Requires a valid PLCcom.Opc.Ua.PubSub license (30-day trial available).

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.5.6 151 6/29/2026
10.5.2 162 6/9/2026
10.5.1 150 5/26/2026
10.4.1 115 5/19/2026
10.3.4 121 5/7/2026
10.3.2 106 5/2/2026
10.3.1 125 4/27/2026
10.2.1 155 4/14/2026
10.1.6 188 3/28/2026
9.2.4.1 794 3/5/2025
9.2.3.1 419 11/20/2024
9.2.2.1 407 9/16/2024
9.1.1.2 1,319 7/3/2024
8.1.1.1 1,108 7/18/2023
Loading failed