【PLC】MC/MCR命令の使い方〜手動/自動の切り替えとブロック制御の極意〜

  • URLをコピーしました!
\ 迷子にならないための地図 /

未経験から一人前への
「最短ルート」公開中

独学で「何から勉強すれば…?」と悩んでいませんか?
現場で戦える知識を、体系的にまとめました。

FA電気設計ロードマップを見る

【実践プログラミング編:第4回】

本連載では、FA現場で戦うための実務特化型プログラミングを解説します。

  • すべての出力回路に「自動運転中」のa接点をコピペして回っている
  • 後から追加したシリンダに条件を入れ忘れ、手動モードなのに自動の回路が暴走した

実務経験9年の現役電気設計エンジニアとして断言します。 その「ちまちましたモード条件の継ぎ足し」は、プログラムを肥大化させるだけでなく、いずれ必ず意図しない設備の誤作動を引き起こします。

複雑な動作条件を個別の出力コイルに一つずつ書く危険な手法から脱却し、「ここは自動の時だけ動くエリア」「ここは手動の時だけ動くエリア」と、プログラムを丸ごと一斉に切り替える必須命令。それが「MC/MCR(マスターコントロール)」です。

本記事を読めば、プログラムの美しさ(可読性)と確実なモード切り替えを両立させる「実務に耐えうるブロック制御」が身につきます。
ただし、MC命令でブロックを切り離した際、中にいる「自己保持(OUT)」と「SET命令」では振る舞いが全く異なります。 この罠を知らずに使うとモード切替時に設備が暴走するため、その恐ろしい仕様も徹底解説します。

【本連載の前提】
本記事内のプログラム例や命令語は、国内FA業界で最もシェアの高い「三菱電機製PLC(MELSEC)」をベースに解説しています。しかし、ここで解説する「なぜその命令が必要なのか」「現場でどう使うのか」という設計思想は、オムロン(レガシー機)やキーエンスなど、多くのメーカーのPLCで共通して使える普遍的な技術です。メーカーの違いを恐れず、本質的な「設計の根幹」を身につけてください。

目次

「自動中」のコピペ地獄がバグを生む(初心者の罠)

PLCのラダーを組み始めた若手が、設備の「手動動作」と「自動動作」を書き分ける時、ほとんどの方がやってしまう「危険な書き方」があります。 それが、すべての出力コイルの手前に、直接「自動運転中」や「手動運転中」の条件を書き込んでしまう手法です。

「とりあえず直列に並べる」というバグを生みやすい手法

例えば、自動運転中だけ動作させたいシリンダやモーターがあったとします。初心者はこれを、以下のように記述します。

【危険な回路:個別のモード条件】
[ M10 (自動中) ] ── [ M100 (シリンダ前進条件) ] ──── ( Y10 )
[ M10 (自動中) ] ── [ M101 (モーター回転条件) ] ──── ( Y11 )

たしかに、これでも設備は仕様通りに、自動モードの時だけ動きます。 しかし、FAの現場において「一度書いたプログラムが永遠に変更されない」ことなどあり得ません。問題は、設備立ち上げの終盤に「自動で動く機構をもう1つ追加してほしい」と仕様変更が入った時に起きます。

コピペの「忘れ」が即、設備の誤作動に直結する

疲労困憊の現場で、焦ってY12の回路を追加した時、もしあなたが「M10(自動中)」のコピペを忘れたらどうなるでしょうか。

【仕様変更による致命的なバグの発生】
[ M10 (自動中) ] ── [ M100 (前進条件) ] ──── ( Y10 )
[ M10 (自動中) ] ── [ M101 (回転条件) ] ──── ( Y11 )

[ M102 (追加シリンダの前進条件) ] ──── ( Y12 )  ←※自動中の条件入れ忘れ!

もしM102が何らかの理由でONになった場合、設備が「手動モード」で待機しているにもかかわらず、追加したY12だけが作業者の意図を無視して突然動き出します。

モード条件を個別の回路に分散させる設計は、「人間の注意力(コピペ忘れがないか)」に依存している時点で、現場で通用する設計とは呼べません。 「自動」と「手動」の切り替えは、個人の気合いで管理するものではなく、「プログラムの構造(ブロック)」で完全に分断しなければならないのです。

MC/MCR命令の基本(魔法のメインスイッチ)

個別の回路に条件をコピペする「点」の制御から、プログラムを「面(ブロック)」で制圧する制御へ。それを実現するのがマスターコントロール(MC/MCR)命令です。

概念は非常にシンプルです。特定のプログラム区間に対する「大元のブレーカー(メインスイッチ)」だと考えてください。

  • MC(オン): ブレーカーを入れる(ブロックの開始)
  • MCR(オフ): ブレーカーの範囲はここまで(ブロックの終了)

基本的な書き方

三菱PLC(GX Works)の場合、以下のように記述します。

[ M10 (自動中) ] ──── [ MC N0 M100 ]  ←※ブレーカーONの条件

( --- ここから下の回路は、M10がONの時だけ電気が通る --- )
[ X20 (前進端) ] ──── ( Y10 シリンダ前進 )
[ X21 (下降端) ] ──── ( Y11 シリンダ下降 )
( -------------------------------------------------------- )

──────────────────────── [ MCR N0 ]      ←※ブレーカーの範囲はここまで

【命令の読み解き】

  • N0(ネスティング番号): MC命令の「グループ番号」です。N0〜N14まで使えますが、現場の鉄則は「N0、N1、N2…と若い番号から順番に独立して使うだけ」です。マニュアルには「N0の中にN1を入れ子(ネスティング)にして…」といった複雑な使い方も載っていますが、実務で深い入れ子を作るとデバッグ時に解読不能に陥ります。「1つのブロックにつき1つの番号」とシンプルに管理するのが、バグを防ぐ実務の鉄則です。
  • M100(専用フラグ): このMCブロックがONになっていることを示す状態フラグです。空いている内部リレーを適当に割り当てます。

たったこれだけで、MCからMCRの間に書かれた何十行、何百行というプログラムすべてに対して「自動中(M10)」という条件を一括でかけることができます。 これで、シリンダを後から追加しても、MCとMCRの間に回路を書きさえすれば、絶対に条件のコピペ忘れ(自動運転の条件モレ)は発生しなくなります。

【実践の極意】モニタ画面に現れる「縦の接点」の正体

机上の解説だけでなく、実際の現場でGX Worksなどのツールをオンライン(モニタモード)にしたときのリアルな挙動をお見せします。

PLCのMC/MCR命令をモニタモードで表示したラダー図。共通母線に仮想の縦のa接点(N0 M100)が出現する様子。

上の画像を見てください。MC命令がONになると、MCとMCRの間に挟まれた回路の一番左側(共通母線)に「N0 M100」という縦方向のa接点がドカンと出現します。

これこそが、MC命令の真の正体です。 PLCの内部では、「この区間にあるすべての回路の左端に、M100のa接点を一括で直列挿入している」のと同じ演算を行っているのです。この「左端の仮想接点」というイメージを頭に焼き付けておいてください。次の章で、これが極めて重要な意味を持ちます。

【要注意】MC遮断時の「命令ごとの振る舞い」の違い

さて、ここからが本記事の最大の山場であり、実務で若手が必ず陥る「致命的な罠」の解説です。

MCブロックの条件(先ほどの例ではM10)がOFFになり、ブレーカーが落ちた時、MCとMCRの間にいるデバイスはどうなるのでしょうか?
「電気が来なくなるんだから、全部OFFになるんでしょ?」と思ったあなた。その認識のまま現場に出ると、設備を確実に暴走させます。

第2章で解説した通り、ブレーカーが落ちるということは「すべての回路の一番左端の接点(N0 M100)がOFFになる」ということです。この原理に当てはめると、命令ごとの振る舞いが論理的に見えてきます。

1. OUT命令(出力・自己保持) ⇒ 即座にOFFになる

Y(出力)やM(内部リレー)、あるいはOUT命令で組んだ自己保持回路は、MCが遮断された瞬間に即座にOFFになります。 これは直感通りであり、ブレーカーが落ちればモーターもシリンダも確実に止まるため、極めて安全な挙動です。

2. タイマ(T) ⇒ ゼロにリセットされる

時間を計測中のタイマは、MCが遮断されると計測がストップし、現在値も「0」にリセットされます。これも直感通りです。

3. カウンタ(C) ⇒ 現在値が「保持」される(罠ポイント)

ここからが罠です。回数を数えるカウンタは、手前の接点が切れても現在値を保持(記憶)したままになります。MCブロックが再びONになった時、ゼロからではなく「前回の続き」からカウントが再開されるため、意図しないタイミングでカウントアップ(満了)する危険性があります。

4. SET / RST命令 ⇒ 状態が「そのまま保持」される(最大の罠!)

これが最も恐ろしい仕様です。 一度SET命令でONになったデバイスは、MCブロックが遮断され、大元のブレーカーが落ちているにもかかわらず、平然と「ONの状態」を維持し続けます。

理由は簡単です。SET命令は「入力条件がOFFになっても自力でONを維持する」命令です。MCが遮断されて左端の仮想接点がOFFになったところで、「SET命令を実行しなくなる」だけであり、「RST(解除)命令が実行されたわけではない」からです。

もしあなたが、自動運転のシーケンスを「SET / RST命令」で組んでおり、それをMC命令で囲っていたとします。 動作の途中で作業者が手動モードに切り替え(MCが遮断され)、手動でシリンダを動かした後、再び自動モードに戻した(MCがONになった)瞬間……。遮断前にSETされていた工程フラグがONのまま生き残っているため、設備が途中から唐突に暴走を再開します。

第1回の記事で、「状態保持の基本はOUT命令を使え。SET/RSTは劇薬だ」と厳しく指導した最大の理由がここにあります。 MC命令による美しいブロック制御の恩恵を最大限かつ安全に受けるためには、中身のプログラムが「MC遮断時に確実にOFFになるOUT命令(自己保持)」で構成されていることが絶対条件なのです。

🔗 あわせて読みたい
なぜSET/RST命令が「劇薬」と呼ばれるのか? 現場で自己保持(OUT)が基本とされる理由をおさらいしたい方はこちら:
▶【PLC】自己保持(OUT)とSET/RSTの使い分け〜ラダー図に潜む致命的な罠〜

実務でのラダー構築例(手動/自動の分断と出力処理)

MC命令の特性と罠を理解したところで、実際の現場で「自動」と「手動」をどのようにブロック分けして記述するのか、具体的な回路例を紹介します。

ここで、初心者が陥る罠があります。手動ブロックと自動ブロックの両方に、直接出力コイル(Y10)を書いてしまう「2重コイル」です。

【失敗例】

(==== 手動運転ブロック ====)
[ M11 (手動モード) ] ──── [ MC N0 M100 ]
  [ X30 (手動前進ボタン) ] ──── ( Y10 シリンダ前進 )← ここでON演算されても…
──────────────────────── [ MCR N0 ]

(==== 自動運転ブロック ====)
[ M10 (自動モード) ] ──── [ MC N0 M101 ]
  [ M50 (自動の動作条件) ] ──── ( Y10 シリンダ前進 ) ← MC遮断による「強制OFF」で上書きされる!
──────────────────────── [ MCR N0 ]

PLCはプログラムを上から下へスキャンし、最後の結果を実際の出力に反映します。 MC命令は、条件がOFFの時に「演算をスキップする」のではなく「強制的にOFFとして演算する」命令です。
したがってこの順序で書いた場合、自動モードでは一見正常に動きますが、手動モードでボタンを押した瞬間にバグが牙を剥きます。上段でどれだけONにしても、下段にある自動ブロックの強制OFFが優先されるため、シリンダはピクリとも動きません。

【内部リレーで受けて、外でまとめる】
これを回避するため、実務ではMCブロック内では直接「Y(実際の出力)」を叩かず、「M(内部リレー)」の指令用フラグを立てます。
そして、すべてのMCブロックが終わった後のプログラムの最後尾で、OR回路(並列)を使って実際のYに出力する手法をとります。

【実務における手動/自動のブロック制御】

(==== 手動運転ブロック ====)
[ M11 (手動モード) ] ──── [ MC N0 M100 ]
  [ X30 (手動前進ボタン) ] ──── ( M1000 手動_シリンダ前進指令 )
──────────────────────── [ MCR N0 ]

(==== 自動運転ブロック ====)
[ M10 (自動モード) ] ──── [ MC N0 M101 ]
  [ M50 (自動の動作条件) ] ──── ( M1001 自動_シリンダ前進指令 )
──────────────────────── [ MCR N0 ]

(==== 実際の出力処理 ====)
[ M1000 (手動指令) ] ──┬── ( Y10 シリンダ前進 )
[ M1001 (自動指令) ] ──┘
GX Works2で作成したMC/MCR命令の手動運転ブロックのラダー図。直接出力せず、手動指令を内部リレー(M1000)で受ける回路。
GX Works2で作成したMC/MCR命令の自動運転ブロックと出力マッピングのラダー図。手動と自動の内部フラグをOR回路で実際の出力(Y10)にまとめる実務の手法。

これなら、2重コイルのバグを完全に回避しつつ、手動の論理ブロックと自動の論理ブロックを美しく物理分断できます。作業者がスイッチを切り替えるだけで、片方のブロックのブレーカーが落ち、もう片方のブレーカーが入ります。

「MCブロックの中では直接Yを触らず、指令フラグ(M)を作るだけ」。 これが、バグを生まない実務の設計作法です。

まとめ:安全と確実性は「気合い」ではなく「構造(ブロック)」で作る

いかがでしたでしょうか。今回は、プログラムを面で制圧する「MC/MCR命令」について解説しました。

  • b接点のコピペ地獄からの脱却:個別の回路に条件を足す危険な手法を捨て、MC命令の「ブレーカー」で一斉にモードを切り替える。
  • モニタに現れる縦の接点: MC命令の正体は、区間内の全回路の左端に「仮想の接点」を一括挿入することである。
  • MC遮断時の恐ろしい罠: ブレーカーを落としても、SET命令やカウンタは「状態を記憶したまま」になる。だからこそ、基本はOUT命令(自己保持)で組まなければならない。
  • モードの完全分断: 手動と自動を別々のMCブロックに隔離し、バグを構造的に排除する。

「コピペ忘れに気をつける」という人間の注意力に頼った設計は、現場では通用しません。 「どう組めば、後から仕様変更しても絶対にバグらないか」。この構造を俯瞰する視点を持った時、あなたのプログラムは真の実務水準へと昇華します。

次回は、このブロック思考をさらに発展させ、複雑に絡み合う自動運転の自己保持回路を劇的にシンプルにする実践的な設計手法、「歩進制御(ステートマシン)」の極意に迫ります。お楽しみに!

※本記事で使用している画面は、三菱電機株式会社「GX Works2」の操作画面です。
※GX Works2MELSECは、三菱電機株式会社の登録商標です。
※本記事で紹介しているプログラムや回路図は、技術解説のためのサンプルです。実機での動作を保証するものではありません。
※実際に使用する際は、十分な検証を行った上で、安全に配慮して運用してください。

💬 更新情報を X (Twitter) で発信中!

記事の更新通知や、現場で役立つ「電気制御の小ネタ」をツイートしています。 また、「記事のここが分からなかった」「現場でここが困っているけどどうしたらいい?」といった疑問があれば、DMで募集しています!個別のトラブル相談も、ブログのネタにさせていただけるなら大歓迎です!ぜひフォローして気軽に絡んでください!

PLCのMC/MCR(マスターコントロール)命令によるブロック制御と手動・自動切り替え、SET命令の罠を象徴するアイキャッチ画像。PLC、ラダー図、巨大なスイッチ、警告アイコンが描かれている。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次