はじめに
私たち電気エンジニアが関わる現代のプラントにおいて、設備を24時間ノンストップで安全かつ正確に稼働させるために、PLC(Programmable Logic Controller)は「システムの頭脳」として絶対的な役割を担っています。電気設計やファクトリーオートメーション(FA)の世界に携わるエンジニアにとって、ラダー図を設計するスキルは必須の標準装備と言えます。
しかし、多くの入門書や公式マニュアルは「A接点とB接点をつなげば自己保持回路ができる」といった部分的な記号の解説に終始しがちです。実務の現場で直面するのは、「数千行から数万行に及ぶ大規模なプログラムを執筆する際、内部のメモリ(デバイス番号)をどのように整理・管理すれば盤の設計が破綻しないか」という、より体系的で泥臭い運用の問題です。無計画に割り振られたアドレスは、プログラムの可読性を著しく低下させるだけでなく、停電時のデータ消失によるラインの突発停止(チョコ停)といった重大なトラブルを引き起こす温床になります。
このブログ記事では、日本の製造現場で圧倒的なシェアを誇る三菱電機「MELSECシリーズ」をベースに、特に小〜中規模装置で多用されるパッケージ型PLC「FXシリーズ(FX3S)」を具体的なモデルとして想定しながら、補助リレー(M)、カウンタ(C)、タイマ(T)、データレジスタ(D)といった基本的なデバイスの論理的な整理手法と、アドレスマップの設計思想について、実務に直結する基本的な知識を網羅的に解説します。長くなるので、全4回に記事を分けます。この記事では 補助リレー(M)解説を行います。
シーケンス制御の本質:ハード回路からソフト回路へ
PLCの内部メモリ設計に踏み込む前に、私たちが扱う「ラダー言語(ソフト回路)」の根幹について、基本的な「ハード回路(電磁リレー盤)」との物理的な違いを整理しておきましょう。
ハード回路とは、電磁接触器・開閉器や補助継電器(リレー)やタイマ、カウンタといった物理的な電気部品を、制御盤内に収納し、配線することで構築される物理的なシーケンス回路を指します。この方式では、スイッチが押されて電流が流れ、リレーのコイルが励磁されることで接点が閉じ、次の回路へと電力が供給されます。すべてが目に見える物理現象として進行するため、直感的で動作が明確であるという利点を持つ反面、制御の規模が大きくなるにつれて「配線変更時に膨大な手間がかかる」、「制御盤の巨大化によるコスト増大」、「コイル物理接点の摩耗による経年劣化」等の致命的な問題に直面していました。
これに対して、PLCを用いるソフト回路は、物理的な配線という制約をすべてソフトウェア内部の仮想的な空間へと置き換える技術です。PLCの内部には、数万個、あるいはそれ以上の仮想的な「内部リレー」や「タイマ」「カウンタ」がプログラム上のデバイスとして存在しており、GX-worksなどのソフトウェア上でプログラムすることで論理回路を構築します。
補助リレー(M)の役割と特性
この記事で扱う「補助リレー(M)」は、外部機器と物理的な配線を持たない、PLC内部だけで動作する「仮想的なリレー」です。 先ほど解説した自己保持回路やインターロック回路における出力コイルと同様に、プログラム内で「工程が完了した」「ある条件が成立した」といった論理的な状態(ビット情報)を記憶・伝達するために、制御回路の至る所で頻繁に使用します。FX3SなどのPLCにおいて、補助リレーは以下の特性を持つ「ビットデバイス」として扱われます。
- ON/OFFの二値情報を扱う: 0または1の状態のみを保持します。
- 揮発性の性質: 原則として電源を落とすと記憶は消え、リセットされてOFFになります。
物理的なリレーとは異なり、ソフト内部で数多く作成できることがこのデバイスの最大の強みですが、それゆえに設計者がルールを決めずに自由気ままに使用すると、プログラムの可読性が失われ、バグの温床となります。
A接点・B接点・出力コイルの物理的連動
ラダー図を構成する基本3要素は、画面上の記号でありながら、その動作原理はハード回路における物理的な補助継電器(リレー)の仕組みと「ほぼ」同様と考えて良いです。「ほぼ」と言ったのは、下記の記事で解説しているスキャンタイムによる挙動の違いが発生します。ハード回路メインに触っている人はソフト回路との挙動の違いに若干戸惑うことがあります。

- A接点(常開接点 ー| |ー :ノーマリーオープン): 対応するデバイスの信号がOFFのときは回路を遮断し、ONになった瞬間に回路を接続します。物理リレーで言えば、コイルに電流が流れていないときはバネの力で接点が離れており、コイルが励磁されたときに初めて可動鉄片が引き寄せられて接点が接触する構造そのものです。「何かが起きたら(ONしたら)処理を前に進める」という順序制御の起点となります。
- B接点(常閉接点 ー|/|ー :ノーマリークローズ): 信号がOFFのときに回路を接続し、ONになると回路を遮断するという、A接点とは真逆の動きをします。物理リレーにおいては、普段はバネの力によって接点が最初から押し当てられて通電しており、電磁石が励磁されると、その力によって接点が無理やり引き離されて回路が断たれる構造です。非常停止スイッチの動作監視や、特定条件成立時の回路遮断(インターロック)において、安全を担保するための要となります。
- 出力コイル ー( )ー : ラダー図の右端に位置し、左側からつながる接点の条件がすべて成立した(導通した)ときにONとなる要素です。物理的には、リレーのコイルそのものを指しています。左側の条件が整ってこの出力コイルに「仮想的な電流」が流れると、そのコイルに対応するラダー図内のすべてのA接点が閉じ、B接点が開きます。この、出力コイルの励磁によって自身の接点群が連動して動くという因果関係こそが、シーケンス制御における論理演算のすべての基盤です。
スポンサーリンク
2大 基本回路
ラダー図を構成する無数の回路の中でも、機械を安全かつ意図通りに動かすための双璧をなすのが「自己保持回路」と「インターロック回路」です。
自己保持回路とは、一瞬だけONになる押しボタンスイッチのようなパルス信号を受け取った後、そのスイッチから手を離して信号がOFFに戻っても、出力のON状態を自ら維持し続けるための回路構成です。起動スイッチ(A接点)に対して、並列に自身の出力コイルのA接点を並べてバイパス(戻り回路)を作り、その直後に停止スイッチ(B接点)を直列に配置します。




スイッチが一瞬押されると、電流は起動スイッチを通って出力コイルへと流れます。コイルがONした瞬間、並列に組まれた自身のA接点が即座に閉じるため、起動スイッチがOFFに戻っても、電流は閉じた自身の接点を経由してコイルへと流れ続けます。これが自己保持のメカニズムです。後段に配置された停止用のB接点がON(回路としては遮断)されるまで、この保持状態は継続します。
注意しておきたいのは「停電」です。PLCは停電からの復帰時に最初からスキャンし直すので、揮発性(電源が切れたら初期状態に戻る)であるため、当然に自己保持回路は維持されなくなってしまいます。大規模プラントの重要設備の場合、PLCなどの機器はUPSのような無停電電源から電源を供給していることが多いので、瞬低レベルを気にする必要性はありません。しかし、本稿で取り扱うような小規模PLCを採用する小規模な設備であれば、無停電原電を置いていないケースが多いので、瞬低からの復帰時にどのような挙動となるかは十分に仕様検討と対策を講じることが必須になります。
もう一方のインターロック回路は、システムの安全を確保するために「同時に動いては困る命令」や「特定の条件が満たされていないときは動作を禁止する」という厳しい制限回路です。代表的な例として、モーターの正転(右回り)と逆転(左回り)の制御が挙げられます。正転用の出力コイルと逆転用の出力コイルが万が一同時にONしてしまうと、主回路が短絡(ショート)して激しい火花が散り、機器が完全に破壊される恐れがあります。



これを防ぐため、正転出力コイルの直前に「逆転出力のB接点」を直列に挟み込み、逆に逆転出力コイルの直前には「正転出力のB接点」を挟み込みます。こうすることで、もし正転がONしている間は、逆転回路の直前にあるB接点が物理的に開いた状態になるため、どれだけ逆転の起動スイッチを押しても電流はコイルに到達できなくなります。ソフト回路内部でのこの1行のインターロック設計が、現場の巨大なハードウェアと作業者の安全を守る絶対的な防壁となります。もちろん、設備の安全を守るためには通常ハード回路でも同様のインターロック回路が組み込まれていますが、必ずソフトでもハードでも対応しておくことが、設備の安全を守る私たち電気エンジニアの責任です。
補助リレー(M)のデバイス番号の整理と管理術
ここからは具体的なデバイスの運用法に入ります。まず、外部との直接的な物理配線を持たない仮想リレーである「補助リレー(M)」です。Mデバイスは、基本的には1ビット(ONかOFFか)の情報を扱い、PLCの電源をOFFにすると内容がすべてゼロにクリアされる「停電非保持(揮発性)」の特性を持ちます。
小規模な装置を制御するFXシリーズ(本記事では FX3S )を用いて設計する場合、無計画にデバイス番号を使用すると可読性の低下やバグの混入を招きます。何故なら、下表の通り内部リレー点数が非常に制限されている(総合計2048点)からです。例えば FX3U シリーズでは実に4倍の 総合計 8192点 もありますから、その差は明白です。
| 分類 | アドレス | 点数 |
| 一般用 | M0~M383 | 384点 |
| EEPROMキープ用(停電保持) | M384~M511 | 128点 |
| 一般用 | M512~M1535 | 1024点 |
| 特殊用 | M8000~M8511 | 512点 |
| 合計(一般) | – | 384点 |
| 合計(キープ用) | – | 128点 |
| 総合計(全Mデバイス点数) | – | 2048点 |
一般用がM383迄の384点と、M512からの1024点に分けられています。これは何故でしょうか。おそらく、FXシリーズの歴史的な経緯が影響していると考えています。古い機種から続くデバイスマップの互換性を保ちながら、FX3Sという新しい、かつ小型の製品に落とし込んだ結果、特定の「穴あき」が生じています。実際に、FX3Uでは M512~M7679(6656点) をバッテリーキープの停電保持専用領域としています。
補足:「EEPROMキープ」は、PLCの仕様書では「バッテリキープ」、「EEPROMキープ」と区別されるものです。EEPROMは書き換え回数に上限(一般的には100万回程度)があるため、頻繁にON/OFFするビットには不向きです。例えばタイマ周期で毎スキャン書き込むような使い方は避けるべきです。「電源断後も必ず残したい情報」に絞って使用しましょう。一方のバッテリーキープは特に制限はありません。
上述のような制約がありますので、次のようにデバイス番号の使用範囲を明確に区別して整理するのが実務の鉄則です。これはT係長が新規で設計を依頼された場合に最初にベースとしているものです。もちろん、お客様ごとに指定がある場合や、既設からのリプレースを行うために踏襲しなければならない場合など、十把一絡げに論ずることはできません。この辺りが仕事の面倒さでもあり、面白さでもあるとT係長は考えます。
M0 〜 M63(64点):システム共通・運転モード管理領域
装置全体を統括する最上位フラグを配置する領域です。「自動運転中」「手動運転中」「原点復帰中」「初期化完了」「一サイクル停止要求」など、プログラム内のどの回路からも常に参照される重要なシステム状態をこの最先頭領域に割り振ります。後続の回路は、必ずこの領域のフラグをインターロック条件として引用することになります。
M64 〜 M95(32点):手動操作・アクチュエータ単体条件領域
タッチパネルのボタンや操作盤のセレクタスイッチから直接駆動される、シリンダやモータの手動出力フラグをまとめます。「コンベアA手動正転」「シリンダB手動前進」といった信号は、自動運転のロジックと完全に切り離してこの領域で整理します。これにより、手動モード時の単独動作チェックが極めて容易になります。
M96 〜 M159(64点):自動運転・工程歩進(ステート制御)領域
自動シーケンスにおいて、機械の動作ステップを細かく管理するための領域です。シーケンス制御では、工程1(ワーク投入待ち)→ 工程2(クランプ閉)→ 工程3(加工実行)→ 工程4(クランプ開・製品排出)というように、一連のプロセスを1ステップずつ順を追って進めていきます。この進行状態(ステート)を記憶するために、連続したアドレスを贅沢にかつ順番に使用します。
M300 〜 M383(84点):インテリジェントユニット・通信ステータス領域
アナログユニットのデータ変換完了フラグや、各種フィールドネットワーク(CC-Link、EtherNet/IPなど)の通信リンク状態(正常・異常)など、ハードウェアや通信インフラに近い信号を一括して管理・整理する領域です。
通信ユニットから上がってくるステータス情報は、「通信正常」「交信中」「エラー発生」「リモート局の異常」など、大量のビット情報が1列に並んだ「塊」としてPLC内に取り込まれます。ラダープログラムでこれらを取り扱う際、1ビットずつバラバラに処理するのではなく、FROM命令やBMOV(一括転送)命令、あるいは最新の「リフレッシュ設定」を用いて、16ビット(1ワード)単位で一気にまとめて内部リレーへ転送するのが実務のセオリーです。
もし最初の方のデバイス(M0など)を使ってしまうと、M0〜M15、M16〜M31といった貴重な先頭領域が通信データだけで一瞬にして埋め尽くされてしまいます。最初の方の領域は、ビット単位で細かくON/OFFさせる「自動運転の工程歩進」や「操作場所選択」のために1点ずつ切り離して自由に使いたい領域であるため、塊で一括転送されてくる通信データは、最初から邪魔にならない後ろのキリの良いアドレスへ隔離しておくのが論理的な設計と言えるでしょう。
| 分類 | デバイス番号 | 点数 |
| システム共通・運転モード管理 | M0~M63 | 64点 |
| 手動操作・アクチュエータ 単体条件 | M64~M95 | 32点 |
| 自動運転・工程歩進 (ステート制御) | M96~M159 | 64点 |
| 通信ステータス | M300~M383 | 84点 |
特に割付を書いていないところは必要に応じて、自由に使えるように敢えて空けています。余裕がない設計はイレギュラーを吸収できなくなってしまうからです。
スポンサーリンク
ラッチリレーの論理的選定とデータ追従
補助リレー(M)は原則として電源遮断によって消去されるのに対し、内部のON/OFF状態を不揮発性メモリやバッテリーバックアップによって完全に保持する「停電保持(不揮発性)」の特性を持つのが「ラッチリレー」です。先述の通り、FX3S においては Mデバイスの M384~M511(128点) を「SET命令」と「RST命令」が用いて停電保持信号を作ります。SET命令は一度条件が成立すれば、その後入力条件がOFFに戻っても出力状態を強制的にONのまま保持し続け、RST命令は任意のタイミングでその保持状態を強制的に解除(OFF)します。FX3Sでは、バッテリー領域が無く、書き込み回数に上限のあるEEPROM領域しかないので、毎スキャン書き込むような使い方は避けましょう。
※重要:FX3Sには「Lアドレス」というデバイス名は存在しません。

ラッチリレーのアドレス選定において最も重要なのは、「必要最小限のデータにのみ限定して割り当てる」、「異常時を徹底的にデバックする」ということです。FX3S においては、そもそもラッチリレーで使用できる点数が少ないので、すべてをラッチリレーにすることは物理的に難しいでしょうし、そもそも上限回数のある EEPROM 領域への読み書きは可能な限り避けるべきです。
また、デバックが不十分だと、停電復旧時に意図しない過去の動作フラグが中途半端に残ったままとなり、主電源を入れた瞬間に機械が予期せぬ突発運転をしてしまい極めて危険な事故を誘発します。停電復旧時に、機械が「前回の状態を正確に思い出すべき情報」に絞り込んで以下のように割付を構成します。
EEPROMの情報選別と運用方針
EEPROMには、頻繁に変動する「動的データ」を書き込むべきではありません。原則として、「電源OFF時にも保持が必須」かつ「値の更新頻度が低い(または計画的な)データ」に限定しましょう。具体的には下記のようなものでしょうか。
- 装置固有の個体パラメータ:
- センサのオフセット値、キャリブレーション値、機械固有の調整値。
- 設定値(レシピデータ):
- ユーザーが設定した運転パラメータ(目標値、タイマー設定、品種ごとの動作条件)。
- 動作履歴・統計データ:
- 稼働時間、累積生産数、メンテナンスサイクルを管理するための積算値(更新頻度を抑える設計が必要)。
- システム状態の最終保存:
- 電源遮断時に直前まで処理していたステップ番号や処理状況(再起動時のリカバリ用)。
| 区分(エリア) | 更新頻度 | 管理対象の例 | 管理のポイント |
| システム管理領域 | 極めて低い | 装置ID、製造年月、校正データ | 誤書き込み防止のため、書き込み許可フラグを設ける。 |
| ユーザー設定領域 | 低い | レシピデータ、生産条件パラメータ | アドレスを固定化し、インデックス管理を行う。 |
| ログ・カウンタ領域 | 中〜高い | 稼働時間、累積カウント | 書き込み寿命対策として、巡回式(ローリング)保存や、特定閾値でのみ書き込むロジックを実装する。 |
| リカバリ用保存領域 | 電源遮断時 | ステップ番号、処理途中フラグ | 電源異常検知後、速やかに書き込めるよう最小限のデータ量に絞る。 |
実務設計におけるEEPROMの運用において、最も重要なのはデータの信頼性とメモリ寿命の最大化を両立させることです。まず、書き込み頻度の最適化については、カウンタやログデータを直接EEPROMへ書き込む手法を避け、まずはメモリ上のバッファで一時的に蓄積させるアプローチが不可欠です。時間やカウント数に応じた閾値をあらかじめ設定しておき、その基準に達したタイミングで初めてEEPROMへデータを反映させる間欠的な書き込みを徹底することで、無駄な書き込み回数を削減し、寿命を長持ちさせることが可能です。
次に、データの堅牢性を高めるためのチェックサム導入も欠かせません。各データ区分けの最終アドレスにチェックサムやCRCを配置し、データを読み出すたびに検証処理を介在させることで、電気的ノイズや経年劣化によるデータ化けを即座に特定できます。これにより、異常な値で装置が誤動作することを未然に防ぎ、システムの安全性を担保できます。
最後に、アドレスマップの固定化と管理です。プログラムの修正に伴って記憶領域のレイアウトが崩れてしまうと、予期せぬデータの書き換えや破損を招く恐れがあります。そのため、アドレスマップを正式な仕様書としてドキュメント化し、領域ごとの用途を厳密に定義してください。さらに、未使用領域に対してはプログラム側で書き込みを制限するガード設定を施すことで、誤ったデータ介入を排除し、長期にわたる安定的な運用環境を維持することが可能となります。
補足:チェックサムとは
チェックサムとは、一言で言うと「データの誤りがないかを確認するための『確認用コード(計算値)』」のことです。データが正しく送られたか、あるいは保存中に壊れていないかをチェックするために使われる仕組みです。チェックサムを作る過程は、データの「合計値」を計算する作業に似ています。
- 計算: 送信側は、送るデータ(数値など)を一定のルールで足し合わせ、その「合計値」をチェックサムとして作ります。
- 付与: データ本体と、そのチェックサムをセットにして相手に送ります。
- 検証: 受信側は、受け取ったデータ本体を同じルールで自分で計算し直します。
- 照合: 「自分が計算した合計」と「受け取ったチェックサム」を比べます。
- 一致すれば: 「データは無事に届いた」と判断します。
- 不一致なら: 「どこかでデータが化けた(壊れた)」と判断します。
【M384 〜 M415】:システム管理領域
装置固有の「状態」を保持します。例えば、試運転時に設定した「校正完了」フラグや、装置IDなどの基本設定を格納します。この領域は稼働中に頻繁に書き換えることはありません。誤操作による書き換えを防ぐため、書き込みは「保守キーがONの時のみ」といったインターロックをプログラムで必ず設けてください。
【M416 〜 M447】:ユーザー設定領域
現場作業者がタッチパネルで操作した「品種データ」や「運転条件のON/OFF」を収めます。品種ごとにレシピが切り替わる際、ここにあるフラグが電源再投入後も正しい品種番号を維持することで、オペレーターの再設定の手間を省きます。
【M448 〜 M479】:ログ・カウンタ領域
ここが最も書き込み頻度が高くなる可能性があるため、注意が必要です。直接カウントアップするのではなく、非保持メモリで積算し、一定のタイミング(例:100ショットごと)でこのラッチ領域へ「転送」するロジックを組んでください。これにより、ラッチメモリの書き換え寿命を保護しつつ、実績を確実に記憶できます。
【M480 〜 M511】:リカバリ用保存領域
装置のシーケンス制御において、電源が落ちた瞬間に「どこまで終わっていたか」を特定するための領域です。異常発生時や停電検知信号(停電信号をPLCに入力している場合)が入った直後に、現在進行中の工程ステップ番号や中間フラグをこのエリアへ一気にコピーします。
| 分類 | デバイス番号 | 点数 |
| システム管理領域 | M384~M415 | 32点 |
| ユーザー設定領域 | M416~M447 | 32点 |
| ログ・カウンタ領域 | M448~M479 | 32点 |
| リカバリ用保存領域 | M480~M511 | 32点 |
実務設計のポイント:データの信頼性担保
この128点だけで全ての情報を保持するのは困難なため、上記エリアはあくまで「フラグ(状態)」の記憶に使用し、数値データ(品種名、カウンタ値、タイマー値)は、並行してデータレジスタ(D200〜D511等のラッチエリア)と組み合わせて使用するのが実務の定石です。また、各エリアの境界線には「未使用領域」を数点ずつ空けておくことで、将来的な拡張や改造時に、ビットが隣の領域にはみ出すミスを物理的に防ぐ設計にすることをお勧めします。
特殊デバイスの役割と実務における定番活用法
プログラムを構築する上で、PLC自体の内部状態を監視したり、特定の周期信号を作ったりするために欠かせないのが「特殊デバイス(M)」と呼ばれるシステム定数デバイスです。これは、PLCシステム側が自動的にON/OFFを管理している読み出し専用の内部リレーであり、電気設計者が自由に書き換えることはできません。実務のラダー設計において、ほぼ100%の頻度で使用される定番のMデバイスとその論理的な役割は以下の通りです。
M8000(常時ON)/ M8001(常時OFF)
PLCがRUN状態(動作中)である間、常にON状態を維持するフラグです。プログラムの初期化処理をバイパスさせたり、常に通電させておきたい回路の起点、あるいはファンクションブロックの有効化ピン(EN)の常時ON接続用として多用されます。
M8002(初期パルスON)/ M8003(初期パルスOFF)
PLCがSTOP状態からRUN状態へと切り替わった最初の「1スキャン目だけ」一瞬ON(もしくはOFF)になり、2スキャン目以降は自動的にOFF(もしくはON)になるフラグです。データレジスタ(D)への初期値設定(初期化)や、ラッチリレーのクリア処理など、運転開始時の立ち上がりで一度だけ実行したい処理のトリガとして最適です。
その他、プログラムの実行中に、ゼロ除算(0での割り算)やデータ範囲超過、インデックス修飾の超過などの致命的な演算バグが発生した際に、システムが自動的にONにするエラーフラグです。この接点をタッチパネルのアラーム表示や盤面の異常灯と紐付けておくことで、ソフト上の潜在的なバグをいち早く現場で検知することができます。これらの詳細は下記の記事で取り扱っています。

スポンサーリンク
おわりに
PLCにおける補助リレー(M)の設計は、単なるデバイス番号の割り当てではなく、装置の信頼性と保守性を決定づける重要なエンジニアリングです。本稿で解説した通り、機能や更新頻度に基づいてデバイス領域を厳密に区分けし、標準化されたルールで管理することが、大規模プログラムの破綻を防ぐ唯一の道と言えます。
特に、停電保持(ラッチ)領域の選定においては、データの重要度に応じたエリア分割とチェックサム等による自己診断ロジックの導入が不可欠です。限られたリソースを「システム」「設定」「ログ」「リカバリ」へ論理的に配分することで、突発的な停止トラブルを最小化し、安全な再起動を実現できます。
「デバイス番号の整理は、プログラムの可読性の整理である」という意識を持ち、次回の設計から今回のアドレスマップをベースにしてみてください。整理されたデバイス管理は、設計者自身の負担を軽減し、将来の改造やトラブルシューティングにおいても多大な恩恵をもたらすはずです。本シリーズの第一回として、まずはこの整理術を現場の標準スキルとして定着させていきましょう。

