ラダーロジックは元々、製造およびプロセス制御で使用されるリレーラックの設計と構築を文書化するための記述方法でした。[ 1 ]リレーラック内の各デバイスは、ラダー図上のシンボルで表され、それらのデバイス間の接続が示されます。さらに、ポンプ、ヒーターなど、リレーラック外部の他のアイテムもラダー図に表示されます。
ラダーロジックは、リレーロジックハードウェアの回路図に基づいたグラフィカルな図でプログラムを表現するプログラミング言語へと進化しました。ラダーロジックは、産業制御アプリケーションで使用されるプログラマブルロジックコントローラ(PLC)用のソフトウェア開発に使用されます。この名前は、この言語のプログラムが、2本の垂直レールとそれらの間に一連の水平な段があるはしごに似ているという観察に基づいています。かつてはラダー図がプログラマブルコントローラプログラムを記録する唯一の方法でしたが、現在ではIEC 61131-3で他の形式が標準化されています。たとえば、グラフィカルなラダーロジック形式の代わりに、 IEC 61131-3規格にはC言語に似た構造化テキストと呼ばれる言語があります。

ラダーロジックは、プロセスや製造工程のシーケンシャル制御が必要なPLCのプログラミングに広く用いられています。ラダーロジックは、シンプルながらも重要な制御システムや、古いハードワイヤードリレー回路の改修に役立ちます。プログラマブルロジックコントローラ(PLC)の高度化に伴い、非常に複雑な自動化システムにも使用されるようになりました。多くの場合、ラダーロジックプログラムは、コンピュータワークステーション上で動作するヒューマンマシンインターフェース(HMI)プログラムと組み合わせて使用されます。
シーケンシャル制御ロジックをラダー図で表現する動機は、工場のエンジニアや技術者が、 FORTRANなどの言語やその他の汎用コンピュータ言語を学ぶための追加のトレーニングなしにソフトウェアを開発できるようにすることでした。開発と保守は、馴染みのあるリレーハードウェアシステムに似ているため簡素化されました。[ 2 ] ラダーロジックの実装には、シーケンシャル実行や制御フロー機能のサポートなどの特性があり、ハードウェアとの類似性がやや不正確になる場合があります。
ラダーロジックは、手続き型言語というよりはルールベース言語と考えることができます。ラダーの「段」はルールを表します。リレーなどの電気機械装置で実装する場合、様々なルールは同時に即座に実行されます。プログラマブルロジックコントローラで実装する場合、ルールは通常、ソフトウェアによって連続ループ(スキャン)で順次実行されます。ループを十分な速度(通常は毎秒何回か)で実行することで、同時かつ即時の実行効果が得られます。プログラマブルコントローラを適切に使用するには、段の実行順序の制限を理解する必要があります。
この言語自体は、論理チェッカー(接点)とアクチュエータ(コイル)間の接続の集合と見なすことができます。ラダー図の左側から出力まで、アサートされた(真または「閉じた」)接点を介して経路が存在する場合、ラダー図は真とみなされ、出力コイルの記憶ビットは1(真)に設定されます。そのような経路が存在しない場合、出力は偽(0)となり、電気機械式リレーになぞらえて「コイル」は「非通電状態」とみなされます。論理命題とリレー接点状態とのこの類似性は、クロード・シャノンによって確立されました。
ラダーロジックは、コイルを制御するために回路を開閉する接点を備えています。各コイルまたは接点は、プログラマブルコントローラのメモリ内の単一ビットの状態に対応します。電気機械式リレーとは異なり、ラダープログラムは単一ビットの状態を何度でも参照できるため、接点数が無限に多いリレーと同等の機能を発揮します。
いわゆる「接点」とは、プッシュボタンやリミットスイッチなどの物理デバイスから、内蔵または外部の入力モジュールを介してプログラマブルコントローラに入力される物理的な(「ハード」な)入力を指す場合もあれば、プログラム内の別の場所で生成される内部ストレージビットの状態を表す場合もある。
ラダー回路の各段には、通常、一番右端にコイルが1つ配置されています。メーカーによっては、1つの段に複数の出力コイルを配置できる場合もあります。
—[ ]—通常は開接点であり、対応するコイルまたはそれを制御する入力が通電されると閉じる。(静止時は開接点。)—[\]—常時閉(「非」)接点。対応するコイルまたはそれを制御する入力が通電されていないときは常に閉じている。(静止時は閉接点。)—( )—通常は非作動状態のコイルで、段が閉じられると作動する。(休止状態では非作動。)—(\)—通常はアクティブ(非アクティブ)コイルで、ラダーが開いているときに常に通電される。(静止時もアクティブ。)「コイル」(ラダーの出力)は、プログラマブルコントローラに接続された何らかのデバイスを動作させる物理的な出力を表す場合もあれば、プログラム内の他の場所で使用される内部記憶ビットを表す場合もある。
これらを思い出すには、チェッカー(接点)を押しボタンの入力、アクチュエータ(コイル)を電球の出力と想像すると良いでしょう。チェッカーまたはアクチュエータ内にスラッシュがある場合は、デバイスが休止状態にあるときのデフォルト状態を示します。
上記により、ドアモーター=キースイッチ1かつキースイッチ2という機能が実現される。
この回路図は、警備員が銀行の金庫室の扉にある電動モーターを作動させるために使用する可能性のある2つのキースイッチを示しています。両方のスイッチの常開接点が閉じると、モーターに電流が流れ、扉が開きます。
上記は、ドアモーター=ドアを閉め、かつ障害物がない、という機能を実現します。
この回路図は、ドアを閉めるプッシュボタンと、閉まるドアの邪魔になるものがあるかどうかを感知する障害物検出器を示しています。プッシュボタンの常開接点が閉じ、障害物検出器の常閉接点(NC)が閉じている(障害物が検出されない)場合、モーターに電流が流れ、ドアが閉じます。
上記は、ロック解除=室内ロック解除または室外ロック解除の機能を実現します。
この回路図は、車のパワードアロックを作動させる2つの要素を示しています。リモコン受信機は常に電源が供給されています。ロック解除ソレノイドは、どちらかの接点が閉じられたときに電源が供給されます。
一般的な産業用ラッチ式スタート/ストップロジックでは、モーターコンタクタをオンにするための「スタート」ボタンと、コンタクタをオフにするための「ストップ」ボタンがあります。
「スタート」ボタンが押されると、「ストップ」ボタンのNC接点を介して入力が真になります。「実行」入力が真になると、「スタート」NO接点と並列に接続されたシールイン「実行」NO接点が閉じ、入力ロジックが真(ラッチ状態)に維持されます。回路がラッチされた後、「ストップ」ボタンを押すと、そのNC接点が開き、結果として入力が偽になります。すると「実行」NO接点が開き、回路ロジックは非アクティブ状態に戻ります。
上記は、Run = (Start OR Run) AND ( NOT Stop)という機能を実現します。
このラッチ構成は、ラダーロジックでよく用いられる手法です。シールインロジックとも呼ばれます。ラッチを理解する鍵は、「スタート」スイッチがモーメンタリスイッチであること(ユーザーがボタンを離すと、スイッチは再び開きます)を認識することです。「ラン」ソレノイドが作動するとすぐに、「ラン」NO接点が閉じ、ソレノイドがラッチされます。そのため、「スタート」スイッチが開いても効果はありません。
安全上の理由から、緊急停止スイッチ(「ES」)は「スタート」スイッチと直列に配線されている場合があり、リレーのロジックはこれを反映する必要があります。
なお、安全性を重視する場合、停止および緊急停止用の物理接点は、ボタンが押されていないときに PLC に HIGH (真) の入力が与えられるように配線されるため、PLC ロジックはそれらの場合に反転する必要があります。この場合、ラダー図は次のようになります。[ 3 ]
以下は、ラダーロジックプログラムにおける2つのラダー(段)の例です。実際のアプリケーションでは、数百、あるいは数千ものラダーが存在する場合があります。
一般的に、複雑なラダーロジックは左から右、上から下の順に「読み取られます」。各行(またはラング)が評価される際、そのラングの出力コイルが次のラダー段への入力として供給されます。複雑なシステムでは、ラダー上に多数の「ラング」が存在し、それらは評価順に番号が付けられます。
これは、ラダー図2におけるやや複雑なシステムを表しています。最初の行が評価された後、出力コイル「A/C」がラダー図2に入力され、そこで評価が行われます。そして、出力コイル「Cooling」は、出力デバイス「Compressor」またはラダー図のラダー図3に入力されます。このシステムにより、非常に複雑なロジック設計を分解して評価することが可能になります。
PLCメーカーは、ラダーロジック実装に特殊ブロックとして追加機能を追加できます。特殊ブロックに電源が投入されると、あらかじめ定められた引数に基づいてコードが実行されます。これらの引数は、特殊ブロック内に表示することも可能です。
この例では、システムは車内およびリモートのロック解除ボタンが押された回数をカウントします。この情報はメモリ位置AとBに保存されます。メモリ位置Cには、ドアが電子的にロック解除された合計回数が格納されます。
PLCには、多くの種類の特殊ブロックがあります。これらには、タイマー、算術演算子および比較演算子、テーブル参照、テキスト処理、PID制御、フィルタリング機能などが含まれます。より高性能なPLCは、内部メモリの複数の位置に対して動作し、アドレス範囲に対して演算を実行できます。例えば、物理的なシーケンシャルドラムコントローラや有限状態機械をシミュレートすることが可能です。場合によっては、ユーザーが独自の特殊ブロックを定義することもできます。これは実質的にサブルーチンまたはマクロに相当します。豊富な特殊ブロックライブラリと高速実行により、PLCは非常に複雑な自動化システムの実装に利用できるようになりました。
ラダー記法は、バイナリ変数のみが必要で、バイナリ変数の連動と順序付けが主な制御問題となる制御問題に最適です。すべての並列プログラミング言語と同様に、操作の順序は未定義または不明瞭な場合があり、論理競合状態が発生して予期しない結果が生じる可能性があります。この問題を回避するには、複雑なラダーをいくつかのより単純なステップに分割するのが最善です。一部のメーカーは、ラダーの実行順序を明示的かつ完全に定義することでこの問題を回避していますが、プログラマーは結果として生じる複雑な意味を完全に理解するのに苦労する可能性があります。
アナログ量や算術演算はラダーロジックでは表現しにくく、メーカーごとに表記法の拡張方法が異なります。配列やループのサポートは通常限られており、他の言語ではインデックス付き変数を使用するようなケースを表現するために、コードが重複することがよくあります。
マイクロプロセッサの性能向上に伴い、シーケンシャルファンクションチャートやファンクションブロック図といった表記法が、一部の限定的な用途においてラダーロジックの代替として用いられるようになった。最新のPLCの中には、 BASIC、C、あるいはリアルタイムアプリケーション環境に適したバインディングを備えた他のプログラミング言語に類似した方言で、プログラミングの全部または一部を実行するものもある。
2019年、IEEE Spectrumは、人気のあるプログラミング言語のリストで、ラダーロジックを52のうち50位にランク付けしました。[ 4 ]
ラダーロジックは、スイッチまたはリレーの接点を使用してブール式を実装します。過去には、ラダーロジックは個別のリレーを使用して実現されており、リレーロジックと呼ばれることもありました。