PLCの「変数」と「データ形」とは
先日たまたま「変数」と「データ形」を使いました。
変数って何ですか?って方はこの動画を見てください。
この方の説明が一番わかりやすかったです。
PLCで使うような変数には触れていませんが、プログラミング全般の変数について解説してくれています。
アドレス直接指定タイプのラダー言語ばかりやっていた人が、いきなり変数を使うと100%詰みますので、勉強しておくことをおすすめします。
PLCを使っている方の大多数は、三菱電機のメルセックを使っていると思います。

これからの時代はPLCも変数を使う機会が多くなると思われます。
変数の勉強をしておいて損は無いので是非。
使っている言語はラダー言語メインで、FBか新規開発をしている方はSFCを使っていると思われます。変数とはなんぞ?とならないために「変数」と「データ形」について簡単に解説します。
変数とは、データを格納する入れ物(メモリ)につける名前のことです。
ここで扱う変数がどういったデータか?(16ワード扱うDレジスタか、ビット単位の内部コイルMなのか)を決めるのがデータ形になります。
データ形の一覧を以下に貼り付けます。
まず変数名を決めて、それからデータ形を指定します。
それからメモリを指定するのかしないのかを決めます。

手順として
①入れ物を決める(メモリ)
②データ形を決める
③変数名を決める
④アドレス(メモリ)を指定するのかどうか決める
こんな感じです。
アドレスを指定していない変数は、コンパイル時にツールが自動割付します。
アドレス直接指定の文化に馴染んでいる方は本当にわかりにくいです。
自動割付のことは、この記事で何度も書きます。

従来のプログラミングツールでは、入れ物の名前はアドレスでした。
アドレスに付属する情報として名前(コメント)を付けていました。
メルセックのQシリーズを使っている方の大多数はこの方式を現在採用していると思います。
IEC 61131-3では、最初に変数(信号名)があり、属性としてアドレスの定義を行う。
変数とデータ形を先に決めてどこのアドレスを使うのか指定します。
アドレスを指定しない場合はコンパイル時に自動割付を行う。
(ツールがコンパイルするときに空きのメモリを検索して自動割付します。)
そもそもIEC 61131-3ってなに?
PLCは1969年にModiconが最初に商品化しました。1972年には日本初のPLC「SYSMAC」がオムロンから誕生しています。当時の写真見るととんでもなくデカイPLCです。メルセックのAシリーズの3倍くらい。
PLCのプログラミングツールやプログラミング言語は製造者ごとに異なっていました。ユーザにとっては都度都度に各社のツールの操作方法からプログラミング言語を覚えなければいけませんでした。ユーザーは各社独自のプログラミング言語覚えなければいけないのは、参ってしまいます。
こういった風潮はベンダーとユーザーにとって好ましくないため、プログラミング言語を統一するという動きができました。そのような動きの中で1993年にPLCのプログラミング言語の国際規格「IEC 61131-3」が発行されました。
とはいえメルセックのラダー言語ばかり使っていると、恩恵は感じにくいと思います。
PLCopenJapanという団体が作成した動画が簡潔にまとめられています。参考にどうぞ。
変数を採用すると何が便利?
変数を採用すると何が便利?について少し書きます。
外部機器に接続される入出力信号以外は、アドレスを割り付ける必要がありません。
一部はタッチパネルやパソコンとの通信等で指定しますが、内部のロジックに使用するだけならアドレス指定しなくても良くなります。
そもそも開発目線でいうと、内部で使うロジックにどのアドレスの内部メモリを使おうが、どうでも良いのです。
それが機種が変わったりメーカが変わったりで、打ち直しするのは非効率なだけです。

他機種に更新するからアドレスを1から考え直すのは非効率です。
(この世界ではよくあることですが)
内部のロジックにだけ使用するメモリを変数として扱って、自動割付することでプログラムを流用する時が楽になります。(とはいえシステム構成や省配線方式や運用面など、微妙に変えたりするので劇的に楽にはならなかったが。)
内部アドレスつけるのにしても個性とか流派とかあって大変です。
横河から三菱に変えたりしたこともありましたが、
メモリの仕様書読みまくって打ち替えました。
その他に結構めんどくさかったのが上司に説明している時でした。
アドレスマップを見てグズグズ言われる時がめんどくさっかたです。設計者って面倒くさい人が多いので、何かケチをつける人が必ずいます。

ここのプログラム前の案件の流用します。

変数だから自動割付で既存のプログラムに干渉しないね。
いいよー。

ありがとうございます。
(よっしゃ!)
上みたいに変数だとそれが少しだけ減ります。
変数を採用するとメーカーを変更する場合でも、IEC準拠のPLC間では 外部入出力のアドレス定義だけ整合性をつければ良くなります。
(CC-LINKとか省配線用の通信とかは変えたり変えたくなるので、そういってもそう簡単ではないが)変数名の決まりをチーム内で決めることでプログラムも読みやすくできます。
以下に簡単な変数を用いたラダーを記載します。

信号受信と出力可1は変数のBOOL形で指定したものです。
信号受信と出力可1のアドレスはコンパイル時に自動割付によって空きメモリから自動で割り付けます。
メルセックのアドレス直接指定方式では内部コイルMなどで直接アドレス指定してコメントを付記していました。
メルセックも変数は使えます。
ただ圧倒的に直接アドレス指定した資産が多いため、変数を採用している設計が少ないです。

メルセックで変数を使っているプログラムを見たことは一度もありませんでした。
メーカ指定の案件だったので、たまたま富士電機のPLCで変数を使うことになりました。
最初は本当にきつかったです。(何がキツイかは下に書いてきます。)
変数とデータ形を使ってみた所感
私が使ってみて最初に感じた所感は
「便利だな」とか「いいな」より
「アドレスマップが少なくてラッキー」でした。
内部メモリの部分は自動割付します。
指定する箇所以外は変数のリストを管理すればいいだけでよかったのは楽でした。
実感としては1/10くらい?
(使わないメモリは予備領域という記載でまとめればいいから)流派とか気にしなくて良くなったのがデカかったです。

変数のコメントの付け方など気をつけなければいけないところや、後々書きますがグローバル変数の考え方など馴染みがないものが多かったです。それを差し引いてもアドレスマップが少量で済むのはありがたかったです。
あと変数名の付け方で戸惑いましたが、この方の動画が勉強になりました。
良ければ参照ください。
変数を積極的に採用しているPLC 富士電機 MICREX-SX
三菱電機のGXデベロッパーをよく使っていましたが、ある日仕事でいきなり富士電機のMICREX-SXを使うことになりました。
この富士電機のPLCは本当に癖がありました。

三菱に慣れた自分にとっては癖の塊でした。
下の動画に富士電機のPLC MICREX-SXが出てきます。
D300Winという開発ツールで設計するのですが、本当に使いづらい。
まず重い。
よくフリーズするので常に上書きをしながら設計していました。

何度再起動させたことか・・・・
ですがこの開発ツールは変数をメインで使うことを主体に作られており、変数を使って設計したい場合は本当に設計しやすかったです。
youtubeでD300Winの動画は少なかったのですが、まともなやつを以下に埋め込んでおきます。
ただでさえPLC関連は少ないですが、D300Win関連の動画は本当に少ないです。
それだけマイナーな機種なんでしょう・・・・
ただ変数メインの開発は本当に楽でした。

変数主体で作る前提で作られた機種です。
なので慣れるとアドレスはそこまで気にする必要がなくなりました。
変数を使うと内部メモリのことをあまり悩まなくて良くなります。
その点開発は格段に楽になりました。
RUN中書き込みに制約があるのは辛かったけど。

RUN中書き込みできないのは地味に辛い
(あるにはあるが推奨されていない)
このメーカのツール重いなあ・・・・。
とか色々ありましたがアドレスマップの作成が楽になりました。
これが自分にとっての変数を使ったときの良かったことです。
以上簡単ですがPLCの「変数」と「データ形」とはでした。
グローバル変数とかも今後書きたいと思います。変数に初めて触れる方の参考になれば幸いです。
それではご安全に!
コメント