ラダー・ロジック

thumb|300px|right|ラダー図（自己保持回路）
**ラダー・ロジック**または**ラダー言語**（ラダーげんご）は論理回路を記述するための手法である。2023年現在、多くのプログラマブルロジックコントローラ(PLC)で採用されているプログラム言語である。**ラダー図**という場合もある。本来は、リレーによる論理回路を記述するために考案されたものである。ラダーという名前は、この言語のプログラムが2本の並行するレール（母線）とその間に渡されるラングによって梯子（ラダー）のように見えることに由来する。ラダー言語はハードウェア記述言語とは別のものと扱われている。

## 概要
ラダー・ロジックで書かれたプログラムはリレーを使った回路と等価である。このため、それらに親しんだエンジニアや技術者が理解・利用しやすいという点で優れている。 

ラダー・ロジックはプロセス制御やファクトリーオートメーションでシーケンス制御などで使われるPLCのプログラミングに広く使用されている。またラダー・ロジックは単純ではあるがクリティカルな制御が求められるシステム、あるいは旧来のリレーと実配線による回路の置き換えにも利用される。PLCは近年高機能化の一途をたどっており、非常に複雑なオートメーションシステムで使われるようになった。

ほとんどのPLCメーカが自社用のラダー・ロジック用のプログラミングツールを提供している。通常はメーカが異なれば完全な互換性はない。1つの言語というよりは、互いにかなり似たプログラミング言語群といえる。同じシリーズのPLCであっても型番が違えば記述方法が異なる、といったこともあるので、プログラムの移植は一筋縄ではいかない。 

ラダー・ロジックは手続き型言語というよりは、ルールベースの言語といえる。ラダー中の「ラング」がルールである。ラング内のリレー各種のデバイス（ルール）は同時に、即時に「実行」される。PLC内部に実装されている場合は、通常はこれらのルールはソフトウェアによってシーケンシャルに（順番に）無限ループで実行される。実行速度が充分に速ければ（通常はミリ秒オーダーである）この同時性、即時性があるといえる。ただし、実際にPLCを使うときは、ラングの実行順序による制限を知っていなければならない場合もある。

## 簡単なラダー・ロジックのプログラム例
この言語は複数の論理の検出（リレー接点）とアクチュエータ（コイル）を組み合わせたものとみなせる。ラングの左側から「真」（`true`の、もしくは「閉じた」）接点を経由して出力側につながる経路がある場合、ラングは`true`であり、出力コイルは真(1)、もしくは`true`を保持することになる。経路がない場合は出力は`false`(0)となり、「コイル」に相当するデバイスは「不活性」な状態になる。この論理とリレー接点の対応は クロード・シャノン の考案によるものである。

ラダー・ロジックは「接点」によって「回路」を「閉じる」あるいは「開く」ことで「コイル」を制御する。
各コイルや接点はPLCのメモリの1ビットの状態に対応する。電気的なリレーと異なり、ラダー・ロジックのプログラムでは各ビットの参照回数に制限はなく、莫大な数の接点を持ったリレーといえる。 

いわゆる「接点」は押しボタンやリミットスイッチといった機器からPLCへの入力を参照することができる。さらに、内部的なメモリのビットの状態や、プログラムのほかの箇所の出力を読み込むこともできる。

普通、各ラングの右端にはコイルを1個配置する。メーカによっては複数のコイルをサポートしている場合もある。

&ndash;(&nbsp;)&ndash;
通常のコイル。ラングが`true`のとき`true`となる。  

&ndash;(&#x29F5;)&ndash;
反転コイル。ラングが`true`のとき`false`となる。

「コイル」（ラングの出力）はPLCに接続された機器を駆動する物理的な出力を表す場合もあるし、プログラムの別の箇所で使う内部的な記憶ビットの場合もある。

## 例

下記の例は、ラダー・ロジックプログラム中の1個のラングがどのように見えるかを示したものである。実際のプログラムでは、これらが何百行も連なることになる。

例

  1. ----[ ]---------|--[ ]--|------( )--
          X          |   Y   |       S
                     |       |
                     |--[ ]--|
                         Z

この例では次のような関数を構成している: 
`S = X AND ( Y OR Z )`

一般的にはラダーは左から右に、上から下に読むようにする。各々の行（ラング）の演算結果は出力コイルに格納され、その結果が後続のステップで入力として扱われることが多いためである。ラダー中に多数の「ラング」がある複雑なシステムでは、演算する順に番号を振るものもある。

  2. ----| |-----------|---| |---|----( )--
          X            |    Y    |     S
                       |         |
                       |---| |---|
                            Z
     ----| |----| |-------------------( )--
          S      X                     T 

`T = X AND S` 　この X は前述の1のものと同じものである。

2は多少複雑にしたシステムである。1行目の演算後、出力コイル(S)がラング2に代入され、さらにその演算結果が出力コイル T に代入される。Tの値は出力デバイス(ブザー、ランプなど）に反映されたり、さらに次のラングに代入される、といった具合である。

このシステムは非常に複雑な論理設計の分析・評価を可能にするものである。

より実用的な回路は下記を参照のこと。

  |                                         |
  |                                         |
  |--][------------][-------------------O---|
  キースイッチ1 キースイッチ2         ドアモータ

この回路には2個のキースイッチがあり、銀行の金庫室のドアのモータを駆動する保安装置として利用できるかもしれない。双方のスイッチの常開接点が閉じたときだけ、ドアを開けるモータに電流が流れる。これは論理積回路になっている。

  |                                         |
  |                            +-------+    |
  |----------------------------+       +----|
  |                            +-------+    |  
  |                         Remote receiver |
  |-----][------------+-----------------O---|
  |   remote unlock   |       lock solenoid |
  |-----][------------+
      interior switch

この回路は架空の車の電子ドアロックをトリガする2つの機構を説明したものである。Remote receiver は常に給電されている。lock solenoid は2つの接点のいずれかが閉じれば作動する。これは論理和回路になっている。

FA機器などでは通常は、モータのオン用には小さめで緑色の「始動」ボタンを、オフ用には大きな赤い「停止」ボタンを使う。

  |      始動       停止         |
  |--+----| |--+----|\|----( )---|
  |  |         |          M始動  |
  |  +----| |--+                 |
  |      M始動                   |
  |                              |
  |-------| |--------------( )---|
  |      M始動            モータ |

このような ラッチ回路はラダー・ロジックでは非常によく使われる。「M始動」は実際にはコイルでは無くPLC内部の記憶ビットとして処理され、「始動」ボタンが放されても始動の状態を維持するために使われる。「**自己保持回路**」とも呼ばれる。

## 特殊命令

PLCメーカは特別な機能を持ったブロックを特殊命令としてラダーロジックの実装に加えている場合がある。特殊命令を母線に接続すると、引数を使った処理を実行できる。
ブロックがこれらの引数を表示できることもある。

  |                                         |
  |                            +-------+    |
  |-----][---------------------+  A    +----|
  | remote unlock              +-------+    |  
  |                         Remote counter  |
  |                                         |
  |                            +-------+    |
  |-----][---------------------+  B    +----|
  | interior unlock            +-------+    |  
  |                        Interior counter |
  |                                         |  
  |                    +--------+           |
  |--------------------+ A + B  +-----------|
                       + →  C  +             
                       +--------+             
                         加算器              

上の例のシステムは、interior unlock と remote unlock のボタンを押した回数をカウントするものである。カウント情報は メモリ A とメモリ B に格納される。メモリ C にはドアが自動開錠された合計回数を保持する。

PLCの特殊命令には様々な種類がある。タイマ、数値演算、比較器、データ検索、文字列処理、PID制御、フィルタなどがある。高機能なPLCでは複数の内部メモリセットの処理や、アドレス計算、例えば物理的なドラムコントローラや有限オートマトンをシミュレートできるものもある。ユーザが自分で特殊命令を定義できるものもある（実際にはサブルーチンやマクロである）。充実した特殊命令のライブラリと高速性により、非常に複雑なオートメーションシステムにもPLCが利用できるようになってきている。

## 制約および次世代の言語
ラダーで書くのに適した制御対象は、インターロックやシーケンス処理といったブール値しか必要としないものである。ラングはプログラムの上から下へ実行されるが、ラング内での実行順序ははっきりと定義されていない場合もある。実行順序が想定と違った場合、予測しない結果をもたらすロジックの「競合」が起こりうる。これを避けるため、複雑なラングはいくつかの等価なラングに分解したほうが良い。

アナログ値や数値演算はラダー・ロジックで記述するのは向いていない。各PLCメーカは独自の記述方法によりこれに対応している。

近年はマイクロプロセッサの進歩により、ラダー・ロジックの代わりにシーケンシャル・ファンクション・チャートやファンクション・ブロック・ダイアグラムといった言語でアプリケーションを記述するケースも出てきた。非常に大規模なPLCではプログラムの一部、もしくは全部をBASIC、C言語をベースにリアルタイムアプリケーション環境に合わせたほかのプログラム言語を利用できるものもある。

## 日本語の呼び方について
ラダー・ロジックはPLCメーカによって呼び方が異なる場合がある。
*ラダー図
*ラダー言語
*シーケンス言語
*ラダー・ダイアグラム
*LD言語

## 関連項目
*プログラマブルロジックコントローラ
*シーケンス制御
*論理回路
*デジタル回路
*ブール論理
*IEC 61131-3
*シーケンシャル・ファンクション・チャート
*ファンクション・ブロック・ダイアグラム
*ストラクチャード・テキスト
*ハードウェア記述言語

## 外部リンク
* "Chapter 6: ladder logic" by Tony R. Kuphaldt （Design Science License）; こちらも参照 "Chapter 10: Multivibrators" （ミラーサイト）
* controlling motors with ladder logic
* multivibrators