PLCのループ処理とは?同じ処理をまとめて書く考え方と使いどころ

PLC入門

〖対象〗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を組む回路になります。
ステーションが増えるほど、長くなって保守がしんどい。

ループ(インデックス)で考えると…

「処理の形」は同じなので、こう考えます。

  1. インデックスIDXを 1 からスタート
  2. READY(IDX) を確認する
  3. IDXを 1 つ進める
  4. 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)をどう持つか」を決めておくと後が楽です。
同じ処理であれば、ループさせることででラダーの品質はかなり上がります。

▶ 次に読む:「スキャンタイムとは?」「インターロックとは?」「ラダーとは?

タイトルとURLをコピーしました