
PLC+エクセルの連携 FUNドライバをエクセルで使う
投稿日 2012/01/24
PLCで収集したデータを、エクセルで加工/表示したいという要求は、現実味があります。
エクセルという高度なデータ解析ツールを使わない手はないからです。
解析までしなくても、体裁よく表示させたり、すぐグラフ化したり、印刷したりするだけでも利用する価値があります。
PLCにはADコンバータやDIOなど、データ収集モジュールが多く用意されています。
それらのデータを視覚的に表示するには、PA-Panelのようなソフトを使用してパソコンで表示するか、
タッチパネルのようなものに表示する方法があります。
PA-Panelは高度な処理が行え、ひじょうに便利にできていますが、いかんせん高価です。
タッチパネルなどは解析処理には向きません。
そこでイーサネットかRS-232C経由でPLCのCPUと交信する仕組みがあれば、あとはエクセルに取り込めばよいのですが、それを実現してくれるのが東京電機産業のFUNドライバです。これは、Visual BasicやC++のような言語で使うことができますが、エクセルのアドインとしても提供されているため、エクセルのセルに直接データを取り込んだり、VBAでプログラミングすることも可能です。
FUNドライバは以前PLCのGPIBからデータを取り込んだ「PLC版真空管試験器」を作ったときはVisual Basicから使ってみました。
今回はエクセルにアドインしてVBAから使ってみます。といっても今回はさして目的がなかったので、簡単なデモプロです。
FUNドライバ(FUN FA-M3 Universal Network Driver)は、東京電機産業のホームページから体験版がダウンロードできますが、購入しても比較的安くすみます。
今回は、PLCのCPUの中で発生させたサインカーブのデータを、エクセルでグラフ表示するという簡単なものにしました。それだけでは面白くないのでエクセル側で計算した搬送波をPLCで発生させた波形でAM変調してみましょう。
まずPLCのCPUでサインカーブのデータを発生させるラダープログラムを作ります。
驚くほど簡単です。リレーコイルI00010がTRUEになったら、レジスタD00007のデータのサインを計算し、結果をレジスタD00009に入れます。

PLC側のラダープログラム
次に、FUNドライバを使用したVBAのプログラムを作ります。以下のように簡単です。エラー処理は省略しています。
VBAのソースコード
Dim i As Integer
Dim Error As Integer
Public Sub Read_Sin()
Worksheets("Sin" ).Select
Error = SetFunParameter(1, "192.168.1.8", 1, 0, 1, 0)
i = 0
Do While (i < 1441)
Error = FWriteDirect("", 1, 1, "D00007", i * 0.01745329)
Error = BWriteDirect("", 1, 1, "I00010", 1)
Cells(i + 2, 4).Value = FReadDirect("", 1, 1, "D00009" )
i = i + 1
Loop
End Sub
VBAではレジスタD00007にラジアン値をセットし、リレーコイルI00010をTRUEにして、サインの計算結果をレジスタD00009から読み取ります。0から3660度 4周期分計算したら自動的にグラフに表示されます。
FUNドライバのアドインをあらかじめエクセルに設定しておきます。
FUNの関数は以下のようになっています。
SetFunParameterはPLCのIPアドレスを指定し、ユニット番号を決めます。
FWriteDirectは、PLCのレジスタに値を書き込みます。
FReadDirectは逆に読み込みます。Fは浮動小数点数を扱います。
BWriteDitectは1ビットのリレーコイルをセットします。
搬送波とAM変調の計算式は予めセットしてあるので、グラフにはAM変調された波形も表示されます。

グラフに表示されたサイン波とAM変調波
以上のようにFUNドライバを使えばエクセルのアドインとして簡単に使えます。
実務面では、さまざまなレジスタのデータを取り込んで日報を作成したり、ペンレコーダの代替のような用途など、用途は無限です。
(JF1VRR)