Package named Opc.UaFx.Advanced is found in https://www.nuget.org/packages/Opc.UaFx.Advanced that used as a Opc Ua Server and Client.
First of all. Install package
dotnet add package Opc.UaFx.Advanced --version 2.31.0
using Opc.UaFx;
using Opc.UaFx.Client;
using Opc.UaFx.Server;
// Define the root node of server
var machineNode = new OpcObjectNode("Machine");
// Declear a variable Hello world like very started.
var messageNode = new OpcDataVariableNode<string>("Message", "Hello World!");
// It's a variable set to false.
bool variableValue = false;
// bind the variable to root.
var isRunningNode = new OpcDataVariableNode<bool>(
machineNode,
"IsRunning",
value: variableValue);
// bind another one in case.
var jobNode = new OpcObjectNode(
machineNode,
"Job",
new OpcDataVariableNode<bool>("Cancel", false),
new OpcDataVariableNode<int>("State", -1));
// New a opc server. Make sure tcp port 4840 haven't been used before
using var server = new OpcServer(
"opc.tcp://localhost:4840/", machineNode, messageNode);
// Start it
server.Start();
// Wait a second
Thread.Sleep(1000);
// New a client to connect to 4840
using var client = new OpcClient("opc.tcp://localhost:4840/");
// Connect anyway
client.Connect();
// Print the variable value. It should be false here.
Console.WriteLine(client.ReadNode("ns=2;s=Machine/IsRunning"));
// Write some values.
OpcStatusCollection results = client.WriteNodes(
new OpcWriteNode("ns=2;s=Machine/Job/Cancel", true),
new OpcWriteNode("ns=2;s=Machine/Job/State", 0));
// Print them.
Console.WriteLine(client.ReadNode("ns=2;s=Machine/Job/Cancel"));
Console.WriteLine(client.ReadNode("ns=2;s=Machine/Job/State"));