PLC(シーケンサ)の処理の順番|スキャンの流れとEND処理・サービス処理をやさしく解説【MELSEC iQ-R】
PLC(シーケンサ)のプログラムは、書いた回路が全部同時に動いているように見えます。実際には、PLC は決まった順番で処理を1周し、その1周をずっと繰り返しています。この1周をスキャンと呼びます。
順番を知っておくと、次のような「なぜ?」に答えられるようになります。
- 起動と停止のボタンを同時に押したら、どちらが勝つのか
- スイッチを押してから出力が出るまで、なぜ少し遅れるのか
- タッチパネル(GOT)の反応が遅いのはなぜか
この記事で分かること:
- スキャン(1周)の全体の流れ
- プログラムは上から順に実行される=後の行の結果が残る
- 入力と出力はまとめて扱う(I/Oリフレッシュ)と、応答の遅れ
- END処理でやっていること(GOT・パソコンとの通信=サービス処理)
- スキャンタイムの見方と、見張り役のタイマ(WDT)
※この記事の仕様は、三菱電機の「MELSEC iQ-R CPUユニット ユーザーズマニュアル(SH-082487J)」に書かれている範囲だけで書いています。本文の「p.xx」はこのマニュアルの印刷ページです。対象は iQ-R のシーケンサCPU(R00〜R120CPU、R04〜R120ENCPU)で、他のシリーズや他社の PLC は扱いません。
PLCは「1周」をずっと繰り返している|スキャンの全体の流れ

MELSEC iQ-R の CPU ユニットは、RUN(運転)にすると、最初に準備の処理(RUN時初期化処理)を行い、そのあと次の3つを1周として繰り返します(ユーザーズマニュアル p.70・p.72)。
- I/Oリフレッシュ:入力ユニットから ON/OFF を取り込み、出力ユニットへ ON/OFF を出す(ユーザーズマニュアル p.71)
- プログラムの演算:プログラムを先頭から END 命令(プログラムの最後に置く終わりの印)まで順に実行する(ユーザーズマニュアル p.71)
- END処理:1周の最後の後始末。ほかのユニットとのデータの更新や、GOT・パソコンとのやり取りなどをまとめて行う(ユーザーズマニュアル p.71)
3つ目の END 処理が終わると、また1つ目の I/O リフレッシュに戻ります。この「I/Oリフレッシュ → プログラムの演算 → END処理」の1周が1スキャンです。
PLC は「入出力をまとめて更新 → 上から順に実行 → 後始末」をずっと繰り返している。この1周が1スキャン。
1周にかかる時間=スキャンタイム
1スキャンにかかる時間をスキャンタイムと呼びます。I/O リフレッシュ・プログラムの演算・END 処理の時間を足したものです(ユーザーズマニュアル p.72)。RUN にして最初の1周は、準備の処理(RUN時初期化処理)を含むので初期スキャンタイムとして別に扱われます(ユーザーズマニュアル p.72)。スキャンタイムの見方は後の章で扱います。
立上りや立下りで「1スキャンだけ ON にする」命令がありますが、この「1スキャン」はここで説明した1周のことです。命令の使い方は【GX Works3】PLS/PLF命令の使い方|LDP/ANDP/ORPとの違い・1スキャンONの使いどころで解説しています。
プログラムは上から順に実行する|同時押しで「後の行」が勝つ
プログラムの演算では、各プログラムをステップ0から END/FEND 命令まで実行します(ユーザーズマニュアル p.71)。FEND は、サブルーチンなどを分けて書くときに、メインの部分の終わりを示す命令です。ステップは、プログラムの中の命令に順に振られた番号で、0 が先頭です。ラダー図で見れば、先頭の行から下の行へ、順番に1つずつ実行していくということです。
全部の行を同時に計算しているわけではありません。この「順番」が、結果に効いてくる場面があります。
起動と停止を同時に押したらどうなるか
SET 命令(ON にして、そのまま保つ命令)と RST 命令(OFF にする命令)で、運転の出力 Y0 を入り切りする例で考えます。X0 が起動ボタン、X1 が停止ボタンです。
- 上の行:X0(起動)が ON なら SET Y0
- 下の行:X1(停止)が ON なら RST Y0
起動と停止を同時に押すと、同じ1周の中で、まず上の行の SET Y0 が実行されて Y0 が ON になり、続いて下の行の RST Y0 が実行されて Y0 が OFF になります。1周を終えた時点で残っているのは後で実行した RST の結果なので、停止が勝ちます。
行の順番を逆にして、RST の行を上・SET の行を下に書くと、後で実行されるのは SET です。今度は起動が勝ち、両方押していても Y0 は ON のままになります。停止を優先させたいなら、RST の行を下に書く順番を崩さないことが条件です。この回路の全体は自己保持回路のラダー図での書き方(GX Works3・PLCプログラム視点)で解説しています。
なぜ「後の行」の結果が残るのか
マニュアルには、出力(Y)の演算結果はその都度 CPU の中の出力用のメモリ(出力(Y)用デバイスメモリ)に書き込まれ、決められたタイミングでまとめて出力ユニットに出す、と書かれています(ユーザーズマニュアル p.81)。
つまり、1周の途中で Y0 が ON になっても OFF になっても、その途中経過は CPU の中のメモリが書き換わるだけです。出力ユニットに出ていくのは、1周の演算が全部終わったあとにメモリに残っている値、つまり後で実行した結果です。
同じYを2か所で書くと(二重コイル)
同じ理由で、同じ出力 Y を OUT 命令(条件が ON の間だけ出力を ON にする命令)で2か所に書くと、出力ユニットに出るのは後で実行した方の結果になります。前の行の条件で ON になっても、後の行の条件が OFF なら OFF で上書きされます。
このように同じ出力を2か所に書くことを二重コイルと呼び、現場では避けるのが作法です。理由と避け方はラダー図の暗黙ルール|二重コイル禁止・OUTとSETの混在など先輩が教えてくれない作法で、OUT と SET/RST の違いは【GX Works3】OUT/SET/RST命令の使い方|違いと使い分け・自己保持との比較で整理しています。
入力と出力はまとめて扱う|I/Oリフレッシュと応答の遅れ
スキャンの1つ目の処理、I/Oリフレッシュは、プログラムの演算を始める前に、入力ユニットから CPU へ ON/OFF を取り込み、CPU から出力ユニットへ ON/OFF を出す処理です(ユーザーズマニュアル p.71)。入力の取り込みも、出力の書き出しも、どちらも演算の前にまとめて行います。
入力(X)・出力(Y)などのデバイス(PLC の中でデータを入れておく箱)の種類は三菱PLCのデバイス種類まとめ|X・Y・M・L・D・T・Cの使い分けで一覧にしています。
入力は1周の頭でまとめて読む
入力は決められたタイミングで一括して取り込み、プログラムの実行中は、CPU の中の入力用のメモリ(入力(X)用デバイスメモリ)の ON/OFF を使って演算します(ユーザーズマニュアル p.81)。
そのため、演算の途中で実際のスイッチが切り替わっても、その周の演算には効きません。その周は、頭で取り込んだ状態のまま最後まで計算します。変化が反映されるのは、次の周の I/O リフレッシュで取り込んでからです。
この仕組みから、1スキャンより短い信号は、取り込みのタイミングに重ならないと PLC から見えないことがあります。
出力も「演算の前」にまとめて出す
出力は、前の章のとおり演算の結果がその都度 CPU の中のメモリに書かれ、出力ユニットへは一括して出されます(ユーザーズマニュアル p.81)。その書き出しを行うのが I/O リフレッシュで、I/O リフレッシュは演算の前にある処理です(ユーザーズマニュアル p.71)。
流れで言うと、ある周で計算した出力は、END 処理のあと、次の周の頭の I/O リフレッシュで出力ユニットに出ていきます。「演算の最後に出力する」のではない点に注意してください。なお、マニュアルの入出力の章では、このタイミングを「END命令実行時」と書いています(ユーザーズマニュアル p.80〜81)。END まで来たあと、次の周の演算に入る前にまとめて出す、という同じ流れを指しています。
入力から出力まで、最小1スキャン・最大2スキャン遅れる
入力の変化に対して出力が変わるまでには、外部の接点が ON するタイミングによって最小1スキャン・最大2スキャンの遅れがあります(ユーザーズマニュアル p.81)。
たとえば外部の接点が I/O リフレッシュの直後に ON すると、その周の取り込みには間に合わず、次の周の I/O リフレッシュまで待つことになるので、遅れが大きい側になります。
すぐに読みたい・すぐに出したいとき(DX・DY)
I/O リフレッシュを待たずに、命令を実行したその時に入出力へ直接アクセスする方法もあります。DX(ダイレクトアクセス入力)とDY(ダイレクトアクセス出力)です。入力の取り込みは早くなりますが、そのぶん命令の処理時間は長くなります(ユーザーズマニュアル p.79・p.82)。
END処理でやっていること|GOT・パソコンとの通信(サービス処理)
プログラムを END 命令まで実行し終えると、END処理に入ります。1周の最後の後始末として、マニュアルに挙げられている処理のうち主なものは次のとおりです(ユーザーズマニュアル p.71)。
| END処理でやっていること(マニュアルの項目) | ひとことで言うと |
|---|---|
| ネットワークユニットのリンクリフレッシュ | ネットワーク用のユニットと CPU のあいだでデータを更新する |
| インテリジェント機能ユニットのリフレッシュ | アナログ入出力ユニットなど、専用の機能を持つユニット(インテリジェント機能ユニット)と CPU のあいだでデータを更新する |
| 命令の完了処理 | 命令の完了に関わる処理 |
| デバイスのラッチ処理 | ラッチ(値を保持する)設定のデバイスに関わる処理 |
| デバイスやラベル・ファイルの読み書きなどのサービス処理 | GOT やパソコン(GX Works3)からの読み書きの要求に応える |
| ウォッチドッグタイマのリセット | 見張り役のタイマを0に戻す(後の章で説明) |
| マルチCPU間のリフレッシュ | CPU を複数使う構成で、CPU どうしのデータを更新する |
| データロギングの収集 | データロギング(データの記録)のための収集 |
| 自己診断処理 | CPU が自分自身に異常がないかを調べる |
| 特殊リレー・特殊レジスタへの値のセット | CPU の状態を表すデバイス(SM・SD)に値を入れる |
(出典:MELSEC iQ-R CPUユニット ユーザーズマニュアル p.71)
プログラムの演算とは別に、PLC は毎周この後始末をしています。スキャンタイムには、この END 処理の時間も含まれます(ユーザーズマニュアル p.72)。
サービス処理=GOT・パソコンとのやり取り
表の中で、現場の困りごとに直結しやすいのがサービス処理です。マニュアルでは「デバイス/ラベルアクセスサービス処理」として、周辺機器(エンジニアリングツール・GOT)からの要求を END 処理で処理する、と書かれています(ユーザーズマニュアル p.75)。エンジニアリングツールは、パソコンで使う GX Works3 などのことです。
たとえば次のようなやり取りは、PLC 側では END 処理の中で受け付けています。
- GOT(タッチパネル)の画面に、PLC のデバイスの値を表示する・ボタンで書き込む
- パソコンの GX Works3 から、デバイスの値をモニタする・書き換える
GOTの反応が遅いと感じるときの理由
初期設定(スキャンタイムの割合に応じて行う)では、GOT からの要求は、プログラムの演算中ではなく END 処理で処理されます(ユーザーズマニュアル p.75〜77)。この仕組みから、反応が遅く感じる理由として次のことが言えます。
- END 処理は1周に1回:スキャンタイムが長いほど、END 処理が回ってくる間隔も長くなります。
- 処理しきれない分は次の周に回る:サービス処理に割り当てた分を超える要求は、次のスキャンの END 処理で処理されます(ユーザーズマニュアル p.77)。
- つないでいる機器が多い:複数の周辺機器が通信すると、各機器への応答が低下する場合があります(ユーザーズマニュアル p.75)。GOT に加えてパソコンの GX Works3 でもモニタしている、といった状態です。
反応が「遅い」のではなく、通信エラーが出る・まったく表示されない場合は、設定や配線の側から切り分けます。その手順はGOT(タッチパネル)がPLCと通信しない時の確認箇所|設定・配線・PLC側の3層で切り分けるで扱っています。
サービス処理設定で調整できる
サービス処理に使う時間は、GX Works3 のCPUパラメータ → サービス処理設定 → デバイス・ラベルアクセスサービス処理設定で指定できます(ユーザーズマニュアル p.76)。指定のしかたは次のとおりです。
| 指定のしかた | 設定できる範囲 |
|---|---|
| スキャンタイムに対する割合で指定 | 1〜99%(デフォルト 10%) |
| 処理時間で指定 | 0.1〜1000ms |
| 処理回数で指定 | 1〜10回 |
| プログラム間と END 処理で行う | - |
(出典:MELSEC iQ-R CPUユニット ユーザーズマニュアル p.76)
何も変えていなければ、スキャンタイムの10%をサービス処理に使う設定です(ユーザーズマニュアル p.76)。調整の考え方は、マニュアルに次のように書かれています(ユーザーズマニュアル p.75)。
- 時間を長くすると、周辺機器との通信の応答が良くなる
- 時間を短くすると、スキャンタイムが延びるのを抑えられる
GOT の応答を良くしたいなら長く、装置の制御の速さを優先したいなら短く、という引き換えの関係です。どこまで変えてよいかは装置ごとに違うので、変えた後はスキャンタイムがどう変わったかを次の章の方法で確かめてください。
スキャンタイムとWDT|1周の時間を見る・見張る
スキャンタイムは毎回変わる
スキャンタイムは一定ではありません。命令は、条件によって実行されたりされなかったりし、そのぶん処理時間が変わるため、スキャンタイムはスキャンごとに変化します(ユーザーズマニュアル p.73)。
SD520〜SD527で見る
スキャンタイムは、特殊レジスタ(SD:CPU の状態が入っている決まった番号のデバイス)で確かめられます。値は END 処理のたびにセットされ、計測は 1μs 単位です(ユーザーズマニュアル p.604)。
| 特殊レジスタ | 中身 |
|---|---|
| SD520(ms の位)・SD521(μs の位) | 現在のスキャンタイム |
| SD522・SD523 | 最小スキャンタイム |
| SD524・SD525 | 最大スキャンタイム |
| SD526・SD527 | END 処理時間 |
(出典:MELSEC iQ-R CPUユニット ユーザーズマニュアル p.604)
2つのレジスタを組み合わせて読みます。マニュアルの例では、スキャンタイムが 23.6ms のとき SD520=23、SD521=600 です(ユーザーズマニュアル p.604)。この数字は読み方の例で、スキャンタイムの目安ではありません。自分の装置の値は、実際にモニタして確かめます。ほかのよく使う特殊リレー・特殊レジスタは三菱PLCの特殊リレー(SM)・特殊レジスタ(SD)早見表|SM400・SM402・SM412・SD0・SD520 の意味と使いどころ【iQ-R】にまとめています。
「いつもは問題ないのに、たまに反応が遅い」というときは、現在値だけでなく最大スキャンタイムも見ておくと手がかりになります。
1周の時間を一定にしたいとき(コンスタントスキャン)
スキャンタイムを一定に保つコンスタントスキャンという設定もあります。設定できる範囲は、R00/R01/R02CPU が 0.5〜2000ms、それ以外が 0.2〜2000ms(0.1ms 単位)です。設定値は「WDT の設定時間 > コンスタントスキャン > プログラムの最大スキャンタイム」になるようにします(ユーザーズマニュアル p.73)。
WDT=END まで来るかを見張るタイマ
WDT(ウォッチドッグタイマ)は、プログラムが END まで来ているかを見張るタイマです。END/FEND 命令を実行したときにリセット(0に戻す)され、設定した時間以内に END まで来ないとタイムアップ(時間切れ)になります(ユーザーズマニュアル p.164)。原因として、ハードウェアの異常や、割込み(条件が来たときに、ふだんの順番を中断して実行するプログラム)などで実行する処理が増えたことが挙げられています(ユーザーズマニュアル p.164)。
| 対象 | 設定範囲 | デフォルト |
|---|---|---|
| 初期スキャン(RUN にして最初の1周) | 10〜2000ms | 2000ms |
| 2スキャン目以降 | 10〜2000ms | 200ms |
(出典:MELSEC iQ-R CPUユニット ユーザーズマニュアル p.164)
WDT の計測には 0〜10ms の誤差があります(ユーザーズマニュアル p.165)。WDT がタイムアップすると「WDT時間超過」(エラーコード 2500H/2501H)となり、PLC は止まります(ユーザーズマニュアル p.516)。1周の中で END まで来られない状態を、そのまま運転し続けないための見張りです。エラーコードの名前や停止・続行はiQ-R エラーコード検索ツール|三菱PLC(MELSEC iQ-R CPU)のエラー名・停止/続行をコードから引くで引けます。
長い繰り返し(FOR〜NEXT)に注意
FOR〜NEXT 命令(指定した回数だけ同じ処理を繰り返す命令)で長いループを回すと、繰り返しの間は END まで進みません。その時間が WDT の設定を超えるとタイムアップします。長いループでは、プログラムの途中で WDT をリセットする WDT 命令を使います(ユーザーズマニュアル p.165)。FOR〜NEXT 命令そのものの使い方は【GX Works3】CJ/CALL/FOR-NEXT命令の使い方|ジャンプ・サブルーチン・繰り返し・FEND/ENDまで総まとめで解説しています。
「上から順に実行して END まで行く」という流れは、繰り返しの命令を使っても変わりません。ループの中にいる間は、1周がそのぶん長くなると考えてください。
よくある質問(FAQ)
Q1. PLCのスキャンとは何ですか?
A. PLCが「入力と出力のまとめた更新(I/Oリフレッシュ)→プログラムの演算→END処理」を1周として、ずっと繰り返す動きのことです。1周にかかる時間をスキャンタイムと呼びます。命令が実行されるかどうかで処理時間が変わるため、スキャンタイムはスキャンごとに変わります。MELSEC iQ-Rでは、現在のスキャンタイムを特殊レジスタSD520(msの位)とSD521(μsの位)で確認できます。
Q2. END処理では何をしていますか?
A. プログラムの演算が終わったあとに、ネットワークユニットやインテリジェント機能ユニットのリフレッシュ、命令の完了処理、GOTやGX Works3からの読み書きの要求に応えるサービス処理、ウォッチドッグタイマのリセット、自己診断、特殊リレー・特殊レジスタへの値のセットなどをまとめて行っています。1周の最後の後始末と考えると分かりやすい部分です。
Q3. GOT(タッチパネル)の反応が遅いのはなぜですか?
A. GOTやパソコンからの要求は、PLCのEND処理の中のサービス処理で処理されます。1回のEND処理で処理しきれない分は次のスキャンのEND処理に回り、複数の周辺機器が通信すると各機器への応答が低下する場合があります。iQ-Rでは、CPUパラメータのサービス処理設定で処理に使う時間を調整でき、デフォルトはスキャンタイムの10%です。時間を長くすると通信の応答が良くなる代わりに、スキャンタイムが延びます。
Q4. 同じ出力(Y)をプログラムの2か所で書き換えるとどうなりますか?
A. 出力ユニットに出るのは、後で実行した方の結果です。プログラムは上の行から順に実行され、演算の結果はその都度CPUの中のメモリに書かれ、出力ユニットへはI/Oリフレッシュでまとめて出されるためです。SET/RSTで起動と停止を同時に押した場合も、RSTの行が下なら停止が勝ちます。
まとめ
PLC は、「I/Oリフレッシュ → プログラムの演算 → END処理」の1周(1スキャン)をずっと繰り返しています。
- プログラムはステップ0から END まで、上の行から順に実行する。同じ出力を2か所で書き換えると、後で実行した結果が残る
- SET/RST の同時押しは、RST の行が下なら停止が勝ち、逆に書けば起動が勝つ
- 入力の取り込みも出力の書き出しも、演算の前の I/O リフレッシュでまとめて行う。入力から出力までの遅れは最小1・最大2スキャン
- END処理は1周の最後の後始末。GOT やパソコン(GX Works3)とのやり取りは、その中のサービス処理で行う
- サービス処理の時間はサービス処理設定で調整できる(デフォルトはスキャンタイムの10%)。長くすると通信の応答が良くなり、短くするとスキャンタイムの延びを抑えられる
- スキャンタイムは毎回変わる。SD520・SD521 で現在値、SD524・SD525 で最大値を見る
- WDT は END まで来るかを見張るタイマ(2スキャン目以降のデフォルト 200ms)。長い FOR〜NEXT では WDT 命令でリセットする
(出典:MELSEC iQ-R CPUユニット ユーザーズマニュアル p.70〜82・p.164〜165・p.516・p.604)
使っている CPU の型名ごとの細かい値や設定画面は、お手元のユーザーズマニュアルで確認してください。
参考資料
- MELSEC iQ-R CPUユニット ユーザーズマニュアル(SH-082487J・三菱電機)
