この記事について
Effective C++がある。Effective Pythonがある。Effective Rubyがある。
なのにEffective Ladderがないのはどうしてなんだ!?
というわけで書きました。
書くのに結構苦労。なんで、QiitaはLadderのコードに対応していないんだ(鬼)!!
項1 : 環境のマニュアルをまず読もう。
恐ろしいことにLadderは各社好き勝手に作っているためCやPythonと比べたら規格はあってないようなものです。
こんな時にアテにできるのはメーカのマニュアルのみ。
マニュアルを読むことで各メーカが独自に定義した応用関数(特定の機能を実現するためだけのラダー要素)を使えるようになります。
これを使うことで多くの時間を節約できます。
必ずマニュアルを読みましょう。
項2 : 書く前に因果関係を考えよう。
考えながら書くとわけのわからない梯子になります。
必要のないスイッチが入ったり、起動してはいけないものが起動してしまったり…
コードを書く前に因果関係を文章にしましょう。
スイッチX1とスイッチX2がONの間だけ、ソレノイドY1がONになる。
他のまっとうなプログラミング経験がある人はコードにしましょう。
if(X1 == true && X2 == true)
{
Y1 = true;
} else
{
Y1 = false;
}
これをやるだけで、余計なレジスタやメモリ(同じものなのにメーカによって呼び方が異なる)がいらなくなります。
完成したコードは以下のよう。
基本的にCで書いた時に現れる変数の数をラダーの構成要素の数が越えることは無いと思ってよいです。
項3 : スイッチのエイリアス機能を使おう。
X10、Y20、Y21、D31、M0、TM20、K50、T#30MS…
これが何かわかるようになったらあなたも立派な 時代錯誤の変態 梯子使いです。
もちろん、このX10やY20などの表記方法は絶望的に可読性が無いです。
よく訓練された変態しかわからないです。
そういうときのためにエイリアス機能を使いましょう。
X10が接触センサ、Y20がコンベア起動などの名前を持っていれば一目で機能がわかります。
可能な限り名前をつけましょう。
名前をつければ簡単に何をしているかわかります。
項4 : ド・モルガンの法則を使おう。
高校でみんな学んでいるはず。論理演算。
$$
\overline{A \cap B} = \overline{A} \cup \overline{B}
$$
と、
$$
\overline{\overline{A}} = A
$$
これらを使うとコードの可読性を向上させることができます。
例えば以下のコードは
以下のようにただのor演算のコードになります。
ド・モルガンによって可読性が上がっていることがわかります。
項5 : 一つの機器に一つのコードにしよう。
コードの再利用性をあげるためです。はっきり言ってラダーのコードに再利用性はほとんどありません。
クラスも関数も無いものをどうやって再利用しろと?
唯一頼れるのは接続先のハードウェアに合わせて割り当てられたIOのマップは辛うじて再利用できることがたまにあります。
その僅かな希望のために一つのコードは一つの機器に割り当てるようにしましょう。
項6 : チャタリングに備えよう。
プログラマ。特に文系からプログラマになった人この言葉を知っている人はどれだけいるでしょうか?
チャタリングとはスイッチをONにしたときに電圧が波打つ減少です。スイッチはONした瞬間にONとOFFを僅かな時間だけくりかえします。これが問題になるのはラダーが動作するPLCがnano sec単位で1サイクルを終えるからです。誤動作の原因になります。
これに対処するにはディレイをいれる方法があります。
ディレイは各社が応用関数として提供しているのでそれを使いましょう。
それと、ハードウェア的に攻める方法があります。コンデンサと抵抗でRCローパスフィルタを接点に取付ける方法です。しかし、最後の手段です。コストと時間がかかるのでできるだけソフトでやったほうが賢明です。
項7 : 安全装置のIOは安全な状態を無通電かつ二重回路にしよう。
安全第一な現場ではコードも安全第一にあるべきです。
安全装置はたとえ世界が滅びようとも動作するようにすべきです。
安全装置のチェックは必ずサイクルの一番はじめに実行されるように書き、安全装置が働いたら全てのIOが安全側になるようにしてください。