// DOCUMENTATION

API リファレンス

McpX の公開 API をクラス図・接続からメソッドごとの読み書き・監視・例外処理まで解説します。すべての読み書き・監視メソッドには ~Async 版があります。

概要

McpX クラスは、MC プロトコル実装クラス Mcp を拡張し、デバイスアクセス点数などの機能制限を補う拡張クラスです。通常はこの McpX クラスを使用します。

Namespace

McpXLib

Assembly

McpXLib.dll

継承階層

object → BasePlc → Mcp → McpX

実装インターフェース: IDisposable, IPlc

NuGet からパッケージを追加します。

terminal
dotnet add package McpX

McpXLib の public 型のクラス図です。中核は object → BasePlc → Mcp → McpX の継承スパインです。GX Simulator3 に接続する McpXSimulator は、その McpX を継承しています。

object «BCL»
BasePlc «abstract»
implements IDisposable
  • # BasePlc(transport)
  • + Request(packet, parser)
  • + RequestAsync(...)
  • + Dispose()
Mcp
implements IPlc
  • + IsAscii : bool
  • + Route : IPacketBuilder
  • + RequestFrame
  • + ProcessorSeries
  • + MonitorRegist(word, dword)
  • + Monitor<T1,T2>(word, dword)
McpX «partial»
implements IDisposable, IPlc
  • + McpX(ip, port, …)
  • + Read<T>() / BatchRead<T>()
  • + Write<T>() / BatchWrite<T>()
  • + Read(build) / Write(build)
  • + BlockRead(build) / BlockWrite(build)
  • + UseMultiBlockAccess : bool
  • + RemoteRun() / RemoteStop() / RemotePause()
  • + RemoteLatchClear() / RemoteReset()
  • + RandomRead(build) / RandomWrite(build)
  • + MonitorRegist(build) : MonitorSession
  • + ReadString() / WriteString()
  • + Dispose()
McpXSimulator «sealed»
  • + McpXSimulator(systemNo, cpuNo, ip, …)
  • + SystemNo : int
  • + CpuNo : int
  • + GetPort(systemNo, cpuNo) : int «static»

▸ は継承(派生方向)を表します。

インターフェース · McpXLib.Interfaces

IPlc

  • IsAscii · Route · RequestFrame
  • Request / RequestAsync

IPlcTransport

: IDisposable

  • Request / RequestAsync

IPacketBuilder

  • ToBinaryBytes()
  • ToAsciiBytes()

IRequestPacketBuilder

: IPacketBuilder

  • SubHeader · Route · Command

IPlcCommand<T>

: IPacketBuilder

  • Execute(plc) / ExecuteAsync(plc)

IPacketParser

  • ParsePacket / GetIndex / GetLength

IPayloadBuilder

  • AppendPayload(packets, isAscii)

IReceiveLengthParser

  • GetHeaderLength()
  • ParseContentLength(bytes)

列挙型 · McpXLib.Enums

Prefix «enum»
  • X Y M L F V B D W …
  • 全 28 種(byte)
ProcessorSeries «enum»
  • Q
  • iQR
RequestFrame «enum»
  • E3
  • E4
RemoteRunClearMode «enum»
  • None
  • OutsideLatch
  • All

例外 · McpXLib.Exceptions

いずれも Exception を継承

DeviceAddressExceptionMcProtocolExceptionRecivePacketExceptionPlcDuplicationException

継承関係のまとめ

型種別継承 / 実装
BasePlc抽象クラスIDisposable
McpクラスBasePlc, IPlc
McpXクラス(partial)Mcp
McpXSimulatorクラス(sealed)McpX
IPlcTransportインターフェースIDisposable
IRequestPacketBuilderインターフェースIPacketBuilder
IPlcCommand<T>インターフェースIPacketBuilder
DeviceAddressException例外クラスException
McProtocolException例外クラスException
RecivePacketException例外クラスException
PlcDuplicationException例外クラスException
凡例 · 継承(実線+中空三角)/ インターフェース実装(破線+中空三角)/ 依存(破線+矢印)。Exception・IDisposable は .NET 標準(BCL)型で McpXLib 外です。

PLC のパラメータ設定に合わせた接続情報を指定してインスタンスを生成します。リモートパスワードを指定すると、セッションの前後で解除・ロックが自動的に行われます。

McpX (constructor)
public McpX(
    string ip,
    int port,
    string? password = null,
    bool isAscii = false,
    bool isUdp = false,
    RequestFrame requestFrame = RequestFrame.E3,
    ushort timeoutMilliseconds = 5000,
    ProcessorSeries processorSeries = ProcessorSeries.Q,
    bool useMultiBlockAccess = false
)
引数型説明
ipstringPLC の IP アドレス。
portintPLC のポート番号。
passwordstring?PLC のリモートパスワード(設定している場合に指定)。
isAsciiboolASCII 交信を行う場合に true。既定はバイナリ交信(false)。
isUdpboolUDP 交信を行う場合に true。既定は TCP 交信(false)。
requestFrameRequestFrameフレーム種別。既定は 3E フレーム(RequestFrame.E3)。
timeoutMillisecondsushort通信タイムアウト(ミリ秒)。既定は 5000。
processorSeriesProcessorSeriesPLC シリーズ。iQ-R へ拡張デバイス指定で交信する場合は iQR。既定は Q/L(ProcessorSeries.Q)。
useMultiBlockAccessbool統合 Read(build) / Write(build) で、複数の範囲を複数ブロック一括読み書き(0406 / 1406)で 1 回の交信にまとめる場合に true。接続先が対応している場合だけ指定します。既定は false。
例外 · RecivePacketException(受信パケットが不正)/ McProtocolException(PLC からエラーコードを受信)
Program.cs
using McpXLib;
using McpXLib.Enums;

// password を指定すると、生成時にリモートパスワードを解除し、破棄時にロックします。
using (var mcpx = new McpX("192.168.12.88", 10000, password: "1234"))
{
    // ここで読み書き
}

シミュレータ接続(McpXSimulator)

McpXSimulator は、GX Works3 のシミュレーション機能である GX Simulator3 に接続するクラスです。IP とポートの代わりにシステムNo.と号機No.を指定すると、ポート番号は 5500 + システムNo. × 10 + 号機No. で決まります(例: システム1・号機1 = 5511)。McpX を継承しているので、読み書きやモニタの API は実機と同じものがそのまま使えます。

McpXSimulator
public McpXSimulator(
    int systemNo = 1,
    int cpuNo = 1,
    string ip = "127.0.0.1",
    RequestFrame requestFrame = RequestFrame.E3,
    ushort timeoutMilliseconds = 5000,
    ProcessorSeries processorSeries = ProcessorSeries.iQR,
    bool useMultiBlockAccess = false
);

public static int GetPort(int systemNo = 1, int cpuNo = 1);
引数型説明
systemNointシステムNo.(シミュレーションごとの番号)。既定は 1。
cpuNoint号機No.(マルチ CPU システムの CPU No.、1〜4)。既定は 1。
ipstringシミュレータが動作している PC の IP アドレス。既定は 127.0.0.1。
requestFrameRequestFrameフレーム種別。既定は 3E フレーム(RequestFrame.E3)。
timeoutMillisecondsushort通信タイムアウト(ミリ秒)。既定は 5000。
processorSeriesProcessorSeriesPLC シリーズ。既定は MELSEC iQ-R(ProcessorSeries.iQR)。
useMultiBlockAccessbool統合 Read(build) / Write(build) で複数ブロック一括読み書きを使う場合に true。既定は false。
交信は TCP・バイナリコードに固定されます。GX Simulator3 は ASCII コードの交信に応答しません。
GX Simulator3 は 127.0.0.1 でのみ待ち受けます。別の PC から接続する場合は、シミュレータ側の PC で各ポートを 127.0.0.1 へ転送してください(netsh interface portproxy など)。
1 つのインスタンスが 1 つのシミュレータ(CPU)に接続します。複数のシミュレータに同時に接続するときは、シミュレータごとにインスタンスを生成します。
システムNo.や号機No.が範囲外の場合は ArgumentOutOfRangeException をスローします。ポート番号だけが必要なときは GetPort(systemNo, cpuNo) で求められます。
Program.cs
using McpXLib;
using McpXLib.Enums;

// 127.0.0.1:5511(システム1・号機1)
using var sim1 = new McpXSimulator();
// 192.168.12.90:5521(別の PC で動くシステム2)
using var sim2 = new McpXSimulator(systemNo: 2, ip: "192.168.12.90");
// 127.0.0.1:5512(マルチ CPU の2号機)
using var cpu2 = new McpXSimulator(systemNo: 1, cpuNo: 2);

// 読み書きの API は McpX と同じ
sim1.Write<short>(Prefix.D, "100", 123);
short d0 = sim2.Read<short>(Prefix.D, "0");

int port = McpXSimulator.GetPort(systemNo: 2); // 5521

McpX クラスのメソッドです。型引数 T に応じて内部的なデバイス点数は自動調整され(unmanaged 制約のため参照型は不可)、点数上限を超えても自動でパケット分割されます。各メソッドに ~Async 版があります。

Read<T>

単一デバイス読み込み

単一デバイスの値を PLC から読み込みます。指定した型 T に応じて、内部的に読み込むデバイス点数は自動調整されます。

signature
public T Read<T>(Prefix prefix, string address) where T : unmanaged;
public async Task<T> ReadAsync<T>(Prefix prefix, string address) where T : unmanaged;
引数型説明
prefixPrefix読み込み対象の先頭デバイスコード。
addressstring読み込み対象の先頭アドレス。

戻り値 · PLC から読み込んだ値を型 T に変換して返します。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

Read<T>.cs
short d0 = mcpx.Read<short>(Prefix.D, "0");
bool  m0 = await mcpx.ReadAsync<bool>(Prefix.M, "0");

BatchRead<T>

連続デバイス読み込み

指定したデバイス範囲の値を PLC から読み込みます。点数上限を超えても、McpX が自動でパケットを分割して送信します。

signature
public T[] BatchRead<T>(Prefix prefix, string address, ushort length) where T : unmanaged;
public async Task<T[]> BatchReadAsync<T>(Prefix prefix, string address, ushort length) where T : unmanaged;
引数型説明
prefixPrefix読み込み対象の先頭デバイスコード。
addressstring読み込み対象の先頭アドレス。
lengthushort読み込み要素数。型 T に応じて内部でデバイス点数を自動調整するため、「最終的に取得する T 型配列の要素数」を指定します。

戻り値 · PLC から読み込んだ値を型 T の配列に変換して返します。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

BatchRead<T>.cs
bool[] mArr = mcpx.BatchRead<bool>(Prefix.M, "0", 7000);
int[]  dArr = await mcpx.BatchReadAsync<int>(Prefix.D, "1000", 500);

Write<T>

単一デバイス書き込み

単一デバイスの値を PLC に書き込みます。指定した型 T に応じて、内部的に書き込むデバイス点数は自動調整されます。

signature
public void Write<T>(Prefix prefix, string address, T value) where T : unmanaged;
public async Task WriteAsync<T>(Prefix prefix, string address, T value) where T : unmanaged;
引数型説明
prefixPrefix書き込み対象の先頭デバイスコード。
addressstring書き込み対象の先頭アドレス。
valueT書き込みする値。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

Write<T>.cs
mcpx.Write<short>(Prefix.D, "0", 42);
await mcpx.WriteAsync<bool>(Prefix.M, "0", true);

BatchWrite<T>

連続デバイス書き込み

指定したデバイス範囲に値を PLC へ書き込みます。点数上限を超えても、McpX が自動でパケットを分割して送信します。

signature
public T[] BatchWrite<T>(Prefix prefix, string address, T[] values) where T : unmanaged;
public async Task<T[]> BatchWriteAsync<T>(Prefix prefix, string address, T[] values) where T : unmanaged;
引数型説明
prefixPrefix書き込み対象の先頭デバイスコード。
addressstring書き込み対象の先頭アドレス。
valuesT[]書き込みする値の配列。

戻り値 · values の値をそのまま返します。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

BatchWrite<T>.cs
mcpx.BatchWrite<short>(Prefix.D, "0", new short[] { 1, 2, 3 });

Read(build)

連続/ランダム統合読み込み(ビルダー)

連続するデバイス範囲と非連続のデバイスを 1 つのビルダーでまとめて読み込みます。build 内で点数を指定した Add<T>(prefix, address, length, onRead) は連続アクセス(BatchRead)で読み込みます。点数を指定しない Add<T>(prefix, address, onRead) はランダムアクセス(RandomRead)です。読み取りが終わると、各コールバックに変換済みの値が渡されます。

signature
public void Read(Action<ReadBuilder> build);
public async Task ReadAsync(Action<ReadBuilder> build);
引数型説明
buildAction<ReadBuilder>読み込むデバイス(範囲/単一)とコールバックを登録するビルダー操作。

戻り値 · なし(読み取った値は各 onRead コールバックへ渡されます)。

範囲指定は BatchRead と同じく、long/double を含むすべての型に対応します。点数の上限を超えたときは自動で分割されます。単一指定の振り分けは RandomRead と同じで、long/double には対応していません。
UseMultiBlockAccess(コンストラクタ引数 useMultiBlockAccess)を true にすると、範囲が 2 つ以上あるときに複数ブロック一括読出し(0406)で 1 回の交信にまとめます。既定は false で、範囲ごとに読み込みます。非対応の接続先(CPU 内蔵 Ethernet ポートなど)で true にするとエラーコード C059 の McProtocolException になるため、対応している接続先でだけ有効にしてください。
連続アクセスを先に実行し、その後ランダムアクセスをまとめて実行します。複数のリクエストに分かれるため、全デバイスを同一スキャンで取得することは保証されません。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

Read(build).cs
short[] block = [];
int     total = 0;
bool    m10   = false;

// 点数あり → 一括アクセス(BatchRead)
// 点数なし → ランダムアクセス(RandomRead)
mcpx.Read(b => b
    .Add<short>(Prefix.D, "400", 100, v => block = v)
    .Add<int>(Prefix.D,   "2000",     v => total = v)
    .Add<bool>(Prefix.M,  "10",       v => m10   = v));

Write(build)

連続/ランダム統合書き込み(ビルダー)

連続するデバイス範囲と非連続のデバイスに、1 つのビルダーでまとめて書き込みます。build 内で配列を指定した Add<T>(prefix, address, values) は連続アクセス(BatchWrite)で書き込みます。単一の値を指定した Add<T>(prefix, address, value) はランダムアクセス(RandomWrite)です。

signature
public void Write(Action<WriteBuilder> build);
public async Task WriteAsync(Action<WriteBuilder> build);
引数型説明
buildAction<WriteBuilder>書き込むデバイス(範囲/単一)と値を登録するビルダー操作。
連続アクセスを登録順に実行した後、ランダムアクセスをまとめて実行します。単一指定の型の振り分けと制約は RandomWrite と同じです。
UseMultiBlockAccess を true にすると、範囲が 2 つ以上あるときに複数ブロック一括書込み(1406)で 1 回の交信にまとめます。既定は false です。ビットデバイスへの bool で要素数が 16 の倍数でない範囲は、指定していないビットを上書きしないよう範囲ごとに書き込みます。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

Write(build).cs
// 配列 → 一括アクセス(BatchWrite)
// 単一の値 → ランダムアクセス(RandomWrite)
await mcpx.WriteAsync(b => b
    .Add<short>(Prefix.D, "500", new short[] { 1, 2, 3 })
    .Add<int>(Prefix.D,   "2000", 1234)
    .Add<bool>(Prefix.M,  "20",   true));

BlockRead

複数ブロック一括読み込み(ビルダー)

離れた場所にある連続範囲(ブロック)を複数指定し、複数ブロック一括読出し(コマンド 0406)で 1 回の交信にまとめて読み込みます。build 内で Add<T>(prefix, address, length, onRead) を並べると、読み取り後に各コールバックへ変換済みの配列が渡されます。

signature
public void BlockRead(Action<BlockReadBuilder> build);
public async Task BlockReadAsync(Action<BlockReadBuilder> build);
引数型説明
buildAction<BlockReadBuilder>読み込む範囲とコールバックを登録するビルダー操作。

戻り値 · なし(読み取った値は各 onRead コールバックへ渡されます)。

ブロック数・点数の上限(Q/L: 120 ブロック、iQ-R: 60 ブロック、合計 960 点)を超えると、自動で複数のリクエストに分割します。bool はビットデバイスにだけ指定できます。ビットデバイスをワード型で指定すると 1 ワード=16 点として読み込みます。
接続先が複数ブロックに非対応の場合は McProtocolException(ErrorCode = 0xC059)をスローします。CPU 内蔵 Ethernet ポートなどが該当します。

例外 · DeviceAddressException / ArgumentException / RecivePacketException / McProtocolException

BlockRead.cs
short[] d100 = [];
int[]   d500 = [];
bool[]  m0   = [];

// 3 つの範囲を 1 回の交信(0406)で読み出し
mcpx.BlockRead(b => b
    .Add<short>(Prefix.D, "100", 10, v => d100 = v)
    .Add<int>(Prefix.D,   "500", 4,  v => d500 = v)
    .Add<bool>(Prefix.M,  "0",   32, v => m0   = v));

BlockWrite

複数ブロック一括書き込み(ビルダー)

離れた場所にある連続範囲(ブロック)を複数指定し、複数ブロック一括書込み(コマンド 1406)で 1 回の交信にまとめて書き込みます。build 内で Add<T>(prefix, address, values) を並べます。

signature
public void BlockWrite(Action<BlockWriteBuilder> build);
public async Task BlockWriteAsync(Action<BlockWriteBuilder> build);
引数型説明
buildAction<BlockWriteBuilder>書き込む範囲と値を登録するビルダー操作。
ビットデバイスは 16 点(1 ワード)単位で書き込むため、bool は要素数を 16 の倍数にしてください。それ以外は ArgumentException になります。上限(Q/L: ブロック数×4+点数、iQ-R: ブロック数×9+点数 が 960 以下)を超えると自動で分割します。
接続先が複数ブロックに非対応の場合は McProtocolException(ErrorCode = 0xC059)をスローします。

例外 · DeviceAddressException / ArgumentException / RecivePacketException / McProtocolException

BlockWrite.cs
// 3 つの範囲を 1 回の交信(1406)で書き込み。bool は 16 の倍数で指定
await mcpx.BlockWriteAsync(b => b
    .Add<short>(Prefix.D, "100", new short[] { 1, 2, 3 })
    .Add<int>(Prefix.D,   "500", new[] { 1000, 2000 })
    .Add<bool>(Prefix.M,  "0",   new bool[16]));

RandomRead

ランダム読み込み(ビルダー)

型ごとのアクセス単位(ビット/ワード/ダブルワード)を意識せずに、非連続のデバイスを一括で読み込みます。build 内で Add<T>(prefix, address, onRead) によりデバイスと「読み取り後に呼ばれるコールバック」を並べます。読み取り完了後、各コールバックに変換済みの値が渡されます。アクセス単位・点数上限・パケット分割は内部で自動処理されます。

signature
public void RandomRead(Action<RandomReadBuilder> build);
public async Task RandomReadAsync(Action<RandomReadBuilder> build);
引数型説明
buildAction<RandomReadBuilder>読み込むデバイスとコールバックを登録するビルダー操作。

戻り値 · なし(読み取った値は各 onRead コールバックへ渡されます)。

Add<T> は型でアクセス単位を自動振り分け: bool→ビット(ワードで読み出し bit0 を抽出)、short/ushort→ワード、int/uint/float→ダブルワード。long/double はランダムアクセスに存在しないため非対応(NotSupportedException)。
非推奨(0.8.0): ジェネリック版 RandomRead<T1, T2> と RandomReadBit は [Obsolete] です。このビルダー版を使用してください。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

RandomRead.cs
short d0 = 0;
bool  m0 = false;
float d100 = 0;

mcpx.RandomRead(b => b
    .Add<short>(Prefix.D, "0",   v => d0   = v)
    .Add<bool>(Prefix.M,  "0",   v => m0   = v)
    .Add<float>(Prefix.D, "100", v => d100 = v));

RandomWrite

ランダム書き込み(ビルダー)

非連続のデバイスに対し、型ごとのアクセス単位を意識せずに一括で書き込みます。build 内で Add<T>(prefix, address, value) によりデバイスと値を並べます。ワード/ダブルワードとビットは MC プロトコル上サブコマンドが異なるため、別パケットで送信されます。

signature
public void RandomWrite(Action<RandomWriteBuilder> build);
public async Task RandomWriteAsync(Action<RandomWriteBuilder> build);
引数型説明
buildAction<RandomWriteBuilder>書き込むデバイスと値を登録するビルダー操作。
Add<T> は型でアクセス単位を自動振り分け: bool→ビット単位ランダム書き込み(コマンド 1402/サブコマンド 0001)、short/ushort→ワード、int/uint/float→ダブルワード。
非推奨(0.8.0): ジェネリック版 RandomWrite<T1, T2> と RandomWriteBit は [Obsolete] です。このビルダー版を使用してください。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

RandomWrite.cs
mcpx.RandomWrite(b => b
    .Add<short>(Prefix.D, "0",   123)
    .Add<bool>(Prefix.M,  "0",   true)
    .Add<uint>(Prefix.D,  "100", 456));

MonitorRegist

モニター登録(ビルダー)→ MonitorSession

モニタ対象の非連続デバイスを登録(コマンド 0801)し、繰り返し読み出すための MonitorSession を返します。モニタ(コマンド 0802)は登録済みデバイスを読み出すだけの軽量なコマンドのため、登録は一度だけ行い、MonitorSession.Read() で繰り返し読み出すのが効率的です。

signature
public MonitorSession MonitorRegist(Action<MonitorBuilder> build);
public async Task<MonitorSession> MonitorRegistAsync(Action<MonitorBuilder> build);
引数型説明
buildAction<MonitorBuilder>モニタ対象のデバイスとコールバックを登録するビルダー操作。Add<T> は型でアクセス単位を自動振り分け(bool はワードで読み出し bit0 を抽出)。

戻り値 · 登録済みデバイスを繰り返し読み出すための MonitorSession。Read() / ReadAsync()(コマンド 0802)で各 onRead に変換済みの値を渡します。

点数上限はワード+ダブルワードの合計で 192 点(Q/L)/96 点(iQ-R)。モニタ登録はパケット分割ができず、再登録は全置換です。PLC の再立上げ等で登録が消去された場合は再登録してください。

例外 · DeviceAddressException / ArgumentException / RecivePacketException / McProtocolException

MonitorRegist.cs
short d0 = 0;
bool  m0 = false;

// 登録は一度だけ(0801)
var session = mcpx.MonitorRegist(b => b
    .Add<short>(Prefix.D, "0", v => d0 = v)
    .Add<bool>(Prefix.M,  "0", v => m0 = v));

// あとは何度でも読み出し(0802)
session.Read();
session.Read();

RemoteRun

リモート RUN

接続先の CPU ユニットを RUN 状態にします(コマンド 1001)。RUN にするときにクリアするデバイスメモリの範囲も指定できます。

signature
public void RemoteRun(bool force = false, RemoteRunClearMode clearMode = RemoteRunClearMode.None);
public Task RemoteRunAsync(bool force = false, RemoteRunClearMode clearMode = RemoteRunClearMode.None);
引数型説明
forcebool他の機器がリモート STOP/PAUSE 中でも実行する場合に true。既定は false。
clearModeRemoteRunClearModeRUN 時にクリアするデバイスメモリの範囲。既定はクリアしない(RemoteRunClearMode.None)。
CPU ユニットのスイッチが RUN のときに実行できます。スイッチが STOP だとコマンドは正常に完了しますが、RUN にはなりません。リモート操作後に電源の再投入やリセットをすると、スイッチの状態に戻ります。

例外 · RecivePacketException / McProtocolException

RemoteRun.cs
mcpx.RemoteRun();

// 他の機器からの STOP 中でも実行し、ラッチ範囲外をクリアして RUN
await mcpx.RemoteRunAsync(force: true, clearMode: RemoteRunClearMode.OutsideLatch);

RemoteStop / RemotePause

リモート STOP / PAUSE

RemoteStop は CPU ユニットを STOP 状態に(コマンド 1002)、RemotePause は PAUSE 状態にします(コマンド 1003)。

signature
public void RemoteStop();
public Task RemoteStopAsync();

public void RemotePause(bool force = false);
public Task RemotePauseAsync(bool force = false);
引数型説明
forcebool(RemotePause のみ)他の機器がリモート STOP/PAUSE 中でも実行する場合に true。既定は false。
RemotePause はスイッチが RUN のときに実行できます。スイッチが STOP だとコマンドは正常に完了しますが、PAUSE にはなりません。

例外 · RecivePacketException / McProtocolException

RemoteStop / RemotePause.cs
mcpx.RemoteStop();
mcpx.RemotePause();

RemoteLatchClear

リモートラッチクリア

接続先の CPU ユニットでラッチクリアを実行します(コマンド 1005)。ラッチ範囲のデバイスもクリアされます。

signature
public void RemoteLatchClear();
public Task RemoteLatchClearAsync();
CPU ユニットを STOP 状態にしてから実行してください。他の機器がリモート STOP/PAUSE 中の場合はエラーになります。

例外 · RecivePacketException / McProtocolException

RemoteLatchClear.cs
// ラッチクリアは STOP 状態で実行
mcpx.RemoteStop();
mcpx.RemoteLatchClear();

RemoteReset

リモート RESET

接続先の CPU ユニットをリセットします(コマンド 1006)。リセット後は自動で接続し直し、SM400(常時 ON)が読めるようになるまで待ちます。リモートパスワードを指定している場合は解除もやり直すので、同じインスタンスで続けて通信できます。

signature
public void RemoteReset(int reconnectTimeoutMilliseconds = 30000);
public async Task RemoteResetAsync(int reconnectTimeoutMilliseconds = 30000);
引数型説明
reconnectTimeoutMillisecondsintリセット後に接続し直すまでの最大待ち時間(ミリ秒)。0 を指定すると接続し直しません。既定は 30000。
CPU ユニットを STOP 状態にしてから実行してください(エラーで停止している場合は RUN でも実行できます)。パラメータでリモート RESET を許可する設定が必要です。
リセットで応答が返らない場合や接続が切れる場合があるため、通信の切断・タイムアウトは例外にしません。

例外 · RecivePacketException / McProtocolException

RemoteReset.cs
mcpx.RemoteStop();
mcpx.RemoteReset();

// リセット後は自動で再接続するので、同じインスタンスで続けて通信できる
short d0 = mcpx.Read<short>(Prefix.D, "0");

ReadString

文字列読み込み

指定したデバイス範囲の値を文字列(Shift_JIS)として読み込みます。

signature
public string ReadString(Prefix prefix, string address, ushort length);
public async Task<string> ReadStringAsync(Prefix prefix, string address, ushort length);
引数型説明
prefixPrefix読み込み対象の先頭デバイスコード。
addressstring読み込み対象の先頭アドレス。
lengthushort読み込みデバイス点数。

戻り値 · Shift_JIS として解釈した文字列。

ビルド条件: 文字列系メソッドは #if !AOT で囲まれており、AOT ビルドでは無効になります。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

ReadString.cs
string label = mcpx.ReadString(Prefix.D, "100", 10);

WriteString

文字列書き込み

指定したデバイスに、Shift_JIS に変換した文字列データを書き込みます。

signature
public void WriteString(Prefix prefix, string address, string value);
public async Task WriteStringAsync(Prefix prefix, string address, string value);
引数型説明
prefixPrefix書き込み対象の先頭デバイスコード。
addressstring書き込み対象の先頭アドレス。
valuestring書き込みする文字列。
ビルド条件: 文字列系メソッドは #if !AOT で囲まれており、AOT ビルドでは無効になります。

例外 · DeviceAddressException / RecivePacketException / McProtocolException

WriteString.cs
mcpx.WriteString(Prefix.D, "100", "McpX");

Dispose

インスタンス破棄

使用済みのリソースを解放し、必要に応じて PLC のリモートロックを実行します。using 文で囲めば自動的に呼び出されます。

signature
public override void Dispose();

ジェネリックメソッドを型ごとにラップした利便性メソッド群です(McpX.Compat.cs)。各メソッドに同期版・非同期版(~Async)があります。

カテゴリメソッド例ベース
単一読み込みReadBool / ReadInt16 / ReadInt32 …Read<T>
連続読み込みBatchReadBool / BatchReadInt16 / BatchReadInt32 …BatchRead<T>
単一書き込みWriteBool / WriteInt16 / WriteInt32 …Write<T>
連続書き込みBatchWriteBool / BatchWriteInt16 / BatchWriteInt32 …BatchWrite<T>

対応型(サフィックス): Bool·Byte·SByte·Int16·UInt16·Int32·UInt32·Int64·UInt64·Single·Double

Namespace: McpXLib.Enums

Prefix — デバイスの接頭辞(基底型 byte)

メンバー値説明
X0x9C入力
Y0x9D出力
M0x90内部リレー
L0x92ラッチリレー
F0x93アナンシェータ
V0x94エッジリレー
B0xA0リンクリレー
D0xA8データレジスタ
W0xB4リンクレジスタ
TS0xC1タイマ接点
TC0xC0タイマコイル
TN0xC2タイマ現在値
SS0xC7積算タイマ接点
SC0xC6積算タイマコイル
SN0xC8積算タイマ現在値
CS0xC4カウンタ接点
CC0xC3カウンタコイル
CN0xC5カウンタ現在値
SB0xA1リンク特殊リレー
SW0xB5リンク特殊レジスタ
S0x98ステップリレー
DX0xA2ダイレクトアクセス入力
DY0xA3ダイレクトアクセス出力
SM0x91特殊リレー
SD0xA9特殊レジスタ
Z0xCCインデックスレジスタ
R0xAFファイルレジスタ(ブロック切換え方式)
ZR0xB0ファイルレジスタ(連番アクセス方式)

ProcessorSeries

QMELSEC-Q/L シリーズ(デバイス指定)
iQRMELSEC iQ-R シリーズ(デバイス拡張指定)

RequestFrame

E33E フレーム
E44E フレーム

RemoteRunClearMode

Noneクリアしない
OutsideLatchラッチ範囲外だけクリア
Allラッチ範囲を含むすべてのデバイスメモリをクリア

Namespace: McpXLib.Exceptions · いずれも System.Exception を継承します。

DeviceAddressException

デバイスアドレスの例外。10進デバイスに数字以外、または16進デバイスに変換できない文字列が含まれる場合にスローされます。

McProtocolException

MC プロトコルの交信例外。PLC からエラーコードを受信した場合にスローされます。受信したエラーコードは ErrorCode プロパティで取得できます(例: 0xC059 はコマンド非対応)。

RecivePacketException

受信パケットの例外。PLC から受け取ったパケットが変換できない場合にスローされます。

PlcDuplicationException

PLC 重複の例外。

独自コマンドの追加や低レベルな拡張を行う場合の Namespace です。詳細は公式ドキュメントを参照してください。

McpXLib.Mcp

MC プロトコル実装クラス。McpX の基底です。低レベルな MonitorRegist(word, dword) / Monitor<T1,T2>(word, dword) を提供します。コマンドを自作する場合を除き、通常は McpX を使用します。

McpXLib.Interfaces

IPlc / IPlcTransport / IPlcCommand<T> / IPacketBuilder ほか。独自コマンドの追加やトランスポート差し替えなど、低レベルな拡張に使用します。

McpXLib.Abstructs

BasePlc(PLC 通信抽象クラス)。Mcp クラスの基底です。※ Namespace 名は Abstructs(フォルダは Abstracts)。

関連リンク

※ 本ページは McpX 公式 API リファレンス(McpXLib namespace)の内容を整理したものです。最新かつ正確な仕様は公式ドキュメントを参照してください。