「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
PLCのプログラミング言語は、弊社の開発実績を見るとラダー言語が多くを占めていますが、ここ最近はラダー言語以外を使用する機会が増えてきました。
筆者は、PLC用アプリケーション開発を中心として担当してきましたが、IEC 61131-3のST言語を使用した開発の経験もございます。
本技術レポートでは、この経験をもとに、PLCプログラミング言語を紹介し比較してみたいと思います。
具体的な例を挙げて実装してみることで、より詳しく各言語の違いが見えてくることと思います。
PLCプログラミング言語について、過去のソフテックだよりで取り上げていました。
抜粋して要約すると以下の通りです。
第261号(2016年7月6日発行)技術レポート『各社PLC比較 〜IEC 61131-3 編〜』
この「IEC61131-3」では、PLCプログラミング言語は5種類定義されています。次の表にて解説します。
名称 | 解説 | イメージ |
---|---|---|
IL Instruction List インストラクション・リスト |
マイコンで言うアセンブラに相当するものです。 容量・速度を重視したプログラムを作る場合に有効でしたが、近年のハードウェア性能の向上で使用する機会は少なくなっています。 IEC61131-3第3版からは非推奨の言語となりました。 |
|
LD Ladder Diagram ラダーダイアグラム |
日本国内で最も普及しているプログラミング言語です。 リレーシーケンスを仮想的に表現したものであり、インターロック回路などビット信号のON/OFFを扱う処理に向いています。 システムが大規模になるほど可読性の悪いプログラムになりやすく、複雑な演算や文字列処理の記述も不得意としています。 |
|
ST Structured Text ストラクチュアド・テキスト |
構造化テキスト言語で高級言語に慣れたエンジニアに向いています。 複雑な演算や文字列処理の記述を得意としています。 |
|
FBD Function Block Diagram ファンクションブロック・ダイアグラム |
DCS(Distributed Control System)で用いられているグラフィック言語で、計装分野で主に用いられてきましたが、可読性が良いということでPLCでも使われるようになりました。 ファンクションと呼ぶ箱の左側が入力パラメータ、右側が出力パラメータとなり、データの流れが分かり易いというメリットがあります。 |
|
SFC Sequential Function Chart シーケンシャル・ファンクション・チャート |
状態遷移を記述するのに特化した言語です。 SFC自体は演算やデータの入出力を行わず、LDやSTなどとセットで用いられるため、厳密には言語ではなく要素と定義されています。 各工程の遷移条件、工程内部の処理を分けて記述できる点がメリットです。 |
ST言語のような高級言語ライクな記述方法は、「IEC61131-3」とは別に、各PLCベンダが独自に「スクリプト」という形でもリリースされています。
過去のソフテックだよりでキーエンス製PLCのスクリプトについて紹介しています。
137号(2011年5月11日発行)技術レポート「ラダーとスクリプトの組み合わせ使用について」
2章で紹介したPLCプログラミング言語の中で、LD、ST、FBDを取り上げて比較していきます。
ILは、IEC61131-3第3版から非推奨な言語となりましたので比較から除外しています。
SFCも、単体で動作する言語ではなく、LDやSTとセットで使用するものなので比較からは除外しています。
具体例をターゲットとしてプログラムを作成していきます。
図を交えながら以下に仕様をまとめます。
タッチパネルに「運転」スイッチと「停止」スイッチがあります。
「運転」スイッチが押されたらコンベアが動き出し、荷物が右側へ動いていきます。
ただし、コンベアが動き出すには、「在荷Bの位置に荷物が無い状態」という条件があります。
動作中に「停止」スイッチを押すと、コンベアはその場で停止します。
「在荷Bセンサー」が荷物を検知してもコンベアは停止します。
動作中の時間をカウントし「○分○秒」の形式でタッチパネルに表示します。
この仕様を実現するプログラムを、LD/ST/FBDそれぞれの言語で作成しました。
下図に並べて表示しています。
なお、プログラムの作成には、三菱電機製ツール「GX Works3」を使用しました。
付属する「GX Simulator3」にて動作確認を行っています。
LD | ST | FBD |
---|---|---|
プログラム中で、ピンクの文字で表現されているものが「変数」を表しています。
「変数」の名称と役割を下表にまとめます。
変数名 | データ型 | 内容 |
---|---|---|
在荷B | ビット | 在荷Bセンサーからの入力。 在荷有りでON、無しでOFFとなる。 |
運転SW | ビット | タッチパネルの運転スイッチが押されている状態を表す。 押している間だけONとなる。 |
停止SW | ビット | タッチパネルの停止スイッチが押されている状態を表す。 押している間だけONとなる。 |
コンベア運転 | ビット | コンベアへの出力信号。 ONを出力している間、コンベアが運転する。 |
動作カウント | ワード | 動作中にカウント値を格納するための入れ物。 |
分 | ワード | タッチパネルに表示する動作時間。 「分」の位。 |
秒 | ワード | タッチパネルに表示する動作時間。 「秒」の位。 |
次章より、GX Simulator 3 上で動かしている画面を見ながら、1言語ずつ解説していきます。
LD(ラダー)言語では、ビット型の変数は、接点という形で表現します。
青色で塗りつぶされている接点がONを表しています。塗りつぶされていない接点がOFFです。
図中の番号部分を簡単に説明します。
ST言語はテキスト形式となります。
LD(ラダー)言語の接点のような記号はありませんので、変数名の背景色でON/OFFを表現しています。
背景色が青い変数はONを表しており、枠だけ表示されているのがOFFを表しています。
ワードデータの値は、プログラムとは別に右側の領域に表示しています。
ST言語では、変数単体のON/OFFは色で分かりますが、「(停止条件 = OFF)」というような条件式が成立しているかどうかが視覚的には分からないというデメリットがあります。
そのため、IF文の中が実行されているのかなど今動作している場所が直観的に分かりづらいように思います。
タッチパネル表示用の「分」と「秒」を作っている箇所に着目すると、LD(ラダー)言語よりも計算内容が分かりやすいというメリットがあります。
GXWorks3では正確にはFBD/LD言語という名称となっています。
FBD言語だけでなく、LD言語も織り交ぜて記述することができるためです。
今回のような例では、本来ならLD言語の方が向いている内容ではありますが、言語の比較を行うため敢えてFBDのみで記述しています。 プログラムはST言語で記述したものと、ほとんど1対1で対応させています。
モニタの値は、ビット型もワード側も変数名のすぐ下に表示されます。 FBD同士を接続する線が青色となることで、条件が成立していることがST言語よりも視覚的に分かりやすいという特徴があります。
以上のように、具体的な仕様を提示して、3言語でプログラム製作を行ってみました。
実際に作ってみて感じたことを、製作者担当者、メンテナンス担当者の2つの視点でまとめます。
LD言語とFBD言語は、グラフィカルな言語ですので、記号を配置して変数名(デバイスアドレス)を割り当てていくという作業がメインとなります。
ST言語のように文字を書いていく作業に比べると、LD/FBDは少し特殊な入力作業となりますが、なるべく効率良く入力できるように各社プログラミングツールで工夫されていますので、プログラマがツールの使い方をしっかりと習得すれば、ST言語に劣らず高速なプログラミングが可能となります。
大きくメリットだと感じたのは、ST言語のテキスト形式であるという特徴です。
テキスト形式なので、外部テキストエディタを利用して、コピーアンドペーストによる入力も可能です。
更に、WinMerge(オープンソースのWindows 用比較・マージツール)のような、テキストを扱う外部ツールも利用可能となります。
筆者が過去に担当したST言語案件では、WinMergeを利用してバージョンごとの変更箇所を確認したり、差分を見ながらマージしたりなど、外部ツールが大活躍しました。
更に、ST言語のコードを一部自動生成するような効率化ツールも開発しており、テキスト形式である自由度を大いに生かすことができたと思います。
PLC自体のメリットのひとつに「今動作しているプログラムをリアルタイムでモニタできる」というものが挙げられます。
リアルタイムでモニタしながら、問題があればその場でプログラムを変更できることもPLCの強みです。
PC用アプリケーションは現地でソースコードが利用されることはありませんが、PLCはこのメリットがありますので納品したプログラムは現地でも活躍することが多くあります。
そのため、現地でPLCプログラムを利用する人、例えば工場のメンテナンス担当者の視点においても、見やすいプログラムを作るということが重要となります。
言語の違いでモニタしやすさにどのような違いあるのでしょうか?
3種類の言語で製作してみて、さすがグラフィック言語だけあって、LD言語とFBD言語は視覚的に分かりやすいと感じました。
ビットのON/OFF信号の見やすさはLD言語が長けており、FBD言語はデータの流れが分かりやすいと感じました。
今回は敢えてFBD言語のみで記述してみましたが、ビット信号を扱う部分はLD言語を併用するなど、よりモニタしやすいプログラムを作ることが可能であると思いました。
ST言語は、変数単体の値はモニタできますが、「変数A = TRUE」のような式が成立していることが視覚的に分からない。複雑なビット変数の論理演算となると、成立していることが分かりにくいという特徴がありました。
逆に、計算式は直観的に分かりやすいので、今回例には挙げませんでしたが文字列処理など、ST言語が得意な処理内容では活躍できると思いました。
本レポートでは触れませんでしたが、LD(ラダー)言語からST言語で記述したブロックを呼び出すなど、各言語を連携させて使用することも可能です。
具体的な例を用いてLD/ST/FBD言語を比較して見てみました。
各言語で得意・不得意があることがお分かり頂けたかと思います。
IEC 61131-3を推進するPLCopenの資料にも「実装する処理や好みに合わせて記述方法を選択できる」とあります。
製作者の力量やターゲットとなる仕様に合わせて、最適な選択が必要になるかと思います。
本技術レポートが少しでも言語選択のお役に立てればと思います。
(M.S.)
関連ページへのリンク
関連するソフテックだより