PlcComm.Slmp 0.1.3

dotnet add package PlcComm.Slmp --version 0.1.3
                    
NuGet\Install-Package PlcComm.Slmp -Version 0.1.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PlcComm.Slmp" Version="0.1.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PlcComm.Slmp" Version="0.1.3" />
                    
Directory.Packages.props
<PackageReference Include="PlcComm.Slmp" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PlcComm.Slmp --version 0.1.3
                    
#r "nuget: PlcComm.Slmp, 0.1.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PlcComm.Slmp@0.1.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PlcComm.Slmp&version=0.1.3
                    
Install as a Cake Addin
#tool nuget:?package=PlcComm.Slmp&version=0.1.3
                    
Install as a Cake Tool

CI NuGet Documentation .NET 9.0 License: MIT

SLMP Protocol for .NET

Illustration

High-level SLMP helpers for Mitsubishi PLC communication over Binary 3E and 4E frames.

The recommended user surface is the extension-method layer:

  • SlmpClient.OpenAndConnectAsync
  • ReadTypedAsync / WriteTypedAsync
  • ReadWordsAsync / ReadDWordsAsync
  • WriteBitInWordAsync
  • ReadNamedAsync
  • PollAsync

Low-level request builders and raw protocol methods remain available for maintainers, but they are not the primary user path.

Quick Start

Installation

dotnet add package PlcComm.Slmp

Or add a package reference directly:

<PackageReference Include="PlcComm.Slmp" Version="0.1.3" />

You can also reference src/PlcComm.Slmp/PlcComm.Slmp.csproj directly during local development.

dotnet build PlcComm.Slmp.sln

Recommended high-level usage:

using PlcComm.Slmp;

await using var client = await SlmpClient.OpenAndConnectAsync(
    "192.168.250.100",
    1025,
    SlmpFrameType.Frame4E,
    SlmpCompatibilityMode.Iqr);

var snapshot = await client.ReadNamedAsync(["D100", "D200:F", "D50.3"]);
Console.WriteLine(snapshot["D100"]);
Console.WriteLine(snapshot["D200:F"]);
Console.WriteLine(snapshot["D50.3"]);

High-Level API Guide

Typed values

float temperature = (float)await client.ReadTypedAsync("D200", "F");
int position = (int)await client.ReadTypedAsync("D300", "L");

await client.WriteTypedAsync("D100", "U", (ushort)42);
await client.WriteTypedAsync("D200", "F", 3.14f);
await client.WriteTypedAsync("D300", "L", -100);

Mixed reads

var snapshot = await client.ReadNamedAsync(
[
    "D100",
    "D200:F",
    "D300:L",
    "D50.3",
]);

Use .bit notation only with word devices such as D50.3. Address bit devices directly as M1000, M1001, ... rather than M1000.0.

For long-device families in the high-level helper layer:

  • plain LTN, LSTN, and LCN addresses default to 32-bit current-value access
  • LTS, LTC, LSTS, and LSTC are resolved through the corresponding ReadLongTimerAsync / ReadLongRetentiveTimerAsync helper-backed 4-word decode instead of direct state reads

Chunked reads

ushort[] words = await client.ReadWordsAsync("D0", 1000, allowSplit: true);
uint[] dwords = await client.ReadDWordsAsync("D200", 120, allowSplit: true);

One-bit update inside a word

await client.WriteBitInWordAsync("D50", bitIndex: 3, value: true);
await client.WriteBitInWordAsync("D50", bitIndex: 3, value: false);

Polling

using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));

await foreach (var item in client.PollAsync(
    ["D100", "D200:F", "D50.3"],
    TimeSpan.FromSeconds(1),
    cts.Token))
{
    Console.WriteLine(item["D100"]);
}

Sample Programs

The main user-facing sample projects are:

Run them from the repository root:

dotnet run --project samples/PlcComm.Slmp.HighLevelSample -- 192.168.250.100 1025 iqr 4e
dotnet run --project samples/PlcComm.Slmp.QueuedSample -- 192.168.250.100 1025 4 10

Documentation

User-facing documents:

Maintainer and validation material remains under docsrc/maintainer/ and docsrc/validation/.

Development

run_ci.bat
build_docs.bat
release_check.bat

Pack the NuGet package locally:

dotnet pack src\PlcComm.Slmp\PlcComm.Slmp.csproj -c Release

License

Distributed under the MIT License.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net9.0

    • No dependencies.

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
0.1.3 117 3/28/2026