「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
他の人が作成したソフトを見たとき、どうも「見にくい・わかりにくい」と感じたことはありませんか?
PLCのソフト(ラダー)に限らず、プログラムは同じ処理を書くのにも様々な記述が可能であるため、作成者によって全く違う形になることも珍しくありません。
弊社ではひとつのシステムを複数人で開発することがありますが、その際にプログラムの形が異なっていれば、メンテナンス性に乏しいうえ、引継ぎを行う際にも時間を多く必要としています。
また、作成者本人であっても、数年後に見ると内容を忘れてしまって、苦労することもあるかも知れません。
そのような状況を想定して、ソフテックでは「見やすい・わかりやすいラダーはバグも少なくメンテナンス性にも優れている」と考え、ラダー作成に関していくつかのルールを設けています。
今回は、そのルールの一例をご紹介します。
ラダーは比較的単純な命令の組合せのため、1つのデータを計算するだけで何行にもなることが良くあります。
そんな時、先頭に「常時ON」のリレーを書いて回路をまとめると、処理の区切りが分かりやすくなります。
また、1つのデータに対する処理をまとめるだけでなく、「流量データの処理」「温度データの処理」など同じような処理の種類ごとや、入出力回路を入出力ユニットのI/O番号単位にまとめるなど、色々と応用できる場面があります。
現場で急なソフト変更があって対応したとき、納期が迫っていて慌てているときなど、ついコメントを入れ忘れてしまう場合があるかも知れません。
また、文字数の制限にうまく収まるようなコメントを考えるのが面倒と、いい加減なコメントを入れてしまう場合もあるでしょう。
ラダーソフトに限らず、初めてソフトを見る人にとってコメントは命綱です。
使用しているデバイスには必ずコメントを入れ、なおかつ用途やそのデバイスに入るデータを考え、的確な内容にする必要があります。
例えば、ダブルワードで使用するデバイスや文字列で使用するデバイスには、[dbl]や[str]とコメントに記述があれば、非常にわかりやすくなりますし、デバイスの入力ミスが減少するはずです。
行コメント(回路コメント)は、ラダーで行っている処理の概要をつかむのに威力を発揮します。
条件が整ったとき指定のラベルの位置に飛んで(JUMP)処理を続行するのが「JMP命令」です。
通常は上から下に順に進んでいき、また初めに戻ってサイクル処理するという、ラダーの基本的な流れが変わってしまうため、処理を追いかけるのがとても大変になってしまいます。
「JMP命令を使わなければ実現できない」という処理はありません。
(強いて使う場合をあげるなら、スキャンタイムをできるだけ短くしたいとき)
ラダーをサブルーチン化するなど、JMP命令以外の方法を検討するのが基本です。
SET命令はビットをONする命令です。SET命令の実行条件が不成立になっても、SET命令によってONしたビットはそのままONの状態を保ちます。RST命令により、ビットをOFFすることができます。
手軽にビットON/OFFできますが、多用しすぎると最終的に一体どのSET/RST命令でビットがON/OFFしているのかとても分かりにくくなってしまいます。
ビットをON/OFFするには、なるべく通常のコイル出力(OUT命令)を使うことが望ましいですが、やむを得ずSET/RST命令を使う場合は、対象のビットに対してSET/RST一組とするように気をつけます。
インデックス処理は、プログラム量の圧縮(製作コストの削減)や、条件によって結果の出力先のデバイスを切り替える場合など、活躍の場が多い便利な機能です。
しかし、コイル出力にインデックスを使ってしまうと、デバイス検索にて見つからず、回路を追いかけていく場合の障害となってしまいます。
PLCのメーカー/機種によって呼び方は異なりますが、デバイスメモリに対してオフセットする処理です。
例えば、D100のデバイスにインデックス値「15」をつけると、D115(D100+15)のデバイスにアクセスします。
ここまで「見やすい・わかりやすい」ラダーを目指すための注意点をあげてきました。
しかし、「見やすく」「わかりやすく」「間違いが無い」場合でも、実際にラダーが実行されるときや、その後のメンテナンス時に問題が発生する場合もあります。
そのような見落としがちな点についても一部ご紹介します。
四則演算などの命令によっては、演算結果が2ワードや4ワードになるものがあります。
アドレスを検索しても使われていないからといって、うっかり演算結果の2ワード目が入るデバイスを使ってしまうと全く違う結果になってしまいます。
演算結果の格納先として指定したアドレスの+1、+2、+3のデバイスにも「余り」や「使用不可」などコメントを入力しておくと、間違って使おうとしてしまった場合でもすでに使われていることが分かります。
インデックス処理などで、デバイス書込み先を変える際には、インデックス値を計算で算出する場合が多いと思います。
その際に、インデックス値が予期しない計算値となり、不特定のデバイスデータを上書きしてしまうことがあります。
インデックス処理の際には必ず、インデックス値の範囲チェックを行い、範囲外の際には出力しないなどの注意が必要です。
A/D変換ユニットからのデータ(0〜2000など)を工業スケール値(0〜300kgなど)に変換する場合、四則演算を使ってスケール変換を行うことがよくあります。
PLC内のデータは通常、整数で扱われることが多いため、演算結果に多少なりとも誤差が生じてしまいます。
誤差を少なくするために、まず「乗算」から行うように注意します。
PLCのメーカー/機種によっては、スケール変換命令を備えているものもありますので、それを使うのも一つの手です。
一部メーカーのユニットではユニット本体に設定が書き込まれ、ラダーファイルには保存されない場合があります。そういった設定は、PLC本体にオンライン接続しなければ内容を確認できないため、メモや仕様書などで残しておく必要が出てきます。
そのようなときは、設定画面をハードコピー(*2)し、ラダーファイルが入っているフォルダにセットで置いておくようにすると写し間違いや資料が見つからないというような事もありません。
表示されているウィンドウの内容をそのまま保存する方法です。
以下の方法でハードコピーを取得することができます。
いかがだったでしょうか?
最近のCPUではプログラムの構造化やモジュール化が可能な機種が多く、プログラムの構造化でも「見やすい・わかりやすい」ラダーを作成することができます。
ですが、もっと基本的なところに注意することで、より良いラダーを作成することができるはずです。
ほんの一例ですが、これからPLCのソフト作成を始める方にも参考にしていただけると幸いです。
(S.T.)
関連ページへのリンク
関連するソフテックだより