joc-luis / OPCUaClient

Client for OPC UA Server
MIT License
18 stars 8 forks source link
client opc ua

OPCUaClient

Client for OPC UA Server

Build with

OPC UA Foundation library

Certificates

The certificates are in the same folder the application executable.

How to use

Install

dotnet add package OPCUaClient

Import

 using OPCUaClient;

Create a instance

 UaClient client = new UaClient("test", "opc.tcp://localhost:52240", true, true);

 UaClient auth = new UaClient("test", "opc.tcp://localhost:52240", true, true, "admin", "password");

Create a session on the server

 int timeOut = 30;
 client.Connect(timeOut, true);

Close session

 client.Disconnect();

Read a tag

 Tag tag = client.Read("Device.Counter.OK");
 //Or
 tag = await client.Read("Device.Counter.OK");

 Console.WriteLine($"Name: {tag.Name}");
 Console.WriteLine($"Address: {tag.Address}");
 Console.WriteLine($"Value: {tag.Value}");
 Console.WriteLine($"Quality: {tag.Quality}");
 Console.WriteLine($"Code: {tag.Code}");

 int value = client.Read<int>("Device.Counter.Number");
 value = await client.ReadAsync<int>("Device.Counter.Number");

Read multiple tags

var address = new List<String>
{
  "Device.Counter.OK",
  "Device.Counter.NG",
  "Device.Counter.Model",
  "Device.Counter.CycleTime"
}

 var tags = client.Read(address);
 //Or
 tags await = client.ReadAsync(address);

 foreach(var tag in tags)
 {
    Console.WriteLine($"Name: {tag.Name}");
    Console.WriteLine($"Address: {tag.Address}");
    Console.WriteLine($"Value: {tag.Value}");
    Console.WriteLine($"Quality: {tag.Quality}");
    Console.WriteLine($"Code: {tag.Code}");
 }

Write a tag

 client.Write("Device.Counter.Model", "NewModel");
 //Or
 await client.WriteAsync("Device.Counter.Model", "NewModel");

Write multiple tags

var tags = new List<Tag>
{
  new Tag {
    Address = "Device.Counter.OK",
    Value = 0,
  },
  new Tag {
    Address = "Device.Counter.NG",
    Value = 0,
  },
  new Tag {
    Address = "Device.Counter.Model",
    Value = "OtherModel",
  },
  new Tag {
    Address = "Device.Counter.CycleTime",
    Value = 10,
  },
}
client.Write(tags);
//Or
 await client.WriteAsync(tags);

Monitoring a tag

 client.Monitoring("Device.Counter.OK", 500, (_, e) => {
   // Anything you need to be executed when the value changes

   // Get the value of the tag being monitored
    var monitored = (MonitoredItemNotification)e.NotificationValue;
    Console.WriteLine(monitored.Value);
 });

Scan OPC UA Server

 var devices = client.Devices(true);
 //Or
 devices = await client.DevicesAsync(true);

 foreach(var device in devices)
 {
    Console.WriteLine($"Name: {device.Name}");
    Console.WriteLine($"Address: {device.Address}");
    Console.WriteLine($"Groups: {device.Groups.Count()}");
    Console.WriteLine($"Tags: {device.Tags.Count()}");
 }

Scan group

 var groups = client.Group("Device", true);
 //Or
groups = await client.GroupAsync("Device", true); 

 foreach(var group in groups)
 {
    Console.WriteLine($"Name: {group.Name}");
    Console.WriteLine($"Address: {group.Address}");
    Console.WriteLine($"Groups: {group.Groups.Count()}");
    Console.WriteLine($"Tags: {group.Tags.Count()}");
 }

Scan an address and recovery the tags

 var tags = client.Tags("Device.Counter");
 //Or
 tags = await client.TagsAsync("Device.Counter");

 foreach(var tag in tags)
 {
    Console.WriteLine($"Name: {tag.Name}");
    Console.WriteLine($"Address: {tag.Address}");
 }

License

MIT

Icon for Freepik