パソコンと通信する
パソコンからBasicを使ってPLC内のデバイスデータを書き換えてみましょう。
作成日:2016年05月16日
更新日:2022年12月13日
MX Component
MX Componentを使用してシーケンサーとパソコンを通信させます。ただしシーケンスのプログラムは必要ありません。必要なのはBasic等のパソコン側のプログラムです。シーケンス制御の粋を超えていますが、設備から履歴データを抜き取ったり、パソコン側にあるデータベースからデータを抜き取りシーケンサーで使用するなど、近年であたりまえのように使用されています。
今回説明する通信は、RS-232Cを使用します。PLC側にはシリアルコミュニケーションを使用します。パソコン側から普通に文字列を送信してPLC側で変換して目的のデータレジスタに値を入れることも可能ですが、MX Componentを使用すれば、パソコン側からデバイスを直接指定して書き込むことができます。
話が少しそれますが、三菱からMX Sheetというソフトも販売されています。これはプログラミングの知識がほとんどなくても使用できます。エクセルにアドオンとして組み込むことになりますので、基本的にエクセルでしか使用ができません。とても間単に使用できるのですが、色々と制限がありマクロと組み合わせて使用することもかなり困難です。しかもMX Sheetを動作させるにはMX Componentが必要です。わざわざMX Sheetまで購入して動作制限があるソフトを作成するよりも、少し勉強してMX Componentを利用して自由度の高いソフトを作成したほうが費用的にも抑えられるのではないでしょうか?
そのためこのサイトではMX Componentの使い方を説明します。
注意点として、このサイトではVB6.0を使用します。基本的にはエクセルのVBAも同じようなものなので、VBAでも可能なはずです。ただしVBとしての説明は行いませんので、別サイトを参考にしてください。
まず最初にMX Componentをインストールしてください。インストール方法はGX Developerと同じで、最初にCDドライブ:\EnvMELの中のSETUP.exeをダブルクリックして 実行してください。そしてCDを開いた直下にあるSETUP.exeをダブルクリック して実行してください。これでインストール完了です。
次はVB6.0です。まず普通にプロジェクトを作成します。そして保存してフォルダを作ってください。そして次のフォルダを探します。
C:\MELSEC\Act
MX Componentをデフォルトの場所にインストールすると上記のフォルダになります。このフォルダ内に
「Includ」
というフォルダがあるはずです。このフォルダをコピーして、VBで作成したプロジェクトのフォルダ内にコピーしてください。これで準備は完了です。
VBを起動します。MX Componentはコントロールとして使用しますので、設定する必要があります。
起動した画面の左側に、左のような表示があると思います。これはツールボックスと呼ばれるもので、フォームにボタンなどのコントロールを配置できます。もし表示されていない場合は、メニューの「表示」→「ツールボックス」をクリックして表示してください。次にツールボックスのどこでもいいので右クリックしてください。表示されるメニューから「コンポーネント」とクリックします。
下のような画面が表示されます。

今回はPLC側の接続がシリアルコミュニケーションなので上のような「MITSUBISHI ActComLk Controls 」にチェックを入れます。選択するだけではチェックは入りません。左側の四角をクリックしてチェックを入れてください。
するとコントロールボックスに表示されているコントロールが増えます。マウスを乗せるとコントロール名が表示されます。今回はQシリーズのCPUを使用するので「ActQJ71C24」を選択します。これをフォーム上に配置してください。

これでフォームにコントロールが配置されました。このコントロールを使ってPLCに接続、書込みを行います。
次に、メニューバーのプロジェクトから「標準モジュールの追加」を選択します。選択画面が出てきますので、「既存のファイル」のTabを選択して、先ほど追加した「Includ」フォルダの中の「ActDefine.bas」を選択して「開く」を押します。
フォーム上のどこでもいいので、先ほどの「ActQJ71C24」を設定します。このフォーム上のActQJ71C241に対して命令を実行すれば動作します。
PLCへの書き込み方法
書込みプログラムを書く場所はフォーム上でもかまいませんし、新規に標準モジュールを追加してもかまいません。コマンドボタンをクリックしたりしたときに下記のコードを走らせてください。
'PLCへの書込み
Dim WriteData() As Variant
Dim lRet As Long '返り値
Dim szDeviceList As String 'デバイス名
Dim lSize As Long '書込み点数
Dim lData() As Long '書込むデバイス値
Me.ActQJ71C241.ActCpuType = CPU_Q02UCPU
Me.ActQJ71C241.ActPortNumber = PORT_1
lRet = Me.ActQJ71C241.Open 'Openメソッドを実行する
If lRet = 0 Then
'OutPutMsgW ("PLCに接続")
Else
'OutPutMsgW ("PLCに接続ができません。")
Exit Sub
End If
szDeviceList = "ZR0" '書込み先頭デバイス
lSize = 12000 '書き込みデバイス数
ReDim lData(lSize)
lRet=Me.ActQJ71C241.WriteDeviceBlock(szDeviceList,lSize,lData(0))
If lRet = 0 Then
'OutPutMsgW ("データ正常書込み完了")
Else
'OutPutMsgW ("データ書込み失敗")
Exit Sub
End If
lRet = Me.ActQJ71C241.Close 'Closeメソッドを実行する
上の例では、「ActQJ71C24」を置いたフォーム内に書いた例です。まずCPUとポート番号を指定してあげてください。Me.ActQJ71C241.Openでポートを開きます。このときlRetに戻り値が返ってきます。正常であれば「0」が返ってきます。それ以外が返ってきた場合、異常なので停止します。ここにコメントで 「'OutPutMsgW ("PLCに接続ができません。")」と書いてあります。これは私が作った簡単な関数で、ここに与えた引数をフォーム上に表示させるというものです。関数までは説明しませんが、目にみて分かるように、使い勝手がいいものにしましょう。
ActQJ71C241.WriteDeviceBlockの部分が実際にPLCに値を送る命令です。この命令はBlockなのでまとめて書き込む命令です。引数は左から「書込み先頭デバイス」、「書込み数」、「書込みデータ」となります。書込みデータは配列になります。
正常に書込みが完了するとlRetに0が返ってきます。最後にポートを閉じておきましょう。
書込みプログラム自体はこのように簡単です。難しいのは書込みデータをどのように持ってくるかです。私はエクセル上にデータを書いて、VBでアクセスして値をセットします。エクセルにアクセスする場合も、DAOを使用すればエクセルは必要ないので、設備専用のパソコンにはエクセルは必要なくなります。この部分の説明はシーケンス制御ではないので、ここでは説明しませんが、プログラムの流れをしっかり勉強すればできるはずです。
このActQJ71C241の書込み命令ですが、3個目の書込みデータの変数の型はLong型にする必要があります。データの型がLong型にできない場合もあります。そのようなときは下記コードで型を変更します。
For i = 0 To lSize - 1
lData(i) = CLng(WriteData(i))
Next i
このように記述しておけば、データ型がLong型以外であっても変換が可能です。
VBのプログラムもシーケンスのプログラムも、書き方は違いますが考え方は同じです。とにかくシンプルに分かりやすく作ることが重要です。例えば同じプログラムは2回書かない。VBでは関数と言って引数を与えて実行すれば戻り値が返ってくる。引数は関数と言うプログラムに値をあたえてプログラムを実行すれば、その関数内では引数を使って実行してくれます。戻り値は関数の実行結果です。例えば文字が半角の英字かどうか判定する関数があるとします。引数は文字列で、例えば「A」とします。Aを与えて実行すれば、条件に一致するので「TRUE」が返ってきます。「あ」を引数とすると条件に一致しないので「False」が返ってきます。この返ってくる答えが戻り値です。
今回はシリアルコミュニケーションでの設定なので、パソコンのシリアルポートとシリアルコミュニケーションをD-SUB9ピンのクロスケーブルで接続すれば完成です。プログラムを実行すればPLCの指定したデバイスに値を書き込むことができます。ちなみにスイッチ設定は必要ありません。
マニュアルがMELFANSWEBからダウンロードできます。PLCにデータを書き込んだり読み込んだりできます。ただし、パソコンも制御の一部として使用する場合は、PLCの値を常に監視して、例えば「M100」がONしたらパソコン側でデータ処理を行う等の動作をさせたい場合少し工夫が必要です。VB初心者の方は、ボタン等を押したとき等、何かアクションをしたらデータの読み書きプログラムを実行するようなプログラムの書き方になると思います。
ではどうすればPLCのデバイスを監視して、「M100」がONしたらパソコン側のプログラムを動作させればいいのでしょうか?これは最初からプログラムを動作させておくのです。DO~LOOPでプログラムを無限ループに入れて、毎ループPLCのデバイスを読み込むのです。このようにしてPLC内のデバイスを監視するのです。このような動作を「ポーリング」と読み、このようなプログラムの書き方を「メインループ」と言います。
メインループを使用する場合は注意して使用してください。DoEventsで制御を返さないとパソコン側が動作不能になりますので。
このサイトはVBは専門ではないので、詳しく勉強したい場合は別サイトを参考にしてください。VBなどで検索するとたくさん出てくると思います。
図解入門 よくわかる最新 シーケンス制御と回路図の基本はKindle版(電子書籍)です。単行本ご希望の方は、フォーマットで単行本を選択してください。または、トップページよりご購入ください。