Acuit.Pinpoint.IO.PlcCommunication
8.0.0-preview.40
dotnet add package Acuit.Pinpoint.IO.PlcCommunication --version 8.0.0-preview.40
NuGet\Install-Package Acuit.Pinpoint.IO.PlcCommunication -Version 8.0.0-preview.40
<PackageReference Include="Acuit.Pinpoint.IO.PlcCommunication" Version="8.0.0-preview.40" />
<PackageVersion Include="Acuit.Pinpoint.IO.PlcCommunication" Version="8.0.0-preview.40" />
<PackageReference Include="Acuit.Pinpoint.IO.PlcCommunication" />
paket add Acuit.Pinpoint.IO.PlcCommunication --version 8.0.0-preview.40
#r "nuget: Acuit.Pinpoint.IO.PlcCommunication, 8.0.0-preview.40"
#:package Acuit.Pinpoint.IO.PlcCommunication@8.0.0-preview.40
#addin nuget:?package=Acuit.Pinpoint.IO.PlcCommunication&version=8.0.0-preview.40&prerelease
#tool nuget:?package=Acuit.Pinpoint.IO.PlcCommunication&version=8.0.0-preview.40&prerelease
Acuit.Pinpoint.IO.PlcCommunication
This package provides types for communicating with PLCs via libplctag.
libplctag version 2.6.12 is included with this package.
Background
Sometimes multiple plug-ins at a single Acuit Pinpoint station need to communicate with PLCs, or possibly the same PLC. While plug-ins are free to use any PLC communication library, libplctag is a popular open-source library for performing PLC communication. libplctag is designed to optimize communication via a single library instance within a process, so when multiple Acuit Pinpoint Workstation plug-ins are using libplctag for PLC communication, they should preferably all be using a shared libplctag library instance. However, due to Acuit Pinpoint Workstation's plug-in architecture, each plug-in is typically loaded into its own isolated assembly load context with its own private copy of its dependencies, which would normally result in multiple instances of libplctag being loaded into the same process.
To facilitate plug-ins using a shared instance of libplctag, Acuit Pinpoint Workstation includes libplctag via this library.
Low-level libplctag API
Low-level access to libplctag via a thin .NET layer over the C API is provided via types in the Acuit.Pinpoint.IO.PlcCommunication.LibPlcTag namespace.
High-level API
This package also includes a higher-level API that abstracts libplctag tags via carefully-designed .NET types (i.e., ITag<TAttributes>), along with providing PLC-specific types that properly handle various tag data types (e.g., the types in the Acuit.Pinpoint.IO.PlcCommunication.ControlLogix namespace).
Note that this functionality is similar to that provided by the popular libplctag.NET .NET wrapper library, but with these improvements:
- The API is cleaner and more closely aligns to the latest .NET API conventions.
- The implementation is more efficient, with fewer allocations and better performance.
- The design allows for easy testing, with abstractions that allow for unit testing, bypassing libplctag.
Fakes
Fake implementations are provided to facilitate unit testing or for simulating PLCs. This abstraction occurs at the low-level libplctag API wrapper layer via the FakeLibPlcTagApi class.
Usually, a tag factory like ControlLogixTagFactory should be used in your application to create tags. One of the options provided to the tag factory is a LibPlcTagApi property, which, by default, will be set to the normal libplctag API wrapper. This can instead be set to an instance of FakeLibPlcTagApi to cause the fake libplctag API to be used instead for all tags created using the factory.
Before any tags can be used, they must be initialized in the fake controller data maintained by the fake API wrapper. The FakeLibPlcTagApi class requires a FakeLibPlcTagApiOptions instance, which, among other things, has a ControllerData property that specifies a set of faked controller data. By default, this will be set to a shared default instance, but it can be changed to a unique FakeControllerData instance when multiple controllers are being emulated. Initially, each FakeControllerData will not contain any tag data, so attempting to read or write any tags will raise errors as if those tags do not exist in the PLC. To initialize the tags, use one of the SetTagValue methods or extension methods to set the tag data in the fake controller. This can be called again at any time to emulate a tag value changing in the controller.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Acuit.Pinpoint.IO.PlcCommunication:
| Package | Downloads |
|---|---|
|
Acuit.Pinpoint.Workstation.PlugIns
This meta package does not contain any assets itself, but it references all of the package dependencies used to develop plug-ins for Acuit Pinpoint Workstation. |
|
|
Acuit.Pinpoint.IO.Workstation
Provides components related to working with external devices that are hosted within Acuit Pinpoint Workstation and that integrate with WPF. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 8.0.0-preview.40 | 329 | 11/20/2025 |
| 8.0.0-preview.39 | 251 | 11/17/2025 |
| 8.0.0-preview.38 | 236 | 11/12/2025 |
| 8.0.0-preview.37 | 205 | 11/10/2025 |
| 8.0.0-preview.36 | 85 | 11/7/2025 |
| 8.0.0-preview.35 | 132 | 11/4/2025 |
| 8.0.0-preview.34 | 131 | 11/3/2025 |
| 8.0.0-preview.33 | 136 | 11/3/2025 |
| 8.0.0-preview.32 | 141 | 10/30/2025 |
| 8.0.0-preview.31 | 134 | 10/28/2025 |
| 8.0.0-preview.30 | 131 | 10/26/2025 |
| 8.0.0-preview.29 | 132 | 10/2/2025 |
| 8.0.0-preview.28 | 126 | 10/1/2025 |
| 8.0.0-preview.27 | 129 | 9/23/2025 |
| 8.0.0-preview.26 | 266 | 9/16/2025 |
| 8.0.0-preview.25 | 530 | 7/23/2025 |
| 8.0.0-preview.24 | 131 | 7/13/2025 |
| 8.0.0-preview.23 | 277 | 6/12/2025 |
| 8.0.0-preview.22 | 111 | 6/7/2025 |
| 8.0.0-preview.21 | 141 | 5/19/2025 |
| 8.0.0-preview.20 | 171 | 5/16/2025 |
| 8.0.0-preview.19 | 146 | 3/13/2025 |
| 8.0.0-preview.18 | 134 | 3/8/2025 |
| 8.0.0-preview.17 | 186 | 3/3/2025 |
| 8.0.0-preview.16 | 89 | 1/18/2025 |
| 8.0.0-preview.15 | 79 | 1/13/2025 |
| 8.0.0-preview.14 | 80 | 1/9/2025 |
| 8.0.0-preview.13 | 95 | 12/22/2024 |
| 8.0.0-preview.12 | 98 | 12/21/2024 |
| 8.0.0-preview.11 | 88 | 12/20/2024 |
| 8.0.0-preview.10 | 106 | 12/16/2024 |