はじめに
みなさん、MELSECを使っていますか?
MELSEC iQ-Rという新しいPLCがあるにも関わらず、諸般の事情によりMELSEC-Qばかり使っている状況です。そこで、個人的に調べたマニアックな使い方について書いていこうと思います。誰かの役に立つかは謎ですが、参考になれば幸いです。
注意: この記事はMELSEC-Qの場合の仕様であり、MELSEC iQ-Rの場合は別の挙動になる可能性があります。
構造化プロジェクトを使っていますか?
構造化プロジェクトを使うと、ラダー以外の言語(ST、FB、FBD)やラベルが使用できます。なんだかカッコイイですね。うまく使うと工数削減やプログラムの標準化ができ、完成度の高いプログラムを作成できます。
しかし、これがどのように実行されているかは、みなさんご存知でしょうか?
STで書いてみよう
サンプルプログラム
Sample1: CASE文による分岐処理
(*Sample1*)
CASE D0 OF
0:D1:=K0;
1:D1:=K1;
2:D1:=K2;
3:D1:=K3;
END_CASE;
Sample2: 関数の使用
(*Sample2*)
D2:=FUN1(K1,K2);
関数定義
(*FUN1*)
FUN1:=Input1+Input2;
上記のようなプログラムを作成してみます。
- Sample1: D0の内容によってD1に0~3の値を代入するプログラム
- Sample2: Functionを使って二つの値を足して出力するプログラム
ラダーで書いたら簡単に書ける内容ですが、STで書いてみました。さて、コンパイルするとどのように出力されるでしょうか?
コンパイルされたプログラムを見てみよう
GX Works2では様々な言語が使えますが、最終的には昔ながらのラダーに変換されてPLCで動作しています。ということで、どのように変換されたかを見てみましょう。
コンパイル結果の確認方法
その1: コンパイル結果表示機能
なるほど、わからん…ということで別の方法を試してみましょう。
その2: ICメモリーカード書込機能
ICメモリーカード書込でパソコンの任意のフォルダに内容を出力します。ICメモリーカードはQのUDVシリーズだとSDカードに該当します。
SDカードからBOOT運転ができますが、この機能を使うとPCから直接SDカードにPLCプログラムを書き込めます。
このようにPCの任意のフォルダにプログラムを出力できます。ここまでできたら、とりあえずGX Works2を閉じましょう。
次に、GX Works2を開いて新規作成します。CPUタイプは同じにしますが、プロジェクト種別はシンプルプロジェクトにします(ここがポイント)。
ICメモリーカード読出で先ほどのフォルダを指定します。さあ、どうなるでしょうか?
結果
という目まいがしそうなプログラムが出てきました。プログラムも長いし、ポインタも使っています。おそろしや、おそろしや。
プログラムメモリは無限ではない
MELSEC-Qのメモリ容量
Q03UDVCPUの場合、定価は12万円です。では、このプログラムメモリの容量ですが、120KByteです。プログラムが120KByteしか書けないのに定価12万円。おそろしや、おそろしや。
MELSEC iQ-Rとの比較
では、最新のMELSEC iQ-Rはどうでしょうか。
R04CPUはプログラムメモリ容量160KByteで定価は12万円です。これも容量のわりに値段が高いですね。
他社製品との比較
PLCとマイコンを比較するのはおかしいですが、例えばSTM32F446REを見てみましょう。
Flash: 512KByteで約2000円…
STM32 Nucleo Board STM32F446RE
いかに三菱のPLCのプログラムメモリが少ないかがわかるでしょう。令和なのになんでこんなに少ないメモリで頑張らないといけないんだ、世の中は富豪的プログラミングであふれているというのに><
ということで、構造化プロジェクトを使う場合は作り方によってはプログラムの容量やポインタを思ったより使用するので気をつけましょう。(どうやって🤔)
まとめ
ST言語が悪いというわけではありませんが、STで組まれたプログラムはコンパイルでテンプレート化されたラダーに置き換わるような挙動をしています。
これはそもそもMELSEC-Qはラダーしか実行できないのに、GX Works2で様々な言語を使えるように頑張った苦肉の策のような気がします。
MELSEC-Qばかり使っているので、MELSEC iQ-Rや他社のPLCってST言語使いやすいんですかね。このへんがよくわからないです。TwinCATやPLCnext使ってみたいですね。