MgSoftDev.IndustrialController.Emerson.ASComm.SRTP
1.2.1
dotnet add package MgSoftDev.IndustrialController.Emerson.ASComm.SRTP --version 1.2.1
NuGet\Install-Package MgSoftDev.IndustrialController.Emerson.ASComm.SRTP -Version 1.2.1
<PackageReference Include="MgSoftDev.IndustrialController.Emerson.ASComm.SRTP" Version="1.2.1" />
<PackageVersion Include="MgSoftDev.IndustrialController.Emerson.ASComm.SRTP" Version="1.2.1" />
<PackageReference Include="MgSoftDev.IndustrialController.Emerson.ASComm.SRTP" />
paket add MgSoftDev.IndustrialController.Emerson.ASComm.SRTP --version 1.2.1
#r "nuget: MgSoftDev.IndustrialController.Emerson.ASComm.SRTP, 1.2.1"
#:package MgSoftDev.IndustrialController.Emerson.ASComm.SRTP@1.2.1
#addin nuget:?package=MgSoftDev.IndustrialController.Emerson.ASComm.SRTP&version=1.2.1
#tool nuget:?package=MgSoftDev.IndustrialController.Emerson.ASComm.SRTP&version=1.2.1
MgSoftDev.IndustrialController
One API for talking to industrial PLCs from .NET.
Connect, create a tag, read, write — the code is identical whether the controller on the other end is a Siemens S7, an Allen Bradley ControlLogix, an Omron NJ/NX, an Emerson PAC System, or a simulator running on your laptop. Switching brands is a one-line change in your dependency injection setup; nothing else in your application moves.
Controller plc = factory.New(connection).Throw();
plc.Connect(persist: true); // auto-reconnects in the background
Tag<int> counter = plc.CreateTag<int>(parameters).Throw();
counter.Read(); // updates counter.Value
counter.Write(42);
Why it exists
Every PLC vendor ships its own driver with its own object model, its own error conventions and its
own idea of what a "tag" is. An application written against S7.Net Plus has to be rewritten to talk
to libplctag. This library puts a single Controller / Tag<T> abstraction in front of all of them,
so the vendor choice stays where it belongs: in configuration.
On top of that it adds what production line software actually needs and raw drivers don't provide:
- Automatic reconnection.
Connect(persist: true)starts a background task that watches the link and reconnects on its own. - Errors as values. Every operation returns
Returninginstead of throwing, so a dropped PLC is a value you handle, not an exception that takes down a loop. - Bindable state.
ControllerandTag<T>implementINotifyPropertyChanged, so a WPF view can bind straight totag.Valueorplc.IsConnectedwith no ViewModel plumbing in between. - Built-in diagnostics. Each controller and tag keeps an event log, and tags keep a history of value changes — enough to build a monitoring screen without instrumenting anything.
- Configuration as data. Connections and tag addresses serialize to JSON, so a plant's PLC map can live in a database and be edited without recompiling.
Install
Always the core, plus one provider package:
dotnet add package MgSoftDev.IndustrialController.Core
dotnet add package MgSoftDev.IndustrialController.Siemens.S7_PlcCore
| Provider | Package (*Core is the one you install) |
Protocol / port | Target |
|---|---|---|---|
| Siemens S7 | MgSoftDev.IndustrialController.Siemens.S7_PlcCore |
ISO-on-TCP / 102 | net7.0, netstandard2.0 |
| Allen Bradley + Omron | MgSoftDev.IndustrialController.AllenBradley.LibPlcTagNetCore |
EtherNet/IP / 44818 | net7.0, netstandard2.0 |
| Allen Bradley (INGEAR) | MgSoftDev.IndustrialController.AllenBradley.Ingear.LogixCore |
EtherNet/IP | net4.8 only, licensed |
| AB PLC-5 / SLC (INGEAR) | MgSoftDev.IndustrialController.AllenBradley.Ingear.ABLinkCore |
EtherNet/IP | net4.8 only, licensed |
| Emerson PAC / Series 90 | MgSoftDev.IndustrialController.Emerson.ASComm.SRTPCore |
SRTP | needs ASComm IoT installed |
| Simulator | MgSoftDev.IndustrialController.Simulator |
IPC/TCP / 1588 | testing, no hardware |
For Allen Bradley and Omron on .NET 7+, LibPlcTag is the one to pick — it is the only provider with no commercial license attached. See docs/providers/ for the full comparison.
Quick start
No PLC needed — this runs against the simulator:
using MgSoftDev.IndustrialController.Core;
using MgSoftDev.IndustrialController.Simulator;
var factory = new SimulatorControllerFactory();
Controller plc = factory.New(new SimulatorControllerConnection("Sim1", "127.0.0.1", 1588)).Throw();
plc.Connect(persist: true);
Tag<int> tag = plc.CreateTag<int>(new TagParameters("Counter", "Int", null)).Throw();
tag.Write(42);
tag.Read();
Console.WriteLine($"{tag.Parameters.DisplayTagName} = {tag.Value}");
Start SimulatorServerApp first — it hosts the virtual PLC and creates tags on first use.
Full walkthrough in Getting started.
Against a real Siemens S7-1500, only the two configuration objects change:
var factory = new S7ControllerFactory();
Controller plc = factory.New(new S7ControllerConnection("Plc1", CpuType.S71500, "192.168.0.10", rack: 0, slot: 1)).Throw();
plc.Connect(persist: true);
Tag<int> tag = plc.CreateTag<int>(
new S7TagParameters("Counter", "Int", DataType.DataBlock, db: 17, VarType.Int, startByteAdr: 2)).Throw();
Documentation
| Guide | What's in it |
|---|---|
| Getting started | Install, run the simulator, read and write your first tag |
| Core concepts | Controller, ControllerFactory, Tag<T>, ITag, ControllerConfig, caching, error handling |
| Providers | One page per vendor: connection parameters, tag addressing, enums, quirks |
| JSON configuration | Storing the PLC and tag map in a database |
| Monitoring UI | Binding a WPF diagnostics screen straight to controllers and tags |
| API reference | Full public surface with signatures |
| Releasing | How a git tag publishes the packages |
Requirements
- .NET 7+ or any .NET Standard 2.0 consumer (including .NET Framework 4.6.1+).
- The two INGEAR providers are .NET Framework 4.8 only and need an INGEAR runtime license.
- The Emerson provider needs ASComm IoT installed locally; the assembly is not redistributed on NuGet.
Building from source
dotnet build MgSoftDev.IndustrialController.sln -c Release
Requires Windows: two providers target net4.8 and the simulator server is WPF. The Emerson
provider additionally needs ASComm IoT — override its location with
-p:ASCommDir="C:\path\to\ASComm" if you installed it somewhere other than the default.
License
Copyright (c) MgSoftDev. All rights reserved.
| 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 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 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. 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. |
| .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
- MgSoftDev.IndustrialController.Core (>= 1.2.1)
- Newtonsoft.Json (>= 13.0.4)
-
net7.0
- MgSoftDev.IndustrialController.Core (>= 1.2.1)
- Newtonsoft.Json (>= 13.0.4)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on MgSoftDev.IndustrialController.Emerson.ASComm.SRTP:
| Package | Downloads |
|---|---|
|
MgSoftDev.IndustrialController.Emerson.ASComm.SRTPCore
Emerson provider for MgSoftDev.IndustrialController speaking SRTP to PAC Systems and Series 90 controllers, built on the commercial ASComm IoT library from Automated Solutions. Requires ASComm IoT to be installed locally - the assembly is not distributed on NuGet. |
GitHub repositories
This package is not used by any popular GitHub repositories.