はじめに
三菱電機製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
PLCパラメータ設定
GX WorksでPLCのパラメータ設定します。
IPアドレス、ポートは環境に合わせて変更してください。
こちらに画像付きの説明を記載してます。
設定内容
- IPアドレス
192.168.12.88
- ポート
10000
- プロトコル
TCP
- オープン方式
MCプロトコル
- 交信データコード
バイナリ
ライブラリをインストール
- VisualStudioを起動
- 「ファイル」→「プロジェクト」で「コンソールアプリ」を選択し、プロジェクト名を入力後、「OK」を押下してプロジェクトを作成
- 「ツール」→「NuGet パッケージマネージャー」で
mcpx
を検索 - 「McpX」を選択し、インストールするプロジェクトを指定後、「インストール」を押下して、ライブラリをインストール
環境によっては、「変更のプレビュー」が表示されますが、その際は、「OK」を押下してインストールを進めてください。
コードを記述
ソリューションエクスプローラでProgram.cs
を開いて、Main
メソッドに下記コードを貼り付けてください。
また、ip
、port
は、環境に合わせて変更してください。
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();
+ }
}
}
}
実行結果
パフォーマンス測定結果
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のリポジトリをチェックしてみてください。
よければ ⭐スター もよろしくお願いします!