HOME > ソフテックだより > 第137号(2011年5月11日発行) 技術レポート「ラダーとスクリプトの組み合わせ使用について」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより(技術分野別)のページへ
ソフテックだより(シーン別)のページへ


ソフテックだより 第137号(2011年5月11日発行)

技術レポート

「ラダーとスクリプトの組み合わせ使用について」

1. はじめに

ソフテックでは今までPLC(Programmable Logic Controller)を使用したさまざまな制御を手がけてきました。
PLCではソフトウェアを作る際に、通常はラダー言語を使用します。
今回は、ラダー言語の代わりにBASIC 言語やC言語に似た言語で記述できるスクリプトについてキーエンス製PLCを例に挙げてご紹介したいと思います。

2. スクリプトとは?

スクリプトはBASIC 言語やC言語に似た言語でプログラムを記述できる機能です。ラダープログラム中にBASICに似た言語でプログラムを記述することができます。高級言語に比べてラダーだと同じ処理を実装するのにプログラム量が多くなってしまう場合があります。そういった場合には、その処理をスクリプトで実装すると便利です。

3. スクリプトの特徴

ラダープログラムと比較したスクリプトの特徴について、ご紹介します。

(A) 計算処理を作成する場合

ラダーの場合、計算処理は1行に1つの演算しか行うことができません。しかし、スクリプトの場合には1行で複数の演算を行うことができ、”()”などを使用して演算の順番を指定することもできます。
そのため、複雑な演算処理を行う場合には同じ処理の実装でもスクリプトで記述した方が、ラダーで記述するよりもプログラム量を少なくすることができ、視認性もよくなります。

下記の例では、円柱の体積を求める計算です。ラダーの場合は3行の処理となるのに対して、スクリプトで記述した場合には1行で処理を実装することができます。

計算処理(ラダー)
図1. 計算処理(ラダー)

計算処理(スクリプト)
図2. 計算処理(スクリプト)

(B) 文字列処理を作成する場合

ラダーで文字列を扱う場合、1つのデバイス(1WORD)にASCIIで2文字(2Byte)が格納されます。
通常PLCではデータをWORD単位で扱いますが、文字列を扱う場合にはByte単位で扱う必要があるので、ラダーで文字列を扱いづらいです。
しかし、スクリプトを使用であれば比較的簡単に文字列を扱うことができます。
例えば、PLCでファイル作成を行う場合などは、テキストデータの作成が必要となります。ラダーで文字列を作成する場合には、文字列の連結を使用することがよくあります。これをラダーで記述すると行数が多くなってしまう上に、最終的にどのような文字列を作成していようといるかパッと見でわかりにくくなります。しかし、スクリプトであれば1行で記述することができ、文字列全体を見れるためわかりやすくなります。

日付文字列 作成(ラダー)
図3. 日付文字列 作成(ラダー)

日付文字列 作成(スクリプト)
図4. 日付文字列 作成(スクリプト)

また、通信処理などを行う場合には、文字列を受信して、その受信した文字列の一部を抜き出したり、文字列内にある文字が含まれているか検索を行ったりする場合があります。PLCメーカーにもよりますがスクリプトでは、文字列の検索命令/文字列の切り出し命令など用意されていて、比較的簡単に文字列の検索などを行うことができます。

4. スクリプト使用例

では、スクリプトはどういった場合に使用できるか? ですが、実際にスクリプトを使用してプログラムを実装した例をご紹介したいと思います。

(A) データ処理を行う場合

以下の例は、シリアル通信処理でスクリプトを使用した例です。
シリアル通信の仕様は、送信側がデータを送信したら受信側は応答データを返して終了するというシンプルな仕様でした。
このとき、通信処理を全てスクリプトで実装するのではなく、基本的な通信シーケンスはラダーで作成し、受信データの解析・送信データの作成はスクリプトで実装しました。
シーケンス処理とデータ処理をラダーとスクリプトでそれぞれ得意な処理の実装を行うことで、プログラム量を少なくすることができました。

スクリプトを使用した通信処理
図5. スクリプトを使用した通信処理

(B) グラフ表示データ演算

以下の例は、タッチパネル上にグラフデータを表示させる例です。
タッチパネルの画面上に折れ線グラフ表示を行うもので、そのグラフは画面上のスイッチ操作で表示するレンジ幅を変更できる仕様です。レンジ幅の切り替えを実現するためには、グラフ表示データが格納されているデバイス1000点のデータ内容を切り替える処理が必要でした。また、折れ線グラフなので、各ポイント間の傾きを演算する必要もありました。

このような演算処理をラダーで作成すると、1行で1つの演算しかできないため中間の計算結果が増えてしまい全体でどのような計算をしたいのかがわかりにくくなってしまいます。しかし、スクリプトで作成すれば計算全体がわかりやすくなりプログラム量も少なくなります。
また、ラダーは1つずつ演算をするため計算が多くなってくると計算による誤差が大きくなってしまいます。しかし、スクリプトでは一度に複数の演算を行えるので計算誤差も極力抑えることができます。

グラフ表示データ演算
図6. グラフ表示データ演算

5. スクリプト使用時の注意点

スクリプト機能は便利で良い部分もありますが、逆に注意が必要な点もあります。
実際にスクリプトを使用してみて感じたことをまとめたいと思います。

(A) モニタ・デバッグ

PLCでは、基本的にデバイスを使用して処理を行っていきます。デバイスはIOコメントがないとただの番号となってしまい、それぞれのデバイスが何に使用されているのかが非常にわかりにくくなってしまいます。
そのため、通常は使用するデバイスにIOコメントをいれるようにしていますが、スクリプト内ではIOコメントが表示されないため、わかりにくい部分があります。
これを回避するためには、スクリプト内のコメントを工夫するのが良いと思います。例えば、スクリプトの先頭にそのスクリプト全体を説明するコメントをいれたり、計算処理の場合はどういった計算式なのか?や、計算に使用する重要なデバイスの説明をコメントに記述したりすればわかりやすくなります。

■コメント無し
スクリプトコメント

■コメント有り
スクリプトコメント

図7. スクリプトコメント

(B) ビット処理がわかりにくい

上記で述べましたように複雑な計算処理や文字列処理を行うワードデータを扱う場合には、スクリプトはプログラム量を減らすことができて良いと思います。しかし、ビット処理はラダーの方が向いています。
例えば、モニタを行うときラダーの場合はビット処理が視覚的にわかりやすいですが、スクリプトの場合はエディタ上でビットのON/OFF状態がわからないため視覚的にわかりにくいです。

ビット処理(ラダー)
図8. ビット処理(ラダー)

ビット処理(スクリプト)
図9. ビット処理(スクリプト)

しかし、演算処理の結果を使用してビットのON/OFFを行いたい場合などもあると思います。
そういった場合はスクリプトでは演算処理のみ行い、ラダーでは演算結果を使用してビットのON/OFFのみを行うなど、それぞれの長所を活かすような方法がよいのではないかと思います。

6. おわりに

スクリプトについて説明してきましたが、スクリプトはあくまでプログラムを実装する上での1つの手段にすぎません。複雑な計算処理があるからといってスクリプトで実装すればよいというものではなく、ラダーに比べて逆に見づらくなってしまう場合もあります。
そのため、ソフトウェアの特徴を考えた上で、最適なプログラムの実装方法を選択することが重要となります。
また、スクリプト機能はPLCだけでなくタッチパネルにも用意されている場合があります。そのため、上述のグラフ表示の処理などはタッチパネルで実装することも可能です。タッチパネルのスクリプト機能は、またの機会にご紹介できればと思います。

(Y.R.)

[参考文献]
KEYENCE −
プログラマブルコントローラ KV-5500/5000/3000/1000 スクリプトプログラミングマニュアル

関連ページへのリンク

関連するソフテックだより

ページTOPへ