1: はじめに
この記事では、VB .NET で作成したフォームアプリから、TCP/IP で接続された PLC (Q03UDV) のデバイス値を取得するデモンストレーションを紹介しています。
1-1: 動作確認の環境
- PLC CPU
- Q03UDV CPU
- PC
- Windows 11 Pro
- Visual Studio 2022 (Community)
- Visual Basic .NET (.NET Framework 4.7.2)
- MX Component Ver. 5 (5.008j)
PLC と PC はネットワークで接続されています。(セグメントは異なるが、ファイアウォールなどはない)
1-2: MX Component とは
プロトコルを意識しなくても、パソコンからシーケンサやモーションコントローラへの通信処理を簡単に実現できるActive X®コントロール、.NETコントロールライブラリです。
これまで面倒で複雑だったシリアル通信やEthernet通信を行うアプリケーションの開発が、MX Componentを使用することでとても簡単になります。
三菱電機ウェブサイトより引用(2025-06-28参照)
三菱 PLC (シーケンサー) をパソコン側から制御するプロトコルとして、SLMP (MCプロトコル) が存在します。
PLC とパソコンが直接 TCP/IP で接続できれば、SLMP (MCプロトコル) によって制御できますが、CC-Link などのフィールドネットワークで中継された PLC を制御しようとすると、複雑なパラメータの設定が必要になります。
三菱 PLC で利用されている通信方式(プロトコル)を意識せずに、アプリ(VBA, C#, VB .NET など)から PLC を制御するために作られた通信ライブラリが MX Component です。
MX Component を利用することで、ウィザード形式で接続先 PLC を設定することができ、ユーザーに複雑なプロトコルを意識させずにアプリを開発することが可能になります。
ちなみに通常価格は1本6万円です。30日間利用できる体験版もあります。
開発用パソコンおよび実際に使用するパソコンには,MX Componentがインストールされている必要があります。
単に .NET (VB, C#) で SLMP (MC プロトコル) を利用したいときは McpX などが利用できます。
https://yudaikitamura.github.io/McpX/
1-3: 参考情報
MX Component Version 5 リファレンスマニュアル(sh082394h)はこちらでダウンロードできます。
(ちなみに、Ver.4 のときはマニュアルが2冊に分かれていました)
また、2次情報ではありますが、Version 4 のときのわかりやすい解説記事はこちらです。
2: 通信ライブラリ
Visual Basic .NET,Visual C++,Visual C# および VBA をサポートしています。
Excel や Access でも利用可能です。
2-1: 接続先 PLC の設定方法
MX Component は TCP/IP だけでは繋がらないような、複雑なネットワーク構成も想定しています。
そういった構成における接続先 PLC の設定を簡単にする仕組みも用意されています。
- ユーティリティ設定
- MX Component をインストールすると利用できる "通信設定ユーティリティ" を使って、ウィザード形式で設定する
- プロパティ設定
- IP アドレスなどを通信ライブラリのプロパティに指定する
2-2: コントロール
MX Component はフォームコントロールの形でライブラリを提供しています。コントロールをフォームに貼り付けず、オブジェクトを生成する形でも利用できます。
マニュアル p.21 によると、コントロールは次の種類が存在します。
-
Act コントロール (ActiveX)
- グローバルラベル (X00 や D0 など通常のデバイス名)を利用するときのコントロール
- Act コントロール (ActiveX, ロギングファイル転送用)
- .NETコントロール (.NET Framework)
- ラベルを利用するときのコントロール
Version 4 では、コントロールをフォームに貼り付ける形でしかマニュアルに記載はありませんでした。
一応、貼り付けなくても利用はできたようです。
Visual Studio 2022 を利用する場合、マニュアル p. 46 に記載の通り、コントロールをフォームに貼り付けて利用できません。
2-3: 使用するコントロールの把握
マニュアル p. 44 によると、デバイスデータの読書きには次のコントロールが必要です。
- ユーティリティ設定
- ActUtlType / ActUtlType64
- プロパティ設定
- ActProgType / ActProgType64
3: 実際の設定手順
ここでは、プロパティ設定タイプの Act コントロール(ActProgType64)を「オブジェクトを生成して使用する」方法で使ってみます。
3-1: プロジェクト作成
今回は、フォームアプリケーションの状態で動作を確認することにしました。
プロジェクトの種別は、"Windows フォームアプリケーション (.NET Framework)" で作成します。
3-2: コントロールの追加
マニュアル p. 46 の表を参照して、必要なコントロールの手順を進めます。
今回は、ActProgType64 を「オブジェクトを生成して使用する」方法で利用するため、マニュアル p. 50 を参照しました。
3-3: 参照の追加
メニュー [プロジェクト] > [参照の追加] を選択し、「参照マネージャー」画面を開きます。
マニュアル p. 51 を読みながら、使用するコントロールを追加します。
全ては不要ですが、ユーティリティ設定とプロパティ設定、32bitと64bitで4つ追加しました。
- Act コントロール("COM" の一覧から追加する)
- MITSUBISHI ActUtlType Controls Ver1.0 (ユーティリティ設定、32bit)
- ActUtlType64 Control (ユーティリティ設定、64bit)
- MITSUBISHI ActProgType Controls Ver1.0 (プロパティ設定、32bit)
- ActProgType64 Control (プロパティ設定、64bit)
- .NET コントロール("アセンブリ" > "拡張" の一覧から追加する)
- 今回はなし
3-4: インクルードファイルの追加
プログラム設定タイプで開発を行う場合は、メニュー [プロジェクト] > [既存項目の追加] を選択し、ファイルを追加します。
- VB .NET の場合
- C:\Program Files (x86)\MELSOFT\ACT\Include\ActDefine.vb
- C# の場合
- C:\Program Files (x86)\MELSOFT\ACT\Include\ActDefine.cs
実際にプログラム開発をする際は、コントロールに対応したクラスを呼び出し、オブジェクトを生成して利用します。
4: テストプログラム
4-1: フォームデザイン
ボタンを3個貼り付けました。
- 回線オープン用 OpenButton
- Open 関数を実行
- 回線クローズ用 CloseButton
- Close 関数を実行
- デバイス値取得用 ReadButton
- 1Hzクロック "SM412" の値取得用
4-2: VB ソースコード
Imports ActProgType64Lib
Public Class Form1
Dim actProgType As ActProgType64Lib.ActProgType64
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
actProgType = New ActProgType64()
End Sub
Private Sub OpenButton_Click(sender As Object, e As EventArgs) Handles OpenButton.Click
' 接続先 PLC の IP アドレス指定
SetProgTypeProperty("172.16.12.150")
' 回線オープン
Dim ret As Integer
ret = actProgType.Open()
Console.WriteLine("Open: " & ret)
End Sub
Private Sub CloseButton_Click(sender As Object, e As EventArgs) Handles CloseButton.Click
' 回線クローズ
Dim ret As Integer
ret = actProgType.Close()
Console.WriteLine("Close: " & ret)
End Sub
Private Sub ReadButton_Click(sender As Object, e As EventArgs) Handles ReadButton.Click
' SM412 デバイス値取得
Dim ret As Integer
Dim value As Short
ret = actProgType.GetDevice2("SM412", value)
Console.WriteLine("SM412: " & value)
End Sub
Private Sub SetProgTypeProperty(PlcAddress As String)
With actProgType
.ActUnitType = &H2C ' p. 182 QCPU Ethernetポート接続
.ActProtocolType = &H5 ' p. 184 TCP/IP 0x05, UDP/IP 0x08
.ActCpuType = &HD1 ' p. 180 Q03UDVCPU
.ActHostAddress = PlcAddress ' 接続先 PLC ホスト (IPアドレス or ホスト名)
.ActTimeOut = 100 ' タイムアウト時間 単位:ミリ秒
.ActDestinationPortNumber = &H138F ' p. 178 0x138F = 5007
End With
End Sub
End Class
Open: 0 (Openボタン押下)
SM412: 1 (Readボタン連打)
SM412: 1
SM412: 1
SM412: 0
SM412: 0
SM412: 0
SM412: 1
SM412: 1
Close: 0 (Closeボタン押下)
5: 通信設定ユーティリティ
プログラム設定タイプ(ActProgType)を利用する場合も、プロパティに設定する値は通信設定ユーティリティで確認できます。
通信設定ユーティリティは、プログラムメニュー [MELSOFT] フォルダの中に入っています。
あとはお好みで接続先 PLC を設定します。今回は LAN で接続された PLC (IP: 172.16.12.150) を設定しています。
パソコン側I/Fを指定して次へ進めます。
- パソコン側I/F "Ethernetボード"
- 接続先ユニットタイプ "CPUユニット"
- プロトコル "TCP" (or "UDP")
- タイムアウト 100 ms (60,000 ms = 60 s はフリーズの時間が長くなります
設定後は [通信テスト] タブで通信テストを実施し、問題がないことを確認します。
プログラム設定タイプで必要なプロパティは、[一覧表示] タブで [表示] を "プログラム" に切り替え、[テキスト保存] ボタンで CSV ファイル出力して確認できます。
6: 最後に
単に SLMP (MCプロトコル) で PLC を制御するだけなら、McpX で良いのでは?となってしまいました。定価で1本6万円するソフトウェアは、複雑なネットワーク構成で必要になりそうです。
MX Component では、MC プロトコルではできない PLC のリモート操作(RUN/STOP)が行えます。どのような通信を行っているのか Wireshark で覗いてみると、TCP/5007 で PLC と通信していました。
Open 処理中に ping が実行されており、ping が失敗すると Open 処理自体も失敗してしまうようです。(たとえ TCP/5007 で疎通が可能であったとしても)