Opc.UaFx.Advanced 2.9.2.1

NEW!
Samples available at https://github.com/Traeger-GmbH/opcuanet-samples

OPC Watch
Download: https://docs.traeger.de/en/software/sdk/opc-ua/net#download
Usage: Browse, read, write, subscribe nodes or generate user defined types from server or nodeset.

Features:
• DA: Data Access
• HDA: Historical Data Access
• AE: Alarm & Events + Conditions
• IO: FileAccess
• API: Methods and Enumerations
• OPC Classic Support
• Others:
 • Units of Measurements
 • Complex/Structured Data Types

Characteristics:
• Simple and fast Client Development
• Minimum number of lines of code
• Uses OPC Foundation Stack V1.03.351.0
• Significantly reduced lines of code compared to OPC Foundation Stack

Framework Features:
• Data Types using Name-Value pairs, .NET dynamic and user defined types
• Linq to Objects support to browse nodes
• Simplified automatic certificate management
• Advanced node identifier formats like compound, URI or Foundation
• Database Cursor like historical data access
• Event driven programming model for certificates and subscriptions

Tested with:
• SIMATIC S7-1500, SIMOTION, SINUMERIC, ...
• and many more other vendors

Works on:
• Windows
• Ubuntu
• Debian
• macOS

Optimized for:
• SIMATIC S7-1500 / S7-1200
• SIMOTION
• SINUMERIC
• all OPC UA Servers from Siemens and other providers

Install-Package Opc.UaFx.Advanced -Version 2.9.2.1
dotnet add package Opc.UaFx.Advanced --version 2.9.2.1
<PackageReference Include="Opc.UaFx.Advanced" Version="2.9.2.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Opc.UaFx.Advanced --version 2.9.2.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Getting Started

The whole client development guides can be found here:

The whole server development guides can be found here:

A snippet to dig into your server:

using Opc.UaFx.Server;
...
var machineNode = new OpcObjectNode("Machine");
var messageNode = new OpcDataVariableNode<string>("Message","Hello World!");

using (var server = new OpcServer(
        "opc.tcp://localhost:4840/", machineNode, messageNode)) {
    server.Start();
    Console.ReadLine();

    // Your further code to interact with the clients.
}

A snippet to dig into your client:

using Opc.UaFx.Client;
...
using (var client = new OpcClient("opc.tcp://localhost:4840/")) {
    client.Connect();
    Console.WriteLine(client.ReadNode("ns=2;s=Message"));

    // Your further code to interact with the server.
}

Let's Define a Node + Read the Node

// ----- Server -----

OpcDataVariableNode<bool> isRunningNode = new OpcDataVariableNode<bool>(
        machineNode,
        "IsRunning",
        value: true);

// ----- Client -----

OpcValue isRunning = client.ReadNode("ns=2;s=Machine/IsRunning");

More: Node Management
More: Read Values of Node(s)

Let's Define a Node Tree + Write some Nodes

// ----- Server -----

OpcObjectNode jobNode = new OpcObjectNode(
        machineNode,
        "Job",
        new OpcDataVariableNode<bool>("Cancel", false),
        new OpcDataVariableNode<int>("State", -1));

// ----- Client -----

OpcStatusCollection results = client.WriteNodes(
        new OpcWriteNode("ns=2;s=Machine/Job/Cancel", true),
        new OpcWriteNode("ns=2;s=Machine/Job/State", 0));

More: Node Management
More: Write Values of Node(s)

Let's Define + Read a File Node

// ----- Server -----

System.IO.File.WriteAllText("Report.txt", "This is my report.");
OpcFileNode reportNode = new OpcFileNode(machineNode, "Report", "Report.txt");


// ----- Client -----

// All at once
string reportText = OpcFile.ReadAllText(client, "ns=2;s=Machine/Report");

// All via a stream
using (var stream = OpcFile.OpenRead(client, "ns=2;s=Machine/Report")) {
    var reader = new StreamReader(stream);

    while (!reader.EndOfStream)
        Console.WriteLine(reader.ReadLine());
}

More: Providing File Nodes
More: Working with File Nodes

Report and Observe some Alarm's and Event's

// ----- Client -----

client.SubscribeEvent(OpcObjectTypes.Server, HandleGlobalEvents);
...

private static void HandleGlobalEvents(object sender, OpcEventReceivedEventArgs e)
{
    Console.WriteLine(e.Event.Message);
}


// ----- Server -----

server.ReportEvent(OpcEventSeverity.Low, "Finished JOB-4711");

More: Providing Events
More: Working with Events

Report and Observe only Alarm's and Event's from interest

// ----- Server -----

OpcAlarmConditionNode temperatureAlarmNode = new OpcAlarmConditionNode(
        machineNode,
        "Temperature");

temperatureAlarmNode.Severity = OpcEventSeverity.High;
temperatureAlarmNode.Message = "Overheating use cases!";


// ----- Client -----

var severity = new OpcSimpleAttributeOperand(
        OpcEventTypes.Event,
        "Severity");

var conditionName = new OpcSimpleAttributeOperand(
        OpcEventTypes.Condition,
        "ConditionName");

var filter = OpcFilter.Using(client)
        .FromEvents(OpcEventTypes.AlarmCondition)
        .Where(severity > OpcEventSeverity.Medium & conditionName.Like("Temperature"))
        .Select();

client.SubscribeEvent(OpcObjectTypes.Server, filter, HandleGlobalEvents);


// ----- Server -----
server.ReportEvent(temperatureAlarmNode);

More: Providing Event Nodes
More: Working with Events

Getting Started

The whole client development guides can be found here:

The whole server development guides can be found here:

A snippet to dig into your server:

using Opc.UaFx.Server;
...
var machineNode = new OpcObjectNode("Machine");
var messageNode = new OpcDataVariableNode<string>("Message","Hello World!");

using (var server = new OpcServer(
        "opc.tcp://localhost:4840/", machineNode, messageNode)) {
    server.Start();
    Console.ReadLine();

    // Your further code to interact with the clients.
}

A snippet to dig into your client:

using Opc.UaFx.Client;
...
using (var client = new OpcClient("opc.tcp://localhost:4840/")) {
    client.Connect();
    Console.WriteLine(client.ReadNode("ns=2;s=Message"));

    // Your further code to interact with the server.
}

Let's Define a Node + Read the Node

// ----- Server -----

OpcDataVariableNode<bool> isRunningNode = new OpcDataVariableNode<bool>(
        machineNode,
        "IsRunning",
        value: true);

// ----- Client -----

OpcValue isRunning = client.ReadNode("ns=2;s=Machine/IsRunning");

More: Node Management
More: Read Values of Node(s)

Let's Define a Node Tree + Write some Nodes

// ----- Server -----

OpcObjectNode jobNode = new OpcObjectNode(
        machineNode,
        "Job",
        new OpcDataVariableNode<bool>("Cancel", false),
        new OpcDataVariableNode<int>("State", -1));

// ----- Client -----

OpcStatusCollection results = client.WriteNodes(
        new OpcWriteNode("ns=2;s=Machine/Job/Cancel", true),
        new OpcWriteNode("ns=2;s=Machine/Job/State", 0));

More: Node Management
More: Write Values of Node(s)

Let's Define + Read a File Node

// ----- Server -----

System.IO.File.WriteAllText("Report.txt", "This is my report.");
OpcFileNode reportNode = new OpcFileNode(machineNode, "Report", "Report.txt");


// ----- Client -----

// All at once
string reportText = OpcFile.ReadAllText(client, "ns=2;s=Machine/Report");

// All via a stream
using (var stream = OpcFile.OpenRead(client, "ns=2;s=Machine/Report")) {
    var reader = new StreamReader(stream);

    while (!reader.EndOfStream)
        Console.WriteLine(reader.ReadLine());
}

More: Providing File Nodes
More: Working with File Nodes

Report and Observe some Alarm's and Event's

// ----- Client -----

client.SubscribeEvent(OpcObjectTypes.Server, HandleGlobalEvents);
...

private static void HandleGlobalEvents(object sender, OpcEventReceivedEventArgs e)
{
    Console.WriteLine(e.Event.Message);
}


// ----- Server -----

server.ReportEvent(OpcEventSeverity.Low, "Finished JOB-4711");

More: Providing Events
More: Working with Events

Report and Observe only Alarm's and Event's from interest

// ----- Server -----

OpcAlarmConditionNode temperatureAlarmNode = new OpcAlarmConditionNode(
        machineNode,
        "Temperature");

temperatureAlarmNode.Severity = OpcEventSeverity.High;
temperatureAlarmNode.Message = "Overheating use cases!";


// ----- Client -----

var severity = new OpcSimpleAttributeOperand(
        OpcEventTypes.Event,
        "Severity");

var conditionName = new OpcSimpleAttributeOperand(
        OpcEventTypes.Condition,
        "ConditionName");

var filter = OpcFilter.Using(client)
        .FromEvents(OpcEventTypes.AlarmCondition)
        .Where(severity > OpcEventSeverity.Medium & conditionName.Like("Temperature"))
        .Select();

client.SubscribeEvent(OpcObjectTypes.Server, filter, HandleGlobalEvents);


// ----- Server -----
server.ReportEvent(temperatureAlarmNode);

More: Providing Event Nodes
More: Working with Events

Release Notes

https://docs.traeger.de/en/software/sdk/opc-ua/net/version.history

GitHub repositories (0)

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
2.9.2.1 609 5/8/2020
2.9.2 66 5/6/2020
2.9.1 211 4/22/2020
2.9.0 332 4/1/2020
2.8.3.1 960 1/24/2020
2.8.3 239 1/16/2020
2.8.2.1 393 12/13/2019
2.8.2 483 11/6/2019
2.8.1.3 144 10/24/2019
2.8.1.2 782 10/23/2019
2.8.1.1 251 10/11/2019
2.8.1 161 9/25/2019
2.8.0 156 9/18/2019
2.7.5.1 276 8/15/2019
2.7.5 167 8/13/2019
2.7.4 405 6/7/2019
2.7.3.1 205 5/23/2019
2.7.3 213 5/17/2019
2.7.2 209 5/10/2019
2.7.1.1 204 4/29/2019
2.7.1 344 3/25/2019
2.7.0.2 233 3/18/2019
2.7.0.1 198 3/15/2019
2.7.0 177 3/14/2019
2.6.0 425 2/20/2019
2.5.7 243 2/6/2019
2.5.4 1,086 8/27/2018
2.5.3 337 8/21/2018
2.5.2.5 354 8/7/2018
2.5.2.3 399 7/25/2018
2.5.2.2 304 7/24/2018
2.2.1 1,254 9/7/2017
1.5.11.5 1,868 6/14/2016
1.5.11.3 662 5/2/2016
1.5.11.2 702 4/29/2016
1.5.10 690 2/9/2016
1.5.6.1 964 9/8/2015