本連載では、FA現場で戦うための実務特化型プログラミングを解説します。
「スイッチを押したら、コンベアを回し続ける」。
このように設備をONさせ続ける(状態を保持する)ための命令として、PLCには大きく分けて2つのアプローチが用意されています。一つはOUT命令を使った「自己保持回路」、もう一つは「SET(セット) / RST(リセット)命令」です。
ラダーを学び始めたばかりの若手エンジニアは、ここで必ずと言っていいほど以下の壁にぶつかります。
- 「機能が同じなら、自分が書きやすい方を選べばいいのでは?」
- 「結局、どっちを使えばいいの?」
実務経験9年の現役電気設計エンジニアとして、結論から申し上げます。 「実は、PLCの仕様として『絶対にこう使い分けろ』という明確なルールは存在しません」。
どちらを使っても設備は動きますし、エラーになるわけでもありません。
しかし、「どっちでも動くから」と安易にSET/RST命令を使ってしまうと、後で痛い目を見る危険な罠が潜んでいます。
本記事を読むことで、なぜ現場で自己保持が基本とされるのかという設計思想が腹に落ち、上司や客先にコードを突っ込まれても論理的に反論できる「真の設計力」が身につきます。
【本連載の前提】
本記事内のプログラム例や命令語は、国内FA業界で最もシェアの高い「三菱電機製PLC(MELSEC)」をベースに解説しています。しかし、ここで解説する「なぜその命令が必要なのか」「現場でどう使うのか」という設計思想は、オムロンやキーエンスなど、すべてのメーカーのPLCで共通して使える普遍的な技術です。メーカーの違いを恐れず、本質的な「設計の根幹」を身につけてください。
SET / RST命令の基本動作と、OUT命令との互換性
まずは、両者の基本的な動作原理を比較してみましょう。
【基礎のおさらい:自己保持(OUT命令)】
出力リレー(Y)や内部リレー(M)自身のa接点を並列に組み、自分自身で電路を維持する回路です。
条件が崩れれば(例えば停止ボタンが押されれば)、即座にOFFになります。

【今回の新しい武器:SET / RST命令】
一度「SET命令」の実行条件が成立すると、そのデバイスは強制的にONになります。起動スイッチから手を離しても、解除の条件を満たして「RST命令」が実行されるまで、意地でもON状態を維持し続けるのが特徴です。

実は、PLCの演算上、「Aボタンで起動し、Bボタンで停止する」という全く同じ動作を、どちらの命令を使っても完璧に再現することができます。
システム上、「物理出力(Y)にはOUTを使わなければならない」といった明確な制限はありません。機能としては完全互換と言えます。
しかし、上の2つの図を見比べてみてください。機能は同じでも、プログラムの「見た目(構造)」が全く違うことにお気づきでしょうか。
なぜ現場では「OUT命令(自己保持)」が基本とされるのか?
機能が同じであるにもかかわらず、なぜ現場では「基本はOUT命令を使え」と口酸っぱく指導されるのでしょうか。
それは、プログラムの「構造(見た目の美しさと安全性)」が決定的に違うからです。
■ OUT命令の強み:一極集中と絶対的な関所
自己保持回路の最大の強みは、「起動する条件」と「停止する条件(他シリンダとの干渉よけや、搬送先の満載エラーなどのインターロック)」が、1つのブロック(同じ行)にすべてまとまっていることです。
パッと見ただけで「なぜ動かないのか」「何が起きたら止まるのか」が瞬時にわかります。そして条件が崩れれば自動的にOFFになるため、デバッグが極めて早く、バグが生まれにくい構造です。
■ SET/RSTの弱み:分離による「条件の迷子」
一方のSET/RST命令は、「SETする行」と「RSTする行」を、プログラム上の何百行も離れた場所にバラバラに書くことができてしまいます。
もし、「設備異常が発生した時」の「RST」を別の場所に書き忘れたらどうなるでしょうか。
異常が起きているのにコンベアが止まらない、という致命的なバグに直結します。条件が迷子になりやすく、他人の書いたラダーを解読する際に地獄を見る最大の原因となります。
【結論】状態保持の基本は「OUT命令(自己保持)」で統一せよ
これらの構造的な違いから、シリンダの単独動作やコンベアの駆動といった一般的な「状態保持」においては、OUT命令(自己保持)を基本として設計することをおすすめします。
SET/RST命令は「簡単に書ける便利な魔法」ではなく、「条件が迷子になるリスクを伴う劇薬」だと認識してください。
「安全に停止する」「誰が見ても一目で条件がわかる」「デバッグが早い」。これこそが、設計の基本として自己保持回路が強く推奨される最大の理由なのです。
SET / RSTで作る「順序制御」の罠と回避策
「でも、シリンダがA→B→Cの順番で動くような順序制御(ステップ動作)なら、SET/RSTでフラグをバトンパスした方が綺麗に書けるのでは?」
そう考えたあなたは勘が良いですが、そこには初心者が必ず陥る「致命的な罠」が潜んでいます。
【初心者の失敗例:その都度SET/RSTする「バケツリレー」】
以下のラダーを見てください。「工程1が完了したら、工程2(M2)をSETして、同時に工程1(M1)をRSTする」という書き方です。

現在地が1つに絞られて綺麗に見えるこの組み方ですが、実務では極めて危険です。
もし、工程2(M2)や工程3(M3)の実行中に、作業者の誤操作などで「再び起動スイッチ(X0)が押されたら」どうなるでしょうか。
PLC内部で、実行中の工程フラグに加えて再び工程1(M1)がSETされてしまい、「M1とM3が同時にONになる(二重起動)」という論理破綻が起き、シリンダ同士が衝突するなどの設備クラッシュを引き起こします。
もちろん、「M1とM3が同時にONになっても問題ない(あるいは意図してその動作にしている)」のであれば、このバケツリレー方式でも構いません。
【実務での回避策:最後までONを維持し、一括でRSTする】
しかし、「そこまでリスクを意図しきれていない」という若手エンジニアには、以下のような組み方を提案します。

- 「M1をSET」→「M2をSET」→「M3をSET」
工程が進むごとに前のフラグを消さず、次々と立てたまま(ONを維持したまま)進めます。
これなら、途中で「M1とM3が両方ONになっている状態」が正常なシーケンスです。万が一、途中で再び起動スイッチ(X0)が押されてM1がSETされても、すでにONになっているため状態は何も変わらず、論理破綻が起きません。
そして、全工程が完了した瞬間に「一括リセット命令(画像ではBKRST命令を使用)」で一掃し、初期状態に戻します。
結局のところ、SET/RST命令は「便利そうに見えて、実は意図しない動作を引き起こしやすい(リスク管理が必要な)じゃじゃ馬」なのです。だからこそ、そのリスクを知らない若手が雰囲気で使うと大事故に繋がるため、第2章で解説した通り、現場では「基本は、安全で条件が一目でわかるOUT命令(自己保持)を使え」と指導されるのです。
すべて自己保持で組めるのに、なぜ「SET/RST」が使われることがあるのか?
「リスクがあるなら、最初から全部自己保持(OUT命令)で作ればいいじゃないか」と思うかもしれません。実際その通りなのですが、それでも過去から現在に至るまでSET/RST命令が現場で使われ続けているのには、実務上の明確な理由があります。
それは、ラダープログラムにおける絶対の掟「2重コイルの回避」という壁です。
※「2重コイル」とは、同じ出力デバイスをプログラム内の2箇所以上に書いてしまうことです。PLCの演算原則により、後の行で書かれた条件で上書きされてしまい、意図通りに動かなくなる致命的なバグとなります。スキャンの実行順序や、あえて2重コイルを使う裏技については、今後の連載で詳しく解説します
例えば、設備全体から発生する50個のアラームを、1つの「異常まとめフラグ」としてONにしたい場合を考えてみてください。 自己保持(OUT命令)を使おうとすると、1箇所に50個の条件を並列に繋いだ巨大な回路を作らなければ、2重コイルになってしまいます。
しかし、SET命令には「プログラム上の色々な場所に複数回書いても、論理が上書きされずにフラグを立てられる」という特性があります。そのため、異常が発生したそれぞれの処理の場所で「SET 異常フラグ」と分散して記述する、といった使い方をされることがあります。
【現場のリアル:分散させた条件は「ツール」で厳重に管理する】
しかし、あちこちにSETが散らばる書き方は、第2章で述べた通り「条件の迷子」を生み出す原因になります。
そのため、実務で意図してSET/RSTを分散させる場合、エンジニアは決して書きっぱなしにはしません。

プログラム全体を見渡すために「デバイス検索(クロスリファレンス)」を活用するのはもちろんのこと、例えばGX Worksのオプション設定で「2重コイルをチェックする」を有効にしておく。あるいは、ツールから「プログラムチェック機能」を実行することで、分散して書かれたSETの2重コイルも確実に検出させることが可能です。
こうした機能を駆使し、「どこに散らばっているか」をツールに炙り出させて厳重に管理しているのです。
つまり、SET/RSTは「分散して書けるから便利」と無闇に散らかして良いものではありません。ツールを使って条件の迷子を防ぐ自己管理能力があって初めて、現場で使える命令なのです。
【まとめ】SET/RSTは「劇薬」。基本はOUT命令で安全な設計を
いかがだったでしょうか。 同じ「状態を保持する」という機能であっても、OUT命令とSET/RST命令では、プログラムの構造やリスクが全く異なることがお分かりいただけたかと思います。
本記事のポイントをまとめます。
- 基本は絶対に「OUT命令」: 起動と停止の条件が一箇所に集中するため、安全でバグが起きにくく、圧倒的に読みやすい。
- SET/RSTの罠: 条件が分散して「迷子」になりやすく、順序制御で安易に使うと二重起動による設備クラッシュなどの致命的な論理破綻を招く。
- SET/RSTを使う時の鉄則: デバイス検索やプログラムチェック機能を駆使し、ツールを使って自分で厳重に管理(自己管理)できる場合にのみ使用する。
ラダープログラムは、「とりあえず設備が動けばそれでいい」というものではありません。
数年後に他人が見ても、あるいは数ヶ月後に自分が見直しても、「なぜ動くのか」「なぜ止まるのか」が一目でわかる安全なコードを書くこと。それこそが、現場で通用する電気設計エンジニアへの第一歩です。
最初から完璧なプログラムを書ける人はいません。まずは「基本は自己保持(OUT)」という原則を胸に刻み、明日からの実務やプログラム作成にぜひ活かしてみてください。
※本記事で使用している画面は、三菱電機株式会社「GX Works2」の操作画面です。
※GX Works2、MELSECは、三菱電機株式会社の登録商標です。
※本記事で紹介しているプログラムや回路図は、技術解説のためのサンプルです。実機での動作を保証するものではありません。
※実際に使用する際は、十分な検証を行った上で、安全に配慮して運用してください。