4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#で三菱PLCと通信する最短コード!9行のコードで PLCとデータ連携!

Last updated at Posted at 2025-04-18

はじめに

三菱電機製PLC(MELSEC)とPCでデータ通信を行うには、MCプロトコル(MELSEC Communication Protocol)という専用の通信仕様を使う必要があります。

MCプロトコルの公式マニュアルは、三菱電機のWebサイトで公開されていますが、その内容は、500ページほど…
ちょっと値を読みたいだけでも、「フレーム形式」、「コマンドの構造」、「アドレスの表記法」などを理解しなければならず、気軽に試すには少し敷居が高いのが実情です。

また、三菱公式のライブラリ MX Component もありますが、こちらは有償かつWindows専用なので、LinuxやRaspberry Piなどの環境でバッチ処理・ロギング・IoT連携を行うには、ライセンスや実行環境の制約がネックになってしまいます。

この記事では、手軽にC#でPLCと通信する最短コードをご紹介します。

使用ライブラリ

実行環境

  • Windows 11 Professional
  • Visual Studio 2017 Professional(Community版でも可)
  • .NET Framework 4.6.2
  • GX Works2
  • Q03UDECPU

構成図.png

PLCパラメータ設定

GX WorksでPLCのパラメータ設定します。
IPアドレス、ポートは環境に合わせて変更してください。
こちらに画像付きの説明を記載してます。

設定内容

  • IPアドレス 192.168.12.88
  • ポート 10000
  • プロトコル TCP
  • オープン方式 MCプロトコル
  • 交信データコード バイナリ

ライブラリをインストール

  1. VisualStudioを起動
  2. 「ファイル」→「プロジェクト」で「コンソールアプリ」を選択し、プロジェクト名を入力後、「OK」を押下してプロジェクトを作成
    Screenshot_20250418_214006.png
  3. 「ツール」→「NuGet パッケージマネージャー」でmcpxを検索
  4. 「McpX」を選択し、インストールするプロジェクトを指定後、「インストール」を押下して、ライブラリをインストール
    Screenshot_20250418_214705.png

環境によっては、「変更のプレビュー」が表示されますが、その際は、「OK」を押下してインストールを進めてください。

コードを記述

ソリューションエクスプローラでProgram.csを開いて、Mainメソッドに下記コードを貼り付けてください。
また、ipportは、環境に合わせて変更してください。

using (var mcpx = new McpXLib.McpX(ip: "192.168.12.88", port: 10000))
{
    var dArr = mcpx.BatchRead<short>(McpXLib.Enums.Prefix.D, "0", 1000);
    for (int i = 0; i < 1000; i++)
    {
        Console.WriteLine($"D{i}:{ dArr[i] }");
    }
    Console.ReadLine();
}

このコードは、PLCからD0からD999までの1000点のワードデータを一括で読み出し、コンソールに一覧表示するコードです。

↓最終的なコード

using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
+           using (var mcpx = new McpXLib.McpX(ip: "192.168.12.88", port: 10000))
+           {
+               var dArr = mcpx.BatchRead<short>(McpXLib.Enums.Prefix.D, "0", 1000);
+                
+               for (int i = 0; i < 1000; i++)
+               {
+                   Console.WriteLine($"D{i}:{ dArr[i] }");
+               }
+               Console.ReadLine();
+           }
        }
    }
}

実行結果

Animation.gif

パフォーマンス測定結果

Dレジスタの読み込み点数ごとの処理時間の測定結果です。

点数 処理時間
500 2.36
1000 4.16
2000 7.05
3000 10.05
4000 12.89
5000 15.25
6000 18.02
7000 21.02
8000 24.03
9000 27.01
10000 29.91
  • PCとPLCの環境および通信状況より、処理時間は異なります
  • 処理時間がそのままスキャンタイムに加算されることはありませんが、スキャンタイムへの影響も考慮した開発が必要です

まとめ

この記事では、C#用の通信ライブラリ McpX を使って、
三菱PLCとたった9行でデータ連携する方法をご紹介しました。

今回は Windows 環境での紹介でしたが、.NET 7 以降に対応しており、Linux や macOS でも動作可能です。

また、McpX は 読み出しだけでなく、書き込みやビットデバイスにも対応しています。
そのあたりの活用方法は、次回以降の記事で詳しく取り上げていきます!

参考リンク


💡 気になった方はぜひGitHubのリポジトリをチェックしてみてください。
よければ ⭐スター もよろしくお願いします!

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?