libplctag 1.6.0-alpha.0
dotnet add package libplctag --version 1.6.0-alpha.0
NuGet\Install-Package libplctag -Version 1.6.0-alpha.0
<PackageReference Include="libplctag" Version="1.6.0-alpha.0" />
paket add libplctag --version 1.6.0-alpha.0
#r "nuget: libplctag, 1.6.0-alpha.0"
// Install libplctag as a Cake Addin #addin nuget:?package=libplctag&version=1.6.0-alpha.0&prerelease // Install libplctag as a Cake Tool #tool nuget:?package=libplctag&version=1.6.0-alpha.0&prerelease
libplctag.NET
libplctag is a C library for Linux, Android, Windows and macOS that uses EtherNet/IP or Modbus TCP to read and write tags in PLCs.
libplctag.NET provides wrapper packages for libplctag, with an API naturalised to .NET by adding the following features:
- Values are strongly-typed
- Errors are thrown as Exceptions
- Async/Await
- Native resource cleanup
How to use
// Example tag configuration for a global DINT tag in an Allen-Bradley CompactLogix/ControlLogix PLC
var myTag = new Tag()
{
Name = "SomeDINT",
Gateway = "10.10.10.10",
Path = "1,0",
PlcType = PlcType.ControlLogix,
Protocol = Protocol.ab_eip
};
// Read the value from the PLC
myTag.Read();
int originalValue = myTag.GetInt32(0);
Console.WriteLine($"Original value: {originalValue}");
// Write a new value to the PLC
int updatedValue = 1234;
myTag.SetInt32(0, updatedValue);
myTag.Write();
Console.WriteLine($"Updated value: {updatedValue}");
See the examples projects for further detail and usage:
Introduction
A tag is a local reference to a region of PLC memory. Depending on the PLC type and protocol the region may be named. For some protocols, the region is simply a type and register number (e.g. Modbus). For other protocols, it is a name, possible array element, field names etc. (e.g. a CIP-based PLC).
Your program directly controls the resources associated with the connection to the PLC.
It initializes these resources through the Initialize()
function and frees the resources used with the Dispose()
function.
The lowest level of access to a tag is via the Read()
and Write()
operations.
In most cases you must explicitly call these functions to write to the PLC or read from the PLC.
There are also attributes that can be passed when creating a Tag to make it either automatically write to the PLC when the local copy of the tag is updated or read from the PLC periodically, or both.
Once initialized, the tag memory is exposed as a byte array, and can be manipulated using various data accessors.
Libplctag does not expose the concept of a PLC. Just tags.
Read more on the libplctag wiki.
libplctag.Tag
libplctag.NET provides a wrapper for the C API naturalised for .NET.
The Tag
class is intended to be functionally equivalent to the C API.
For example:
Read(..)
≋plc_tag_read(..)
Write(..)
≋plc_tag_write(..)
GetInt32(..)
≋plc_tag_get_int32(..)
Some methods are presented slightly differently due to the differences in languages and language idioms.
For example, the counterpart to Initialize(..)
is plc_tag_create(..)
and the tag attributes are specified as properties (e.g. Tag.Path
).
Data Accessors
Mapping the raw tag buffer to some typed value (e.g. int
) and vice-versa can be achieved using the built-in Data Accessor methods.
Alternatively, get a copy of the byte array with GetBuffer(..)
and do the conversion yourself (e.g. with BitConverter
, BinaryPrimities
, Encoding
, or manually).
In general, you will need prior knowedge of the binary format of the tag data, and you may need to reverse-engineer it. The manuals provided by your device manufacturer are the best source of information on these details.
libplctag.LibPlcTag
This is a static class used to access some utility features of the libplctag base library such as global debug levels and logging.
libplctag.NativeImport
The libplctag package depends on the core libplctag libraries which are written in C and are released as native binaries. The delivery of these files, and the interop to the .NET environment is provided by the libplctag.NativeImport package.
Information on this package can be found here.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. 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 is compatible. 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. |
.NET Core | netcoreapp3.0 is compatible. netcoreapp3.1 is compatible. |
.NET Framework | net47 is compatible. net471 is compatible. net472 is compatible. net48 is compatible. net481 is compatible. |
-
.NETCoreApp 3.0
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
.NETCoreApp 3.1
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
.NETFramework 4.7
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
.NETFramework 4.7.1
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
.NETFramework 4.7.2
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
.NETFramework 4.8
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
.NETFramework 4.8.1
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
net5.0
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
net6.0
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
net7.0
- libplctag.NativeImport (>= 2.0.0-alpha.2)
-
net8.0
- libplctag.NativeImport (>= 2.0.0-alpha.2)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on libplctag:
Package | Downloads |
---|---|
clxx.libplctag.NET
A high level API for reading/writing tags to Rockwell CLX PLCs. ControlLogix and CompactLogix. |
|
MgSoftDev.IndustrialController.AllenBradley.LibPlcTagNetCore
Package Description |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on libplctag:
Repository | Stars |
---|---|
Open-Industry-Project/Open-Industry-Project
Free and open-source warehouse/manufacturing simulation.
|
|
libplctag/libplctag.NET
A .NET wrapper for libplctag.
|
Version | Downloads | Last updated |
---|---|---|
1.6.0-alpha.0 | 238 | 7/26/2024 |
1.5.2 | 3,365 | 7/13/2024 |
1.5.1 | 330 | 7/12/2024 |
1.5.0 | 96 | 7/12/2024 |
1.4.1 | 1,116 | 6/22/2024 |
1.4.0 | 386 | 6/15/2024 |
1.3.1 | 103 | 6/15/2024 |
1.3.0 | 100 | 6/15/2024 |
1.2.1 | 3,008 | 5/29/2024 |
1.2.0 | 19,087 | 11/6/2023 |
1.2.0-alpha.2 | 86 | 10/29/2023 |
1.2.0-alpha.1 | 828 | 10/22/2023 |
1.2.0-alpha.0 | 2,157 | 7/4/2023 |
1.1.1 | 40,911 | 12/14/2022 |
1.1.1-beta.0 | 137 | 12/1/2022 |
1.1.1-alpha.1 | 139 | 11/25/2022 |
1.1.1-alpha.0 | 128 | 11/24/2022 |
1.1.0 | 6,456 | 10/9/2022 |
1.1.0-alpha.2 | 185 | 10/1/2022 |
1.1.0-alpha.1 | 2,221 | 12/27/2021 |
1.0.14-beta.6 | 1,390 | 12/21/2021 |
1.0.14-beta.5 | 549 | 11/5/2021 |
1.0.14-beta.4 | 192 | 10/28/2021 |
1.0.14-beta.3 | 182 | 10/27/2021 |
1.0.14-beta.2 | 297 | 10/23/2021 |
1.0.14-beta.1 | 302 | 10/23/2021 |
1.0.13 | 11,238 | 10/14/2021 |
1.0.12 | 446 | 10/14/2021 |
1.0.11 | 2,188 | 9/24/2021 |
1.0.10 | 509 | 9/22/2021 |
1.0.9 | 497 | 9/18/2021 |
1.0.8 | 596 | 8/30/2021 |
1.0.7 | 1,127 | 8/16/2021 |
1.0.7-alpha.3 | 192 | 8/13/2021 |
1.0.7-alpha.2 | 345 | 7/20/2021 |
1.0.7-alpha | 118 | 7/20/2021 |
1.0.6 | 751 | 7/18/2021 |
1.0.5 | 1,834 | 5/29/2021 |
1.0.4 | 3,607 | 3/7/2021 |
1.0.4-beta.1 | 171 | 2/16/2021 |
1.0.3 | 1,151 | 1/11/2021 |
1.0.2 | 488 | 1/6/2021 |
1.0.1 | 1,338 | 11/15/2020 |
1.0.0 | 847 | 9/16/2020 |
0.0.29-alpha01 | 427 | 9/10/2020 |
0.0.28-alpha02 | 356 | 9/9/2020 |
0.0.28-alpha01 | 337 | 9/9/2020 |
0.0.27-alpha13 | 387 | 8/4/2020 |
0.0.27-alpha12 | 430 | 7/29/2020 |
0.0.27-alpha11 | 367 | 7/27/2020 |
0.0.27-alpha10 | 351 | 7/24/2020 |
0.0.27-alpha09 | 406 | 7/21/2020 |
0.0.27-alpha08 | 397 | 7/19/2020 |
0.0.27-alpha07 | 352 | 7/14/2020 |
0.0.27-alpha06 | 339 | 7/14/2020 |
0.0.27-alpha05 | 341 | 7/14/2020 |
0.0.27-alpha04 | 405 | 7/9/2020 |
0.0.27-alpha03 | 419 | 7/9/2020 |
0.0.27-alpha02 | 356 | 7/9/2020 |
0.0.27-alpha01 | 408 | 7/3/2020 |
0.0.26-alpha01 | 342 | 7/1/2020 |
0.0.25-alpha01 | 361 | 6/30/2020 |
0.0.24 | 903 | 4/4/2020 |
0.0.22 | 677 | 1/10/2020 |
0.0.21 | 637 | 1/4/2020 |
0.0.20-alpha | 403 | 1/4/2020 |
0.0.19-alpha | 405 | 1/4/2020 |
0.0.18-alpha | 398 | 1/4/2020 |
0.0.17-alpha | 412 | 1/4/2020 |
0.0.16-alpha | 416 | 1/4/2020 |
0.0.15-alpha | 446 | 1/4/2020 |
0.0.14-alpha | 430 | 1/3/2020 |
0.0.13-alpha | 401 | 1/3/2020 |
0.0.12-alpha | 436 | 1/3/2020 |
0.0.11-alpha | 401 | 1/3/2020 |