キーエンス KVとの通信を数行で実装。
KcpX は、上位リンク通信でキーエンス KV シリーズ PLC と通信する .NET ライブラリです。TCP/UDP でデバイスを読み書きできます。コマンドの組み立てや応答の解析はライブラリが引き受けるので、書くのは読み書きしたい型とアドレスだけです。
- PROTOCOL
- Host Link · TCP/UDP
- LICENSE
- MIT
- PLATFORM
- Win · Linux · macOS
- PLC
- KV-8000 · 7000 · 5000 · Nano
// WHY KcpX
シンプルで、安全な PLC 通信
型とアドレスを渡すだけで PLC を読み書きでき、その通信電文はテストで 1 文字ずつ検証しています。
直感的で型安全な API
指定するのは型と点数だけです。ジェネリックなので bool は bool、short は short のまま扱えます。データ形式(.U / .S / .D / .L)の選択や 32 ビット値の分割もライブラリが行い、不正なアドレスは送信前に例外で検知します。
実機とシミュレータで検証
上位リンクのコマンドと応答を 1 文字ずつ検証する MSTest 群に加え、KV-7500 の実機と KV STUDIO シミュレータで結合テストを実施。PLC のエラー応答(E0〜E6)は型付き例外で受け取れます。
無償・OSS で、環境を選ばない
MIT ライセンスの OSS で、ライセンス費用は不要。もちろん商用利用可。.NET ネイティブなので Windows に縛られず、Linux・macOS・Raspberry Pi でもそのまま動作します。
KV COM+ Library との違い
| 項目 | KcpX | KV COM+ Library |
|---|---|---|
| ライセンス費用 | 無償(MIT・OSS) | 有償(ライセンス単位で購入) |
| 対応 OS | Linux / Windows / macOS | Windows のみ |
| 実装方式 | .NET ネイティブ | ActiveX コントロール(Windows 依存) |
| 開発環境 | .NET 7〜9 / .NET Framework 4.6.1+ / .NET Core 2.0+ | Visual Basic / Visual C++ / Excel / Access |
| 導入 | NuGet で追加 | インストーラ / ライセンス購入 |
| ソースコード | 公開(GitHub) | 非公開 |
※ キーエンスの製品ページ(KV-DH1L)の公開情報に基づく一般的な比較です。
// CAPABILITIES
PLC 通信に必要な機能を過不足なく
機能を PLC 通信に絞り、アプリの設計には口を出しません。監視・制御・ロギングなど、手元のアプリに部品としてそのまま組み込めます。
範囲も単一デバイスも、ひとつのビルダーで
点数を付ければ一括読出し(RDS)、付けなければ単一読出し(RD)。連続する範囲と散在するデバイスを同じビルダーに並べるだけで、KcpX がコマンドを使い分けて読み書きします。型が違っても、デバイスが違っても、書き方は同じです。
short[] block = [];
int total = 0;
bool running = false;
// 点数あり → 一括読出し(RDS)、点数なし → 単一読出し(RD)
kcpx.Read(b => b
.Add<short>(Prefix.DM, "400", 100, v => block = v)
.Add<int>(Prefix.DM, "2000", v => total = v)
.Add<bool>(Prefix.MR, "10", v => running = v));
kcpx.Write(b => b
.Add<short>(Prefix.DM, "500", [1, 2, 3])
.Add<bool>(Prefix.MR, "20", true));実機がなくても、シミュレータで動作確認
KcpXSimulator なら、KV STUDIO のシミュレータに上位リンク(TCP)で接続できます。読み書きの API は実機と同じなので、PLC が手元になくても開発やテストを進められます。実機に移るときは、接続先を KcpX に替えるだけです。(KV-8000 / KV-X500 のプロジェクト、KV STUDIO Ver.12.41 で確認)
// KV STUDIO のシミュレータ(127.0.0.1:8501)に接続
using var sim = new KcpXSimulator();
// 読み書きの API は実機用の KcpX と同じ
sim.Write(b => b
.Add<short>(Prefix.DM, "100", 123)
.Add<bool>(Prefix.MR, "0", true));
short dm100 = sim.Read<short>(Prefix.DM, "100");
// タイマの接点・現在値・設定値もそのまま読める
TimerCounterValue t0 = sim.ReadTimerCounter(Prefix.T, "0");そのほかのコマンド
| コマンド | 説明 | メソッド |
|---|---|---|
| 単一読み書き | 型を指定して、1 つのデバイスをそのまま読み書きします(RD / WR)。 | Read<T>/Write<T> |
| 一括読み書き | 連続するデバイスを数千点でも 1 回の呼び出しで読み書きします。点数の上限を超えると自動で分割します(RDS / WRS)。 | BatchRead<T>/BatchWrite<T> |
| タイマ / カウンタ | T / C の接点・現在値・設定値をまとめて読み出し、設定値を書き換えます(RD / RDS / WS / WSS)。 | ReadTimerCounter/BatchReadTimerCounter/WriteSetValue<T>/BatchWriteSetValue<T> |
| 強制セット / リセット | ビットデバイスを強制的に ON / OFF します。連続 16 点を超える指定も自動で分割します(ST / RS / STS / RSS)。 | ForceSet/ForceReset/BatchForceSet/BatchForceReset |
| モニタ | ビット・ワードそれぞれ最大 120 点を一度登録すれば、あとは Read() を呼ぶだけで最新値を取得できます(MBS / MWS / MBR / MWR)。 | MonitorRegist(build)/MonitorSession.Read() |
| 動作モード | PLC の動作モード(PROGRAM / RUN)を確認し、コードから切り替えます(?M / M0 / M1)。 | ReadOperatingMode/ChangeOperatingMode |
すべてのコマンドに、async/await に対応した ~Async 版があります。
NO LIMITS
点数の上限も、ワードの結合も自動
上位リンクの読み書きには、デバイスと PLC シリーズごとに点数の上限があります。KcpX は接続時に指定したシリーズから上限を判定し、超える場合は自動でコマンドを分割して送信します。 また、int や double などの値は必要なワード数とデータ形式を内部で決めるため、プロトコルの制限を意識する必要はありません。
SAME API AS McpX
三菱電機 PLC と同じ書き方で
KcpX は、三菱電機 PLC 向けライブラリ McpX と同じ API で設計しています。Read<T>・BatchRead<T>・ビルダーによる統合読み書き・MonitorRegist など、McpX で書いたコードの感覚のままキーエンス PLC を扱えます。
// USE CASES
KcpXでできること
KcpX が活躍する、代表的なユースケースを紹介します。
ユースケース
リアルタイム監視ダッシュボード
モニタにデバイスを登録し、現在値を周期取得。Web ダッシュボードに稼働状況やアラームをリアルタイム表示します。
SCADA ソフトの通信基盤
SCADA アプリと PLC 間の通信レイヤーを KcpX で実装。型安全な読み書きで、タグ収集や制御指令の土台を安定して構築できます。
PLC ↔ サーバーの MQTT 連携
PLC から読み出したデバイス値を MQTT でサーバーへ publish する通信ゲートウェイを構築。現場データをブローカー経由でクラウドへ軽量に配信します。
PLC ソフトの自動テスト・CI
ラダープログラムの入出力をコードから検証。デバイス値の書き込み→期待値の読み出しを自動化し、CI パイプラインに組み込めます。KV STUDIO シミュレータに接続すれば、実機がなくてもテストを回せます。
// PLATFORMS
幅広いプラットフォーム & PLC 対応
最新の .NET から .NET Framework まで主要な OS で動作。9 種のデータ型と 24 種のデバイスにジェネリックで対応します。
フレームワーク
オペレーティングシステム
対応PLC
プロトコル
データ型
デバイス種別
// QUICK START
2 ステップで動かせます
1 · パッケージを追加
dotnet add package KcpX2 · デバイスを読み書き
using KcpXLib;
using KcpXLib.Enums;
// PLC に接続(上位リンクのポート 8501、TCP)
using (var kcpx = new KcpX("192.168.12.89", 8501, series: PlcSeries.KV7000))
{
short[] block = [];
int total = 0;
// 範囲(点数あり)と単一デバイスを 1 回でまとめて読み出し
kcpx.Read(b => b
.Add<short>(Prefix.DM, "400", 100, v => block = v)
.Add<int>(Prefix.DM, "2000", v => total = v));
// 異なるデバイス・型をまとめて書き込み
kcpx.Write(b => b
.Add<short>(Prefix.DM, "500", [1, 2, 3])
.Add<bool>(Prefix.MR, "20", true));
}上位リンクの仕組みから知りたい方は 上位リンク入門 →
// PROJECT HEALTH
安心して採用できる理由
オープンに開発・保守され、本番投入に必要な足回りが整っています。
継続してメンテナンス
変更は CHANGELOG で公開。不具合や要望には GitHub で対応します。McpX で培った設計と運用をそのまま引き継いでいます。
CI と実機で検証
すべての変更を CI でビルド & テスト。KV-7500 の実機と KV STUDIO シミュレータでの結合テストも用意しています。
幅広い実行環境
.NET Framework 4.6.1 / .NET Core 2.0(.NET Standard 2.0)から最新の .NET 9 までをターゲットにしています。
2026 年に初回リリース。McpX と同じく、機能追加はマイナー・修正はパッチで管理します。
// ROADMAP
今後の予定
現場での使いやすさを高める機能を継続的に追加していきます。
- 実装済み · v0.1
初回リリース
単一・一括・統合読み書き、タイマ/カウンタ、強制セット/リセット、モニタ、動作モードの確認・切替、KV STUDIO シミュレータへの接続に対応しました。
- 計画中
文字列によるデバイス指定
Read<short>("DM100") のように、デバイス種別と番号をまとめた文字列で指定できるようにします。
- 計画中
その他の上位リンクコマンド
機種問合せ(?K)、エラー番号確認(?E)、エラークリア(ER)、時刻設定(WRT)、コメント読出し(RDC)、バンク切替(BE)、拡張ユニットバッファメモリ(URD / UWR)。
- 計画中
文字列の読み書き
デバイスの値を文字列として読み書きする ReadString / WriteString を追加します。
- 計画中
XYM 表記
X / Y / M / L / D / E / F の XYM 表記でのデバイス指定に対応します。
// GET STARTED
さっそく始めよう
パッケージを追加して IP を指定するだけ。 数行のコードで、最初の読み書きがすぐ動きます。 無償・商用利用可の MIT ライセンス。