プログラマブルロジックコントローラ（、PLC）は、リレー回路の代替装置として開発された制御装置である。プログラマブルコントローラとも呼ばれ、一般的にシーケンサ（三菱電機の商品名であるが登録商標ではない）とも呼ばれる。

 概要 
プログラマブルロジックコントローラは、リレー回路の代替装置として開発された制御装置である。工場などの自動機械の制御に使われるほか、エレベーター、自動ドア、ボイラー、テーマパークの各種アトラクション（遊具）など、身近な機械の制御にも使用されている。

PLCの取り扱いは情報処理技術の分野というよりは、どちらかというと電気工事士などの電気技術者の領域である。

 PLCのしくみ 

 PLCはステートマシン 
PLCは小型のコンピュータの一種で、中枢には他のコンピュータと同じようにマイクロプロセッサが使われ、ソフトウェアで動作する点も同じであるが、PLCの動作の仕方は他のコンピュータとは異なる。通常のコンピュータがチューリングマシンを原型とするノイマン型の動作モデルを採用しているのに対して、PLCはリレー回路を原型とするステートマシンを動作モデルとしている。したがってPLCのプログラムは、リレー回路を記号化したプログラミング言語が使われる。そのプログラムはリレー回路を模した図に変換することが可能である。その図をラダー図と言う。

ラダー図は、はしごのようにみえることから由来するが、プログラム的には、すべての入出力がラッチされることで入出力の同時性がプログラム上（内部ファームウエア上）確保されているにすぎない。

一般の演算装置同様、インデックスレジスタ等の間接指定も容易にできることから、一般のアセンブリ言語を習得したものなら、ラダー回路は、その記述方法が違うだけで容易に習得可能である。

なお演算結果を内部メモリ領域に格納するにあたって、メーカによって、初期設定が電源喪失後、揮発する設定になっている場合があり、不揮発領域の再定義が必要なメーカも存在する（I/Oにたいする基本設計が異なるため）

PLCのプログラムは電気回路を記号化したものなので、電気技術者の分野となる。PLCは巨大な機械装置や人を運ぶ装置を制御することが多く、きわめて高い安全性と安定性が求められるため、特に安全性が要求される分野への使用にあたって、その仕様については、各メーカとの協議が必要である。PLCのプログラムは、最近ではバッテリーを使わないフラッシュメモリが使われることが多い。以前はバッテリーバックアップされたメモリが使用されることが多かった。バブルメモリという特殊なメモリが使われる場合もある。実際のリレー回路と異なる点としては、PLCは前回値と今回値を使用出来る事である。リレー回路は電流が流れるだけなので電源喪失後の信号開後の保持には機械的ラッチリレー等が必要になる。

豊富な入出力
PLCの特徴のひとつとして、豊富な入出力機能がある。入力側はリミットスイッチ（移動する装置や架台の位置を検出するセンサ）、センサ、温度計、複雑な位置決めシステムから得られる位置情報などを読み込む。場合によってはマシンビジョンも使用する。出力側はモーター、空気シリンダー、液圧シリンダー、振動板、リレー、ソレノイドを駆動する。入出力機構は内蔵されており、大規模な制御をする場合はPLC同士をネットワークでつなぎ、I/Oモジュールを接続して使用する。拡張モジュールの使用に当たって、パソコンのようにドライバをインストールする必要は無い。電子ブロックのようなイメージでモジュールを増設することができる。

かっては、PLC本体とベースユニットの構成にチャンネルユニットを増設していく形だったが、最近は、ベースユニットがない形状が一般的になっている。

これは、当初のチャンネルユニットのI/O概念がパラレルI/Oが主体だったものが、多機能化によりシリアルI/Oでないと拡張性を維持できなくなったことに由来する。物理的I/Oアドレスは従来のパラレル用ベースユニットの束縛がなくなり、I/Oインターフェースのアクセス速度などの制限はあるものの、ほぼ無限大に拡張できる基本が確立された。

そのことにより、メーカにより異なるが、多機能入出力ユニットについては、ラダー用ソフトでその入出力領域について再定義しないとPLC側が認識し得ないことが多々ある。

元々はリレー回路
PLC は、従来の自動化システムで使われていた数百・数千のリレーやカムタイマー（メカニカルタイマー）を置き換える安価な代替品として発明されたものである。PLCひとつで数千のリレーを置き換えるようプログラムすることができる。初めに登場した時期は主に自動車産業の工場で使われ、生産設備の制御盤の配線を変更する代わりにPLCのソフトウェアの変更でモデルチェンジに対応できるようにした。

ソフトはラダー

一般的なPLCはソフトウェアとしてラダー論理というものを使う。ラダー論理というものはリレー回路を記号化したもので、「ラダー図」という梯子のような図形で表す。電気技術者は回路図の問題を解くようにラダー論理を使い、PLCのプログラムを図面で扱うことができる。この方法が選ばれた理由は、リレー回路をシミュレートすることで、普及を促進させるものであった。

現在では一般のコンピュータと差の少ないPLCも使われるようになった。IEC 61131-3 標準規格によれば、PLCを構造化プログラミング言語（ST言語）でプログラムすることも可能で、論理基本操作でプログラムすることもできる。シーケンシャル・ファンクション・チャート（SFC言語）と呼ばれるグラフィカルなプログラミング表記法を用いることができるプログラマブルコントローラもある。

プログラム目的により、ラダーで記述することのできない拡張命令群が主体となることもあるが、規模の大小にかかわらず計装系（位置制御、速度制御を含む）や文字などの扱いのないリレーロジックでのみの制御では、ラダー図のみのプログラムでも十分コスト及びスペースメリットが出てくるものである。

 スキャンタイム 
PLCプログラムは一般に制御対象システムが動作中は反復的に実行されている。物理的な入力点の状態はプロセッサがアクセス可能なメモリ領域にコピーされ、その領域を「I/Oイメージテーブル」などと呼ぶ。プログラムはそれを入力として最初から最後まで動作する。これには若干の時間がかかり、その出力状態に従ってI/Oイメージテーブルを更新する。プログラムが小さくプロセッサが高速なら、このスキャンにかかる時間は数ミリ秒で済むが、大きなプログラムではもっと時間がかかる（例えば100ミリ秒）。スキャン時間が長すぎると、工程の状況へのPLCの反応が遅くなり、使いものにならなくなる。

PLCの発展に伴い、ラダーの実行順序を変更する技法やサブルーチンの実装が行われてきた。それによってプログラミングが単純化され、スキャンタイム短縮にもつながっている。例えば、制御対象の機械のセットアップにのみ使われるプログラムの部分は、通常運用時のスキャンには含まれないよう分離することができる。

 デジタル信号とアナログ信号 
PLCで扱う信号はデジタル信号である。

デジタル（または離散）信号とは単純に ON と OFF （1 と 0、真と偽）の信号だけである。押しボタン、リミットスイッチ、光スイッチなどがデジタル信号を発生するデバイスである。デジタル信号は電圧か電流で判断され、ある閾値でONかOFFかが決定される。例えば 24VDC の入出力を持つPLCでは、22VDC以上をONと判断し、2VDC以下をOFFと判断する。電流入力の方が電圧入力よりも電気的ノイズに強い。

アナログ信号はボリューム制御のようなものであり、一般にゼロからある最大値までの値を示す。アナログ信号には電圧や電流が使われる。アナログ信号はADコンバータなど呼ばれるPLCのI/Oモジュールによって整数値に変換されPLCに取り込まれる。逆にデジタル信号をアナログ信号に変換するモジュールをDAコンバータなどという。

アナログ信号は連続した無限個の数値だが、デジタル信号は有限個の数値しか使えない。そのため、アナログ信号の取込み範囲と精度は、デバイス側の精度とPLC側の信号線の割当てのバランスで決定される。例えば、0〜24VDCの範囲のアナログ信号があり、PLCで8本の信号線がこの入力に割り当てられたとすると、0Vはデジタルで0、24Vはデジタルで255となるだろう。精度は24/256となり約0.1V以下の変化は無視される。25VDCの入力があった場合にどう解釈されるかはPLCに依存する（24Vのままだったり、エラーとして処理したりする）。

 例：デジタルとアナログ 
例としてタンクに水を入れる装置を考えてみよう。タンク内の水は別のシステムが必要に応じてくみ上げて使用する。ここで注目するシステムはタンク内の水を一定量に保つシステムである。

デジタル信号だけを使った場合、PLCは、入力としてタンクが空かどうかを示すスイッチと満タンかどうかを示すスイッチを持つ。また、出力としてはタンクに水を入れるバルブを開閉する出力信号をひとつ必要とする。

どちらのスイッチもOFFか「タンクが空」のスイッチだけがONの場合、PLCはバルブを開けて水を入れる。「タンクが満タン」のスイッチだけがONになったらバルブを閉じる。両方のスイッチがONになったら、スイッチの少なくとも一方が故障したと判断できる。満タンかどうかのスイッチだけで判断しないのは、少しずつ水を使うような状況でスイッチがひとつだけだと頻繁にバルブの開閉が行われて機械が消耗するのを避けるためである（そのような状態をフラッターと呼ぶ）。

アナログシステムではタンクの重さを測定する重量計と流量を制御できるバルブを使う。PLCは PID フィードバックループ（後述）を使ってバルブを制御する。重量計はPLCのアナログ入力に接続され、バルブはPLCのアナログ出力に接続される。このシステムではタンク内の水量が少ないほどバルブを大きく開けて素早く水を満タンにしようとする。水量が素早く減っている場合、バルブも大きく開けられる。ほんの少しだけ水が使われている場合、バルブは少しだけ開けられ、ゆっくりとタンクに水を入れる。

このシステムでバルブのフラッター状態を防ぐために、こういった制御装置では不感帯（デッドバンド）が設けられる。つまり、水の減り具合の変化がある閾値より下ならバルブを開閉しないようにする。そうすることでバルブの動作が最適化され、消耗を防ぐことができる。

実際のシステムは両方を結合して使用するかもしれない。デジタル信号を水があふれるのを防ぐために使用し、水量をなるべく一定に保つためにアナログ信号を使う。さらにバックアップや保守状態を考慮することで実際のシステムは複雑化していく。

 PLC の形態による I/O 能力：モジュール、ラック、P2P 
モジュール型のPLCは組み込まれる入出力の数が限られている。一般に、基本モデルの入出力数で足りなければ拡張機構を使う。

ラック型のPLCはプロセッサモジュールと分離したI/Oモジュールになっていることが多い。場合によってはI/Oモジュールが多数のラックから構成されることもある。その場合、数千の（離散あるいはアナログの）入出力を持つ。プロセッサとI/Oモジュールの間は高速シリアルリンクで接続されるので、離れていてもよく、大規模工場で配線コストを低減させるのに役立つ。

さらに大規模な入出力システムが必要な場合、プロセッサ間をP2Pの通信システムで接続する。これにより、大きなシステムを分割して制御し、かつ全体として通信して協調動作させることができる。この通信リンクはヒューマンマシンインタフェース機器（キーパッドやPC）を接続するのにも使用可能である。

一般に入力数は出力数の三倍必要といわれている。センサーなどの故障に備えて入力を冗長化することが多いためである。

 プログラミング 
PLCのプログラムはパーソナルコンピュータ上の特別なアプリケーションで作成し、PLCにダウンロードする。単純なものは現場で作ることも多い。以前はプログラム専用のハードウェアを使用していたがノートパソコン等の発達によりほとんど見られなくなった。プログラムはPLC毎にバッテリーバックアップされたRAMや不揮発性のメモリ（フラッシュメモリ）に格納される。ひとつのPLCで数千のリレーを置換するようプログラムすることもできる。

初期のPLCは電気技術者が使うことを想定して設計され、彼らは業務で使用するうちにPLCのプログラミングを学んだ。専用のプログラミング用パネルや端末があり、PLCプログラムの各種論理要素に対応したファンクションキーが並んでいた。その後PLCはリレー回路の配線に対応するようになっているラダー論理でプログラムされるようになった。最近のPLCはラダー論理だけでなくBASICやC言語を使ってプログラムすることもできる。また、状態遷移図に基づいてPLCのプログラミングをする方式もある。ただし、高級言語で複雑なプログラムを組む際は、ライブラリ（サブルーチン）の内容を理解していないと、本来組み込むべき引数などの定義や多重化の限度数などの誤りを認識できず、ライブラリーから帰ってくる結果を利用する分岐プロセスで重大なエラーを起こすことがある。（通常はコンパイル時にエラーが発生し作成者に注意を促すが、スタックポインターなどの内容は、プログラム作成時、意識しないことが多く、特に注意が必要である）

最近では、国際標準規格 IEC 61131-3 が一般的になっている。それによると、5種類のプログラミング言語が定義されている。FBD（ファンクション・ブロック・ダイアグラム）・LD（ラダー図）・ST（ストラクチャード・テキスト、Pascal型の言語）・IL（命令リスト、アセンブリ言語風）そしてSFC（Sequential Function Chart；シーケンシャル・ファンクション・チャート）である。これらの技法は処理の論理構成を明確にするものである。

 PID ループ 
PLC には単一変数汎用工業フィードバックループ、つまりPIDコントローラ（比例（proportional）, 積分（integral）, 微分（derivative）ループ）が含まれることもある。
PIDループは工業プロセス制御では一般的な方式である。PIDループは水泳用プールのpH値の制御にも使われる。

 ユーザインタフェース 
PLC は場合によっては、設定変更や警報表示や定時制御のために人間とやりとりする必要がある。ヒューマンマシンインタフェースがそのために使われる。単純なシステムではボタンとライトでやりとりする。テキスト表示やグラフィック表示の可能なタッチスクリーン(プログラマブル表示器)も使われることが多い。最新のPLCではネットワーク経由で他のシステム（例えば、SCADAシステムやWebブラウザが動作しているコンピュータ）とやりとりすることができる。

 歴史 
PLC はアメリカ自動車産業での必要性から開発されたものである。PLC が登場する以前、自動車製造における制御回路、シーケンス回路、連動回路はリレーやタイマーや独立した閉ループ・コントローラを使って構成されていた。そのような装置を毎年のようにあるモデルチェンジの度に変更・修正するのは非常に時間と手間のかかるプロセスである。というのもリレー回路の配線を変更するのは熟練した技術者でなければ出来なかったからである。

デジタルコンピュータが登場すると、汎用のプログラム可能デバイスとして製造工程の制御にも応用する動きが見られるようになった。初期のコンピュータはプログラミングの専門家と、温度や周辺の空気のきれいさや電力品質などの面で厳格な環境管理を必要としていた。産業用制御コンピュータにはいくつかの属性が求められる。まず、製造現場の環境で動作可能でなければならない。また、容易に拡張可能な方法で離散的入出力をサポートする必要がある。使用するのに何年もの訓練を要するようでは、使いものにならない。動作状況を監視できるようになっている必要がある。制御するのに十分な反応速度も要求されるが、工程の性質によって必要とされる反応速度は異なる。

1968年、ゼネラルモータースのオートマチックトランスミッション製造部門（Hydramatic）はリレーシステムを電子的に置換するための要求仕様を作成した。契約を取り付けたのはマサチューセッツ州ベッドフォードのBedford Associates社である。最初のPLCは、Bedford Associates社の84番目のプロジェクトであったため、「084」と名づけられた。Bedford Associates社はPLCの開発・製造・販売・保守を行うModicon社を設立した。このプロジェクトに関わった人々の中に「PLCの父」と呼ばれるもいた。Modicon社は開発製品を“Modicon084”として発売したが、信号の流れがパネルによって把握できるように工夫され、信号の逆追跡が可能になった画期的な製品であった。また運転中でも一部のコイルを強制ON、OFF できることも特徴で、（（このようなことが必要な場合、現在のＰＬＣは、プログラムモニターモードで確認訂正ができるようになっている（フィールド重視は、特性上必要不可欠のものであり、運転中のオンラインエディットも、もはや普通になっている））今では普通である。

内部は16ビットのミニコンであり、インタプリタによってオンラインで命令を実行するものであった。これは、タイマ、カウンタプリンタがついており、電話回線による故障診断が可能など当時としては、完成度の高い製品であった。

Modicon社は1977年、Gould Electronics に売却され、後にドイツのAEGが取得。その後フランスのシュナイダーエレクトリックがオーナーとなり、現在に至っている。

最初のモデル084はマサチューセッツ州ノースアンドーヴァーにあるModicon本社に展示されている。同マシンは20年弱ずっと使われ続け退役した後にGMから寄贈されたものである。

今後、PLCの進化は、産業界に革命的な変化をもたらす可能性を秘めています。IoT、AI、クラウドコンピューティング、エッジコンピューティングなどの先端技術との融合により、PLCは単なる制御装置から、産業のデジタル化とスマート化を牽引する中核技術へと進化しつつあります。