〖対象〗FANUC PMC/三菱PLCでラダーを書いている人(同じ回路のコピペが増えてきた人)
〖前提〗A接点/B接点、自己保持、タイマーなど基本が分かると読みやすいです
〖次に読む〗「スキャンタイムとは?」「インターロックとは?」「ラダーとは?」
はじめに:ループ処理=「同じ形の処理を、対象だけ変えて繰り返す」考え方
この記事でいう ループ処理 は、プログラム言語のFOR文みたいな書き方の話ではなく、
同じ形の処理を、対象(番号)だけ変えて繰り返す
という 考え方 のことです。
FANUC PMCや三菱PLCの現場では、ループ命令を書くよりも、
- 同じ回路をテンプレとして展開する(コピペでも“ルールで”やる)
- 連番データや番号(=インデックス)で対象を切り替える
という形で「ループ処理」を実現することが多いです。
ループ処理が必要になる典型パターン
パターン1:同じ回路を複数個持つ(ステーションが多い)
例)
- 同じ検査工程が8ステーションある
- 同じクランプが4箇所ある
- 同じシリンダが10本ある
やることは同じで、違うのは「対象の番号」だけ。
この状態がループ処理の王道です。
パターン2:同じ判定をまとめたい(全部OK/どれかNG)
例)
- 1〜10番のREADYが全部ONなら運転許可
- 1〜16点のセンサのどれかがONなら異常
- 4個の扉スイッチが全部OKなら運転可
「同じ判定を複数に当てて、最後にまとめる」形もループ処理の出番です。
パターン3:同じ形のデータを連番で持っている(設定値・実績・履歴)
配列という言い方をしなくても、実務では連番管理がよく出ます。
例)
- ステーションごとの設定値(1〜8)
- 品種ごとの条件(1〜20)
- 異常履歴(1〜50)
“番号を変えれば同じ処理ができる”状態なので、ループ処理と相性がいいです。
ループ処理とインデックスはセット(ここが一番大事)
ループ処理をやろうとすると、必ず「対象を切り替えるための番号」が必要になります。
これが インデックス(IDX) です。
- 「今どのステーションを見ているか」
- 「今どのデータ番号を処理しているか」
- 「今どのアラーム番号を探しているか」
この“番号”を1つずつ進めながら、同じ処理を当てる。
これが ループ処理の核 です。
インデックスを使ったループの超かんたん例(8ステーションのREADYチェック)
やりたいこと
- READY(1)〜READY(8) がある
- 全部READYなら RUN_OK をONにしたい
コピペでやると…
READY1〜READY8を並べてANDを組む回路になります。
ステーションが増えるほど、長くなって保守がしんどい。
ループ(インデックス)で考えると…
「処理の形」は同じなので、こう考えます。
- インデックスIDXを 1 からスタート
- READY(IDX) を確認する
- IDXを 1 つ進める
- IDXが 8 まで行ったら“結果を確定”
途中経過の考え方(全部OK判定の基本)
全部OKの判定は、次の考え方が一番分かりやすいです。
- 最初は「全部OK」と仮定してONにする
- どこか1個でもOFFが見つかったら、OKをOFFに落とす
- 最後まで落ちなければOK
文章で書くと難しく見えますが、やっていることは
「全部OKならOK」という判定を、順番に確認しているだけです。
インデックスループの別例:アラームを番号順に探す(最初に見つかった異常番号を表示)
やりたいこと
- ALM(1)〜ALM(50) のどれかがONなら異常
- まずは最初に見つかった番号を表示したい
このときも同じです。
- IDX = 1 から順番に見る
- ALM(IDX) がONなら、そのIDXを「表示番号」として保持する
- 見つからなければ次の番号へ
アラームが増えても「処理の形」は同じなので、ループの考え方が効きます。
ループ処理のメリット(なぜやるの?)
変更に強い(同じ処理の修正漏れが減る)
同じ回路を10個コピペすると、仕様変更で10箇所直すことになります。
ループの考え方で“共通部”が見えていると、修正漏れが減ります。
コピペ事故が減る(番号ミス・条件ズレ)
コピペで一番多いのは
- 1箇所だけ番号を直し忘れる
- 1箇所だけ条件が違う
です。ルール化すると見つけやすくなります。
保守が楽(増やす時も迷いにくい)
ステーションが 8→12 になっても、
「IDXの範囲を変える」「同じ規則で増やす」
という判断ができます。
注意点:ループさせすぎるとスキャンタイムが伸びる
ループ処理は便利ですが、回した分だけ処理が増えるので、やりすぎるとスキャンタイムが伸びます。
スキャンタイムが伸びると、次のような症状につながります。
- 反応がワンテンポ遅く見える
- 短い入力(パルス)を見逃しやすくなる
- 「たまに起きる不具合」が増える(カウント抜け、遷移しない、など)
設計時の割り切り(おすすめの考え方)
- 「全部を毎スキャン確認する必要があるか?」を一度疑う
- 必要なら、処理を分割して 一定周期で順番に見る(例:1スキャンで1個、10msごとに次…)
- ループを足したら スキャンタイムが増えていないか を必ず確認する
※詳しくは「スキャンタイムとは」をご覧ください。
どんなときにループ処理を使う?(判断の目安)
- 同じ処理が 5個以上 並ぶなら、ループ(またはテンプレ展開)を意識する
- 将来増える可能性が高いなら、最初からインデックス(番号)を前提に設計する
- まとめ判定(全部OK/どれかNG)が絡むなら、合成の形を固定する
まとめ
- ループ処理は「同じ処理を、対象だけ変えて繰り返す」考え方
- 実務ではループとインデックス(番号)はセット
- 多ステーション、まとめ判定、連番データの処理で効果が大きい
- コピペ地獄と修正漏れを減らし、保守が楽になる
<執筆者の実務コメント>
同じ回路が増えそうなら、最初に「番号(IDX)をどう持つか」を決めておくと後が楽です。
同じ処理であれば、ループさせることででラダーの品質はかなり上がります。
▶ 次に読む:「スキャンタイムとは?」「インターロックとは?」「ラダーとは?」

