【実践プログラミング編:第3回】
本連載では、FA現場で戦うための実務特化型プログラミングを解説します。
- 机上デバッグは完璧だったのに、実機だとセンサーが誤検知してアラームが出る
- 一瞬のワークの揺れで設備がチョコ停し、夜中に現場から呼び出される
実務経験9年の現役電気設計エンジニアとして断言します。 その原因は、あなたの組んだプログラムが「物理世界のノイズや揺らぎ」をねじ伏せる設計になっていないからです。
デジタルの世界は「0か1」ですが、現場には振動や慣性という不純物が常に混ざっています。これを放置すれば、設備は永遠に安定しません。
この物理的な揺らぎを吸収し、チョコ停を撲滅する必須の武器。それが「時間を計るタイマ(T)」と「回数を数えるカウンタ(C)」です。
本記事を読めば、教科書的な基礎から、センサーのチャタリングを無効化するフィルター、そしてエラーを自己修復する「リトライ処理」まで、少々のことでは止まらない「タフな設備」の設計思想が身につきます。
ただし、闇雲にタイマを多用すると、設備のサイクルタイムを悪化させる「罠」にもなります。現場で最適な設定値を見極める設計者の勘所も、合わせて解説します。
【本連載の前提】
本記事内のプログラム例や命令語は、国内FA業界で最もシェアの高い「三菱電機製PLC(MELSEC)」をベースに解説しています。しかし、ここで解説する「なぜその命令が必要なのか」「現場でどう使うのか」という設計思想は、オムロンやキーエンスなど、すべてのメーカーのPLCで共通して使える普遍的な技術です。メーカーの違いを恐れず、本質的な「設計の根幹」を身につけてください。
タイマ(T)の本来の役割は「時間を計る」こと
PLCにおけるタイマ(T)の役割を、シンプルに一言で定義します。
それは「指定された条件がONになっている(またはOFFになっている)時間を計ること」です。
ストップウォッチを想像してください。スイッチがONになっている間だけカチカチと時間が進み、OFFになると計測時間がゼロに戻る。タイマの基本は、ただそれだけです。
しかし実務においては、この「時間を計る」という極めて単純な機能を、物理現象の特性に合わせて大きく2つの目的に使い分けます。
① オンディレー(ONを遅らせる):物理的な「遅れ」を待つ
入力がONになってから、設定した時間が経過した「後」に出力をONにする使い方です。
現場で最も多用されるのが、デジタルの処理速度に対し、遅い「メカの動き」を待つ場面です。
たとえば、エアーシリンダが前進端に到達してセンサーがONになったとします。
しかし、PLCがセンサーを検知したその瞬間、エアーの圧力はまだ完全に安定しておらず、ワーク(製品)のクランプは不完全かもしれません。ここで即座に次の工程へ進めば、ワークを落とす重大事故に繋がります。
[ X0 (シリンダ前進端) ] ──── ( T0 K5 ) (※0.5秒計る)
【自己保持を使った状態遷移】 [ T0 (タイマ接点) ] ──┬── [ 異常等の切断条件 (b接点) ] ──── ( M10 クランプ完了 ) [ M10 (自己保持) ] ───┘

このように、シリンダが到達してから「確実に圧力が安定するまでの0.5秒間」をタイマで計り、そのタイマ接点(T0)をトリガーにして自己保持(OUT命令)をかけます。
物理的な「メカの遊び」や「エアーの遅れ」を吸収するために、オンディレーで確実に待つ。これが安全設計の基本です。
② オフディレー(OFFを遅らせる):動作の「余韻」を残す
入力がOFFになってもすぐには切らず、設定した時間が経過した「後」に出力をOFFにする使い方です。
現場でよく使われるのが、「自動運転が終わった後、排出コンベアだけを数秒間回し続けて、ベルト上の製品を最後まで流しきる(掃き出す)」という場面です。自己保持とb接点を組み合わせて構築します。

入力(M20)がOFFになっても自己保持でコンベアを回し続け、同時にタイマで5秒を計測。満了したら自分自身の自己保持を断ち切るという論理です。
また、「PLCは検知できたが、人間には速すぎて見えない一瞬の異常信号(数十ミリ秒)」を、タイマを使って人為的に1秒ほど延長し、タッチパネルの異常ランプを確実に点滅(視認)させるといった使い方もあります。
一瞬の信号を人間や他の機器に確実に伝える、あるいは物理的な動作の余韻を残す。オフディレーは、確実な情報伝達と機器保護のために必須の技術です。
💡 【実務の深掘り】専用命令「TON」と「TOF」
本記事では、どんな環境でも通用する「基本命令を使ったディレー回路の組み方」を解説しました。しかし、GX Works3やKV Studio、Sysmac Studioなどでも使われているグローバル標準(IEC 61131-3)のファンクションブロック(FB)を使用する場合、最初から「TON(オンディレー)」と「TOF(オフディレー)」という専用のタイマ命令(箱)が用意されています。
ここで、先ほど組んだ2つの回路をファンクションブロックを使って書いてみましょう。
① TONによるオンディレー(クランプ完了の待機)

- 1行目(部品を動かす): 起動条件(X0)でTONブロックを走らせる。設定時間は
T#500msとする。 - 2行目(結果を再利用する): ブロックが動作完了したという信号を
TON_1.Q(部品名+ドットQ)という接点として呼び出し、自己保持のトリガーにする。
② TOFによるオフディレー(排出コンベアの掃き出し)

ラダーでは、入力が切れた後も出力を維持するために「自己保持」と「b接点切り」の組み合わせが必要でした。
しかし、TOFブロックを使えば、設定時間(T#5s)の計測と出力の維持をブロック自身が行ってくれます。入力と出力を直結させるだけで、回路が1行に圧縮されます。
【まとめ】
従来の「K5(100msベース)」といった勘違いを生みやすいマジックナンバーが消え、T#500ms や T#5s と、誰が見ても絶対に間違えない表記になるのがメリットです。 既存設備を読み解くために「基本のラダー」をマスターした上で、新規設計の際にはこれらのFB命令も活用していくのが、スマートな設計手法です。
タイマを「ノイズフィルター」として使う
時間を計る基本を理解した若手が、いざ現場で実機を動かした途端に必ず受ける「洗礼」があります。
それが「センサーのチャタリング(ノイズによる誤検知)」です。
現場のセンサーは「嘘」をつく
シリンダの前進端やワークの到達を確認するために、リミットスイッチなどの「機械的な接点」を持つセンサーを使ったとします。 机上のシミュレーションでは「カチッ」と1回ONになるだけですが、実際の現場では、金属接点がぶつかる瞬間の微小なバウンド(跳ね返り)により、ミリ秒単位で「ON/OFF」を激しく繰り返します。これが「チャタリング」です。
また、無接点の光電センサーなどであっても、コンベアの微振動や飛び散った水滴によって光が瞬断し、チャタリングと同じように信号が激しくバタつく現象が起きます。
この「一瞬の嘘のON/OFF」をPLCがバカ正直に拾い上げると、1個のワークが到着しただけなのに「3個」とカウントされたり、設備が原因不明のアラームでチョコ停を引き起こします。
タイマを「ノイズを弾く関所」にする
この物理的なノイズを無効化するために、第1章で学んだ「オンディレー」を応用します。
[ X1 (到達センサー) ] ──── ( T1 K1 ) (※0.1秒計る) [ ↑T1 (立ち上がりパルス) ] ──── [ INC D100 (カウントアップ) ]

タイマの最大の特性は、「計っている途中で入力条件(X1)がOFFになると、計測時間がゼロにリセットされる」という点です。
つまり、接点のバウンドや水滴による「0.05秒のノイズ(一瞬のON)」が何度来ようが、タイマは設定値の0.1秒に到達できず、リセットされ続けます。そして、接点が完全に密着し「0.1秒間、継続してONになり続けた」時だけ、初めてタイマ接点(T1)がONになり、正しい信号としてプログラムに通すのです。
「センサーの生信号は信用しない」。タイマを単なる遅延ではなく「ノイズを弾く関所(フィルター)」として使い、確定した信号だけをプログラムに取り込む。これこそが、チョコ停を撲滅する設計者の定石なのです。
カウンタ(C)の基本は「回数を数える」こと
タイマが「時間」を支配するなら、カウンタ(C)は「回数」を支配します。
カウンタの役割は極めてシンプルで、「指定された条件がOFFからONに変化した回数(エッジ)を数えること」です。
コンベアを流れる製品を10個ずつ箱詰めする、シリンダの動作回数が1万回を超えたらメンテナンス時期を知らせるなど、現場のあらゆる場面で「数を数える」ために使われます。
カウンタの最大の罠は「自力でゼロに戻れない」こと
初心者がタイマと同じ感覚でカウンタを使うと、100%バグを出します。 なぜなら、タイマは「入力がOFFになれば勝手にゼロにリセットされる」のに対し、カウンタは「入力がOFFになっても、カウントした数値を永遠に記憶し続ける(保持する)」という決定的な違いがあるからです。
設定回数(例:10回)に到達してカウンタ接点がONになった後、それを「0回」に戻して再び使えるようにするには、設計者が明示的に「RST(リセット)命令」を記述してやらなければなりません。
【10個カウントして箱詰め指令を出し、その後リセットする回路】
[ ↑X2 (ワーク検知 / パルス) ] ──── ( C0 K10 ) *(※10個数える)*
[ C0 (10個到達) ] ──┬── [ M100 (b接点) ] ──── ( M20 箱詰め排出指令 )
[ M20 (自己保持) ] ─┘
[ X3 (箱の排出完了) ] ──── [ RST C0 ] *(※カウンタC0をゼロに戻す)*

【回路の動き(論理の読み解き)】
- ワークが通過するたび、C0が「1、2、3…」とカウントアップします。第2回で学んだ通り、連続実行を防ぐために入力はパルス(↑)化します。
- 10個に到達するとC0がONになり、箱詰め排出指令(M20)に自己保持がかかります。
- 箱が物理的に排出されたことを確認するセンサー(X3)が入って初めて、
[ RST C0 ]が実行され、カウント値がゼロに戻ります。
「数え終わったら、次の工程が確実に終わるまで保持し、然るべきタイミングでリセットをかける」。この一連のサイクルを設計することが、カウンタを使いこなす第一歩です。
💡入力をパルス(↑)化する理由についておさらいしたい方はこちら:
▶【実践プログラミング編:第2回】連続実行を防ぐエッジ検出(パルス化)の基本
カウンタによる「リトライ処理」でチョコ停を回避する
「数を数える」という基本と、「リセットするまで保持する」という特性。
この2つを完全に理解したあなたは、いよいよ「止まらないタフな設備」を作るための武器を手に入れることができます。
それが、カウンタを用いた「リトライ(再試行)処理」です。
1回の失敗で設備を止めるな
吸着パッドで部品を持ち上げて移動させる装置(ピック&プレース)を想像してください。 現場では、部品のわずかな油汚れやエアーの微妙な変動により、「部品を吸い損ねる(吸着エラー)」という物理的なミスが日常茶飯事で発生します。
実務を想定していない設計は、この1回の吸着ミスで即座に「異常検知!」とアラームを鳴らし、設備を停止(チョコ停)させます。 結果、オペレーターが遠くから走ってきて、エラーリセットボタンを押し、もう一度スタートボタンを押す……という無駄な作業が1日何十回も繰り返されます。
「物理的なミスは必ず起きる」という前提に立ち、PLCに自動で再チャレンジ(リトライ)させるのです。
【※現場の鉄則:ただし「客先仕様」と「製品特性」がすべてに優先する】
ここで一つ、実務における極めて重要な注意点があります。リトライ処理は稼働率を上げる強力な武器ですが、無条件にどこでも使っていいわけではありません。
例えば、少しでも擦れると傷がつくデリケートな製品や、一度落とすと品質保証ができない精密部品の場合、「リトライ(2度目の吸着動作)自体が製品を破壊する行為」になり得ます。その場合は、客先仕様として「絶対にリトライせず、1回のミスで即時停止させること」が正解となります。
「基本はリトライで稼働率を担保する。しかし、製品特性や仕様によってはあえて1回で止める」。この見極めができることこそが、現場を知る設計者の条件です。
カウンタを「失敗回数の記憶装置」にする
「吸い損ねたら、もう一度吸着動作をやり直す。それを3回繰り返してもダメだった時だけ、初めてアラームを鳴らして設備を止める」
この論理を、カウンタを使って構築します。
【3回のリトライを許容するチョコ停回避回路】
[ ↑M30 (吸着失敗パルス) ] ──── ( C1 K3 ) *(※失敗回数をカウント)*
[ C1 (3回連続失敗) ] ──┬── [ M100 (b接点) ] ──── ( M50 吸着異常アラーム )
[ M50 (自己保持) ] ─┘
[ X4 (吸着成功) ] ──────── [ RST C1 ] *(※1回でも成功したら失敗履歴を消去)*

【回路の動き(論理の読み解き)】
- 失敗のカウント: 吸着に失敗するたび、カウンタC1が「1回、2回」とカウントされます(この時点ではまだアラームは鳴りません)。
- 限界突破でアラーム: 失敗が「3回」に到達するとC1がONになり、自己保持によって初めて「吸着異常アラーム(M50)」が発報され、設備が停止します。
- 正常完了によるエラー履歴のクリア(ここが肝): もし2回失敗しても、「3回目のリトライで吸着に成功(X4がON)」すれば、その瞬間にカウンタはリセット(ゼロクリア)されます。
これこそがリトライ処理の真髄です。
「1回や2回の物理的なエラーは、設備自身に自動でやり直させて無かったことにする」。 カウンタを単なる個数管理ではなく、「エラーの許容度をコントロールする防波堤」として使うことで、設備の稼働率は劇的に跳ね上がります。
タイマとカウンタの「適正値」を見極める(サイクルタイムとの戦い)
タイマによる遅延やノイズ除去、カウンタによるリトライ処理。 これらの強力な武器を手にした若手設計者が、次に必ず陥る罠があります。
それが「安全を期して、タイマの時間を長めに設定しすぎる」という問題です。
「念のため1秒待つ」が生産性を奪う
エアーシリンダが到達した後、圧力が安定するまでタイマで待つオンディレー回路を組んだとします。 ここで「まあ、念のため1秒(K10)待っておけば確実だろう」と、根拠のない余裕を持たせるのは、実務において明確な「悪手」です。
FA(ファクトリーオートメーション)の現場は、常に「サイクルタイム(1個の製品を作るのにかかる時間)」との戦いです。 もし、そのシリンダが1回の生産サイクルで2回動作し、1日に1万個の製品を作る設備だった場合、どうなるでしょうか。
- 1秒の無駄な待機 × 2回 × 10,000個 = 20,000秒(約5.5時間)
あなたの「念のための1秒」が、1日あたり5時間半もの生産能力を設備から奪い取っていることになります。
タイマの多用や過剰な設定値は、設備を安定させる一方で、設備の生産性を削り取る諸刃の剣なのです。
根拠のある「適正値」をどう導き出すか
では、タイマやカウンタの設定値はどのように決めるべきなのでしょうか。 答えはシンプルです。
「勘に頼るのではなく、実機検証に基づいた必要最小限の値を攻める」ことです。
チャタリング除去のタイマ値
センサーのデータシートで基本となる応答時間を確認した上で、実際の現場では「まずは50ms〜100ms程度」を初期値として設定し、実機にワークを流します。誤検知(チャタリング)が起きないか、逆にタイマが長すぎて「高速で通過する本物の信号」を取りこぼしていないか。PLCのサンプリングトレース機能や目視によるテストを繰り返し、ノイズを弾きつつ正規の信号を逃さないギリギリの「適正値」へと、現物合わせで泥臭くチューニングしていくのです。
物理動作の待機タイマ値
エアー機器の応答遅れやメカの振動収束は、設備のサイズやエアー配管の長さによって完全に異なります。「これくらいだろう」と想像するのではなく、テスト運転で実際に動きを見て、0.1秒単位で削っていくチューニング作業が必須です。
リトライカウンタの回数
第4章で解説したリトライ回数も、無闇に「5回」「10回」と設定してはいけません。1回目の失敗は「偶然のノイズ」、2回目は「確認」、3回目で「確定的(物理的な異常)」と判断し、現場では「3回(K3)」を一つの基準とすることが多いです。これ以上繰り返しても、ワークを傷つけるリスクが高まるか、無駄な時間を消費するだけだからです。(※もちろん、前述の通り客先仕様が最優先です)
タイマもカウンタも、「なぜその数値(K)にしたのか」を、実機での検証結果を根拠として明確に説明できること。それが、実務を分かっている設計者の証です。
まとめ:プログラムで「物理現象」を支配する
いかがでしたでしょうか。 今回は「タイマ(T)」と「カウンタ(C)」について、教科書的な使い方から一歩踏み込み、現場で設備を安定稼働させるための実践的な使い方を解説しました。
- タイマ(T)は、ただ動作を遅らせるだけでなく、物理的な「遅れ」を吸収し、ノイズを弾く「時間の関所」である。
- カウンタ(C)は、ただ数を数えるだけでなく、エラーの許容度をコントロールし、チョコ停を防ぐ「リトライの防波堤」である。
机上のシミュレーションでは、センサーは完璧なタイミングでONになり、メカは遅れなく動きます。しかし、現場の物理世界はノイズと揺らぎに満ちています。 私たちが書くラダープログラムは、デジタルの世界(PLC)から、泥臭い物理世界(設備)を支配するための架け橋です。
「時間が来たら動かす」「回数が来たら止める」。
この基本命令に、現場の物理現象への深い理解を掛け合わせた時、あなたの組むプログラムは少々のことでは止まらない「タフな設備」を生み出します。
次回も、現場の最前線で戦える実践的なプログラミング技術を解説していきます。お楽しみに。
※本記事で使用している画面は、三菱電機株式会社「GX Works2」「GX Works3」の操作画面です。
※GX Works2、GX Works3、MELSECは、三菱電機株式会社の登録商標です。
※本記事で紹介しているプログラムや回路図は、技術解説のためのサンプルです。実機での動作を保証するものではありません。
※実際に使用する際は、十分な検証を行った上で、安全に配慮して運用してください。