h-opc-net
1.0.0-alpha
See the version list below for details.
dotnet add package h-opc-net --version 1.0.0-alpha
NuGet\Install-Package h-opc-net -Version 1.0.0-alpha
<PackageReference Include="h-opc-net" Version="1.0.0-alpha" />
paket add h-opc-net --version 1.0.0-alpha
#r "nuget: h-opc-net, 1.0.0-alpha"
// Install h-opc-net as a Cake Addin #addin nuget:?package=h-opc-net&version=1.0.0-alpha&prerelease // Install h-opc-net as a Cake Tool #tool nuget:?package=h-opc-net&version=1.0.0-alpha&prerelease
h-opc
An Opc Library and a command line to perform OPC operations with ease and transparency among different protocols. Currently supports synchronous operation over UA and DA protocols. This fork is a netstandard2.0 port with minor improvements, will see if furthur maintenance will be carried out.
Table of Contents
Use
A nuget package is available for the OLD library. To install H.Opc
, run the following command in the Package Manager Console:
PM> Install-Package H.Opc
NOTE: Package was moved on NuGet.org from Hylasoft.Opc to H.Opc because of NuGet account issues
To install the command line interface, head to the release section
.
Documentation
to use the UA Client simply...
using (var client = new UaClient(new Uri("opc.tcp://host-url")))
{
client.Connect();
// Use `client` here
}
or with options...
var options = new UaClientOptions {
UserIdentity = new Opc.Ua.UserIdentity("<your-username>", "<your-password>")
};
using (var client = new UaClient(new Uri("opc.tcp://host-url")), options)
{
client.Connect();
// Use `client` here
}
and to use the DA Client instead:
using (var client = new DaClient(new Uri("opcda://host-url")))
{
client.Connect();
// Use `client` here
}
Exploring the nodes
You can get a reference to a node with...
var node = client.FindNode("path.to.my.node");
This will get you a reference to the node node
in the folder path.to.my
.
You can use the node reference to explore the hieriarchy of nodes with the properties Parent
and SubNodes
. For example...
Node parentNode = node.Parent;
IEnumerable<Node> children = client.ExploreFolder(node.Tag);
IENumerable<Node> grandChildren = children.SelectMany(m => client.ExploreFolder(m.Tag));
Read a node
Reading a variable? As simple as...
var myString = client.Read<string>("path.to.string").Value;
var myInt = client.Read<int>("path.to.num").Value;
The example above will read a string from the tags string
and num
in the folder path.to
Writing to a node
To write a value just...
client.Write("path.to.string", "My new value");
client.Write("path.to.num", 42);
Monitoring a tag
Dead-simple monitoring:
client.Monitor<string>("path.to.string", (readEvent, unsubscribe) =>
{
DoSomethingWithYourValue(readEvent.Value);
if(ThatsEnough == true)
unsubscribe();
});
The second parameter is an Action<T, Action>
that has two parameter:
readEvent
contains all the information relevant to the event such as timestamps, quality and the valueunsubscribe
is a function that unsubscribes the current monitored item. It's very handy when you want to terminate your callback
it's important that you either enclose the client into a using
statement or call Dispose()
when you are finished, to unsubscribe all the monitored items and terminate the connection!
Go Asynchronous!
Each method as an asynchornous counterpart that can be used with the async/await syntax. The asynchronous syntax is recommended over the synchronous one (maybe the synchronous one will be deprecated one day).
Command line
You can also use the command line interface project to quickly test your an OPC. Build the h-opc-cli
project or download it from the release
page of this repository, then run:
h-opc-cli.exe [OpcType] [server-url]
Where OpcType
is the type of opc to use (e.g: "UA", "DA"). Once the project is running, you can use the internal command to manipulate the variable. To have more information aboute the internal commands, type help
or ?
Build + Contribute
The repository uses cs-boilerplate. Read the readme of the cs-boilerplate repository to understand how to build, run tasks and commit your work to master
.
Unit Testing
- The unit tests rely on locally running simulator OPC servers. The ones used in this project are OPC Foundation's Sample Server
and Graybox Simulator
- You must download OPC Foundation's Sample Server from the OPC Foundation website (link above), but GrayBox can be downloaded using Chocolatey
choco install grayboxsimulator
- OPC Foundation's Sample Server requires you register with the website before you can download.
- You must download OPC Foundation's Sample Server from the OPC Foundation website (link above), but GrayBox can be downloaded using Chocolatey
- The tests use NUnit. To run them in Visual Studio, install the NUnit 3 Test Adapter
- To configure the test project, run the
configure.ps1
script in the root h-opc directory
UA
- Open OPC Foundation's Sample Client (under Start → OPC Foundation → UA x.xx → Sample Applications → Opc.Ua.SampleClient.exe)
- This will start the server too
- Running tests will only work with this program open
DA
- With Graybox Simulator installed, tests should automatically work
Disclaimer
The following binaries belong to the OPC Foundation. You must become a registered user in order to use them:
OPC.Ua.Client.dll
OPC.Ua.Core.dll
OPC.Ua.Configuration.dll
OpcComRcw.dll
OpcNetApi.Com.dll
OpcNetApi.dll
You must agree to the terms and condition exposed on the OPC Foundation website. Hyla Soft is not responsible of their usage and cannot be held responsible.
Roadmap
- Add promise-based asynchronous calls
Product | Versions 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 was computed. 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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- OPCFoundation.NetStandard.Opc.Ua.Client (>= 1.5.375-eccpreview)
- Quick.OpcNetApi (>= 2.1.108)
- Quick.OpcNetApi.Com (>= 2.1.108)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0 | 82 | 11/11/2024 |
1.0.0-alpha | 67 | 11/11/2024 |
Upgrade to netstandard2.0;
Minor changes and correction to original OpcClient;