PLC(プログラマブル・ロジック・コントローラー)の覚え書き


ソフトの規模が大きくなるにつれてバグは出やすくなるものではあるが、できる限りバグを出さないためにやっておくべきことをメモしておく。
関連:読みやすいラダー

数値領域はダブルワードで確保する

基本。
シーケンサでは積商が倍領域使うため、ダブルワードで確保する癖をつける。
使用中であることがわかるように、上位デバイスにも何でもいいのでコメントを入れておくとそこを使ってしまうミスが減る。(筆者は「D」とか「*」とか「/」を入れている)
ラベルを使えば気にしなくて済むようになるが、デバイス直接打つほうが楽なので…

キーエンス

CAL*,CAL/ではなくMUL,DIVしてSTAするやり方なら倍領域を使用しない
その代わりDIVする時に上位領域としてテンポラリデータ(T0)も使用するという極悪仕様がある(MULのあとDIVする前提の仕様)
まあDIVの直前にEXT付ける癖を付ければいいだけではあるのだが

数値比較をする場合、例外対応を入れる

数値デバイスに想定外の値が入ることはよくある。
例えば漸増するXで「X=a」の時何かする場合、ソフト上は「X≧a」の時に動作するようにしておくと、Xがaより大きくなったときに該当部分が動かなくなるのを防げる。初期値が0から始まる場合は「X<0]の時にXを0にリセットする処理を入れておくとより安定する。

間接指定(インデックスレジスタ)を使う場合は例外対応を入れる

上に同じ。範囲外の部分を参照するならまだしも、範囲外に書き込むととんでもないことになるので、範囲外の数値にならないよう処理を入れておく。

細かくFB化しておく

FB化して使いまわすと、何かバグが出たときに対処しやすく、その後はバグ対応したものを使うことになるのでバグの危険性が減る。
FBはサブルーチンより引数(入力)や返り値(出力)がわかりやすくミスが減るので、FBが使えるならサブルーチンはすべてFBに変更していきたい。

各社の仕様の把握

だいたいどの会社も似たような仕様にしてくれているものだが、会社によってデバイスの扱いが違ったり、命令語の内容が違ったりする。
同じように使ってるとドツボに嵌ったりする。嵌った。

キーエンスのタイマー、カウンター

ほとんどの会社のタイマーやカウンターは基本16ビットで動き、32ビットにするには命令語変えたり特殊なデバイスにしたりするが、キーエンスはデフォルトで32ビットである。
長時間タイマーで悩まなくて済む一方で、設定値が2ワード必ず必要なのでダブルワードでデバイス確保していないと面倒なことになる。なった。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

編集にはIDが必要です